{"_id":"@magic5644/graph-it-live","_rev":"49-dcb06f6a1e29b9ad20c08f46284cb811","name":"@magic5644/graph-it-live","dist-tags":{"latest":"1.25.1"},"versions":{"1.0.0":{"name":"@magic5644/graph-it-live","version":"1.0.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.0.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"0bed18a44a2ffdb5924969726b382f9bdf682f8f","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.0.0.tgz","fileCount":17,"integrity":"sha512-1KeQWXuINqOaGcZTQ8oyJ/NUhD/0q5jyOdRWfax19R2gVINkNYz8gEDmno0u3NWuwz89STjyfsrxVvk0LUuTmQ==","signatures":[{"sig":"MEUCICKWfhIONvg2I/WSpKKS/BYSX9jvpc9meXr2VWLtBOH9AiEAyBZasxWa4+P7BPQwQ2FqZ39DZA8eP2SOkzLvL8PGccc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32634714},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=20.0.0","vscode":"^1.96.0"},"gitHead":"6b350e8f548a0bd1c622d5d5c91901257c522353","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"tsc --noEmit","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"glebournault","email":"glebournault@gmail.com"},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@vscode/vsce":{"minimatch":"^3.0.3"}},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"deprecated":"Broken --version output, use 1.0.1","repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.12.1","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"20.19.2","dependencies":{"zod":"^4.3.6","react":"^19.2.4","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.33.1","react-dom":"^19.2.4","reactflow":"^11.11.4","@dagrejs/dagre":"^2.0.4","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.7","tree-sitter-wasms":"^0.1.13","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.5","eslint":"^10.1.0","vitest":"^4.1.2","esbuild":"^0.27.4","globals":"^17.4.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.2","fast-check":"^4.6.0","typescript":"^6.0.2","@types/node":"^25.5.0","@types/mocha":"^10.0.10","@types/react":"^19.2.14","@vscode/vsce":"^3.7.2-7","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.58.0","@vitest/coverage-v8":"^4.1.2","@vscode/test-electron":"^2.5.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.0.0_1775542912446_0.5194965812448347","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@magic5644/graph-it-live","version":"1.0.1","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.0.1","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"201b794f6dd5eeaa2d402c067b78afc913bc95ef","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.0.1.tgz","fileCount":17,"integrity":"sha512-U0MIr3BdAntVeqJ8Q6jKRRn2288/fIzsioKu05cApc8Zbr4cljOajjCaB8m+kUTkAj8HnrJZyamgIPGmbxO0Ww==","signatures":[{"sig":"MEYCIQC4SouuWHR47juMvcHp76YEDpsNLvYtqkb/j6iqvlkzYAIhAPeb3D7W0GKXI83yeL+s7x1epGhA6tnioei/X7BApUf1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32634714},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=20.0.0","vscode":"^1.96.0"},"gitHead":"6b350e8f548a0bd1c622d5d5c91901257c522353","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"tsc --noEmit","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"glebournault","email":"glebournault@gmail.com"},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@vscode/vsce":{"minimatch":"^3.0.3"}},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.12.1","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"20.19.2","dependencies":{"zod":"^4.3.6","react":"^19.2.4","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.33.1","react-dom":"^19.2.4","reactflow":"^11.11.4","@dagrejs/dagre":"^2.0.4","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.7","tree-sitter-wasms":"^0.1.13","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.5","eslint":"^10.1.0","vitest":"^4.1.2","esbuild":"^0.27.4","globals":"^17.4.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.2","fast-check":"^4.6.0","typescript":"^6.0.2","@types/node":"^25.5.0","@types/mocha":"^10.0.10","@types/react":"^19.2.14","@vscode/vsce":"^3.7.2-7","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.58.0","@vitest/coverage-v8":"^4.1.2","@vscode/test-electron":"^2.5.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.0.1_1775543306052_0.23629674932467615","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@magic5644/graph-it-live","version":"1.0.2","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.0.2","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"9043cd7c6819175379704de108b2de9682c0409c","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.0.2.tgz","fileCount":23,"integrity":"sha512-vlKBIEcrBZqPaHIEq3BrmAUdP6qP2VW7f0lLG18XdJr3iDp+CjZN+R2u7b1szobrAyNvhQEQYpIKlrjDKL93Ng==","signatures":[{"sig":"MEUCIFbpBbSFecvQASzpmc8G9SrxnlTU2k+3N6irl2+H/QCCAiEAqlAmCWU4XYr6QQw2BZ7vZPJB80D/6om7ex1KX5eNqqE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37325941},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=20.0.0","vscode":"^1.96.0"},"gitHead":"a2f1df8cf2fa8d0a444c372e3befad154317ad4d","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"tsc --noEmit","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"glebournault","email":"glebournault@gmail.com"},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@vscode/vsce":{"minimatch":"^3.0.3"}},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.12.1","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"20.19.2","dependencies":{"zod":"^4.3.6","react":"^19.2.5","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.33.2","react-dom":"^19.2.5","reactflow":"^11.11.4","@dagrejs/dagre":"^2.0.4","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.8","tree-sitter-wasms":"^0.1.13","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.5","eslint":"^10.2.0","vitest":"^4.1.4","esbuild":"^0.27.7","globals":"^17.5.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.4","fast-check":"^4.6.0","typescript":"^6.0.2","@types/node":"^25.6.0","@types/mocha":"^10.0.10","@types/react":"^19.2.14","@vscode/vsce":"^3.7.2-7","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.4","@vscode/test-electron":"^2.5.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.0.2_1776001346774_0.13110781643460112","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@magic5644/graph-it-live","version":"1.9.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.9.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"1869cc17123e770c7e84570c3bf8ad4e35f69cc1","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.9.0.tgz","fileCount":23,"integrity":"sha512-l/X9r9vExDBjhA8Sbah5qlR9NH9B6xfWUyAmdxAejyT7vRmOPpsBaQYcaSQ+9ONHFsJyL+ZnAgoMUVpvXRjMKA==","signatures":[{"sig":"MEQCIBcxqof3zKcjheMNsVdnSVIQ8fT4HloiiFsmVFRJLMy9AiBccACIerI5xM9D5xCKDsvIqpmx6Jj0CSwOhOmV3Td+mw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37326404},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=20.0.0","vscode":"^1.96.0"},"gitHead":"ba713043f70f31cf5f8a0e12aa0683e5f861a429","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"tsc --noEmit","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"glebournault","email":"glebournault@gmail.com"},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@vscode/vsce":{"minimatch":"^3.0.3"}},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.12.1","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"20.19.2","dependencies":{"zod":"^4.3.6","react":"^19.2.5","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.33.2","react-dom":"^19.2.5","reactflow":"^11.11.4","@dagrejs/dagre":"^2.0.4","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.8","tree-sitter-wasms":"^0.1.13","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.5","eslint":"^10.2.0","vitest":"^4.1.4","esbuild":"^0.27.7","globals":"^17.5.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.4","fast-check":"^4.6.0","typescript":"^6.0.2","@types/node":"^25.6.0","@types/mocha":"^10.0.10","@types/react":"^19.2.14","@vscode/vsce":"^3.7.2-7","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^4.1.4","@vscode/test-electron":"^2.5.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.9.0_1776017705982_0.02228309342920043","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"@magic5644/graph-it-live","version":"1.9.1","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.9.1","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"895039dae0266e2d41238ca2034f4b6064367363","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.9.1.tgz","fileCount":25,"integrity":"sha512-T8veWq/fApNika80qZFzDqxICOJTXi6dRhI2YsA1/1xq/DEZ2jBZUVVhpsGY8JjgRkV0oQ7Gmfl86J3s0ef5iA==","signatures":[{"sig":"MEQCIDd8ulT3+ISO85gygTALxmcOLyCiPRxIasJpLD1klXSoAiAmbD982bnTuOjWq6HZmLXSkpURfnFjAtB8GV9Ww+S6XQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37372089},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=20.0.0","vscode":"^1.96.0"},"gitHead":"a4e4fdd15d5f3c03feb732799380acb03b28e850","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"tsc --noEmit","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:03ef97d8-f831-4c2f-b3d3-362ff3b57179"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@vscode/vsce":{"minimatch":"^3.0.3"}},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.11.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","react":"^19.2.5","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.33.2","react-dom":"^19.2.5","reactflow":"^11.11.4","@dagrejs/dagre":"^2.0.4","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.8","tree-sitter-wasms":"^0.1.13","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.5","eslint":"^10.2.1","vitest":"^4.1.5","esbuild":"^0.27.7","globals":"^17.5.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.5","fast-check":"^4.7.0","typescript":"^6.0.3","@types/node":"^25.6.0","@types/mocha":"^10.0.10","@types/react":"^19.2.14","@vscode/vsce":"^3.9.1","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.0","@vitest/coverage-v8":"^4.1.5","@vscode/test-electron":"^2.5.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.9.1_1777014025133_0.11965537522784708","host":"s3://npm-registry-packages-npm-production"}},"1.9.2":{"name":"@magic5644/graph-it-live","version":"1.9.2","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.9.2","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"e5a9ba700d9cbf84764005d32528be006b07fdee","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.9.2.tgz","fileCount":25,"integrity":"sha512-E+NYf/daigWhkxb/BzmXCJJxVyB9+00AtAwafzBZ+/Js9vP411NLGEWf0IyDSNIgoKTJhQWQft/stGhJm9PKLg==","signatures":[{"sig":"MEUCIHt9G8pBGi8pU85fSH6oBMfKJUbohWnWUZQKacPmz9R1AiEAuDIqejmWBo39GpgKRUGY53RoFE6kZEMM8mP/jpzcIYI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.9.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37462751},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=20.0.0","vscode":"^1.96.0"},"gitHead":"eb1f6d7e60285fe0ccbc2f976b97534fbdbf992e","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:03ef97d8-f831-4c2f-b3d3-362ff3b57179"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@vscode/vsce":{"minimatch":"^3.0.3"}},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.11.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","react":"^19.2.5","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.33.2","react-dom":"^19.2.5","reactflow":"^11.11.4","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.1.9","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.8","@inquirer/prompts":"^8.4.2","tree-sitter-wasms":"^0.1.13","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.5","eslint":"^10.2.1","vitest":"^4.1.5","esbuild":"^0.27.7","globals":"^17.5.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.5","fast-check":"^4.7.0","typescript":"^6.0.3","@types/node":"^25.6.0","@types/mocha":"^10.0.10","@types/react":"^19.2.14","@vscode/vsce":"^3.9.1","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.0","@vitest/coverage-v8":"^4.1.5","@vscode/test-electron":"^2.5.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.9.2_1778349135425_0.36166353436126775","host":"s3://npm-registry-packages-npm-production"}},"1.9.3":{"name":"@magic5644/graph-it-live","version":"1.9.3","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.9.3","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"d242ed35bb994bd822554c5a7ff04e6845d22ff0","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.9.3.tgz","fileCount":25,"integrity":"sha512-keBqXsbug8KRaNGXi85KDwTuVqIOtN70rJF/woQyAjhX6ooX5dgBLxB06nNKcaW9wTQIyxFmUR4DJJikisjxtg==","signatures":[{"sig":"MEUCIH/QsLw92fqFKd2ZKGSj1jLASqcPnKVT+olhP3CpAvalAiEAuGY56PR2BkqWQxaqsAUpN8o79pyrsLHy1lXRcTX3HrI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.9.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37513789},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=20.0.0","vscode":"^1.96.0"},"gitHead":"43e595032d45a786f14c380a237f04f027fcfd0b","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:03ef97d8-f831-4c2f-b3d3-362ff3b57179"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@vscode/vsce":{"minimatch":"^3.0.3"}},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.11.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.14.1","dependencies":{"zod":"^4.4.3","react":"^19.2.6","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.33.3","react-dom":"^19.2.6","reactflow":"^11.11.4","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.1.10","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.8","@inquirer/prompts":"^8.4.3","tree-sitter-wasms":"^0.1.13","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.5","eslint":"^10.3.0","vitest":"^4.1.5","esbuild":"^0.27.7","globals":"^17.6.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.5","fast-check":"^4.7.0","typescript":"^6.0.3","@types/node":"^25.6.0","@types/mocha":"^10.0.10","@types/react":"^19.2.14","@vscode/vsce":"^3.9.1","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.2","@vitest/coverage-v8":"^4.1.5","@vscode/test-electron":"^2.5.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.9.3_1778441232344_0.19804421278986672","host":"s3://npm-registry-packages-npm-production"}},"1.9.4":{"name":"@magic5644/graph-it-live","version":"1.9.4","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.9.4","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"b843d6cc41bd68799090f1af6544cb918baf5fb8","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.9.4.tgz","fileCount":25,"integrity":"sha512-My8ZVq8dFF16FbD2tWFLKu/qb+b8N1tvWGaKZ1hbGJgRqlc/VzMiqeoMiWBrqSibhOfYfGzbZSdhxxOmihRjlA==","signatures":[{"sig":"MEQCIHLYel7e8FsMTXIjBXvztFsZ3uK/hhu/e1Yja64DU8V5AiAYk0XSQ9PYVCE+c4MZpn6Neejg2v4VmkypXRrX4SV0Vw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.9.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37545326},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"828780602e5f38584f18a9c905f774c2037c3081","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:03ef97d8-f831-4c2f-b3d3-362ff3b57179"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@vscode/vsce":{"minimatch":"^3.0.3"}},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.12.1","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.15.0","dependencies":{"ink":"^7.0.4","zod":"^4.4.3","react":"^19.2.6","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.33.4","react-dom":"^19.2.6","reactflow":"^11.11.4","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.1.10","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.9","@inquirer/prompts":"^8.4.3","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.6","eslint":"^10.4.0","vitest":"^4.1.7","esbuild":"^0.27.7","globals":"^17.6.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.7","fast-check":"^4.8.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/mocha":"^10.0.10","@types/react":"^19.2.15","@vscode/vsce":"^3.9.1","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.59.4","@vitest/coverage-v8":"^4.1.7","@vscode/test-electron":"^2.5.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.9.4_1779712685247_0.159469280163971","host":"s3://npm-registry-packages-npm-production"}},"1.9.5":{"name":"@magic5644/graph-it-live","version":"1.9.5","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.9.5","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"e6ec0ab673bf540581951d682e79e199f4f7a6cc","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.9.5.tgz","fileCount":25,"integrity":"sha512-7b3NbG0DPoGrA5O6tiOHJmuUMepnRjHIP/sUoeeJt1Y5j3WnwsnaOQz0IBX03XfPovKFl5gSJR1W6U6LtuR2FA==","signatures":[{"sig":"MEQCIEuZYEFg5llggD0YcNi4hoJ1NLlaQrlfH/1QyovhSspBAiBm4XzzxHkwatEnw8PFZiGkn24obSUJ0YSs0lWWsFx1aQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.9.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37548082},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"a440fd8efd7ba7624db9b8271a3de40303e6ed21","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:03ef97d8-f831-4c2f-b3d3-362ff3b57179"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@vscode/vsce":{"minimatch":"^3.0.3"}},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.12.1","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.15.0","dependencies":{"ink":"^7.0.4","zod":"^4.4.3","react":"^19.2.6","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.33.4","react-dom":"^19.2.6","reactflow":"^11.11.4","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.0","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.9","@inquirer/prompts":"^8.5.0","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.6","eslint":"^10.4.0","vitest":"^4.1.7","esbuild":"^0.27.7","globals":"^17.6.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.7","fast-check":"^4.8.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/mocha":"^10.0.10","@types/react":"^19.2.15","@vscode/vsce":"^3.9.1","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.60.0","@vitest/coverage-v8":"^4.1.7","@vscode/test-electron":"^2.5.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.9.5_1779814316563_0.615287043183085","host":"s3://npm-registry-packages-npm-production"}},"1.9.6":{"name":"@magic5644/graph-it-live","version":"1.9.6","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.9.6","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"c46f03753e3e78cfb7c5335d90c512d58fea01f2","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.9.6.tgz","fileCount":25,"integrity":"sha512-foo2iXRX0/lSy8SYGoTM85jtOlbNmlKHwklzyFPe6aGRe4mdMaN0VLzJyj8MzZsg6NQ8FncQc2Z6gZW8RF8lIw==","signatures":[{"sig":"MEQCIFOIpOmKasijZQRP9DUXik0wczY/PJZreOpjhz4Pd5uiAiAMdS8dVSNgRWNop9ysjwoYotRu8sGl6t+FyG0bPUsEqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.9.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37549737},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"68118ba2d410b5b09cc21aa5dd164cde7fcc8fe0","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:03ef97d8-f831-4c2f-b3d3-362ff3b57179"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@vscode/vsce":{"minimatch":"^3.0.3"}},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.13.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.16.0","dependencies":{"ink":"^7.0.4","zod":"^4.4.3","react":"^19.2.6","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.33.4","react-dom":"^19.2.6","reactflow":"^11.11.4","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.0","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.9","@inquirer/prompts":"^8.5.0","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.6","eslint":"^10.4.0","vitest":"^4.1.7","esbuild":"^0.27.7","globals":"^17.6.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.7","fast-check":"^4.8.0","typescript":"^6.0.3","@types/node":"^25.9.1","@types/mocha":"^10.0.10","@types/react":"^19.2.15","@vscode/vsce":"^3.9.1","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.60.0","@vitest/coverage-v8":"^4.1.7","@vscode/test-electron":"^2.5.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.9.6_1780077217692_0.009386394204256687","host":"s3://npm-registry-packages-npm-production"}},"1.9.7":{"name":"@magic5644/graph-it-live","version":"1.9.7","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.9.7","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"154a67a6ca6fb33231f52b7983b0996c6658e8f0","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.9.7.tgz","fileCount":25,"integrity":"sha512-SW8OM6gBKDz5x1ymGBDmGk3TjtY5nTFEe56cfSD3jA+dPesjrT6ZJlpxpk0XlBB/WQoYfrF8HA3UptfuNf7wPg==","signatures":[{"sig":"MEQCIBv+ewu9RJ0OnBD7Mc4+yBHhrOgAVrlyWhsCqirrepjCAiBGHd0L3wdPH08FuyhUjZLvFQfcTfd9A8KkrZ4cxPqKFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.9.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37551512},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"661fb0a8512cabfacf5a4b5e1bb7ab3ae8af0ee3","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.13.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.16.0","dependencies":{"ink":"^7.1.0","zod":"^4.4.3","react":"^19.2.7","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.0","react-dom":"^19.2.7","reactflow":"^11.11.4","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.9","@inquirer/prompts":"^8.5.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.6","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","globals":"^17.6.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.9","fast-check":"^4.8.0","typescript":"^6.0.3","@types/node":"^25.9.4","@types/mocha":"^10.0.10","@types/react":"^19.2.17","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","@vscode/test-electron":"^2.5.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.9.7_1781890304655_0.8446212568073057","host":"s3://npm-registry-packages-npm-production"}},"1.9.8":{"name":"@magic5644/graph-it-live","version":"1.9.8","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.9.8","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"4512ebb4d564d777c9f160c8ed694c4e6c9599c5","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.9.8.tgz","fileCount":25,"integrity":"sha512-5nA9eBcEpRnKkTr96tNVysLWzMwO5rmSLkqvFxZUv1Hs+10wycp88DhJvdGr0hjP3WHv36SGkgWR9caQRp+esw==","signatures":[{"sig":"MEYCIQC5dNN6E4GFeTJ4aCnNrS+JjYyuBWK6OmeVymrvNjQMgQIhALX1UANxQ8Kgfow/IPz70TF/ZlJ4e3JkgAvX1DLn9tHL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.9.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37552114},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"553f2911c9a6afc875fbcc12d4ba10dd7f843ccf","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.13.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.16.0","dependencies":{"ink":"^7.1.0","zod":"^4.4.3","react":"^19.2.7","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.0","react-dom":"^19.2.7","reactflow":"^11.11.4","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.9","@inquirer/prompts":"^8.5.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.6","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","globals":"^17.6.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.9","fast-check":"^4.8.0","typescript":"^6.0.3","@types/node":"^25.9.4","@types/mocha":"^10.0.10","@types/react":"^19.2.17","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","@vscode/test-electron":"^2.5.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.9.8_1781893863279_0.3246284919793514","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@magic5644/graph-it-live","version":"1.10.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.10.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"b4bd04f305351c35fa9a9cdc8ac13fd2ad0485fd","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.10.0.tgz","fileCount":25,"integrity":"sha512-c9loLUkJ8FPZMtEavi5JTtm/KmA0XPM24PrnRDckfvY0F7JySxJL9hMyEaArodSDB7BZFQJdxuAY6v3t+C6SaQ==","signatures":[{"sig":"MEYCIQCvIJRDYJfl0zJgZHIO5NQMkyF19jJQMUrtUmlCsVLj6AIhANm61e85zvsW+wBj2oesZvNFW0fqVRgNGuJ8okNhoEvF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44844684},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"cbc24c695ea676d7eb5fa0317375cfc156a8b018","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.13.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.17.0","dependencies":{"ink":"^7.1.0","zod":"^4.4.3","react":"^19.2.7","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.0","react-dom":"^19.2.7","reactflow":"^11.11.4","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.9","@inquirer/prompts":"^8.5.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.6","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","globals":"^17.7.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.9","fast-check":"^4.8.0","typescript":"^6.0.3","@types/node":"^25.9.4","@types/mocha":"^10.0.10","@types/react":"^19.2.17","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.62.0","@vitest/coverage-v8":"^4.1.9","@vscode/test-electron":"^2.5.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.10.0_1782563772550_0.6591732970686499","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@magic5644/graph-it-live","version":"1.11.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.11.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"d9f0e3d3a66876ed9126155a38940e895dca68fb","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.11.0.tgz","fileCount":25,"integrity":"sha512-9d10FytXBfKSjo2CNJcjJRwmFSPAUZMVDygTdUuVbNnigM6M/k2We8NSa9u11O/P6r+rKqc8MvY3x7ZesvUYrQ==","signatures":[{"sig":"MEQCIBrKMTXuDWH3mOs6w/pT2tsjs6KFQbHNlLIuckUVGWH4AiAphOg5gXjpmE18DCNPZGT9c/CAU0HLG/+S+uUEER6+4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44863667},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"776193a6333f3e0b8e9e9bf961445cd91574083e","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.16.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.18.0","dependencies":{"ink":"^7.1.0","zod":"^4.4.3","react":"^19.2.7","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.0","react-dom":"^19.2.7","reactflow":"^11.11.4","vis-network":"10.1.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.10","@inquirer/prompts":"^8.5.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.6","eslint":"^10.6.0","vitest":"^4.1.9","esbuild":"^0.28.1","globals":"^17.7.0","happy-dom":"^20.10.6","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.9","fast-check":"^4.8.0","typescript":"^6.0.3","@types/node":"^25.9.4","@types/mocha":"^10.0.10","@types/react":"^19.2.17","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.62.1","@vitest/coverage-v8":"^4.1.9","@vscode/test-electron":"^2.5.2","@testing-library/react":"^16.3.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.11.0_1783321518963_0.3217972858837652","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@magic5644/graph-it-live","version":"1.12.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.12.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"1434ae07f900ac3d4fe60bf4751539e871ddabaa","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.12.0.tgz","fileCount":25,"integrity":"sha512-if1e5kxx/rGSRALJTLpvP22WpbjTMCYwCBnfgJyOGLAfP8ByfupOK89+5kIbinNKrM1Mbmk3AqWtUDZyDRGYPA==","signatures":[{"sig":"MEUCIEs080sVLi9875sB+3vi8lUZwJlt2C7+8X4s18viBCkSAiEArmoO/3DJGhK6NPaVcwe6mwJOlzinVVcON2SnUOlC34s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44883153},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"b10dee306b5f2035a09383adaac15b00c4305b19","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.16.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.18.0","dependencies":{"ink":"^7.1.1","zod":"^4.4.3","react":"^19.2.7","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.0","react-dom":"^19.2.7","reactflow":"^11.11.4","vis-network":"10.1.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.11","@inquirer/prompts":"^8.5.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.6","eslint":"^10.7.0","vitest":"^4.1.10","esbuild":"^0.28.1","globals":"^17.7.0","happy-dom":"^20.10.6","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.10","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^25.9.5","@types/mocha":"^10.0.10","@types/react":"^19.2.17","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.64.0","@vitest/coverage-v8":"^4.1.10","@vscode/test-electron":"^2.5.2","@testing-library/react":"^16.3.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.12.0_1784282221952_0.7877916516820296","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"@magic5644/graph-it-live","version":"1.13.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.13.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"8013cd3afb0785f98bb9732af81897600254d6e4","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.13.0.tgz","fileCount":25,"integrity":"sha512-IpgbbD+xVtxUXqbevMVt5fTM+GoZ19QVNQlFXv1hS50qb+yceaLomiTHex+DxLKc5niPunKEzWzUjhvqIIMPFA==","signatures":[{"sig":"MEUCIQDt7e3IjZj5/BKI6QDJ53RchjM20R43x/3gk+BRb/gBBwIgZvzHB7y4PWNOzcLvp1hWW++41aGpimvegWVQQ/pJwNA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44922370},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"b58b96ad8d45bb6632bd957665f233c7e7072c5c","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.16.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.18.0","dependencies":{"ink":"^7.1.1","zod":"^4.4.3","react":"^19.2.7","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.0","react-dom":"^19.2.7","reactflow":"^11.11.4","vis-network":"10.1.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.11","@inquirer/prompts":"^8.5.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.6","eslint":"^10.7.0","vitest":"^4.1.10","esbuild":"^0.28.1","globals":"^17.7.0","happy-dom":"^20.10.6","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.10","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^25.9.5","@types/mocha":"^10.0.10","@types/react":"^19.2.17","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.64.0","@vitest/coverage-v8":"^4.1.10","@vscode/test-electron":"^2.5.2","@testing-library/react":"^16.3.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.13.0_1784561016862_0.09042097500983215","host":"s3://npm-registry-packages-npm-production"}},"1.13.1":{"name":"@magic5644/graph-it-live","version":"1.13.1","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.13.1","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"eba907af7df57b2533397b47121b5b85ad9d8501","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.13.1.tgz","fileCount":25,"integrity":"sha512-I2G0P/kQnHJgwyPzAh3MTNacoD8HAbqQwHAxXUQVkMBxlAk6cURjVuKvyEwfVFSwVHNBpBFZpLcLEjL/FfH2Pg==","signatures":[{"sig":"MEUCIBC2nHZFhzLttGLaS2xlg3aNvaeVljmWeJleulgY6iwHAiEAiZFNwXEI7coNmUoBTyQ5El9+aFhhJMiOUUIJOE9KrxA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.13.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44922646},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"e2ee09a08c918574b595b62066fcf5d0c941f7c1","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.16.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.18.0","dependencies":{"ink":"^7.1.1","zod":"^4.4.3","react":"^19.2.7","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.0","react-dom":"^19.2.7","reactflow":"^11.11.4","vis-network":"10.1.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.11","@inquirer/prompts":"^8.5.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.6","eslint":"^10.7.0","vitest":"^4.1.10","esbuild":"^0.28.1","globals":"^17.7.0","happy-dom":"^20.11.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.10","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^25.9.5","@types/mocha":"^10.0.10","@types/react":"^19.2.17","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@vscode/test-electron":"^2.5.2","@testing-library/react":"^16.3.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.13.1_1784649339420_0.7221939684649443","host":"s3://npm-registry-packages-npm-production"}},"1.13.2":{"name":"@magic5644/graph-it-live","version":"1.13.2","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.13.2","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"91619ed163b229a63b09aa0b9fcc5490a16abfd6","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.13.2.tgz","fileCount":25,"integrity":"sha512-t6p506ZrC2J+2GxFpgOt+UvAmtrObOgont+R0SybXbxqMISgI7UoR5NozWrGrQRFTkbvJPIh0OmM4NZkyg8WmA==","signatures":[{"sig":"MEUCIHmUisy4MaSzEBJ7Pq/zXEQ5gi3q4HujN+jlhB26mRq2AiEA9txDj6w+wEOpQ7CBfXEHtJ/MFCGRDw5FUQFo+hcZdVs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.13.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44922849},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"cf6fa3b1709fb19fec7f007cf85fa71fcc6d6952","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.16.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.18.0","dependencies":{"ink":"^7.1.1","zod":"^4.4.3","react":"^19.2.8","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.0","react-dom":"^19.2.8","reactflow":"^11.11.4","vis-network":"10.1.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.11","@inquirer/prompts":"^8.5.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.6","eslint":"^10.7.0","vitest":"^4.1.10","esbuild":"^0.28.1","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.10","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^25.9.5","@types/mocha":"^10.0.10","@types/react":"^19.2.17","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@vscode/test-electron":"^2.5.2","@testing-library/react":"^16.3.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.13.2_1784824416692_0.5815413623498866","host":"s3://npm-registry-packages-npm-production"}},"1.13.3":{"name":"@magic5644/graph-it-live","version":"1.13.3","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.13.3","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"7e4e62900c41ffb984d15c497cc14d9743823394","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.13.3.tgz","fileCount":25,"integrity":"sha512-T3FUcqWMX6MC2mc1YuPZTLOF1SzUwgJg/oSvKFnaAuYfyjlBgt5XYbI7Mj8UGm1EIROIj15e5z/X8982m0F7ng==","signatures":[{"sig":"MEQCIEbLIsLpiEUY7tkiGP5ykeytybaYSt1BRWDo/fSezJXPAiBgQGyLr/LRcfj3Zm5PDYmDjOqzcbZgP0oJ6BHrowvQUA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.13.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44924837},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"b0c7d430382347f3ad9b8d98f590112682f5f606","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.16.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.18.0","dependencies":{"ink":"^7.1.1","zod":"^4.4.3","react":"^19.2.8","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.0","react-dom":"^19.2.8","reactflow":"^11.11.4","vis-network":"10.1.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.11","@inquirer/prompts":"^8.5.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.6","eslint":"^10.7.0","vitest":"^4.1.10","esbuild":"^0.28.1","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.10","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^25.9.5","@types/mocha":"^10.0.10","@types/react":"^19.2.17","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@vscode/test-electron":"^2.5.2","@testing-library/react":"^16.3.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.13.3_1784906465087_0.33062723219719437","host":"s3://npm-registry-packages-npm-production"}},"1.13.4":{"name":"@magic5644/graph-it-live","version":"1.13.4","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.13.4","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"9d1e7364d39dc5e696d03c23025dcaf996e7169f","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.13.4.tgz","fileCount":25,"integrity":"sha512-KQp9HXnyASSu3HeLgbdrP3RWQ0JnyYGdvluGjetVBIq/1FcIwuyw/V1pFoMNarDm/NKXAGRVmFYmhg7eYIRVlg==","signatures":[{"sig":"MEYCIQCt3K+pUH12dQf4VkzzY8XjCakmuIBryA+mfoeFsmPW8QIhAKEWa9WGgRCBrNEZvexrWsw2IfVNuIcxLjph58ufHFw9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.13.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44927853},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"0790552d939571aa4c04dcd535cb1cb9449c98eb","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.17.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.19.0","dependencies":{"ink":"^7.1.1","zod":"^4.4.3","react":"^19.2.8","sql.js":"^1.14.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.0","react-dom":"^19.2.8","reactflow":"^11.11.4","vis-network":"10.1.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.11","@inquirer/prompts":"^8.5.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.29.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.7.6","eslint":"^10.7.0","vitest":"^4.1.10","esbuild":"^0.28.1","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.10","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^25.9.5","@types/mocha":"^10.0.10","@types/react":"^19.2.17","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@vscode/test-electron":"^2.5.2","@testing-library/react":"^16.3.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.13.4_1786981943022_0.8983737445080919","host":"s3://npm-registry-packages-npm-production"}},"1.13.5":{"name":"@magic5644/graph-it-live","version":"1.13.5","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.13.5","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"1713ddc463ddd240d2f9279bd7700ee7906a09af","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.13.5.tgz","fileCount":25,"integrity":"sha512-xdAjC7jqfgpTXLDF0oYew8qbyj+eqneOLz3P8T85ocM97qyKNYk15ZF+fM0tJjZX8/kpGB9pi9r8/Cq19IM9Ag==","signatures":[{"sig":"MEUCIBh3qutKrL4nbqsV4dkWHFqNapmAiN2BEvf2wo1D8dMrAiEA8aC5lglTtroDY3K5YSA5t/Z4irW98EfXO6EU8uHIHuU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.13.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44931409},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"c145d61b33b7286284674aab9602dc12a724d901","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.17.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.19.0","dependencies":{"ink":"^7.1.1","zod":"^4.4.3","react":"^19.2.8","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.1","react-dom":"^19.2.8","reactflow":"^11.11.4","vis-network":"10.1.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.12","@inquirer/prompts":"^8.5.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/sdk":"^1.30.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.8.0","eslint":"^10.8.1","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.11.0","happy-dom":"^20.11.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^25.9.5","@types/mocha":"^10.0.10","@types/react":"^19.2.18","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.4","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.2","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.13.5_1787160010974_0.6307915255945582","host":"s3://npm-registry-packages-npm-production"}},"1.13.6":{"name":"@magic5644/graph-it-live","version":"1.13.6","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.13.6","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"bin/graph-it"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"2edb44f7604c55165b1bbd1f11d1dea74d8ddf1c","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.13.6.tgz","fileCount":25,"integrity":"sha512-2FrMRM7R4Ehlb570SYLT2iM7BtWV70641um89jO0EhT0ymZjcXyg+V+EGWLXcw/ZOKk8I4DhikcdbCYtcjpE4Q==","signatures":[{"sig":"MEUCIQC9CVvsCQo1E66rvIf1A8GfxIhjp5LZsiy1C+Q7KKYP0gIgZtuxljfBStb70IG8lFfnuy1hDH9bkdVM37k3YhOZi6s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.13.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44998260},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"a740e0707e12bccc327187afeeedfc2af9c2e487","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.17.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.19.0","dependencies":{"ink":"^7.1.1","zod":"^4.4.3","react":"^19.2.8","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.2","react-dom":"^19.2.8","reactflow":"^11.11.4","vis-network":"10.1.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","@inquirer/prompts":"^8.7.0","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.0.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.8.0","eslint":"^10.9.1","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.11.0","happy-dom":"^20.11.12","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^25.9.5","@types/mocha":"^10.0.10","@types/react":"^19.2.18","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.5","typescript-eslint":"^8.68.0","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.13.6_1787900636108_0.5858351184016966","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"@magic5644/graph-it-live","version":"1.14.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.14.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"1f8ab55760e9b4fc8a74a79c2f7b16ae4363442e","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.14.0.tgz","fileCount":24,"integrity":"sha512-izwOC0KrIgyV5npWdyXC+eTXOMU9XkB0q/yhHpdDsY/neWGruQZUuhdIlDpXTReH21BGEh+U8q4VKHetMgsMcA==","signatures":[{"sig":"MEYCIQDMvet1jROQWpEln/ZnG7EvBvj5Nqo+xaHQd0W6X/hChAIhAJN7EaqTvA3Pu0rvUOUjQinnWlt4OccJ7N8BW/NRX40x","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44999125},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"48559ee398919c6976ef50eedf46940953012bed","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.17.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.19.0","dependencies":{"ink":"^7.1.1","zod":"^4.4.3","react":"^19.2.8","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.2","react-dom":"^19.2.8","reactflow":"^11.11.4","vis-network":"10.1.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","@inquirer/prompts":"^8.7.0","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.0.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.8.0","eslint":"^10.9.1","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.11.0","happy-dom":"^20.11.12","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^25.9.5","@types/mocha":"^10.0.10","@types/react":"^19.2.18","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.5","typescript-eslint":"^8.68.0","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.14.0_1787903954598_0.9470308906487486","host":"s3://npm-registry-packages-npm-production"}},"1.14.1":{"name":"@magic5644/graph-it-live","version":"1.14.1","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.14.1","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"47be7058557616d5016276cce0d08313e0280552","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.14.1.tgz","fileCount":24,"integrity":"sha512-eDsIKL5ucPNNHtN3Y3lZVPtVv7FpNLDGltTmSnUPzMwQSA/D0NYTYdLvqhAse26ARtUSqTX4iIqg1IcdaZ6Sgw==","signatures":[{"sig":"MEUCIQDdRuov3/ZXBM12dkyn40J8pj0DXd4EVGU6UP0ov1GGuwIgK9Tnvj6nUp8BYUA0GysnX7emyxXw8gONRc9AxiOjU/w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.14.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47988608},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"e4347f9e1c716ee6d2df6cd12a7253dec8c08b17","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.17.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.19.0","dependencies":{"ink":"^7.1.1","zod":"^4.4.3","react":"^19.2.8","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.2","react-dom":"^19.2.8","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.0.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","@inquirer/prompts":"^8.7.0","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.0.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.8.0","eslint":"^10.9.1","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.11.0","happy-dom":"^20.11.12","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.9.0","typescript":"^6.0.3","@types/node":"^25.9.5","@types/mocha":"^10.0.10","@types/react":"^19.2.18","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.2.5","typescript-eslint":"^8.68.0","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.14.1_1787929627644_0.5812273104417816","host":"s3://npm-registry-packages-npm-production"}},"1.14.2":{"name":"@magic5644/graph-it-live","version":"1.14.2","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.14.2","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"5b72a4880c07766ae2d3b01912f8dcb70f40e250","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.14.2.tgz","fileCount":24,"integrity":"sha512-Z9TNhfuzOkleCGbEGJ7vKIx3tiCOtdN+J4MDVFXd7uhDVn/pSIGg4ObsamlQcGaU0RzwAo95bmPeM4CZ5U6+pQ==","signatures":[{"sig":"MEUCIQCgyzUkCoWYQxSsqJwKyMuwFm2q38fnXtiWRBRyHAozQAIgQYRPOYHXUGRn3QvejdKs9K/REv+c3SJm43wDYP/M5ps=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDLK8RgtsUCEEoBp7Qjn08/nza8QBa9/1SAIN5Xbjff2AIhANGLkOjx+3pS77cJt0PxJM3NzSyACTlX7c6A1vNeJuPs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.14.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48448741},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"416de56630e90405ac16f918bc33ab885d0aabc7","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Retrieve deterministic, token-bounded workspace-relative graph context across dependencies, symbols, calls, tests, and impact evidence.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.20.0","dependencies":{"ink":"^7.1.1","zod":"^4.6.2","react":"^19.3.0","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.3","react-dom":"^19.3.0","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.0.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","@inquirer/prompts":"^8.7.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.0.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.8.0","eslint":"^10.10.0","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.12.0","happy-dom":"^20.14.3","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.10.0","typescript":"^6.0.3","@types/node":"^25.9.6","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.70.0","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.14.2_1789217601543_0.6424175620639092","host":"s3://npm-registry-packages-npm-production"}},"1.14.3":{"name":"@magic5644/graph-it-live","version":"1.14.3","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.14.3","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://github.com/magic5644/Graph-It-Live/blob/main/README.md","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"e1cb56f9e25e3236a886d04c7180d7f7182d6a16","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.14.3.tgz","fileCount":24,"integrity":"sha512-vyCl6zYRawjFuBKe03S8zoraHTfkLhrTdOX8CBDrtBTE/pJYQWrrp3MVoVrdTwghicUgsNN9aJocAOlfahcBqQ==","signatures":[{"sig":"MEUCIQD5QWqXvni1bwlKnqu1rZZT8HiUKFIUmBGfMbrauwkoOgIgfr4yXVZ0sZ7CDk03S6wLqcC3XppTes75jCTq6WLMDTM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDdiY0tDCLH/SzmvcYRwH6Ye55YuMi0aVGByG3tcZdSEAIhAMl/yg2eC7kU8pi51xxCpyPar6QoE6cIG57QBlZeXnOe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.14.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48473762},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"5f2a7d052f1ef0a924bbf528a688a0d6aeb59e2a","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Retrieve deterministic, token-bounded workspace-relative graph context across dependencies, symbols, calls, tests, and impact evidence.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 21 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.20.0","dependencies":{"ink":"^7.1.1","zod":"^4.6.2","react":"^19.3.0","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.3","react-dom":"^19.3.0","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.0.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","@inquirer/prompts":"^8.7.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.0.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.8.0","eslint":"^10.10.0","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.12.0","happy-dom":"^20.14.5","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.10.0","typescript":"^6.0.3","@types/node":"^25.9.6","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.70.0","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.14.3_1789247812371_0.503340721757624","host":"s3://npm-registry-packages-npm-production"}},"1.14.4":{"name":"@magic5644/graph-it-live","version":"1.14.4","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.14.4","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"836e0d68f6b3c77df9d434a20856e3242b8fef6b","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.14.4.tgz","fileCount":24,"integrity":"sha512-a/RcdEWrHq1GFwOJ4Jb4xqz1m0wUxogNgm5oud0D5uUp7xqXDHx2M4mG5SVm5ri9bgcnVLTVNFPrInQ75PbEtQ==","signatures":[{"sig":"MEQCIHNPfRm497X2sO1cngRCs4bzLGaBznyhxY7L7xll4B+pAiA3JFg6BCqgbRZ9SNOS8cVdgoay08GWRiP05cjqm5bxww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIChW4ok626mQVw4vt2gF83VDD2dticxLgqBcU1+JuOufAiEAhV+mgRHPjj9d4UeZUQ2wDaHjM2mG9t1CgRcH80GO9eU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.14.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48463753},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"a3b20ee207d05406f718dc52f541922032fd964e","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Retrieve deterministic, token-bounded workspace-relative graph context across dependencies, symbols, calls, tests, and impact evidence.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 27 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.20.0","dependencies":{"ink":"^7.1.1","zod":"^4.6.2","react":"^19.3.0","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.3","react-dom":"^19.3.0","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.0.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","@inquirer/prompts":"^8.7.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.0.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.8.0","eslint":"^10.10.0","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.12.0","happy-dom":"^20.14.5","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.10.0","typescript":"^6.0.3","@types/node":"^25.9.6","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.70.0","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.14.4_1789319367442_0.6608067241044036","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"@magic5644/graph-it-live","version":"1.15.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.15.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"3dcbd26edfe9bed51824577bbb706010a90badaa","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.15.0.tgz","fileCount":24,"integrity":"sha512-o1edIiKKNk+QFlSTTLRv6hr/uWhXxRlNh8y6KxbgmtG4zvZt5TIkfjRrRM2rNyyplY/1E597+w8jZzVNbKFKKw==","signatures":[{"sig":"MEUCIC+U96Nm3GzoXqb564oAvAHeZpMW2x0qx9V8QXWW4p7CAiEAkroILyIOsVEgZrqv75d25IobPro+MgHfs13D9CC1x9w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFpCHdvKbG2BxKNQrrcP/vzbrUfwkwFeJKLsN22d8gc+AiEAy4YK5yjqynSKN1bPIF1ZqcijrZ9buywoqTTP4YPlrSA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48464132},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"e4e573dc3806076f78f7001923c977dc1d4a2cf5","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Retrieve deterministic, token-bounded workspace-relative graph context across dependencies, symbols, calls, tests, and impact evidence.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 27 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.20.0","dependencies":{"ink":"^7.1.1","zod":"^4.6.2","react":"^19.3.0","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.3","react-dom":"^19.3.0","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.0.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","@inquirer/prompts":"^8.7.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.0.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.8.0","eslint":"^10.10.0","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.12.0","happy-dom":"^20.14.5","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.10.0","typescript":"^6.0.3","@types/node":"^25.9.6","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.70.0","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.15.0_1789405021486_0.5034045883173801","host":"s3://npm-registry-packages-npm-production"}},"1.15.1":{"name":"@magic5644/graph-it-live","version":"1.15.1","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.15.1","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"c58c26bb6642391bfaf86537a307fab5ab128b6a","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.15.1.tgz","fileCount":24,"integrity":"sha512-+r7C6x95Ai6Dr+pN1rHzVXQVADDQd6yRuuRgTJJRct24bC5acP4ZxdI6ZZG+4OYj2oaBknNUEAXuVCrgLLoRoA==","signatures":[{"sig":"MEUCIQCylEVqcVn8i5pxBZxUPwzQ1pMr3fl2MvCwn+I9gDOPnwIgKioUhu+UcYyj0gQZzKOG3ED6I/mu7o187o/MzbOJW3k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDVog6VHrhTrAgE3Bhgyueyl1B1T3fOGlaTgRx1qIkOhQIga29BEdXGkllSCgcaH/FVYGNq+0l1mRQWFFAUcKZTbnU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.15.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48471806},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"ab7ee8923369ea6ceebd4566c95f544bc469c68e","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Retrieve deterministic, token-bounded workspace-relative graph context across dependencies, symbols, calls, tests, and impact evidence.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 27 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.20.0","dependencies":{"ink":"^7.1.1","zod":"^4.6.5","react":"^19.3.0","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.3","react-dom":"^19.3.0","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.0.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","@inquirer/prompts":"^8.7.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.0.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.8.0","eslint":"^10.10.0","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.12.0","happy-dom":"^20.14.5","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.10.0","typescript":"^6.0.3","@types/node":"^25.9.6","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.70.0","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.15.1_1789492848361_0.5636345876422559","host":"s3://npm-registry-packages-npm-production"}},"1.16.0":{"name":"@magic5644/graph-it-live","version":"1.16.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.16.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"f5f104288a680e270eb82b76e05bdf1cca126cb0","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.16.0.tgz","fileCount":24,"integrity":"sha512-OBG9r/aQB30A95n8osGBn7NTNzf+NWIp3DVxErsZDclD/P/vwN2wofj3npVjbQyfGf78hldJ3wd4Pp9MF9pc7g==","signatures":[{"sig":"MEUCIAb7yDsA2BoWXOaL78SZGfUS66a4pR5kEiPTHIIc1gcGAiEAmXhamROKfyOrMkdfVMWAIA/Rx2QWTcTEolPNmhaWWKY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIG3q/uYegokgXmtGjApyzqAHCTNAPz/dEYT1V6sosZhLAiBJZ6mxWbwcO69h2AyRj7i5ghsMFWkGJu5XLed1t5PY4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48507932},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"4cd2a3af9ef406468544da2c533f6c1ceacb9a80","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty uses the current branch and saved workspace changes."},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":1000,"minimum":1,"description":"Maximum number of files analyzed by Branch Watch. Higher values improve coverage but increase analysis time and memory usage. Range: 1–1000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Retrieve deterministic, token-bounded workspace-relative graph context across dependencies, symbols, calls, tests, and impact evidence.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 27 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.21.0","dependencies":{"ink":"^7.1.1","zod":"^4.6.5","react":"^19.3.0","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.3","react-dom":"^19.3.0","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.0.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","@inquirer/prompts":"^8.7.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.1.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.8.0","eslint":"^10.11.0","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.12.0","happy-dom":"^20.14.5","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.8","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.70.1","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.16.0_1790508125958_0.3910916571986436","host":"s3://npm-registry-packages-npm-production"}},"1.16.1":{"name":"@magic5644/graph-it-live","version":"1.16.1","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.16.1","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"8abbef39f5cbbad07dc5f82ec82335c223d28a14","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.16.1.tgz","fileCount":24,"integrity":"sha512-QOkNxGkK14uiW0wGx19X05z7bWfjYHDswrU9qgw9jtRIv+QSHGxa0IMOuFF5U1kuA8TZhGXetTSf4YatbP8mhA==","signatures":[{"sig":"MEQCIEQH4TqICemJccq4xmaETbcN4wRJ62lz+T8ttTX/wGUyAiBrZw/0F4UiYBRwZBH0Er2pHk2yyfcknNVbZI604B7ZuQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCJlN/oP6ijt1YMIw045dialw9XLKXtoQe6Tgz5g1Y/UwIgE1HSHq7Tvlyk/QnQvfRanuFuG3gjGYoPXMxtReV2ShM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48508147},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"b54d8fade33373fa80576e316b06c000406efcf7","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.maxCacheSize":{"type":"number","order":103,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.persistIndex":{"type":"boolean","default":false,"description":"Persist the reverse index to disk for faster startup. Files are validated using mtime and size to detect changes. Enable this option only if you have some performance issues on large projects."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.maxSymbolCacheSize":{"type":"number","order":104,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":99,"default":"default","description":"Performance profile preset that automatically configures cache sizes and concurrency.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Manual configuration (all performance settings become editable)"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty uses the current branch and saved workspace changes."},"graph-it-live.indexingConcurrency":{"type":"number","order":100,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","editPresentation":"multilineText","markdownDescription":"Number of files to process in parallel during background indexing.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":1000,"minimum":1,"description":"Maximum number of files analyzed by Branch Watch. Higher values improve coverage but increase analysis time and memory usage. Range: 1–1000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.unusedAnalysisMaxEdges":{"type":"number","order":102,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines"},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."},"graph-it-live.unusedAnalysisConcurrency":{"type":"number","order":101,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n⚠️ **Note**: This setting is only editable when Performance Profile is set to 'custom'. Otherwise, it's automatically configured by the selected profile.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)"},"graph-it-live.maxUnusedAnalysisCacheSize":{"type":"number","default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached."},"graph-it-live.persistUnusedAnalysisCache":{"type":"boolean","default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results."}}},"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Retrieve deterministic, token-bounded workspace-relative graph context across dependencies, symbols, calls, tests, and impact evidence.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"WHEN: you need to know which files import or depend on a specific file. WHY: you cannot determine reverse dependencies without analyzing the full project dependency index. WHAT: returns a list of file paths that import or reference the target file, with line numbers and import module details.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"WHEN: you need to know what a file imports or depends on. WHY: you need resolved absolute paths and structured metadata for all imports in a file, which you cannot get from just reading the source. WHAT: returns all resolved dependencies of the given file with their module names, resolved paths, import types, and line numbers.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"WHEN: you need to explore the full transitive dependency graph starting from an entry file. WHY: you cannot determine multi-hop dependencies by reading files individually — this traverses the full graph. WHAT: returns all reachable nodes (files) and directed edges (import relationships) in the graph.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"WHEN: you need to understand the symbol-level structure of a file — which functions, classes, and variables it defines and how they relate. WHY: you cannot determine symbol-to-symbol dependency relationships from source text alone without AST analysis. WHAT: returns all symbols (functions, classes, variables) defined in the file with their kinds, export status, and cross-file dependency edges.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"WHEN: you want to identify dead code or unused exports in a file. WHY: determining which exports are unused requires checking every file in the project that could import them — something impossible to do with simple text search. WHAT: returns a list of exported symbols that are not referenced anywhere in the project, with an unused percentage.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"WHEN: you need to know which symbols (functions, classes) use or call a specific exported symbol. WHY: finding all callers of a symbol across the project requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns all symbols across the project that reference the given symbol, with file paths and symbol IDs.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"WHEN: you are about to modify a symbol and want to understand the risk and scope of the change. WHY: determining transitive impact across the project requires traversing the full reverse dependency graph, which is impossible to do manually. WHAT: returns an impact level (high/medium/low), count of affected files and symbols, and the list of impacted items with their usage types (runtime vs type-only).","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"WHEN: you need to check whether the dependency index is ready before calling other analysis tools. WHY: other tools may return incomplete results if the index is still being built. WHAT: returns the current indexing state (idle/indexing/complete/error), cache statistics, and reverse index availability.","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"WHEN: you need a lightweight list of import statements from a file without full graph traversal. WHY: this uses the full language-aware parser pipeline to extract and resolve imports more accurately than regex-based text parsing. WHAT: returns each import with its module specifier, import type (import/require/export/dynamic), and source line number.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"WHEN: you need a rich, AI-friendly summary of a file's structure, relationships, and internal call flow. WHY: understanding a file requires combining symbol analysis, import resolution, reverse dependencies, and intra-file call hierarchy — none of which can be inferred from reading the source alone. WHAT: returns exported/internal symbols, file-level dependencies and dependents, intra-file call flow edges, cycle detection, and timing metadata.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"WHEN: you need to incrementally explore the dependency graph from a specific node, discovering new files not already in your known set. WHY: this efficiently finds only the files you do not already know about, avoiding re-analysis of the entire graph. WHAT: returns newly discovered nodes (file paths) and edges (import relationships) that were not in the provided known set.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"WHEN: you want to check if a dependency between two files is real or dead code (an unused import). WHY: raw imports do not tell the whole story — a file might import something but never use it; AST analysis is required to verify actual symbol usage. WHAT: returns a boolean indicating whether the sourceFile actually uses any symbol from targetFile.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"WHEN: you have modified files and need to refresh the dependency analysis cache. WHY: the dependency analyzer caches file analysis; when imports/exports change the cache becomes stale. WHAT: clears the cache for the given file paths, returns how many were invalidated.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"WHEN: the dependency index seems out of sync (after major refactoring, branch switches, or many file changes). WHY: clears ALL cached data and re-indexes the entire workspace, ensuring the dependency graph is accurate. WHAT: returns the rebuild time and new cache size. Note: can take several seconds for large workspaces.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"WHEN: you need to know every file and symbol that calls or uses a given exported symbol — essential for surgical refactoring. WHY: symbol-level impact requires a reverse symbol index that cannot be built by reading individual files. WHAT: returns a list of all symbol dependencies that use the target symbol, with file paths and symbol IDs.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"WHEN: you need to trace the full, deep call chain from a root symbol through multiple files. WHY: provides a complete picture of what a function calls, recursively following the call chain across files until it reaches external modules or the depth limit. WHAT: returns the root symbol, the full call chain with depth information, all visited symbols, and whether the max depth was reached.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"WHEN: you need to understand the internal call relationships between functions and methods within a single file. WHY: without AST analysis you cannot see actual call relationships between functions in a file. WHAT: returns an intra-file call graph with nodes (symbols with type, export status, line range), edges (caller→callee with line number), cycle detection, and timing.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"WHEN: you need to know which physical file a TypeScript/JavaScript import resolves to, especially for path aliases, barrel files, or relative imports. WHY: without the project's tsconfig path mappings you cannot reliably resolve aliases like '@/' or complex relative paths. WHAT: returns the resolved absolute path, a workspace-relative path, and a boolean indicating whether resolution succeeded.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"WHEN: you are about to modify a function signature, interface, or type alias and want to know if callers will break. WHY: static analysis requires parsing both the old and new AST to compare signatures — you cannot reliably do this from text diffs alone. WHAT: returns a list of breaking changes (parameter removed, type changed, visibility reduced, member removed, optional→required), non-breaking changes, and per-symbol severity (error/warning).","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"WHEN: you need to understand which functions call a given symbol across multiple files, or what a function calls transitively (beyond a single file). WHY: cross-file call relationships are not visible from reading a single file — they require a pre-built graph index. WHAT: returns the target symbol's metadata plus lists of callers/callees with file paths, relation types (CALLS/INHERITS/IMPLEMENTS/USES), and cycle flags. Requires the Call Graph panel to have been opened at least once to build the index.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"WHEN: you need a workspace-wide scan for all unused exported symbols (dead code), not just a single file. WHY: detecting dead code across an entire project requires building and querying a full reverse symbol index — impossible to do by reading files individually. WHAT: returns a list of unused exported symbols with their file paths, symbol names, and kinds. Supports optional scopePath to restrict the scan to a subdirectory and maxFiles to cap processing.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 27 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.21.0","dependencies":{"ink":"^7.1.1","zod":"^4.6.5","react":"^19.3.0","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.3","react-dom":"^19.3.0","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.0.0","@dagrejs/dagre":"^2.0.4","@inquirer/core":"^11.2.1","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","@inquirer/prompts":"^8.7.2","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.1.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.8.0","eslint":"^10.11.0","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.12.0","happy-dom":"^20.14.5","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.8","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.70.1","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.16.1_1790597559115_0.9651158310436263","host":"s3://npm-registry-packages-npm-production"}},"1.17.0":{"name":"@magic5644/graph-it-live","version":"1.17.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.17.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"fb993d13fda7890d4d6f8d7007880eeea8c162a5","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.17.0.tgz","fileCount":24,"integrity":"sha512-SSOn6XdUFaJCmI021uZqiDry8aNk/cvtn+n2Y8WcL1ZtNMyWgwlFrK9cIhjEF7mZC0GUkL9Zw6pI2K5nLkC0SA==","signatures":[{"sig":"MEUCIEBvdL7uOjXkC4H0Fj5ugr47mOz/+qTpws3EySkBHAe9AiEAwy2pSF8gUKFZp3SYGUhDxp/UPELhDgSYZsmxmxPW8r8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAcveYZhmlTwgSPRnq6JE0oJyA5bu68pxxnGPHjH/J9hAiATLOPpQxQrJlS75AcIxSu+ues3zX/yDprYnfD1idGVFg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48508212},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"2f9d5cd9756c8add33e7a2b30e34be7c131048ac","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"node scripts/test-mcp.js","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty uses the current branch and saved workspace changes."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":1000,"minimum":1,"description":"Maximum number of files analyzed by Branch Watch. Higher values improve coverage but increase analysis time and memory usage. Range: 1–1000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue, Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS edges from the indexed call graph, so it returns only symbols that call X. File-level imports and other references are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of the first call and a type-only flag, plus runtime and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty results.\nWHY: distinguishes \"no results\" from \"index not built yet\".\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size and reverse-index statistics (files indexed included).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path), visited symbols, and whether maxDepth was hit.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST (no language server needed), so it works the same in the CLI, MCP and VS Code. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords, scores seed nodes with full-text search over the call graph index, then traverses outward from them.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 22 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.21.0","dependencies":{"ink":"^7.1.1","zod":"^4.6.5","react":"^19.3.0","ignore":"^7.0.11","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.3","react-dom":"^19.3.0","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.0.0","@dagrejs/dagre":"^2.0.4","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.2.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.8.0","eslint":"^10.11.0","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^20.14.5","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.8","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.71.0","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.17.0_1790872510287_0.12707459282677513","host":"s3://npm-registry-packages-npm-production"}},"1.17.1":{"name":"@magic5644/graph-it-live","version":"1.17.1","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.17.1","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"88477eba9e3acc912c03db44b3ecacc87b990d92","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.17.1.tgz","fileCount":24,"integrity":"sha512-9nc0xx/0vEaXyplLiR7pwXXZhWOX1fmcXK63qpV5Flm/UUPQQ8zoPVgbXjIelS7Adxht/wwztuyvg2TF/JYK5Q==","signatures":[{"sig":"MEQCICxtwJqepTLpuY0a3/22BjMSCWSVxc3vCJXn1I22mG/yAiBl+NGJaXNvv+SzC4vAnVXTjM07D0uTkCMnscnyF215Eg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICACfm2QcaaMQMk/CB4/Z6HDJ0oKNLGJE5ZFclbzVAEJAiEAk1+J/0F6Xs45LwZrQv/lRgBL0yDWSj9/PfXGo4dygWE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.17.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48524406},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"d7c8cddb5e8c56167c4f1a2676acd4e9a67266cf","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty uses the current branch and saved workspace changes."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":1000,"minimum":1,"description":"Maximum number of files analyzed by Branch Watch. Higher values improve coverage but increase analysis time and memory usage. Range: 1–1000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue, Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS edges from the indexed call graph, so it returns only symbols that call X. File-level imports and other references are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of the first call and a type-only flag, plus runtime and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty results.\nWHY: distinguishes \"no results\" from \"index not built yet\".\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size and reverse-index statistics (files indexed included).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path), visited symbols, and whether maxDepth was hit.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST (no language server needed), so it works the same in the CLI, MCP and VS Code. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords, scores seed nodes with full-text search over the call graph index, then traverses outward from them.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 22 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.21.0","dependencies":{"ink":"^7.1.1","zod":"^4.6.5","react":"^19.3.0","ignore":"^7.0.11","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.3","react-dom":"^19.3.0","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.0.0","@dagrejs/dagre":"^2.0.4","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.2.0"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","mocha":"^11.8.0","eslint":"^10.11.0","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^20.14.5","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.8","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^3.9.2","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.71.0","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.17.1_1790955962699_0.6865601279426181","host":"s3://npm-registry-packages-npm-production"}},"1.18.0":{"name":"@magic5644/graph-it-live","version":"1.18.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.18.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"bc9afa5beec41b2cd5ec20e7fe9c1f08ecd26332","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.18.0.tgz","fileCount":24,"integrity":"sha512-tX4wpZoxPNAu/N7BcbCnPLwognAsgvJlxLWdbj3hAg2kPDfZFUc1114CMFR8XhQDs3OldfoKdARSIuh7gLPDrw==","signatures":[{"sig":"MEYCIQDoJJeXd2ooI0yTaTcTsJUc+7qPHUKrKd1VifycquNUIgIhAIf2E4CQWSYpLVxjdVqC/BBdE9yjk2edRjPjMmsu95WY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICBVvYVRWr0Kwj+bgaVSTS3ooRwR7OCCLfhYvbaeHw8rAiEA8AZhxRc9OdT/CStefzr31Aii057zTrqwreyBxHrHQkI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48559874},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"46d3acff6f644af29e3be23c2767323ad1164c32","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty uses the current branch and saved workspace changes."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":1000,"minimum":1,"description":"Maximum number of files analyzed by Branch Watch. Higher values improve coverage but increase analysis time and memory usage. Range: 1–1000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue, Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS edges from the indexed call graph, so it returns only symbols that call X. File-level imports and other references are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of the first call and a type-only flag, plus runtime and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path), visited symbols, and whether maxDepth was hit.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST (no language server needed), so it works the same in the CLI, MCP and VS Code. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords, scores seed nodes with full-text search over the call graph index, then traverses outward from them.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 22 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.21.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^7.1.1","zod":"^4.6.5","react":"^19.3.0","ignore":"^7.0.12","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.3","react-dom":"^19.3.0","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.0.0","@dagrejs/dagre":"^2.0.4","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.3.1"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","ovsx":"^1.2.0","mocha":"^11.8.0","eslint":"^10.12.0","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^20.14.5","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.0.0","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.71.1","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.18.0_1791560070027_0.5079293835273113","host":"s3://npm-registry-packages-npm-production"}},"1.19.0":{"name":"@magic5644/graph-it-live","version":"1.19.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.19.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"0c2d9710795381c2706a13af35f141d8b4767f70","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.19.0.tgz","fileCount":24,"integrity":"sha512-g1/V5LC3jrUTOcreVasT7IhxwGKOfTAC3ll2lFmUKMYDnrGxIf6jUBzpGXz8HfdM8qjzXkmZfV6pyPv7+5r7kA==","signatures":[{"sig":"MEUCICM+iz6RTY8cMwvI433bOqiPbNm4IX8wMqkDVE2pC6Z0AiEA13eCpGjdcckxAsUaE3TZco82jeUhEQAzx5WuGc9/Q/0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC8UmTcsiSJlUDmZHTEiA3zKs2LicDJDwkCx5CDVSE6FwIgY8jjqdc/MkcgEIzCFSm744A5upElLZICCoOi/HlAsPo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48566356},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"4709e57f0158b1947ede59c7ba0602a87a0d0d78","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty uses the current branch and saved workspace changes."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":1000,"minimum":1,"description":"Maximum number of files analyzed by Branch Watch. Higher values improve coverage but increase analysis time and memory usage. Range: 1–1000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue, Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS edges from the indexed call graph, so it returns only symbols that call X. File-level imports and other references are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of the first call and a type-only flag, plus runtime and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path), visited symbols, and whether maxDepth was hit.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST (no language server needed), so it works the same in the CLI, MCP and VS Code. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords, scores seed nodes with full-text search over the call graph index, then traverses outward from them.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 22 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.21.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^7.1.1","zod":"^4.6.5","react":"^19.3.0","ignore":"^7.0.12","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.3","react-dom":"^19.3.0","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.0.0","@dagrejs/dagre":"^2.0.4","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.3.1"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","ovsx":"^1.2.0","mocha":"^11.8.0","eslint":"^10.12.0","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^20.14.5","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.0.0","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.71.1","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.19.0_1791835035408_0.18351839655904856","host":"s3://npm-registry-packages-npm-production"}},"1.20.0":{"name":"@magic5644/graph-it-live","version":"1.20.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.20.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"6ed5fbda5bf429f57c6f01ae74ae743812ba41a8","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.20.0.tgz","fileCount":24,"integrity":"sha512-DYxMO8s/gRxQ2YPcv0sYnuO1JvsseXLdroKqjGb2WC0/uuRtRf9DQ3+E198B2PoyT0lhtXlmbZ913HRgqSoHZA==","signatures":[{"sig":"MEUCIDHZC4WmpN3QenFOP78dKFmljSzOmzdTJnvJxRdfvn3IAiEAyuv+8nNevVgahfQYYgE3xMsBphpOZTPw+ptcRv8R3yk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCFTBUwns+M2nzVE0poUJXSioozomSAHXJ6XgjOdJUekAIhAJQUoAwnuFrdYoRb9715PDGl7uF/r8PYSCCnEslWRdSZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48598972},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"03bc8cb24298e75868124281f131c99785bbfc7d","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"npx vsce ls | grep '\\.map$' && echo '❌ ERROR: .map files found in package!' && exit 1 || echo '✅ No .map files in package'","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.communityMode":{"enum":["path","louvain"],"type":"string","default":"path","enumDescriptions":["Group files by their first functional folder (src/analyzer, src/webview, ...)","Group files by import structure (deterministic Louvain), named after their dominant folder"],"markdownDescription":"How the dependency graph groups files into communities (node tint and legend). **path** groups by folder; **louvain** groups files that import each other, which shows coupling that folders hide."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty uses the current branch and saved workspace changes."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":1000,"minimum":1,"description":"Maximum number of files analyzed by Branch Watch. Higher values improve coverage but increase analysis time and memory usage. Range: 1–1000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue, Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS edges from the indexed call graph, so it returns only symbols that call X. File-level imports and other references are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of the first call and a type-only flag, plus runtime and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path), visited symbols, and whether maxDepth was hit.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST, so no language server is needed. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords, scores seed nodes with full-text search over the call graph index, then traverses outward from them.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 22 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.21.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^7.1.1","zod":"^4.6.5","react":"^19.3.0","ignore":"^7.0.12","sql.js":"^1.14.2","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.3","react-dom":"^19.3.0","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.0.0","@dagrejs/dagre":"^2.0.4","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.3.1"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.6","ovsx":"^1.2.0","mocha":"^11.8.0","eslint":"^10.12.0","vitest":"^4.1.11","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^20.14.5","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.0.0","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.71.1","@vitest/coverage-v8":"^4.1.11","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.20.0_1792060077231_0.12843931515943607","host":"s3://npm-registry-packages-npm-production"}},"1.21.0":{"name":"@magic5644/graph-it-live","version":"1.21.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.21.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"ad75112944fdddf46cd7e317d490122e05d65a14","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.21.0.tgz","fileCount":24,"integrity":"sha512-O3comBZno4Yc0mlVcxAofHtBS9deXtXTKjlB1blRdH3dR9jAlO+uKh/gbYrqQY/1gzZHuXqxs2+IYmQ5uIMpGQ==","signatures":[{"sig":"MEYCIQDzpL208qYKegn/YBPDj976wa93vyP373mIpEDhzIw41wIhAI8FXfBn+8saIaGwtTSXGuYAiX/qYmt4JqKw4LrV/o33","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIB7AcwKNyKAdftjo1JZA37lqdDb8eViZBsv6qwLOvoDBAiEAjCWtjWHQd8S3Ou9efK7IRw2WxjxsTS/MmzQcujt+wqA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48945197},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"0de55292e78ccdcd14ac532304720f6fdaf7f8db","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"node scripts/verify-package.mjs","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'architecture'","group":"navigation@6","command":"graph-it-live.setViewModeArchitecture"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status","visibility":"collapsed"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(type-hierarchy)","title":"Switch to Architecture View","command":"graph-it-live.setViewModeArchitecture","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.communityMode":{"enum":["path","louvain"],"type":"string","default":"path","enumDescriptions":["Group files by their first functional folder (src/analyzer, src/webview, ...)","Group files by import structure (deterministic Louvain), named after their dominant folder"],"markdownDescription":"How the dependency graph groups files into communities (node tint and legend). **path** groups by folder; **louvain** groups files that import each other, which shows coupling that folders hide."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty uses the current branch and saved workspace changes."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":1000,"minimum":1,"description":"Maximum number of files analyzed by Branch Watch. Higher values improve coverage but increase analysis time and memory usage. Range: 1–1000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue, Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS edges from the indexed call graph, so it returns only symbols that call X. File-level imports and other references are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of the first call and a type-only flag, plus runtime and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path), visited symbols, and whether maxDepth was hit.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST, so no language server is needed. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords, scores seed nodes with full-text search over the call graph index, then traverses outward from them.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 24 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.21.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^7.1.1","zod":"^4.6.7","elkjs":"0.12.0","react":"^19.3.1","ignore":"^7.0.13","sql.js":"^1.15.1","chokidar":"^5.0.0","ts-morph":"^27.0.2","cytoscape":"^3.34.4","react-dom":"^19.3.1","reactflow":"^11.11.4","vis-network":"10.1.0","gpt-tokenizer":"^4.1.0","@dagrejs/dagre":"^2.0.4","cytoscape-fcose":"^2.2.0","web-tree-sitter":"^0.26.13","tree-sitter-wasms":"^0.1.13","react-devtools-core":"^6.1.5","@modelcontextprotocol/server":"^2.3.1"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","glob":"^13.0.6","ovsx":"^1.3.0","mocha":"^11.8.0","eslint":"^10.13.0","vitest":"^4.1.12","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^20.14.6","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.12","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.0.0","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.72.0","@vitest/coverage-v8":"^4.1.12","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.21.0_1792868488544_0.9208513936053695","host":"s3://npm-registry-packages-npm-production"}},"1.21.1":{"name":"@magic5644/graph-it-live","version":"1.21.1","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.21.1","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"13439ec845f1d8246c781223ab6e0435819cd183","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.21.1.tgz","fileCount":24,"integrity":"sha512-sW8XoZJ8cRbfbkC05pAp17BxfVYiI80B4T90JFRTuUZClDUj402dpTkTTV4WqNY7r3jbaOsKpBXFtV9hLU5DMQ==","signatures":[{"sig":"MEUCIQDSFNCAxaNk+9LbJLCsTDAxeWHrzShBlQmMWoavqI4tIwIgZK+unyOq8SqtzAJkxBR2qJ/NHYByGxjE1saDE2D+2Fs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICo9kysSru2ZRNYva/o4o6knFhpLIKZRQFvg+TarrmTWAiEAzu8VWYzdhaBvZY2kFwmE6qynnak/Fpr2OpE8pjjY3Yk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.21.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48949286},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"6364e933056acb4b89b98bb7d794744c4955b9a2","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"node scripts/verify-package.mjs","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.0","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'architecture'","group":"navigation@6","command":"graph-it-live.setViewModeArchitecture"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status","visibility":"collapsed"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(type-hierarchy)","title":"Switch to Architecture View","command":"graph-it-live.setViewModeArchitecture","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.communityMode":{"enum":["path","louvain"],"type":"string","default":"path","enumDescriptions":["Group files by their first functional folder (src/analyzer, src/webview, ...)","Group files by import structure (deterministic Louvain), named after their dominant folder"],"markdownDescription":"How the dependency graph groups files into communities (node tint and legend). **path** groups by folder; **louvain** groups files that import each other, which shows coupling that folders hide."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty uses the current branch and saved workspace changes."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":1000,"minimum":1,"description":"Maximum number of files analyzed by Branch Watch. Higher values improve coverage but increase analysis time and memory usage. Range: 1–1000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue, Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS edges from the indexed call graph, so it returns only symbols that call X. File-level imports and other references are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of the first call and a type-only flag, plus runtime and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path), visited symbols, and whether maxDepth was hit.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST, so no language server is needed. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method)"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords, scores seed nodes with full-text search over the call graph index, then traverses outward from them.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 24 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.21.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^7.1.1","react":"^19.3.1","web-tree-sitter":"^0.26.13"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","glob":"^13.0.6","ovsx":"^1.3.0","mocha":"^11.8.0","eslint":"^10.13.0","vitest":"^4.1.12","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^21.0.4","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.12","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.0.0","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.72.0","@vitest/coverage-v8":"^4.1.12","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.21.1_1793052519333_0.6080906500536218","host":"s3://npm-registry-packages-npm-production"}},"1.21.2":{"name":"@magic5644/graph-it-live","version":"1.21.2","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.21.2","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"8fadcb342e2b3ff35738af6e6efcf16d406bfd6b","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.21.2.tgz","fileCount":24,"integrity":"sha512-kaJJ24Zc6vTWxIkU5tFTpi9AqCHiDwSBhEIPMkhzHu18888jckINYGVKdgQpm6q2Ve7qqYcCOt7wgBGQ62opVQ==","signatures":[{"sig":"MEUCIQCiYc9uDe/dDn+WuniKJDLCdxiNpyruXdMyRaF6T1q3uAIgPF/Gv0lgi9KGiS1EMOmHNdOI1h/vHb2ZypusVju1g6U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAv+hE0IZMrlUZwAIk0o4CvzrE1puigfsxQn4V2Gs4GeAiB29toYpBVPe0cmcBwDsXWQLfk0pe/opBbCn0yfu9uMvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.21.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49132736},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"fd125feff1630b3fd677c0fc5d44fc1710af98b2","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"node scripts/verify-package.mjs","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.1","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'architecture'","group":"navigation@6","command":"graph-it-live.setViewModeArchitecture"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status","visibility":"collapsed"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(type-hierarchy)","title":"Switch to Architecture View","command":"graph-it-live.setViewModeArchitecture","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.communityMode":{"enum":["path","louvain"],"type":"string","default":"path","enumDescriptions":["Group files by their first functional folder (src/analyzer, src/webview, ...)","Group files by import structure (deterministic Louvain), named after their dominant folder"],"markdownDescription":"How the dependency graph groups files into communities (node tint and legend). **path** groups by folder; **louvain** groups files that import each other, which shows coupling that folders hide."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty uses the current branch and saved workspace changes."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":1000,"minimum":1,"description":"Maximum number of files analyzed by Branch Watch. Higher values improve coverage but increase analysis time and memory usage. Range: 1–1000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nBARRELS: files that import the target's exports through re-export barrels (export { x } from, export *, chained) are listed after the direct importers, with via = the barrel they import.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic, side-effect), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue, Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS edges from the indexed call graph, so it returns only symbols that call X. File-level imports and other references are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of the first call and a type-only flag, plus runtime and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path), visited symbols, and whether maxDepth was hit.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST, so no language server is needed. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"symbolId":{"type":"string","description":"Exact node id from a previous result or candidate, valid for the current index only (ids embed the line). A stale id returns reason 'stale_selector'"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"startLine":{"type":"number","description":"Declaration line of the symbol, 0-based like startLine in results and candidates (editor line 3 is 2). Selects one of several same-name symbols"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method). A bare name shared by several symbols in the file returns reason 'ambiguous' with candidates; qualified names such as 'Class.method' are not supported"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nSELECTING: two same-name methods in one file return reason=ambiguous with candidates; pass one candidate's symbolId or startLine to select it exactly. A stale selector returns reason=stale_selector (ids embed the line and change after edits); 'Class.method' names are not supported.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords, scores seed nodes with full-text search over the call graph index, then traverses outward from them.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 24 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.22.1","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^7.1.1","react":"^19.3.1","web-tree-sitter":"^0.26.13"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","glob":"^13.0.6","ovsx":"^1.3.0","mocha":"^11.8.0","eslint":"^10.13.0","vitest":"^4.1.12","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^21.0.4","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.12","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.1.0","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.72.1","@vitest/coverage-v8":"^4.1.12","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.21.2_1793468810642_0.32907065250370904","host":"s3://npm-registry-packages-npm-production"}},"1.21.3":{"name":"@magic5644/graph-it-live","version":"1.21.3","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.21.3","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"1e33fb6e4c1d29eb994ee195d793f3f9855f076a","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.21.3.tgz","fileCount":24,"integrity":"sha512-XjZVxIOP79ScHj3T6CJNb3rDEQKk5Hix5QciKUBUqsY5YRzoOD281aaF0kb1EQQ6D3Y+k+ikNNC7tAK3I9scPA==","signatures":[{"sig":"MEQCICgTzDp0CWKUP1QXfnPGzR0LnO3ruby4NnzQgxtHWCORAiBnmQANU6EzLuTLZjZK3N35HNVbCPE0yDC7tph01NX/sg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD1ylsfQA82ADd13WBXbcQPG6d+RBTz2WxB3b+toX5BVwIgDA7NKC1GaGoXrjEk7x7Gnlp6UnAiosuLB6jhdaSUE4c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.21.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49312007},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"ce408605cbad0e098a099473511135be5cafed72","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"node scripts/verify-package.mjs","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.1","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'architecture'","group":"navigation@6","command":"graph-it-live.setViewModeArchitecture"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status","visibility":"collapsed"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(type-hierarchy)","title":"Switch to Architecture View","command":"graph-it-live.setViewModeArchitecture","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.communityMode":{"enum":["path","louvain"],"type":"string","default":"path","enumDescriptions":["Group files by their first functional folder (src/analyzer, src/webview, ...)","Group files by import structure (deterministic Louvain), named after their dominant folder"],"markdownDescription":"How the dependency graph groups files into communities (node tint and legend). **path** groups by folder; **louvain** groups files that import each other, which shows coupling that folders hide."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty or the checked-out branch uses the current branch and its final on-disk state, untracked files included."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":1000,"minimum":1,"description":"Maximum number of files analyzed by Branch Watch. Higher values improve coverage but increase analysis time and memory usage. Range: 1–1000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nBARRELS: files that import the target's exports through re-export barrels (export { x } from, export *, chained) are listed after the direct importers, with via = the barrel they import.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic, side-effect), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue, Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS edges from the indexed call graph, so it returns only symbols that call X. File-level imports and other references are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of the first call and a type-only flag, plus runtime and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path), visited symbols, and whether maxDepth was hit.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST, so no language server is needed. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"symbolId":{"type":"string","description":"Exact node id from a previous result or candidate, valid for the current index only (ids embed the line). A stale id returns reason 'stale_selector'"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"startLine":{"type":"number","description":"Declaration line of the symbol, 0-based like startLine in results and candidates (editor line 3 is 2). Selects one of several same-name symbols"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method). A bare name shared by several symbols in the file returns reason 'ambiguous' with candidates; qualified names such as 'Class.method' are not supported"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nSELECTING: two same-name methods in one file return reason=ambiguous with candidates; pass one candidate's symbolId or startLine to select it exactly. A stale selector returns reason=stale_selector (ids embed the line and change after edits); 'Class.method' names are not supported.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords (English, French, German, Spanish, Chinese or Russian questions, mapped to English identifier stems), scores seed nodes by keyword specificity and file path over the call graph index, then traverses outward from them. English identifier-like keywords in the question (\"reference compute python\") give the most precise seeds.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 24 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.22.1","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^8.0.0","react":"^19.3.1","web-tree-sitter":"^0.26.13"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","glob":"^14.0.3","ovsx":"^1.3.0","mocha":"^11.8.0","eslint":"^10.14.0","vitest":"^4.1.12","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^21.0.4","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.12","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.1.0","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.72.1","@vitest/coverage-v8":"^4.1.12","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.21.3_1793540971037_0.9611618429400319","host":"s3://npm-registry-packages-npm-production"}},"1.22.0":{"name":"@magic5644/graph-it-live","version":"1.22.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.22.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"1d7ceac73a194e1a6e59a1e05a4e7e6504cacc4d","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.22.0.tgz","fileCount":26,"integrity":"sha512-LUIDtqzfRnSCJp8Htg23gHdOXxPff+OjwOGQzRPWfpm1xQWatLFlqrP+B3vBkfr5TVXj8UYIIsKTFh33lUVjqw==","signatures":[{"sig":"MEUCIQCuDhsPmOvdSvO8QFX089JgBZHObc6fJAB8ebQaTit/LAIgCR94lKZxr/Nb4MmaAeOfuWCCyqPkLBcSNXe3iT0BFM0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCST63HThXYrzY5f+DnbznWCEG52xMK+OwMrbHZ57rXLgIgbPPro07LHJL+2E0ezVqdHmvvhuUZXIwxXS7MTO6mp/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":51863859},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"baf705f8af2856bda596fb91cbaa4a966cd4d696","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"node scripts/verify-package.mjs","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.1","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'architecture'","group":"navigation@6","command":"graph-it-live.setViewModeArchitecture"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status","visibility":"collapsed"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(type-hierarchy)","title":"Switch to Architecture View","command":"graph-it-live.setViewModeArchitecture","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.communityMode":{"enum":["path","louvain"],"type":"string","default":"path","enumDescriptions":["Group files by their first functional folder (src/analyzer, src/webview, ...)","Group files by import structure (deterministic Louvain), named after their dominant folder"],"markdownDescription":"How the dependency graph groups files into communities (node tint and legend). **path** groups by folder; **louvain** groups files that import each other, which shows coupling that folders hide."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty or the checked-out branch uses the current branch and its final on-disk state, untracked files included."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":2000,"minimum":1,"description":"Maximum number of changed files Branch Watch analyzes and of files its dependents-impact walk visits. Higher values improve coverage but increase analysis time and memory usage. Range: 1–2000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nBARRELS: files that import the target's exports through re-export barrels (export { x } from, export *, chained) are listed after the direct importers, with via = the barrel they import.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic, side-effect, mod = Rust `mod x;` declaration), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue, Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS and REFERENCES edges from the indexed call graph, so it returns the symbols that call or render X, each labelled. File-level imports are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of its first edge, relation (CALLS, REFERENCES or USES; a call wins over a reference, a reference over a type use) and a type-only flag, plus runtime, reference and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nAn item that renders or passes the symbol without calling it (<Card />, onClick={save}) is a runtime impact with relation=REFERENCES.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path, 1-based line, relation=REFERENCES for a reference that is not a call), visited symbols, and whether maxDepth was hit. A name the imported module does not export has a null resolved path.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST, so no language server is needed. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"symbolId":{"type":"string","description":"Exact node id from a previous result or candidate, valid for the current index only (ids embed the line). A stale id returns reason 'stale_selector'"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"startLine":{"type":"number","description":"Declaration line of the symbol, 0-based like startLine in results and candidates (editor line 3 is 2). Selects one of several same-name symbols"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method). A bare name shared by several symbols in the file returns reason 'ambiguous' with candidates; qualified names such as 'Class.method' are not supported"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES","REFERENCES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS), runtime references (REFERENCES) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nSELECTING: two same-name methods in one file return reason=ambiguous with candidates; pass one candidate's symbolId or startLine to select it exactly. A stale selector returns reason=stale_selector (ids embed the line and change after edits); 'Class.method' names are not supported.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed. With graphit.architecture.json, `architecture` says whether the diff degrades or improves the declared rules: new, resolved and unchanged violations per rule, unit cycles, rules-file edits; a new error violation raises the risk.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords (English, French, German, Spanish, Chinese or Russian questions, mapped to English identifier stems), scores seed nodes by keyword specificity and file path over the call graph index, then traverses outward from them. English identifier-like keywords in the question (\"reference compute python\") give the most precise seeds.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 24 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.22.2","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^8.0.0","react":"^19.3.1","web-tree-sitter":"^0.26.13"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","glob":"^14.0.3","ovsx":"^1.3.0","mocha":"^11.8.0","eslint":"^10.14.0","vitest":"^4.1.12","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^21.0.4","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.12","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.1.0","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.72.1","@vitest/coverage-v8":"^4.1.12","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.22.0_1793904500029_0.41229917502426683","host":"s3://npm-registry-packages-npm-production"}},"1.23.0":{"name":"@magic5644/graph-it-live","version":"1.23.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.23.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"95758c0a096012c558de633629089a15f18728d7","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.23.0.tgz","fileCount":26,"integrity":"sha512-vqcROaa3kq/ihcHQp9QfDu90Wm836wBSQ17k4pd+ASRqTlj9sOKu09j+DJhpkLJUN3Y+OBLg9N1nRuOsRFJ1aA==","signatures":[{"sig":"MEYCIQDBqQgCHI9BGdT95JzcUHkD2aOmskNMfKLRHLB4nVQVXwIhAMCaW+9adJlT/zUw6IjUcvnXdKKYepAUK0Gnu5K3v5wr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDA/7cZJOPqxtBTsS5gOWOD8V+MDH7xdMFbX8xp7hQDGgIgJPXd4PsbFy/4PzN9njY90vtMgfaLDgudGNTkIBnxRSE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":55093857},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"383a16826593ccf6d1c07cb8499c2c397d77a308","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"node scripts/verify-package.mjs","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.1","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'architecture'","group":"navigation@6","command":"graph-it-live.setViewModeArchitecture"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.exportArchitectureDiagram"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.copyArchitectureDiagram"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"commandPalette":[{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.exportArchitectureDiagram"},{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.copyArchitectureDiagram"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status","visibility":"collapsed"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(type-hierarchy)","title":"Switch to Architecture View","command":"graph-it-live.setViewModeArchitecture","category":"Graph-It-Live"},{"icon":"$(desktop-download)","title":"Export Architecture Diagram","command":"graph-it-live.exportArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Architecture Diagram as SVG","command":"graph-it-live.copyArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.communityMode":{"enum":["path","louvain"],"type":"string","default":"path","enumDescriptions":["Group files by their first functional folder (src/analyzer, src/webview, ...)","Group files by import structure (deterministic Louvain), named after their dominant folder"],"markdownDescription":"How the dependency graph groups files into communities (node tint and legend). **path** groups by folder; **louvain** groups files that import each other, which shows coupling that folders hide."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty or the checked-out branch uses the current branch and its final on-disk state, untracked files included."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":2000,"minimum":1,"description":"Maximum number of changed files Branch Watch analyzes and of files its dependents-impact walk visits. Higher values improve coverage but increase analysis time and memory usage. Range: 1–2000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nBARRELS: files that import the target's exports through re-export barrels (export { x } from, export *, chained) are listed after the direct importers, with via = the barrel they import.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic, side-effect, mod = Rust `mod x;` declaration), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue, Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS and REFERENCES edges from the indexed call graph, so it returns the symbols that call or render X, each labelled. File-level imports are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of its first edge, relation (CALLS, REFERENCES or USES; a call wins over a reference, a reference over a type use) and a type-only flag, plus runtime, reference and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nAn item that renders or passes the symbol without calling it (<Card />, onClick={save}) is a runtime impact with relation=REFERENCES.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path, 1-based line, relation=REFERENCES for a reference that is not a call), visited symbols, and whether maxDepth was hit. A name the imported module does not export has a null resolved path.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST, so no language server is needed. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"symbolId":{"type":"string","description":"Exact node id from a previous result or candidate, valid for the current index only (ids embed the line). A stale id returns reason 'stale_selector'"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"startLine":{"type":"number","description":"Declaration line of the symbol, 0-based like startLine in results and candidates (editor line 3 is 2). Selects one of several same-name symbols"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method). A bare name shared by several symbols in the file returns reason 'ambiguous' with candidates; qualified names such as 'Class.method' are not supported"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES","REFERENCES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS), runtime references (REFERENCES) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nSELECTING: two same-name methods in one file return reason=ambiguous with candidates; pass one candidate's symbolId or startLine to select it exactly. A stale selector returns reason=stale_selector (ids embed the line and change after edits); 'Class.method' names are not supported.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed. With graphit.architecture.json, `architecture` says whether the diff degrades or improves the declared rules: new, resolved and unchanged violations per rule, unit cycles, rules-file edits; a new error violation raises the risk.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords (English, French, German, Spanish, Chinese or Russian questions, mapped to English identifier stems), scores seed nodes by keyword specificity and file path over the call graph index, then traverses outward from them. English identifier-like keywords in the question (\"reference compute python\") give the most precise seeds.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_export_architecture_diagram","tags":["graph-it-live","architecture","diagram"],"displayName":"Graph-It-Live: Export Architecture Diagram","inputSchema":{"type":"object","properties":{"view":{"enum":["units","folder","matrix"],"type":"string","description":"Optional: units (default) draws every unit; folder the groups of the unit or folder named by folder (default when folder is set); matrix the dependency structure matrix of that level"},"rules":{"type":"boolean","description":"Optional: draw the violations of graphit.architecture.json in the error colour"},"theme":{"enum":["light","dark"],"type":"string","description":"Optional SVG colours (default light); svg only"},"config":{"type":"string","description":"Optional rules file with rules, relative to the workspace (default graphit.architecture.json)"},"folder":{"type":"string","description":"Optional unit or folder key, /-separated, for example src/analyzer"},"output":{"type":"string","description":"Optional file to write, relative to the workspace; without it a diagram over the inline cap goes to architecture.<diagramFormat> (architecture.diagram-spec.json for a spec)"},"baseline":{"type":"string","description":"Optional accepted violations file with rules, relative to the workspace (default graphit.architecture.baseline.json when it exists)"},"diagramFormat":{"enum":["svg","html","diagram-spec"],"type":"string","description":"Optional: svg (default), html (one self-contained page following the reader light or dark scheme) or diagram-spec (the level's data as JSON for a diagram skill)"}}},"userDescription":"Draw a static architecture diagram of the workspace as SVG or self-contained HTML","modelDescription":"Draws a static architecture diagram of the workspace (units, one unit or folder's groups, or their dependency matrix) as SVG or self-contained HTML, or returns its data as a diagram spec.\n\nWHEN: \"draw the architecture\", \"give me a diagram for the README / the PR / the design doc\", or to share as a picture the structure that graph-it architecture reports as data. For a polished or branded diagram drawn by a diagram skill, use diagramFormat 'diagram-spec' and draw only the nodes and edges it lists.\nWHY: the same diagram as graph-it diagram and the VS Code Architecture view: layers top to bottom (layer 0 at the bottom), cycle members in one block, stroke widths by file-pair count; with rules, the violations of graphit.architecture.json in the error colour and the baseline's accepted ones dashed. Deterministic: one index revision gives one geometry, with no network and no absolute path in the output.\nRETURNS: format, counts (one line, e.g. '7 units · 3 layers · 1 cycle · 0 violations', covering the whole level), and either markup (the SVG or HTML, inline up to 60,000 characters) or path (workspace-relative file written, when output is set or the diagram is over the cap; default architecture.<diagramFormat>, architecture.diagram-spec.json for a spec) with its size in characters. A diagram-spec is JSON (schemas/diagram-spec.schema.json): every node with label, layer, file count and role, layers, weighted edges with kind and broken rules, cycles, violations and the caption lines.\nLIMITS: import relations only (static analysis); at most 60 nodes drawn (a spec lists them all), the largest kept and a note counting the others, so draw one folder at a time on large levels; output must stay inside the workspace and an existing file there is replaced; analyses every source file on each call.","toolReferenceName":"graphArchitectureDiagram","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 25 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.22.2","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^8.0.0","react":"^19.3.1","web-tree-sitter":"^0.26.13"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","glob":"^14.0.3","ovsx":"^1.3.0","mocha":"^11.8.0","eslint":"^10.14.0","vitest":"^4.1.12","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^21.0.4","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.12","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.1.0","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.72.1","@vitest/coverage-v8":"^4.1.12","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.23.0_1793977645415_0.9658424276821478","host":"s3://npm-registry-packages-npm-production"}},"1.23.1":{"name":"@magic5644/graph-it-live","version":"1.23.1","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.23.1","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"f3267b939697039bb0c6bea8e473cbcfad0553ae","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.23.1.tgz","fileCount":26,"integrity":"sha512-brUgj6Fx5//MduUxgfVJoFl+KaPqUQm1ScWP33MsGIGKKBCKLzslu1y8FRHHA64vYmbuXpHnFfma0wbruATIrA==","signatures":[{"sig":"MEUCIQDKwwULq50yBdsrTMJs46QUSCJzSS1+ShbY1kVrLhgqzAIgf7eHxowrscoAyhDj6e8eKp4fQB4Y9mqHbVWSed8HylQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAS1YITsJYxVaoD4WfsyPNUyUKpcNhEBgzMegU/8AJOzAiEA2MJHXdgfgSt4jKYhyTLEg5SiX6c67HEULKn8S9zSrSs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.23.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":55099102},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"9b84ae2a6efd872d6c2fccff17002c29f74de491","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"node scripts/verify-package.mjs","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.1","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'architecture'","group":"navigation@6","command":"graph-it-live.setViewModeArchitecture"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.exportArchitectureDiagram"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.copyArchitectureDiagram"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"commandPalette":[{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.exportArchitectureDiagram"},{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.copyArchitectureDiagram"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status","visibility":"collapsed"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(type-hierarchy)","title":"Switch to Architecture View","command":"graph-it-live.setViewModeArchitecture","category":"Graph-It-Live"},{"icon":"$(desktop-download)","title":"Export Architecture Diagram","command":"graph-it-live.exportArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Architecture Diagram as SVG","command":"graph-it-live.copyArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.communityMode":{"enum":["path","louvain"],"type":"string","default":"path","enumDescriptions":["Group files by their first functional folder (src/analyzer, src/webview, ...)","Group files by import structure (deterministic Louvain), named after their dominant folder"],"markdownDescription":"How the dependency graph groups files into communities (node tint and legend). **path** groups by folder; **louvain** groups files that import each other, which shows coupling that folders hide."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty or the checked-out branch uses the current branch and its final on-disk state, untracked files included."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":2000,"minimum":1,"description":"Maximum number of changed files Branch Watch analyzes and of files its dependents-impact walk visits. Higher values improve coverage but increase analysis time and memory usage. Range: 1–2000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nBARRELS: files that import the target's exports through re-export barrels (export { x } from, export *, chained) are listed after the direct importers, with via = the barrel they import.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic, side-effect, mod = Rust `mod x;` declaration), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue, Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS and REFERENCES edges from the indexed call graph, so it returns the symbols that call or render X, each labelled. File-level imports are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of its first edge, relation (CALLS, REFERENCES or USES; a call wins over a reference, a reference over a type use) and a type-only flag, plus runtime, reference and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nAn item that renders or passes the symbol without calling it (<Card />, onClick={save}) is a runtime impact with relation=REFERENCES.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path, 1-based line, relation=REFERENCES for a reference that is not a call), visited symbols, and whether maxDepth was hit. A name the imported module does not export has a null resolved path.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST, so no language server is needed. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"symbolId":{"type":"string","description":"Exact node id from a previous result or candidate, valid for the current index only (ids embed the line). A stale id returns reason 'stale_selector'"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"startLine":{"type":"number","description":"Declaration line of the symbol, 0-based like startLine in results and candidates (editor line 3 is 2). Selects one of several same-name symbols"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method). A bare name shared by several symbols in the file returns reason 'ambiguous' with candidates; qualified names such as 'Class.method' are not supported"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES","REFERENCES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS), runtime references (REFERENCES) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nSELECTING: two same-name methods in one file return reason=ambiguous with candidates; pass one candidate's symbolId or startLine to select it exactly. A stale selector returns reason=stale_selector (ids embed the line and change after edits); 'Class.method' names are not supported.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed. With graphit.architecture.json, `architecture` says whether the diff degrades or improves the declared rules: new, resolved and unchanged violations per rule, unit cycles, rules-file edits; a new error violation raises the risk.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords (English, French, German, Spanish, Chinese or Russian questions, mapped to English identifier stems), scores seed nodes by keyword specificity and file path over the call graph index, then traverses outward from them. English identifier-like keywords in the question (\"reference compute python\") give the most precise seeds.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_export_architecture_diagram","tags":["graph-it-live","architecture","diagram"],"displayName":"Graph-It-Live: Export Architecture Diagram","inputSchema":{"type":"object","properties":{"view":{"enum":["units","folder","matrix"],"type":"string","description":"Optional: units (default) draws every unit; folder the groups of the unit or folder named by folder (default when folder is set); matrix the dependency structure matrix of that level"},"rules":{"type":"boolean","description":"Optional: draw the violations of graphit.architecture.json in the error colour"},"theme":{"enum":["light","dark"],"type":"string","description":"Optional SVG colours (default light); svg only"},"config":{"type":"string","description":"Optional rules file with rules, relative to the workspace (default graphit.architecture.json)"},"folder":{"type":"string","description":"Optional unit or folder key, /-separated, for example src/analyzer"},"output":{"type":"string","description":"Optional file to write, relative to the workspace; without it a diagram over the inline cap goes to architecture.<diagramFormat> (architecture.diagram-spec.json for a spec)"},"baseline":{"type":"string","description":"Optional accepted violations file with rules, relative to the workspace (default graphit.architecture.baseline.json when it exists)"},"diagramFormat":{"enum":["svg","html","diagram-spec"],"type":"string","description":"Optional: svg (default), html (one self-contained page following the reader light or dark scheme) or diagram-spec (the level's data as JSON for a diagram skill)"}}},"userDescription":"Draw a static architecture diagram of the workspace as SVG or self-contained HTML","modelDescription":"Draws a static architecture diagram of the workspace (units, one unit or folder's groups, or their dependency matrix) as SVG or self-contained HTML, or returns its data as a diagram spec.\n\nWHEN: \"draw the architecture\", \"give me a diagram for the README / the PR / the design doc\", or to share as a picture the structure that graph-it architecture reports as data. For a polished or branded diagram drawn by a diagram skill, use diagramFormat 'diagram-spec' and draw only the nodes and edges it lists.\nWHY: the same diagram as graph-it diagram and the VS Code Architecture view: layers top to bottom (layer 0 at the bottom), cycle members in one block, stroke widths by file-pair count; with rules, the violations of graphit.architecture.json in the error colour and the baseline's accepted ones dashed. Deterministic: one index revision gives one geometry, with no network and no absolute path in the output.\nRETURNS: format, counts (one line, e.g. '7 units · 3 layers · 1 cycle · 0 violations', covering the whole level), and either markup (the SVG or HTML, inline up to 60,000 characters) or path (workspace-relative file written, when output is set or the diagram is over the cap; default architecture.<diagramFormat>, architecture.diagram-spec.json for a spec) with its size in characters. A diagram-spec is JSON (schemas/diagram-spec.schema.json): every node with label, layer, file count and role, layers, weighted edges with kind and broken rules, cycles, violations and the caption lines.\nLIMITS: import relations only (static analysis); at most 60 nodes drawn (a spec lists them all), the largest kept and a note counting the others, so draw one folder at a time on large levels; output must stay inside the workspace and an existing file there is replaced; analyses every source file on each call.","toolReferenceName":"graphArchitectureDiagram","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 25 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.22.2","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^8.0.0","react":"^19.3.1","web-tree-sitter":"^0.26.13"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","glob":"^14.0.3","ovsx":"^1.3.0","mocha":"^11.8.0","eslint":"^10.14.0","vitest":"^4.1.12","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^21.0.4","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.12","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.1.0","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.72.1","@vitest/coverage-v8":"^4.1.12","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.23.1_1794005020671_0.24609570692653326","host":"s3://npm-registry-packages-npm-production"}},"1.24.0":{"name":"@magic5644/graph-it-live","version":"1.24.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.24.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"02d609e05f5cb803f37936d78e033a956989538c","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.24.0.tgz","fileCount":26,"integrity":"sha512-w8F8bSrKmlBQyMgvlndnrVyXhTyBt5OEb+IFeEkehniZ0HOmGKoXrhygpS/AOAGcsh2pophKIiNTo66eNIi3kg==","signatures":[{"sig":"MEUCIQD0dNoZPcJjXzJxbftgTeDFTZcLI0v/xguJMzc9V1r4TAIgKavRq1xNUyqNE3CxoDOBsnQXpC31aGWRZkW9SgndABs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIC6NLZCqIoj1nBuGOyE1nsr9evRMWVNoo8VpAygAnYMeAiEAkY5/KxY57vbMi1UK6O3fTg24MaswGluV29a4SLsspFw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":57677258},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"d48e68ddfdfb527085d4f408ea9c4193b298780c","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"node scripts/verify-package.mjs","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.1","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'architecture'","group":"navigation@6","command":"graph-it-live.setViewModeArchitecture"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.exportArchitectureDiagram"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.copyArchitectureDiagram"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"commandPalette":[{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.exportArchitectureDiagram"},{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.copyArchitectureDiagram"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status","visibility":"collapsed"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(type-hierarchy)","title":"Switch to Architecture View","command":"graph-it-live.setViewModeArchitecture","category":"Graph-It-Live"},{"icon":"$(desktop-download)","title":"Export Architecture Diagram","command":"graph-it-live.exportArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Architecture Diagram as SVG","command":"graph-it-live.copyArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.communityMode":{"enum":["path","louvain"],"type":"string","default":"path","enumDescriptions":["Group files by their first functional folder (src/analyzer, src/webview, ...)","Group files by import structure (deterministic Louvain), named after their dominant folder"],"markdownDescription":"How the dependency graph groups files into communities (node tint and legend). **path** groups by folder; **louvain** groups files that import each other, which shows coupling that folders hide."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty or the checked-out branch uses the current branch and its final on-disk state, untracked files included."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":2000,"minimum":1,"description":"Maximum number of changed files Branch Watch analyzes and of files its dependents-impact walk visits. Higher values improve coverage but increase analysis time and memory usage. Range: 1–2000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"format":{"enum":["toon","json"],"type":"string"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nBARRELS: files that import the target's exports through re-export barrels (export { x } from, export *, chained) are listed after the direct importers, with via = the barrel they import.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic, side-effect, mod = Rust `mod x;` declaration), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue 3 (<script src> and <template src> are dependencies), Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS and REFERENCES edges from the indexed call graph, so it returns the symbols that call or render X, each labelled. File-level imports are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of its first edge, relation (CALLS, REFERENCES or USES; a call wins over a reference, a reference over a type use) and a type-only flag, plus runtime, reference and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nAn item that renders or passes the symbol without calling it (<Card />, onClick={save}) is a runtime impact with relation=REFERENCES.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue 3, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path, 1-based line, relation=REFERENCES for a reference that is not a call), visited symbols, and whether maxDepth was hit. A name the imported module does not export has a null resolved path.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed. VUE: a Vue 3 .vue file has a component node named after the file at its <template>; a template <Child />, handler (@click=save) or interpolation is a REFERENCES edge from it and save() a CALLS edge, also from an HTML <template src> of the workspace. Global, auto-imported and dynamic :is components stay unresolved.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST, so no language server is needed. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"symbolId":{"type":"string","description":"Exact node id from a previous result or candidate, valid for the current index only (ids embed the line). A stale id returns reason 'stale_selector'"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"startLine":{"type":"number","description":"Declaration line of the symbol, 0-based like startLine in results and candidates (editor line 3 is 2). Selects one of several same-name symbols"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method). A bare name shared by several symbols in the file returns reason 'ambiguous' with candidates; qualified names such as 'Class.method' are not supported"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES","REFERENCES"],"type":"string"},"description":"Filter by relation types (default: all types included)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS), runtime references (REFERENCES) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed. VUE: a Vue 3 .vue file has a component node named after the file at its <template>; a template <Child />, handler (@click=save) or interpolation is a REFERENCES edge from it and save() a CALLS edge, also from an HTML <template src> of the workspace. Global, auto-imported and dynamic :is components stay unresolved.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nSELECTING: two same-name methods in one file return reason=ambiguous with candidates; pass one candidate's symbolId or startLine to select it exactly. A stale selector returns reason=stale_selector (ids embed the line and change after edits); 'Class.method' names are not supported.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed. With graphit.architecture.json, `architecture` says whether the diff degrades or improves the declared rules: new, resolved and unchanged violations per rule, unit cycles, rules-file edits; a new error violation raises the risk. A changed .vue lists the props and events it adds or removes by name (no type check), a contract typed by an imported type or built at runtime as partial.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords (English, French, German, Spanish, Chinese or Russian questions, mapped to English identifier stems), scores seed nodes by keyword specificity and file path over the call graph index, then traverses outward from them. English identifier-like keywords in the question (\"reference compute python\") give the most precise seeds.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_export_architecture_diagram","tags":["graph-it-live","architecture","diagram"],"displayName":"Graph-It-Live: Export Architecture Diagram","inputSchema":{"type":"object","properties":{"view":{"enum":["units","folder","matrix"],"type":"string","description":"Optional: units (default) draws every unit; folder the groups of the unit or folder named by folder (default when folder is set); matrix the dependency structure matrix of that level"},"rules":{"type":"boolean","description":"Optional: draw the violations of graphit.architecture.json in the error colour"},"theme":{"enum":["light","dark"],"type":"string","description":"Optional SVG colours (default light); svg only"},"config":{"type":"string","description":"Optional rules file with rules, relative to the workspace (default graphit.architecture.json)"},"folder":{"type":"string","description":"Optional unit or folder key, /-separated, for example src/analyzer"},"output":{"type":"string","description":"Optional file to write, relative to the workspace; without it a diagram over the inline cap goes to architecture.<diagramFormat> (architecture.diagram-spec.json for a spec)"},"baseline":{"type":"string","description":"Optional accepted violations file with rules, relative to the workspace (default graphit.architecture.baseline.json when it exists)"},"diagramFormat":{"enum":["svg","html","diagram-spec"],"type":"string","description":"Optional: svg (default), html (one self-contained page following the reader light or dark scheme) or diagram-spec (the level's data as JSON for a diagram skill)"}}},"userDescription":"Draw a static architecture diagram of the workspace as SVG or self-contained HTML","modelDescription":"Draws a static architecture diagram of the workspace (units, one unit or folder's groups, or their dependency matrix) as SVG or self-contained HTML, or returns its data as a diagram spec.\n\nWHEN: \"draw the architecture\", \"give me a diagram for the README / the PR / the design doc\", or to share as a picture the structure that graph-it architecture reports as data. For a polished or branded diagram drawn by a diagram skill, use diagramFormat 'diagram-spec' and draw only the nodes and edges it lists.\nWHY: the same diagram as graph-it diagram and the VS Code Architecture view: layers top to bottom (layer 0 at the bottom), cycle members in one block, stroke widths by file-pair count; with rules, the violations of graphit.architecture.json in the error colour and the baseline's accepted ones dashed. Deterministic: one index revision gives one geometry, with no network and no absolute path in the output.\nRETURNS: format, counts (one line, e.g. '7 units · 3 layers · 1 cycle · 0 violations', covering the whole level), and either markup (the SVG or HTML, inline up to 60,000 characters) or path (workspace-relative file written, when output is set or the diagram is over the cap; default architecture.<diagramFormat>, architecture.diagram-spec.json for a spec) with its size in characters. A diagram-spec is JSON (schemas/diagram-spec.schema.json): every node with label, layer, file count and role, layers, weighted edges with kind and broken rules, cycles, violations and the caption lines.\nLIMITS: import relations only (static analysis); at most 60 nodes drawn (a spec lists them all), the largest kept and a note counting the others, so draw one folder at a time on large levels; output must stay inside the workspace and an existing file there is replaced; analyses every source file on each call.","toolReferenceName":"graphArchitectureDiagram","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 25 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.22.2","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^8.0.0","react":"^19.3.1","web-tree-sitter":"^0.26.13"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","glob":"^14.0.3","ovsx":"^1.3.0","mocha":"^11.8.0","eslint":"^10.14.0","vitest":"^4.1.12","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^21.0.4","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.12","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.1.0","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.72.1","@vitest/coverage-v8":"^4.1.12","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.24.0_1794159611055_0.6590597803002974","host":"s3://npm-registry-packages-npm-production"}},"1.24.1":{"name":"@magic5644/graph-it-live","version":"1.24.1","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.24.1","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"b540f731bad61f31f9122b6c216f890c9cb4c1e6","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.24.1.tgz","fileCount":26,"integrity":"sha512-JLdLX+aprcztiCnF0+m4c13NdYMwAh/PAxUDUiCgFQHrJMl9CcbUa5uo44OF6ltxF+wuVwFLcK5jh3DC4Zz/fw==","signatures":[{"sig":"MEYCIQDilMW+5Jwkk4/UgLOd62Nkpi0t78F4PwCUCu+B15mwtwIhAI59WbjL7Rspw5j6Sna4PrO9gt7GLryFR9y72GQHGmp/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDzow0iCpx5dH5Nx3HLBjWa2P1AWiJWooKNPKXxCML7zAiEAgbJaPML6Y2sYkLT7LjDVuNo82/B1UkkKED4bKpHHb+I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.24.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":57695388},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"64a3e3d8bf6380ec7a44050a50878aea2b16f470","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"node scripts/verify-package.mjs","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.1","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'architecture'","group":"navigation@6","command":"graph-it-live.setViewModeArchitecture"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.exportArchitectureDiagram"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.copyArchitectureDiagram"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"commandPalette":[{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.exportArchitectureDiagram"},{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.copyArchitectureDiagram"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status","visibility":"collapsed"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(type-hierarchy)","title":"Switch to Architecture View","command":"graph-it-live.setViewModeArchitecture","category":"Graph-It-Live"},{"icon":"$(desktop-download)","title":"Export Architecture Diagram","command":"graph-it-live.exportArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Architecture Diagram as SVG","command":"graph-it-live.copyArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.communityMode":{"enum":["path","louvain"],"type":"string","default":"path","enumDescriptions":["Group files by their first functional folder (src/analyzer, src/webview, ...)","Group files by import structure (deterministic Louvain), named after their dominant folder"],"markdownDescription":"How the dependency graph groups files into communities (node tint and legend). **path** groups by folder; **louvain** groups files that import each other, which shows coupling that folders hide."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty or the checked-out branch uses the current branch and its final on-disk state, untracked files included."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":2000,"minimum":1,"description":"Maximum number of changed files Branch Watch analyzes and of files its dependents-impact walk visits. Higher values improve coverage but increase analysis time and memory usage. Range: 1–2000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nBARRELS: files that import the target's exports through re-export barrels (export { x } from, export *, chained) are listed after the direct importers, with via = the barrel they import.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic, side-effect, mod = Rust `mod x;` declaration), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue 3 (<script src> and <template src> are dependencies), Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS and REFERENCES edges from the indexed call graph, so it returns the symbols that call or render X, each labelled. File-level imports are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of its first edge, relation (CALLS, REFERENCES or USES; a call wins over a reference, a reference over a type use) and a type-only flag, plus runtime, reference and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nAn item that renders or passes the symbol without calling it (<Card />, onClick={save}) is a runtime impact with relation=REFERENCES.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue 3, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path, 1-based line, relation=REFERENCES for a reference that is not a call), visited symbols, and whether maxDepth was hit. A name the imported module does not export has a null resolved path.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed. VUE: a Vue 3 .vue file has a component node named after the file at its <template>; a template <Child />, handler (@click=save) or interpolation is a REFERENCES edge from it and save() a CALLS edge, also from an HTML <template src> of the workspace. Global, auto-imported and dynamic :is components stay unresolved.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST, so no language server is needed. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"symbolId":{"type":"string","description":"Exact node id from a previous result or candidate, valid for the current index only (ids embed the line). A stale id returns reason 'stale_selector'"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"startLine":{"type":"number","description":"Declaration line of the symbol, 0-based like startLine in results and candidates (editor line 3 is 2). Selects one of several same-name symbols"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method). A bare name shared by several symbols in the file returns reason 'ambiguous' with candidates; qualified names such as 'Class.method' are not supported"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES","REFERENCES"],"type":"string"},"description":"Filter by relation types (default: all types included)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS), runtime references (REFERENCES) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed. VUE: a Vue 3 .vue file has a component node named after the file at its <template>; a template <Child />, handler (@click=save) or interpolation is a REFERENCES edge from it and save() a CALLS edge, also from an HTML <template src> of the workspace. Global, auto-imported and dynamic :is components stay unresolved.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nSELECTING: two same-name methods in one file return reason=ambiguous with candidates; pass one candidate's symbolId or startLine to select it exactly. A stale selector returns reason=stale_selector (ids embed the line and change after edits); 'Class.method' names are not supported.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional maximum number of files to process (defaults to no limit)"},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (1-1000, default 200)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed. With graphit.architecture.json, `architecture` says whether the diff degrades or improves the declared rules: new, resolved and unchanged violations per rule, unit cycles, rules-file edits; a new error violation raises the risk. A changed .vue lists the props and events it adds or removes by name (no type check), a contract typed by an imported type or built at runtime as partial.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords (English, French, German, Spanish, Chinese or Russian questions, mapped to English identifier stems), scores seed nodes by keyword specificity and file path over the call graph index, then traverses outward from them. English identifier-like keywords in the question (\"reference compute python\") give the most precise seeds.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_export_architecture_diagram","tags":["graph-it-live","architecture","diagram"],"displayName":"Graph-It-Live: Export Architecture Diagram","inputSchema":{"type":"object","properties":{"view":{"enum":["units","folder","matrix"],"type":"string","description":"Optional: units (default) draws every unit; folder the groups of the unit or folder named by folder (default when folder is set); matrix the dependency structure matrix of that level"},"rules":{"type":"boolean","description":"Optional: draw the violations of graphit.architecture.json in the error colour"},"theme":{"enum":["light","dark"],"type":"string","description":"Optional SVG colours (default light); svg only"},"config":{"type":"string","description":"Optional rules file with rules, relative to the workspace (default graphit.architecture.json)"},"folder":{"type":"string","description":"Optional unit or folder key, /-separated, for example src/analyzer"},"output":{"type":"string","description":"Optional file to write, relative to the workspace; without it a diagram over the inline cap goes to architecture.<diagramFormat> (architecture.diagram-spec.json for a spec)"},"baseline":{"type":"string","description":"Optional accepted violations file with rules, relative to the workspace (default graphit.architecture.baseline.json when it exists)"},"diagramFormat":{"enum":["svg","html","diagram-spec"],"type":"string","description":"Optional: svg (default), html (one self-contained page following the reader light or dark scheme) or diagram-spec (the level's data as JSON for a diagram skill)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Draw a static architecture diagram of the workspace as SVG or self-contained HTML","modelDescription":"Draws a static architecture diagram of the workspace (units, one unit or folder's groups, or their dependency matrix) as SVG or self-contained HTML, or returns its data as a diagram spec.\n\nWHEN: \"draw the architecture\", \"give me a diagram for the README / the PR / the design doc\", or to share as a picture the structure that graph-it architecture reports as data. For a polished or branded diagram drawn by a diagram skill, use diagramFormat 'diagram-spec' and draw only the nodes and edges it lists.\nWHY: the same diagram as graph-it diagram and the VS Code Architecture view: layers top to bottom (layer 0 at the bottom), cycle members in one block, stroke widths by file-pair count; with rules, the violations of graphit.architecture.json in the error colour and the baseline's accepted ones dashed. Deterministic: one index revision gives one geometry, with no network and no absolute path in the output.\nRETURNS: format, counts (one line, e.g. '7 units · 3 layers · 1 cycle · 0 violations', covering the whole level), and either markup (the SVG or HTML, inline up to 60,000 characters) or path (workspace-relative file written, when output is set or the diagram is over the cap; default architecture.<diagramFormat>, architecture.diagram-spec.json for a spec) with its size in characters. A diagram-spec is JSON (schemas/diagram-spec.schema.json): every node with label, layer, file count and role, layers, weighted edges with kind and broken rules, cycles, violations and the caption lines.\nLIMITS: import relations only (static analysis); at most 60 nodes drawn (a spec lists them all), the largest kept and a note counting the others, so draw one folder at a time on large levels; output must stay inside the workspace and an existing file there is replaced; analyses every source file on each call.","toolReferenceName":"graphArchitectureDiagram","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 25 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.22.2","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^8.0.0","react":"^19.3.1","web-tree-sitter":"^0.26.13"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","glob":"^14.0.3","ovsx":"^1.3.0","mocha":"^11.8.0","eslint":"^10.14.0","vitest":"^4.1.12","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^21.0.4","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.12","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.1.0","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.72.1","@vitest/coverage-v8":"^4.1.12","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.24.1_1794215882843_0.0011097893084184296","host":"s3://npm-registry-packages-npm-production"}},"1.24.2":{"name":"@magic5644/graph-it-live","version":"1.24.2","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.24.2","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"1fae1425669c42ac04b29be492ed031bcaa8a17c","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.24.2.tgz","fileCount":26,"integrity":"sha512-m+IxenLoweZkyZTKQHhTqm76pLuA8avExgaQVSxPlFpgypdbszz2VnXp88Jq7BpE4VQ9Q9JMCDHa7hbgLAFPXQ==","signatures":[{"sig":"MEQCIEagIFZH5Yw8cSXRxGoevodtrJkLwE/pdEQc/YKmR1rAAiBHp/GZ5YTTsVsESLIJ7WnH2lNTUCZiAa2V5Q6rmS7swQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBfcFnece/kvV60owd/KU1lOc6FulPUcKNg+UBbihjt9AiALABKN+W3txEORENQ7cdWQ0+vj+UtoF1Mm+AB8ANrgCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.24.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":57699131},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.96.0"},"gitHead":"069917ca71374408d910716f947db57e832ff543","scripts":{"lint":"eslint src","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"node scripts/verify-package.mjs","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.1","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'architecture'","group":"navigation@6","command":"graph-it-live.setViewModeArchitecture"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.exportArchitectureDiagram"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.copyArchitectureDiagram"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"commandPalette":[{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.exportArchitectureDiagram"},{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.copyArchitectureDiagram"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status","visibility":"collapsed"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(type-hierarchy)","title":"Switch to Architecture View","command":"graph-it-live.setViewModeArchitecture","category":"Graph-It-Live"},{"icon":"$(desktop-download)","title":"Export Architecture Diagram","command":"graph-it-live.exportArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Architecture Diagram as SVG","command":"graph-it-live.copyArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.communityMode":{"enum":["path","louvain"],"type":"string","default":"path","enumDescriptions":["Group files by their first functional folder (src/analyzer, src/webview, ...)","Group files by import structure (deterministic Louvain), named after their dominant folder"],"markdownDescription":"How the dependency graph groups files into communities (node tint and legend). **path** groups by folder; **louvain** groups files that import each other, which shows coupling that folders hide."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty or the checked-out branch uses the current branch and its final on-disk state, untracked files included."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":2000,"minimum":1,"description":"Maximum number of changed files Branch Watch analyzes and of files its dependents-impact walk visits. Higher values improve coverage but increase analysis time and memory usage. Range: 1–2000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nBARRELS: files that import the target's exports through re-export barrels (export { x } from, export *, chained) are listed after the direct importers, with via = the barrel they import.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic, side-effect, mod = Rust `mod x;` declaration), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue 3 (<script src> and <template src> are dependencies), Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category), unused and total counts, unused percentage.\nLIMITS: an export reached only through a dynamic or string-keyed lookup can still be reported as unused; confirm before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS and REFERENCES edges from the indexed call graph, so it returns the symbols that call or render X, each labelled. File-level imports are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of its first edge, relation (CALLS, REFERENCES or USES; a call wins over a reference, a reference over a type use) and a type-only flag, plus runtime, reference and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nAn item that renders or passes the symbol without calling it (<Card />, onClick={save}) is a runtime impact with relation=REFERENCES.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue 3, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path, 1-based line, relation=REFERENCES for a reference that is not a call), visited symbols, and whether maxDepth was hit. A name the imported module does not export has a null resolved path.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed. VUE: a Vue 3 .vue file has a component node named after the file at its <template>; a template <Child />, handler (@click=save) or interpolation is a REFERENCES edge from it and save() a CALLS edge, also from an HTML <template src> of the workspace. Global, auto-imported and dynamic :is components stay unresolved.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST, so no language server is needed. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"symbolId":{"type":"string","description":"Exact node id from a previous result or candidate, valid for the current index only (ids embed the line). A stale id returns reason 'stale_selector'"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"startLine":{"type":"number","description":"Declaration line of the symbol, 0-based like startLine in results and candidates (editor line 3 is 2). Selects one of several same-name symbols"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method). A bare name shared by several symbols in the file returns reason 'ambiguous' with candidates; qualified names such as 'Class.method' are not supported"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES","REFERENCES"],"type":"string"},"description":"Filter by relation types (default: all types included)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS), runtime references (REFERENCES) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed. VUE: a Vue 3 .vue file has a component node named after the file at its <template>; a template <Child />, handler (@click=save) or interpolation is a REFERENCES edge from it and save() a CALLS edge, also from an HTML <template src> of the workspace. Global, auto-imported and dynamic :is components stay unresolved.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nSELECTING: two same-name methods in one file return reason=ambiguous with candidates; pass one candidate's symbolId or startLine to select it exactly. A stale selector returns reason=stale_selector (ids embed the line and change after edits); 'Class.method' names are not supported.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional cap on analysed files (default: every analysable file in scope, no upper bound). When the cap stops the scan, truncated=true and filesBeyondLimit > 0: the result is partial."},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan. Without maxFiles every analysable file in scope is scanned (no upper bound). truncated=true means a partial result: report it as partial, never as the whole workspace.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; duration grows with file count (about 90 s for 12,000 files); an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (default 200, no upper bound)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed. With graphit.architecture.json, `architecture` says whether the diff degrades or improves the declared rules: new, resolved and unchanged violations per rule, unit cycles, rules-file edits; a new error violation raises the risk. A changed .vue lists the props and events it adds or removes by name (no type check), a contract typed by an imported type or built at runtime as partial.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs; maxFiles caps changed files (default 200, no upper bound), time and memory grow with it.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords (English, French, German, Spanish, Chinese or Russian questions, mapped to English identifier stems), scores seed nodes by keyword specificity and file path over the call graph index, then traverses outward from them. English identifier-like keywords in the question (\"reference compute python\") give the most precise seeds.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_export_architecture_diagram","tags":["graph-it-live","architecture","diagram"],"displayName":"Graph-It-Live: Export Architecture Diagram","inputSchema":{"type":"object","properties":{"view":{"enum":["units","folder","matrix"],"type":"string","description":"Optional: units (default) draws every unit; folder the groups of the unit or folder named by folder (default when folder is set); matrix the dependency structure matrix of that level"},"rules":{"type":"boolean","description":"Optional: draw the violations of graphit.architecture.json in the error colour"},"theme":{"enum":["light","dark"],"type":"string","description":"Optional SVG colours (default light); svg only"},"config":{"type":"string","description":"Optional rules file with rules, relative to the workspace (default graphit.architecture.json)"},"folder":{"type":"string","description":"Optional unit or folder key, /-separated, for example src/analyzer"},"output":{"type":"string","description":"Optional file to write, relative to the workspace; without it a diagram over the inline cap goes to architecture.<diagramFormat> (architecture.diagram-spec.json for a spec)"},"baseline":{"type":"string","description":"Optional accepted violations file with rules, relative to the workspace (default graphit.architecture.baseline.json when it exists)"},"diagramFormat":{"enum":["svg","html","diagram-spec"],"type":"string","description":"Optional: svg (default), html (one self-contained page following the reader light or dark scheme) or diagram-spec (the level's data as JSON for a diagram skill)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Draw a static architecture diagram of the workspace as SVG or self-contained HTML","modelDescription":"Draws a static architecture diagram of the workspace (units, one unit or folder's groups, or their dependency matrix) as SVG or self-contained HTML, or returns its data as a diagram spec.\n\nWHEN: \"draw the architecture\", \"give me a diagram for the README / the PR / the design doc\", or to share as a picture the structure that graph-it architecture reports as data. For a polished or branded diagram drawn by a diagram skill, use diagramFormat 'diagram-spec' and draw only the nodes and edges it lists.\nWHY: the same diagram as graph-it diagram and the VS Code Architecture view: layers top to bottom (layer 0 at the bottom), cycle members in one block, stroke widths by file-pair count; with rules, the violations of graphit.architecture.json in the error colour and the baseline's accepted ones dashed. Deterministic: one index revision gives one geometry, with no network and no absolute path in the output.\nRETURNS: format, counts (one line, e.g. '7 units · 3 layers · 1 cycle · 0 violations', covering the whole level), and either markup (the SVG or HTML, inline up to 60,000 characters) or path (workspace-relative file written, when output is set or the diagram is over the cap; default architecture.<diagramFormat>, architecture.diagram-spec.json for a spec) with its size in characters. A diagram-spec is JSON (schemas/diagram-spec.schema.json): every node with label, layer, file count and role, layers, weighted edges with kind and broken rules, cycles, violations and the caption lines.\nLIMITS: import relations only (static analysis); at most 60 nodes drawn (a spec lists them all), the largest kept and a note counting the others, so draw one folder at a time on large levels; output must stay inside the workspace and an existing file there is replaced; analyses every source file on each call.","toolReferenceName":"graphArchitectureDiagram","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 25 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.22.2","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^8.0.0","react":"^19.3.1","web-tree-sitter":"^0.26.13"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","glob":"^14.0.3","ovsx":"^1.3.0","mocha":"^11.8.0","eslint":"^10.14.0","vitest":"^4.1.12","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^21.0.4","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.12","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.1.0","@types/sql.js":"^1.4.11","@types/vscode":"^1.96.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.72.1","@vitest/coverage-v8":"^4.1.12","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.24.2_1794251666271_0.2550055800868314","host":"s3://npm-registry-packages-npm-production"}},"1.25.0":{"name":"@magic5644/graph-it-live","version":"1.25.0","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"author":{"name":"magic56"},"license":"MIT","_id":"@magic5644/graph-it-live@1.25.0","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"homepage":"https://magic5644.github.io/Graph-It-Live/","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","dist":{"shasum":"6257ef60fa967c6c7d94bc9a8d446c84416303a2","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.25.0.tgz","fileCount":26,"integrity":"sha512-tZUbWY18SQ5IzlrNPYDm3FpnSbd55X7p5YmkSh2QfzlrGTojE9wU+h6XUh4YNZK9n153kgv0Apd+Y8oLzSl3+Q==","signatures":[{"sig":"MEYCIQClPQhjX+r5jU0WHs0LSMEPjFwjoy0xT87d9IEobzydvQIhALreW7r2lY8CgUdfUWNt+TNXgbzqE8xl0dsMUSKqyWnK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICZLGnsk27vncCSE0bN2y+BFEMRaHoqUzmvmBgaeVItfAiEAyFXfEq8q6B85NMAlHYWmaDKfUIXD+VKu+ZfcTNGGrSY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":57821402},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","engines":{"node":">=22.0.0","vscode":"^1.101.0"},"gitHead":"2aa83ab71db58f477d66565750000cd268a8c1d9","scripts":{"lint":"eslint src scripts/bench-agent","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","bench:agent":"node scripts/bench-agent/index.mjs","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"node scripts/verify-package.mjs","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","glob":"^14.0.5","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.1","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'architecture'","group":"navigation@6","command":"graph-it-live.setViewModeArchitecture"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.exportArchitectureDiagram"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.copyArchitectureDiagram"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"commandPalette":[{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.exportArchitectureDiagram"},{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.copyArchitectureDiagram"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status","visibility":"collapsed"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(type-hierarchy)","title":"Switch to Architecture View","command":"graph-it-live.setViewModeArchitecture","category":"Graph-It-Live"},{"icon":"$(desktop-download)","title":"Export Architecture Diagram","command":"graph-it-live.exportArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Architecture Diagram as SVG","command":"graph-it-live.copyArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.communityMode":{"enum":["path","louvain"],"type":"string","default":"path","enumDescriptions":["Group files by their first functional folder (src/analyzer, src/webview, ...)","Group files by import structure (deterministic Louvain), named after their dominant folder"],"markdownDescription":"How the dependency graph groups files into communities (node tint and legend). **path** groups by folder; **louvain** groups files that import each other, which shows coupling that folders hide."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty or the checked-out branch uses the current branch and its final on-disk state, untracked files included."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":2000,"minimum":1,"description":"Maximum number of changed files Branch Watch analyzes and of files its dependents-impact walk visits. Higher values improve coverage but increase analysis time and memory usage. Range: 1–2000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nBARRELS: files that import the target's exports through re-export barrels (export { x } from, export *, chained) are listed after the direct importers, with via = the barrel they import.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic, side-effect, mod = Rust `mod x;` declaration), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue 3 (<script src> and <template src> are dependencies), Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"},"minConfidence":{"enum":["high","medium","low"],"type":"string","default":"high","description":"Lowest confidence listed (default: high). high: the file is imported, no importer uses the export and no other evidence of use was found: a deletion candidate. medium: only tests use it, a computed import may reach it, a decorator may register it, its name is written again in its file (or, in Rust, in another file), or it sits in a test file. low: nothing imports the file (entry point by convention, script, config), review only. Unlisted items are counted in byConfidence."},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category, confidence, reasons, evidence: importer count and first importers), unused and total counts, unused percentage, byConfidence.\nCONFIDENCE: every item has confidence and reasons. high (importers-use-other-exports): the file is imported, no importer uses the export and no other evidence of use was found: a deletion candidate. medium: test-only-use (only tests use it), dynamic-import-in-workspace (a computed import() / require() / import_module may reach the file, or a Python importer reads attributes by computed name), convention:decorated (a Python decorator may register it), named-in-own-file (its file writes the name again: dropping export may be the fix), name-written-elsewhere (Rust: another Rust file writes the name), convention:test-file, named-in-deploy-manifest (a Dockerfile, compose, serverless, SAM or Procfile writes module.name, such as a Lambda handler), convention:generated (the file header says it is generated), published-deep-import (a published package without an exports map that the workspace imports by deep path, so outside projects may too). low (no-importer): nothing imports the file, often an entry point by convention (script, handler, config), review only. minConfidence (default high) sets the lowest level listed; byConfidence counts every item found and hint says how to list the others.\nENTRY POINTS: an export a manifest declares is never listed, nor what it re-exports or calls: package.json main, module, browser, types, exports, bin (npm default index.js for a publishable package without them), pyproject / setup.cfg / setup.py scripts and entry points, __main__.py, __all__, the pub items of a Cargo lib crate, Rust #[no_mangle] / #[proc_macro] functions; so is a JSX or Vue default export (convention:framework-default-export).\nLIMITS: methods and nested functions are never exports; an export reached only through a string-keyed lookup can still be listed, so confirm a medium or low item before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS and REFERENCES edges from the indexed call graph, so it returns the symbols that call or render X, each labelled. File-level imports are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of its first edge, relation (CALLS, REFERENCES or USES; a call wins over a reference, a reference over a type use) and a type-only flag, plus runtime, reference and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nAn item that renders or passes the symbol without calling it (<Card />, onClick={save}) is a runtime impact with relation=REFERENCES.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue 3, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path, 1-based line, relation=REFERENCES for a reference that is not a call), visited symbols, and whether maxDepth was hit. A name the imported module does not export has a null resolved path.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed. VUE: a Vue 3 .vue file has a component node named after the file at its <template>; a template <Child />, handler (@click=save) or interpolation is a REFERENCES edge from it and save() a CALLS edge, also from an HTML <template src> of the workspace. Global, auto-imported and dynamic :is components stay unresolved.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST, so no language server is needed. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"symbolId":{"type":"string","description":"Exact node id from a previous result or candidate, valid for the current index only (ids embed the line). A stale id returns reason 'stale_selector'"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"startLine":{"type":"number","description":"Declaration line of the symbol, 0-based like startLine in results and candidates (editor line 3 is 2). Selects one of several same-name symbols"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method). A bare name shared by several symbols in the file returns reason 'ambiguous' with candidates; qualified names such as 'Class.method' are not supported"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES","REFERENCES"],"type":"string"},"description":"Filter by relation types (default: all types included)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS), runtime references (REFERENCES) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed. VUE: a Vue 3 .vue file has a component node named after the file at its <template>; a template <Child />, handler (@click=save) or interpolation is a REFERENCES edge from it and save() a CALLS edge, also from an HTML <template src> of the workspace. Global, auto-imported and dynamic :is components stay unresolved.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nSELECTING: two same-name methods in one file return reason=ambiguous with candidates; pass one candidate's symbolId or startLine to select it exactly. A stale selector returns reason=stale_selector (ids embed the line and change after edits); 'Class.method' names are not supported.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional cap on analysed files (default: every analysable file in scope, no upper bound). When the cap stops the scan, truncated=true and filesBeyondLimit > 0: the result is partial."},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"},"minConfidence":{"enum":["high","medium","low"],"type":"string","default":"high","description":"Lowest confidence listed (default: high). high: the file is imported, no importer uses the export and no other evidence of use was found: a deletion candidate. medium: only tests use it, a computed import may reach it, a decorator may register it, its name is written again in its file (or, in Rust, in another file), or it sits in a test file. low: nothing imports the file (entry point by convention, script, config), review only. Unlisted items are counted in byConfidence."},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists (each with confidence, reasons and evidence), byConfidence, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan. Without maxFiles every analysable file in scope is scanned (no upper bound). truncated=true means a partial result: report it as partial, never as the whole workspace.\nCONFIDENCE: every item has confidence and reasons. high (importers-use-other-exports): the file is imported, no importer uses the export and no other evidence of use was found: a deletion candidate. medium: test-only-use (only tests use it), dynamic-import-in-workspace (a computed import() / require() / import_module may reach the file, or a Python importer reads attributes by computed name), convention:decorated (a Python decorator may register it), named-in-own-file (its file writes the name again: dropping export may be the fix), name-written-elsewhere (Rust: another Rust file writes the name), convention:test-file, named-in-deploy-manifest (a Dockerfile, compose, serverless, SAM or Procfile writes module.name, such as a Lambda handler), convention:generated (the file header says it is generated), published-deep-import (a published package without an exports map that the workspace imports by deep path, so outside projects may too). low (no-importer): nothing imports the file, often an entry point by convention (script, handler, config), review only. minConfidence (default high) sets the lowest level listed; byConfidence counts every item found and hint says how to list the others.\nENTRY POINTS: an export a manifest declares is never listed, nor what it re-exports or calls: package.json main, module, browser, types, exports, bin (npm default index.js for a publishable package without them), pyproject / setup.cfg / setup.py scripts and entry points, __main__.py, __all__, the pub items of a Cargo lib crate, Rust #[no_mangle] / #[proc_macro] functions; so is a JSX or Vue default export (convention:framework-default-export).\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; duration grows with file count (about 90 s for 12,000 files); an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (default 200, no upper bound)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed. With graphit.architecture.json, `architecture` says whether the diff degrades or improves the declared rules: new, resolved and unchanged violations per rule, unit cycles, rules-file edits; a new error violation raises the risk. A changed .vue lists the props and events it adds or removes by name (no type check), a contract typed by an imported type or built at runtime as partial.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs; maxFiles caps changed files (default 200, no upper bound), time and memory grow with it.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords (English, French, German, Spanish, Chinese or Russian questions, mapped to English identifier stems), scores seed nodes by keyword specificity and file path over the call graph index, then traverses outward from them. English identifier-like keywords in the question (\"reference compute python\") give the most precise seeds.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_export_architecture_diagram","tags":["graph-it-live","architecture","diagram"],"displayName":"Graph-It-Live: Export Architecture Diagram","inputSchema":{"type":"object","properties":{"view":{"enum":["units","folder","matrix"],"type":"string","description":"Optional: units (default) draws every unit; folder the groups of the unit or folder named by folder (default when folder is set); matrix the dependency structure matrix of that level"},"rules":{"type":"boolean","description":"Optional: draw the violations of graphit.architecture.json in the error colour"},"theme":{"enum":["light","dark"],"type":"string","description":"Optional SVG colours (default light); svg only"},"config":{"type":"string","description":"Optional rules file with rules, relative to the workspace (default graphit.architecture.json)"},"folder":{"type":"string","description":"Optional unit or folder key, /-separated, for example src/analyzer"},"output":{"type":"string","description":"Optional file to write, relative to the workspace; without it a diagram over the inline cap goes to architecture.<diagramFormat> (architecture.diagram-spec.json for a spec)"},"baseline":{"type":"string","description":"Optional accepted violations file with rules, relative to the workspace (default graphit.architecture.baseline.json when it exists)"},"diagramFormat":{"enum":["svg","html","diagram-spec"],"type":"string","description":"Optional: svg (default), html (one self-contained page following the reader light or dark scheme) or diagram-spec (the level's data as JSON for a diagram skill)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Draw a static architecture diagram of the workspace as SVG or self-contained HTML","modelDescription":"Draws a static architecture diagram of the workspace (units, one unit or folder's groups, or their dependency matrix) as SVG or self-contained HTML, or returns its data as a diagram spec.\n\nWHEN: \"draw the architecture\", \"give me a diagram for the README / the PR / the design doc\", or to share as a picture the structure that graph-it architecture reports as data. For a polished or branded diagram drawn by a diagram skill, use diagramFormat 'diagram-spec' and draw only the nodes and edges it lists.\nWHY: the same diagram as graph-it diagram and the VS Code Architecture view: layers top to bottom (layer 0 at the bottom), cycle members in one block, stroke widths by file-pair count; with rules, the violations of graphit.architecture.json in the error colour and the baseline's accepted ones dashed. Deterministic: one index revision gives one geometry, with no network and no absolute path in the output.\nRETURNS: format, counts (one line, e.g. '7 units · 3 layers · 1 cycle · 0 violations', covering the whole level), and either markup (the SVG or HTML, inline up to 60,000 characters) or path (workspace-relative file written, when output is set or the diagram is over the cap; default architecture.<diagramFormat>, architecture.diagram-spec.json for a spec) with its size in characters. A diagram-spec is JSON (schemas/diagram-spec.schema.json): every node with label, layer, file count and role, layers, weighted edges with kind and broken rules, cycles, violations and the caption lines.\nLIMITS: import relations only (static analysis); at most 60 nodes drawn (a spec lists them all), the largest kept and a note counting the others, so draw one folder at a time on large levels; output must stay inside the workspace and an existing file there is replaced; analyses every source file on each call.","toolReferenceName":"graphArchitectureDiagram","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 25 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","_nodeVersion":"24.22.2","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^8.0.0","react":"^19.3.1","web-tree-sitter":"^0.26.13"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","glob":"^14.0.3","ovsx":"^1.3.0","mocha":"^11.8.0","eslint":"^10.14.0","vitest":"^4.1.12","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^21.0.4","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.12","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.1.0","@types/sql.js":"^1.4.11","@types/vscode":"1.101.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.72.1","@vitest/coverage-v8":"^4.1.12","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"tmp":"tmp/graph-it-live_1.25.0_1794471065410_0.7823582909606949","host":"s3://npm-registry-packages-npm-production"}},"1.25.1":{"_id":"@magic5644/graph-it-live@1.25.1","bin":{"graph-it":"dist/graph-it.js"},"qna":"https://github.com/magic5644/Graph-It-Live/discussions","bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"dist":{"shasum":"bde1eb5d2ac3fb6953ab3d34115588cff77ec9b3","tarball":"https://registry.npmjs.org/@magic5644/graph-it-live/-/graph-it-live-1.25.1.tgz","fileCount":26,"integrity":"sha512-ENA/G34Gn56GoUyOOflR79rKdVx/kk6qF8ILXVGEWDabE9J+rmPdNcJyV1KJASBdFo9YQGABQy89cE3dZKYNgg==","signatures":[{"sig":"MEUCIB3m4EsQUwI5aTYcrnTKsxG9Q3VTG6wih6RN0HhLY6R9AiEAr2bm3GUsbweUb8LSJ2FQ9YO1QcfU76MzMOf+brsRPOI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCjL2ojstuko5Z7Jo2h+62IL50EEXXhptN8IA1Zqa4s1gIgH+15dWVViKmBZ4CQI8KZhSm5G3we9GcD6j9ApUtZoP8="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@magic5644%2fgraph-it-live@1.25.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":57916398},"icon":"media/Graph-It-Live-Logo-256.png","main":"./dist/extension.js","name":"@magic5644/graph-it-live","author":{"name":"magic56"},"engines":{"node":">=22.0.0","vscode":"^1.101.0"},"gitHead":"241b1eb685666b0132f632ad40c2e9748068637d","license":"MIT","scripts":{"lint":"eslint src scripts/bench-agent","test":"vitest --run","audit":"npm audit","build":"node esbuild.js","watch":"node esbuild.js --watch","compile":"npm run build","package":"vsce package","publish":"vsce publish","lint:fix":"eslint src --fix","test:all":"npm run test:unit","test:cli":"vitest run tests/cli","test:mcp":"vitest run tests/cli/serveTools.e2e.test.ts","audit:fix":"npm audit fix","bench:e2e":"npm run build && npm run compile:tests && node scripts/bench-e2e.mjs","build:cli":"node esbuild.js --cli-only","test:unit":"vitest run --run","test:bench":"node scripts/run-benchmarks.mjs","test:watch":"vitest --watch","bench:agent":"node scripts/bench-agent/index.mjs","check:types":"npm run check:types:clean","test:vscode":"npm run compile:tests && npm run compile && node ./tests/vscode-e2e/runTests.js","package:vsix":"vsce package","test:cli:e2e":"bash scripts/test-cli-e2e.sh","compile:tests":"tsc -p tsconfig.vscode-e2e.json","test:coverage":"vitest run --coverage","package:verify":"node scripts/verify-package.mjs","eval:dump-tools":"npm run build && node scripts/eval/dump-tools.mjs","test:vscode:vsix":"npm run package && npm run compile:tests && node ./tests/vscode-e2e/runTests.js --vsix","check:types:clean":"node -e \"require('node:fs').rmSync('out', { recursive: true, force: true });\" && tsc --noEmit && npm run check:types:fixtures","test:bench:memory":"node scripts/run-memory-bench.mjs","vscode:prepublish":"npm run build -- --production","check:types:fixtures":"tsc --project tsconfig.type-fixtures.json","test:context-economy":"npm run build:cli && node scripts/context-economy-corpus.mjs","sync:tool-descriptions":"node scripts/sync-tool-descriptions.mjs"},"version":"1.25.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"99472fd3-29a5-4599-a5a9-8d632330ec4f"}},"homepage":"https://magic5644.github.io/Graph-It-Live/","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"overrides":{"ovsx":{"@vscode/vsce":"$@vscode/vsce"},"mocha":{"diff":">=8.0.3","glob":"^14.0.5","serialize-javascript":">=7.0.3"},"flatted":">=3.4.2","minimatch":">=10.2.1","picomatch":"^4.0.4","@hono/node-server":"2.0.10"},"publisher":"magic5644","categories":["Visualization","Programming Languages","AI","Other"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"_npmVersion":"11.19.1","contributes":{"menus":{"view/title":[{"icon":"$(copy)","when":"view == graph-it-live.branchWatchView","group":"navigation@1","command":"graph-it-live.branchWatch.copyStatus"},{"icon":"$(settings-gear)","when":"view == graph-it-live.branchWatchView","group":"navigation@2","command":"graph-it-live.branchWatch.openSettings"},{"icon":"$(folder-opened)","when":"view == graph-it-live.graphView || view == graph-it-live.branchWatchView","group":"navigation@0","command":"graph-it-live.setWorkspace"},{"when":"view == graph-it-live.graphView","group":"navigation@1","command":"workbench.action.navigateBack"},{"when":"view == graph-it-live.graphView","group":"navigation@2","command":"workbench.action.navigateForward"},{"when":"view == graph-it-live.graphView","group":"navigation@3","command":"graph-it-live.refreshGraph"},{"icon":"$(graph)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(type-hierarchy)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@4","command":"graph-it-live.setViewModeFile"},{"icon":"$(list-flat)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(list-selection)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'list'","group":"navigation@5","command":"graph-it-live.setViewModeList"},{"icon":"$(symbol-method)","when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"icon":"$(symbol-class)","when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'symbol'","group":"navigation@6","command":"graph-it-live.setViewModeSymbol"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode != 'architecture'","group":"navigation@6","command":"graph-it-live.setViewModeArchitecture"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.exportArchitectureDiagram"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'architecture'","group":"navigation@6","command":"graph-it-live.copyArchitectureDiagram"},{"when":"view == graph-it-live.graphView","group":"navigation@7","command":"graph-it-live.showCallGraph"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.showReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.reverseDependenciesVisible","group":"navigation@8","command":"graph-it-live.hideReverseDependencies"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && !graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.enableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file' && graph-it-live.unusedFilterActive","group":"navigation@9","command":"graph-it-live.disableUnusedFilter"},{"when":"view == graph-it-live.graphView && graph-it-live.viewMode == 'file'","group":"navigation@10","command":"graph-it-live.expandAllNodes"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.enabled","group":"navigation@1","command":"graph-it-live.branchWatch.enable"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && !graph-it-live.branchWatch.paused","group":"navigation@2","command":"graph-it-live.branchWatch.pause"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.paused","group":"navigation@3","command":"graph-it-live.branchWatch.resume"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@4","command":"graph-it-live.branchWatch.refresh"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@5","command":"graph-it-live.branchWatch.selectBase"},{"when":"view == graph-it-live.branchWatchView && graph-it-live.branchWatch.enabled","group":"navigation@6","command":"graph-it-live.branchWatch.selectHead"},{"when":"view == graph-it-live.branchWatchView && !graph-it-live.branchWatch.available","group":"navigation@7","command":"graph-it-live.branchWatch.retryDetection"},{"when":"view == graph-it-live.branchWatchView","group":"settings","command":"graph-it-live.branchWatch.openSettings"},{"when":"view == graph-it-live.graphView","group":"navigation@10","command":"graph-it-live.branchWatch.reveal"}],"editor/title":[{"when":"resourceExtname =~ /\\.(ts|tsx|js|jsx|vue|svelte|mjs|cjs|gql|graphql)$/","group":"navigation","command":"graph-it-live.showGraph"}],"commandPalette":[{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.exportArchitectureDiagram"},{"when":"graph-it-live.viewMode == 'architecture'","command":"graph-it-live.copyArchitectureDiagram"}],"editor/context":[{"when":"editorTextFocus","group":"navigation@99","command":"graph-it-live.showCallGraph"}],"view/item/context":[{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchMessage","group":"inline","command":"graph-it-live.branchWatch.copyMessage"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchFile","group":"inline","command":"graph-it-live.branchWatch.openCallGraph"},{"when":"view == graph-it-live.branchWatchView && viewItem == branchWatchCycle","group":"inline","command":"graph-it-live.branchWatch.openCycle"}]},"views":{"graph-it-live-explorer":[{"id":"graph-it-live.graphView","icon":"$(type-hierarchy-sub)","name":"Dependency Graph","type":"webview"},{"id":"graph-it-live.branchWatchView","icon":"$(git-branch)","name":"Branch status","visibility":"collapsed"}]},"commands":[{"icon":"$(type-hierarchy-sub)","title":"Show Dependency Graph","command":"graph-it-live.showGraph","category":"Graph-It-Live"},{"title":"Force Graph-It-Live re-index","command":"graph-it-live.forceReindex","category":"Graph-It-Live"},{"icon":"$(folder-opened)","title":"Set Workspace Folder","command":"graph-it-live.setWorkspace","category":"Graph-It-Live"},{"title":"Show Graph-It-Live index status","command":"graph-it-live.showIndexStatus","category":"Graph-It-Live"},{"icon":"$(expand-all)","title":"Toggle Expand/Collapse All Nodes","command":"graph-it-live.expandAllNodes","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Graph","command":"graph-it-live.refreshGraph","category":"Graph-It-Live"},{"icon":"$(split-vertical)","title":"Toggle View Mode (File ↔ Symbol)","command":"graph-it-live.toggleViewMode","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Switch to Graph View","command":"graph-it-live.setViewModeFile","category":"Graph-It-Live"},{"icon":"$(list-flat)","title":"Switch to List View","command":"graph-it-live.setViewModeList","category":"Graph-It-Live"},{"icon":"$(symbol-method)","title":"Switch to Symbol View","command":"graph-it-live.setViewModeSymbol","category":"Graph-It-Live"},{"icon":"$(type-hierarchy)","title":"Switch to Architecture View","command":"graph-it-live.setViewModeArchitecture","category":"Graph-It-Live"},{"icon":"$(desktop-download)","title":"Export Architecture Diagram","command":"graph-it-live.exportArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Architecture Diagram as SVG","command":"graph-it-live.copyArchitectureDiagram","category":"Graph-It-Live"},{"icon":"$(references)","title":"Show Reverse Dependencies","command":"graph-it-live.showReverseDependencies","category":"Graph-It-Live"},{"icon":"$(close)","title":"Hide Reverse Dependencies","command":"graph-it-live.hideReverseDependencies","category":"Graph-It-Live"},{"icon":"$(eye)","title":"Filter Unused Dependencies","command":"graph-it-live.enableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(eye-closed)","title":"Show All Dependencies","command":"graph-it-live.disableUnusedFilter","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Show Call Graph","command":"graph-it-live.showCallGraph","category":"Graph-It-Live"},{"title":"Open Review Call Graph","command":"graph-it-live.reviewCallGraph","category":"Graph-It-Live"},{"icon":"$(play)","title":"Enable Branch Watch","command":"graph-it-live.branchWatch.enable","category":"Graph-It-Live","enablement":"graph-it-live.branchWatch.available"},{"icon":"$(circle-slash)","title":"Disable Branch Watch","command":"graph-it-live.branchWatch.disable","category":"Graph-It-Live"},{"icon":"$(debug-pause)","title":"Pause Branch Watch","command":"graph-it-live.branchWatch.pause","category":"Graph-It-Live"},{"icon":"$(play)","title":"Resume Branch Watch","command":"graph-it-live.branchWatch.resume","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Refresh Branch Watch","command":"graph-it-live.branchWatch.refresh","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Select Base Branch","command":"graph-it-live.branchWatch.selectBase","category":"Graph-It-Live"},{"icon":"$(git-compare)","title":"Select Head Branch","command":"graph-it-live.branchWatch.selectHead","category":"Graph-It-Live"},{"icon":"$(git-branch)","title":"Show Branch Status","command":"graph-it-live.branchWatch.reveal","category":"Graph-It-Live"},{"icon":"$(go-to-file)","title":"Open File","command":"graph-it-live.branchWatch.openFile","category":"Graph-It-Live"},{"icon":"$(clippy)","title":"Copy Message","command":"graph-it-live.branchWatch.copyMessage","category":"Graph-It-Live"},{"icon":"$(copy)","title":"Copy Branch Status","command":"graph-it-live.branchWatch.copyStatus","category":"Graph-It-Live"},{"icon":"$(call-incoming)","title":"Open Call Graph","command":"graph-it-live.branchWatch.openCallGraph","category":"Graph-It-Live"},{"icon":"$(type-hierarchy-sub)","title":"Open Cycle in Graph","command":"graph-it-live.branchWatch.openCycle","category":"Graph-It-Live"},{"icon":"$(refresh)","title":"Retry Branch Detection","command":"graph-it-live.branchWatch.retryDetection","category":"Graph-It-Live"},{"icon":"$(settings-gear)","title":"Branch Watch Settings","command":"graph-it-live.branchWatch.openSettings","category":"Graph-It-Live"}],"viewsWelcome":[{"view":"graph-it-live.branchWatchView","when":"!graph-it-live.branchWatch.enabled && graph-it-live.branchWatch.available","contents":"Review the structural impact between Git branches.\n[Enable branch watch](command:graph-it-live.branchWatch.enable)"}],"configuration":[{"title":"Graph-It-Live","properties":{"graph-it-live.logLevel":{"enum":["debug","info","warn","error","none"],"type":"string","default":"info","description":"Logging level for the extension. Debug shows all logs, none disables logging.","markdownDescription":"Logging level for the extension output channel.\n\n- **debug**: Verbose output for troubleshooting\n- **info**: Standard operation logs\n- **warn**: Warnings only\n- **error**: Errors only\n- **none**: Disable logging"},"graph-it-live.maxDepth":{"type":"number","default":50,"maximum":100,"minimum":1,"description":"Maximum dependency depth to analyze"},"graph-it-live.communityMode":{"enum":["path","louvain"],"type":"string","default":"path","enumDescriptions":["Group files by their first functional folder (src/analyzer, src/webview, ...)","Group files by import structure (deterministic Louvain), named after their dominant folder"],"markdownDescription":"How the dependency graph groups files into communities (node tint and legend). **path** groups by folder; **louvain** groups files that import each other, which shows coupling that folders hide."},"graph-it-live.enableMcpServer":{"type":"boolean","default":false,"description":"Enable MCP (Model Context Protocol) server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.","markdownDescription":"Enable **MCP (Model Context Protocol)** server for LLM integration. When enabled, exposes dependency analysis tools to GitHub Copilot and other MCP-compatible AI assistants.\n\n[Learn more about MCP](https://code.visualstudio.com/api/extension-guides/ai/mcp)"},"graph-it-live.showCommunities":{"type":"boolean","default":true,"markdownDescription":"Show community clustering on the dependency graph (background tint on nodes + community legend). Disable to hide community visualization."},"graph-it-live.workspaceFolder":{"type":"string","scope":"window","default":"","description":"Workspace folder analyzed by Graph-It-Live in a multi-root workspace. Empty uses the active editor folder, then the first folder."},"graph-it-live.symbolViewLayout":{"enum":["hierarchical","force-directed","radial"],"type":"string","default":"hierarchical","description":"Layout algorithm for symbol-level drill-down view.","markdownDescription":"Layout algorithm for symbol-level drill-down view:\n\n- **hierarchical**: Top-to-bottom layout (Sugiyama/Dagre). Best for call flows\n- **force-directed**: Interactive physics-based layout. Best for exploring relationships\n- **radial**: Concentric circles with the current file at center. Experimental"},"graph-it-live.ignoreTypeImports":{"type":"boolean","default":false,"description":"Ignore TypeScript type-only imports and exports in the dependency graph. You might need to restart VS Code for this setting to take effect."},"graph-it-live.preIndexCallGraph":{"type":"boolean","default":true,"description":"Pre-index the call graph database at startup alongside background indexing. When enabled, the first 'Show Call Graph' command is near-instant because the symbol-level index is already built."},"graph-it-live.excludeNodeModules":{"type":"boolean","default":true,"description":"Exclude node_modules from graph"},"graph-it-live.indexingStartDelay":{"type":"number","default":1000,"maximum":30000,"minimum":0,"description":"Delay in milliseconds before starting background indexing after extension activation. Allows VS Code to finish startup first."},"graph-it-live.performanceProfile":{"enum":["default","low-memory","high-performance","custom"],"type":"string","order":0,"default":"default","description":"Performance profile preset that sets cache sizes, concurrency, and unused-analysis limits.","markdownDescription":"Performance profile preset:\n\n- **default**: Balanced settings (4GB-8GB RAM)\n- **low-memory**: Optimized for machines with <4GB RAM\n- **high-performance**: Maximizes speed on powerful machines (16GB+ RAM)\n- **custom**: Use the values in the **Advanced: Performance overrides** section"},"graph-it-live.branchWatch.baseRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the base. Local and remote-tracking branches are supported; no fetch is performed."},"graph-it-live.branchWatch.enabled":{"type":"boolean","scope":"resource","default":false,"description":"Automatically review saved branch changes against a Git base branch. Structural analysis only; tests must pass before delivery."},"graph-it-live.branchWatch.headRef":{"type":"string","scope":"resource","default":"","description":"Git branch reference used as the head. Empty or the checked-out branch uses the current branch and its final on-disk state, untracked files included."},"graph-it-live.branchWatch.maxFiles":{"type":"integer","scope":"resource","default":200,"maximum":2000,"minimum":1,"description":"Maximum number of changed files Branch Watch analyzes and of files its dependents-impact walk visits. Higher values improve coverage but increase analysis time and memory usage. Range: 1–2000."},"graph-it-live.unusedDependencyMode":{"enum":["hide","dim"],"type":"string","default":"hide","description":"Choose how to display unused dependencies in the graph. 'hide' removes them, 'dim' reduces their opacity.","markdownDescription":"Choose how to display unused dependencies in the graph.\n\n- **hide**: Remove edges for imports that are not actually used in the code\n- **dim**: Show unused edges with reduced opacity"},"graph-it-live.enableMcpDebugLogging":{"type":"boolean","default":false,"description":"Enable detailed debug logging for MCP server. Creates ~/mcp-debug.log with automatic rotation (5MB limit per file, keeps 2 files). Only enable for troubleshooting.","markdownDescription":"**[Privacy Notice]** Enable detailed debug logging for MCP server. Creates `~/mcp-debug.log` with automatic rotation (5MB limit per file, keeps last 2 files). Log file may contain project paths and file names. Only enable temporarily for troubleshooting, then disable to prevent unnecessary data accumulation."},"graph-it-live.enableBackgroundIndexing":{"type":"boolean","default":true,"description":"Enable background indexing for faster reverse dependency lookups. When enabled, the extension will index all files in the workspace at startup."}}},{"order":100,"title":"Advanced: Performance overrides","properties":{"graph-it-live.maxCacheSize":{"tags":["advanced"],"type":"number","order":5,"default":500,"maximum":2000,"minimum":50,"description":"Maximum number of file dependency analyses to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of file dependency analyses to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxSymbolCacheSize":{"tags":["advanced"],"type":"number","order":6,"default":200,"maximum":1000,"minimum":50,"description":"Maximum number of symbol analysis results to keep in memory cache. Lower values reduce memory usage.","markdownDescription":"Maximum number of symbol analysis results to keep in memory cache.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.indexingConcurrency":{"tags":["advanced"],"type":"number","order":0,"default":4,"maximum":16,"minimum":1,"description":"Number of files to process in parallel during background indexing. Lower values reduce CPU usage but increase indexing time.","markdownDescription":"Number of files to process in parallel during background indexing.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisMaxEdges":{"tags":["advanced"],"type":"number","order":2,"default":2000,"minimum":0,"description":"Skip automatic unused dependency analysis if the graph has more edges than this threshold. Set to 0 to disable the limit. Manual analysis via toolbar button still works.","markdownDescription":"Skip automatic unused dependency analysis if the graph exceeds this edge count.\n\n- **0**: No limit (always analyze)\n- **1000-2000**: Recommended for low-memory machines\n- **5000+**: High-performance machines\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.unusedAnalysisConcurrency":{"tags":["advanced"],"type":"number","order":1,"default":4,"maximum":16,"minimum":1,"description":"Number of source files to analyze in parallel for unused dependency detection. Lower values use less memory but are slower. Adjust based on your machine's capabilities.","markdownDescription":"Number of source files to analyze in parallel for unused dependency detection.\n\n- **1-2**: Low-memory machines (<4GB RAM)\n- **4**: Default, balanced\n- **8-16**: High-performance machines (16GB+ RAM)\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.maxUnusedAnalysisCacheSize":{"tags":["advanced"],"type":"number","order":4,"default":200,"maximum":1000,"minimum":10,"description":"Maximum number of source files to cache for unused dependency analysis. Uses LRU (Least Recently Used) eviction when limit is reached.","markdownDescription":"Maximum number of source files to cache for unused dependency analysis.\n\n- **Lower values** (50-100): Reduce memory usage on constrained systems\n- **Higher values** (500-1000): Better cache hit rate on large projects\n\nUses **LRU eviction** - least recently accessed entries are removed when limit is reached.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."},"graph-it-live.persistUnusedAnalysisCache":{"tags":["advanced"],"type":"boolean","order":3,"default":false,"description":"Cache unused dependency analysis results to disk for faster subsequent loads. Results are invalidated when files change.","markdownDescription":"Cache unused dependency analysis results to disk.\n\n⚠️ **Experimental**: Enable for large projects with stable dependencies. Disable if you experience stale results.\n\nOverride used only when `#graph-it-live.performanceProfile#` is `custom`; other profiles set this value."}}}],"viewsContainers":{"panel":[{"id":"graph-it-live-explorer","icon":"$(type-hierarchy-sub)","title":"Graph-It-Live"}]},"languageModelTools":[{"icon":"$(symbol-misc)","name":"graph-it-live_graph_context","tags":["graph-it-live","context","dependencies","calls"],"displayName":"Graph-It-Live: Graph Context","inputSchema":{"type":"object","properties":{"to":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"from":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}},"mode":{"enum":["search","neighbors","path","impact","refactor","overview"],"type":"string"},"depth":{"type":"integer","maximum":5,"minimum":1},"scope":{"type":"string"},"seeds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"filePath":{"type":"string"},"symbolName":{"type":"string"}}}},"cursor":{"type":"string"},"detail":{"enum":["compact","standard","full"],"type":"string","description":"Output detail; use compact for token-efficient agent context"},"directed":{"type":"boolean"},"maxNodes":{"type":"integer","maximum":500,"minimum":1},"question":{"type":"string"},"relations":{"type":"array","items":{"type":"string"}},"tokenBudget":{"type":"integer","maximum":16000,"minimum":500},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Retrieve bounded unified graph context for codebase questions and paths","modelDescription":"Returns a token-bounded subgraph answering a question about the codebase - the default entry point for graph questions.\n\nWHEN: any question spanning file dependencies, symbol calls, implementations, tests or impact; reach for a specialised tool only when this cannot express the cut you need.\nWHY: one deterministic gateway over the same index the specialised tools use, with an explicit token budget so large graphs come back bounded instead of truncated arbitrarily.\nMODES: search, neighbors, path, impact, refactor, overview.\nRETURNS: nodes and edges with workspace-relative paths, an index revision and a freshness flag, and a cursor when results are paginated.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphContext","canBeReferencedInPrompt":true},{"icon":"$(references)","name":"graph-it-live_find_referencing_files","tags":["graph-it-live","dependencies","references"],"displayName":"Graph-It-Live: Find Files Referencing","inputSchema":{"type":"object","required":["targetPath"],"properties":{"targetPath":{"type":"string","description":"The absolute path to the file to find references for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find all files that import or depend on a specific file","modelDescription":"Lists every file that imports or references a given file (reverse dependency lookup).\n\nWHEN: impact analysis, \"who uses this file\", refactoring-safety checks before changing or deleting a file.\nWHY: served from a prebuilt reverse index, so it covers the whole workspace rather than the files already in context.\nRETURNS: workspace-relative path, import type, line and module specifier of each referencing file.\nBARRELS: files that import the target's exports through re-export barrels (export { x } from, export *, chained) are listed after the direct importers, with via = the barrel they import.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFindRefs","canBeReferencedInPrompt":true},{"icon":"$(package)","name":"graph-it-live_analyze_dependencies","tags":["graph-it-live","dependencies","imports"],"displayName":"Graph-It-Live: Analyze Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"List all dependencies and imports of a file, with resolved paths and metadata","modelDescription":"Lists the import/export statements of one file, with each specifier resolved to a path on disk.\n\nWHEN: \"what does this file import\", \"what are this file's dependencies\".\nWHY: read from the parsed source, so tsconfig path aliases, implicit extensions and index files are already resolved.\nRETURNS: one entry per resolved workspace file - module specifier, workspace-relative path, import type (import, require, export, dynamic, side-effect, mod = Rust `mod x;` declaration), line number. Unresolved and external imports are left out.\nSUPPORTS: TypeScript, JavaScript, Vue 3 (<script src> and <template src> are dependencies), Svelte, GraphQL.","toolReferenceName":"graphDeps","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_crawl_dependency_graph","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Crawl Dependency Graph","inputSchema":{"type":"object","required":["entryFile"],"properties":{"maxDepth":{"type":"number","description":"Maximum depth to crawl (optional, defaults to the configured maxDepth setting)"},"entryFile":{"type":"string","description":"The absolute path to the entry file from which to start crawling"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Traverse the full transitive dependency graph from an entry file","modelDescription":"Builds the transitive file dependency graph reachable from one entry file.\n\nWHEN: project architecture, full dependency tree from an entry point.\nWHY: crawls real import edges across the workspace rather than inferring structure from file names.\nRETURNS: nodes (workspace-relative path) and edges (import relations, source and target). maxDepth defaults to the configured graph-it-live.maxDepth, else 3.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphCrawl","canBeReferencedInPrompt":true},{"icon":"$(symbol-structure)","name":"graph-it-live_get_symbol_graph","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Get Symbol Graph","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to inspect"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Get all symbols (functions, classes, variables) defined in a file and their relationships","modelDescription":"Lists the symbols a file exports and the symbols OUTSIDE the file that each of them depends on.\n\nWHEN: \"which function in this file calls the database / uses X\", scoping a refactor to one symbol rather than the whole file.\nWHY: ts-morph AST parsing, so import aliases are tracked back to their original names and type-only imports are separated from runtime ones.\nRETURNS: every symbol of the file (name, kind, line, category, internal ones included) and symbol-to-symbol edges tagged runtime or type-only.\nNOT THIS TOOL: for calls between symbols defined in the same file, use graph-it-live_generate_codemap (its call flow section). This tool crosses the file boundary outward; that one stays inside it.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphSymbols","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_find_unused_symbols","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Find Unused Exported Symbols","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to check for unused exports"},"minConfidence":{"enum":["high","medium","low"],"type":"string","default":"high","description":"Lowest confidence listed (default: high). high: the file is imported, no importer uses the export and no other evidence of use was found: a deletion candidate. medium: only tests use it, a computed import may reach it, a decorator may register it, its name is written again in its file (or, in Rust, in another file), or it sits in a test file. low: nothing imports the file (entry point by convention, script, config), review only. Unlisted items are counted in byConfidence."},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find exported symbols that are not used anywhere in the project (dead code)","modelDescription":"Lists the symbols a file exports that nothing else in the workspace imports.\n\nWHEN: dead-code cleanup in one file, or checking which parts of an API are consumed.\nWHY: cross-references the file's exports against the reverse index, then widens the used set through the file's internal call graph so a symbol reached only indirectly is not reported.\nRETURNS: unused exported symbols (name, kind, line, category, confidence, reasons, evidence: importer count and first importers), unused and total counts, unused percentage, byConfidence.\nCONFIDENCE: every item has confidence and reasons. high (importers-use-other-exports): the file is imported, no importer uses the export and no other evidence of use was found: a deletion candidate. medium: test-only-use (only tests use it), dynamic-import-in-workspace (a computed import() / require() / import_module may reach the file, or a Python importer reads attributes by computed name), convention:decorated (a Python decorator may register it), named-in-own-file (its file writes the name again: dropping export may be the fix), name-written-elsewhere (Rust: another Rust file writes the name), convention:test-file, named-in-deploy-manifest (a Dockerfile, compose, serverless, SAM or Procfile writes module.name, such as a Lambda handler), convention:generated (the file header says it is generated), published-deep-import (a published package without an exports map that the workspace imports by deep path, so outside projects may too). low (no-importer): nothing imports the file, often an entry point by convention (script, handler, config), review only. minConfidence (default high) sets the lowest level listed; byConfidence counts every item found and hint says how to list the others.\nENTRY POINTS: an export a manifest declares is never listed, nor what it re-exports or calls: package.json main, module, browser, types, exports, bin (npm default index.js for a publishable package without them), pyproject / setup.cfg / setup.py scripts and entry points, __main__.py, __all__, the pub items of a Cargo lib crate, Rust #[no_mangle] / #[proc_macro] functions; so is a JSX or Vue default export (convention:framework-default-export).\nLIMITS: methods and nested functions are never exports; an export reached only through a string-keyed lookup can still be listed, so confirm a medium or low item before deleting.","toolReferenceName":"graphUnused","canBeReferencedInPrompt":true},{"icon":"$(call-incoming)","name":"graph-it-live_get_symbol_callers","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Callers","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find callers for (e.g. 'MyClass', 'handleRequest')"},"includeTypeOnly":{"type":"boolean","description":"Also include type-only references (interfaces, type aliases). Default is false: only call sites are returned."},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find all symbols across the project that call or use a given exported symbol","modelDescription":"Lists the call sites of one given symbol - one hop, from the call graph index.\n\nWHEN: the plain question \"who calls X\"; finding call sites before a rename; spotting a symbol with no callers.\nWHY: reads CALLS and REFERENCES edges from the indexed call graph, so it returns the symbols that call or render X, each labelled. File-level imports are not callers; use graph-it-live_get_symbol_dependents for those.\nRETURNS: one entry per caller symbol with workspace-relative path, line of its first edge, relation (CALLS, REFERENCES or USES; a call wins over a reference, a reference over a type use) and a type-only flag, plus runtime, reference and type-only counts. Type-only references are added only with includeTypeOnly. The source field says whether the call graph or the symbol dependents fallback answered (the call graph is used once indexed; line is null in the fallback).\nPICKING BETWEEN THE THREE: this one for call sites; graph-it-live_get_symbol_dependents for every reference (imports included) computed fresh from source; graph-it-live_query_call_graph when you need more than one hop, callees as well as callers, or relation types such as INHERITS and IMPLEMENTS.","toolReferenceName":"graphCallers","canBeReferencedInPrompt":true},{"icon":"$(report)","name":"graph-it-live_get_impact_analysis","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Get Impact Analysis","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"maxDepth":{"type":"number","description":"Maximum transitive depth to traverse when includeTransitive is true (default: 3)"},"symbolName":{"type":"string","description":"The name of the symbol to analyze impact for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"},"includeTransitive":{"type":"boolean","description":"Whether to include transitive (indirect) dependents (default: false)"}}},"userDescription":"Analyze the scope and risk of changing a symbol — shows affected files and symbols","modelDescription":"Reports everything affected by changing one symbol, direct and transitive.\n\nWHEN: assessing a refactor before starting it, or prioritising which call sites to update first.\nWHY: walks the symbol reverse index outward, keeping runtime and type-only impact separate and aggregating per file.\nRETURNS: impact level (high, medium, low), total impact count, runtime versus type-only breakdown, impacted symbols with depth (1 = direct) and affected files. Transitive impact only with includeTransitive. An unknown symbol returns an error listing close name matches.\nAn item that renders or passes the symbol without calling it (<Card />, onClick={save}) is a runtime impact with relation=REFERENCES.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphImpact","canBeReferencedInPrompt":true},{"icon":"$(pulse)","name":"graph-it-live_get_index_status","tags":["graph-it-live","index","status"],"displayName":"Graph-It-Live: Get Index Status","inputSchema":{"type":"object","properties":{"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Check if the dependency index is ready and get cache statistics","modelDescription":"Reports the state of the dependency index backing the other tools.\n\nWHEN: checking readiness before a large analysis, or explaining unexpectedly empty or incomplete results.\nWHY: distinguishes \"no results\" from \"index not built yet\", and tells whether imports were skipped because they resolve outside the workspace root (a monorepo sub-package misses its sibling packages).\nRETURNS: index state, readiness flag, whether the reverse index exists, cache size, reverse-index statistics (files indexed included), cacheFiles (on-disk bytes of the cached reverse index and call graph), and outOfRootImports (with examples, the relative monorepoRoot and a warning when above 0).","toolReferenceName":"graphIndexStatus","canBeReferencedInPrompt":true},{"icon":"$(list-tree)","name":"graph-it-live_parse_imports","tags":["graph-it-live","imports","parsing"],"displayName":"Graph-It-Live: Parse Imports","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to parse imports from"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Parse and list all import statements in a file with resolved paths","modelDescription":"Returns the import statements of one file: module specifier, import type and line.\n\nWHEN: inspecting import style or alias usage, without the resolved paths.\nWHY: uses the language-aware parser pipeline, so it is more accurate than a text search.\nRETURNS: module specifier as written, import type, line number.\nLIMITS: lists only imports that resolve to a workspace file, once per file - use graph-it-live_resolve_module_path to debug one that does not.","toolReferenceName":"graphImports","canBeReferencedInPrompt":true},{"icon":"$(file-code)","name":"graph-it-live_generate_codemap","tags":["graph-it-live","symbols","codemap"],"displayName":"Graph-It-Live: Generate Code Map","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to generate a code map for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Generate an AI-friendly code map summarizing a file's structure, symbols, and call flow","modelDescription":"Returns one file's exports, internals, dependencies, dependents and internal call flow in a single call.\n\nWHEN: getting oriented in an unfamiliar file, or gathering the full context of a file before refactoring it.\nWHY: one call in place of analyze_dependencies, get_symbol_graph and find_referencing_files together, plus the calls between the file's own symbols.\nRETURNS: path, language, line count, exported and internal symbols, dependencies, dependents, intra-file call flow, cycle detection.\nSUPPORTS: TypeScript, JavaScript, Python, Rust, Vue 3, Svelte.","toolReferenceName":"graphCodemap","canBeReferencedInPrompt":true},{"icon":"$(expand-all)","name":"graph-it-live_expand_node","tags":["graph-it-live","dependencies","graph"],"displayName":"Graph-It-Live: Expand Node Dependencies","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to expand from"},"knownPaths":{"type":"array","items":{"type":"string"},"description":"List of file paths already known — newly discovered nodes will exclude these"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Discover new dependencies from a file, excluding an already-known set (incremental graph exploration)","modelDescription":"Returns the dependencies of one file that are not already in a set of paths you provide.\n\nWHEN: exploring a large graph incrementally, or lazily loading one node at a time.\nWHY: crawls the file's transitive dependencies and drops what you already hold, so only newly discovered files come back.\nRETURNS: the new nodes and edges only, with the same fields as crawl_dependency_graph.","toolReferenceName":"graphExpand","canBeReferencedInPrompt":true},{"icon":"$(check)","name":"graph-it-live_verify_dependency_usage","tags":["graph-it-live","dependencies","dead-code"],"displayName":"Graph-It-Live: Verify Dependency Usage","inputSchema":{"type":"object","required":["sourceFile","targetFile"],"properties":{"sourceFile":{"type":"string","description":"The absolute path to the file that imports the target"},"targetFile":{"type":"string","description":"The absolute path to the imported file"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Check if an import between two files is actually used or is a dead import","modelDescription":"Reports whether a source file actually uses any symbol from a target file it imports.\n\nWHEN: identifying unused imports, or confirming a dependency edge is real before acting on it.\nWHY: AST analysis of actual references, so an import that is never used is distinguished from one that is.\nRETURNS: boolean.","toolReferenceName":"graphVerifyUsage","canBeReferencedInPrompt":true},{"icon":"$(discard)","name":"graph-it-live_invalidate_files","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Invalidate File Cache","inputSchema":{"type":"object","required":["filePaths"],"properties":{"filePaths":{"type":"array","items":{"type":"string"},"description":"Absolute paths of the files to invalidate from the cache"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Flush cached dependency data for specific files so the next analysis re-reads them","modelDescription":"Drops the cached analysis for specific files so the next query re-reads them.\n\nWHEN: results look stale after edits the file watcher missed. Paths must lie inside an open workspace folder.\nWHY: analysis is cached per file; the cache is otherwise refreshed by the file watcher.\nRETURNS: how many files were invalidated, which were cleared, and which held no cache entry.","toolReferenceName":"graphInvalidate","canBeReferencedInPrompt":true},{"icon":"$(sync)","name":"graph-it-live_rebuild_index","tags":["graph-it-live","index","cache"],"displayName":"Graph-It-Live: Rebuild Full Index","inputSchema":{"type":"object","properties":{"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Clear all cached dependency data and rebuild the full project index from scratch","modelDescription":"Clears all cached analysis and re-indexes the whole workspace.\n\nWHEN: after a branch switch or large refactor when the index no longer matches the tree; invalidate_files is enough for a few files.\nWHY: restores a graph that is consistent with what is on disk.\nRETURNS: rebuild duration and new cache size.\nLIMITS: takes seconds on a large workspace.","toolReferenceName":"graphRebuildIndex","canBeReferencedInPrompt":true},{"icon":"$(call-outgoing)","name":"graph-it-live_get_symbol_dependents","tags":["graph-it-live","symbols","references"],"displayName":"Graph-It-Live: Get Symbol Dependents","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the symbol"},"symbolName":{"type":"string","description":"The name of the symbol to find dependents for"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Find all symbols across the codebase that directly depend on (use) a specific symbol","modelDescription":"Lists the symbols that use one given symbol - one hop, computed from source at call time.\n\nWHEN: changing a signature and needing every call site, or assessing the blast radius of a symbol-level change.\nWHY: walks the symbol graphs of every file that references the target, so file-level imports count as well as calls.\nRETURNS: caller symbol id, file path and workspace-relative path per dependent, plus a total count.\nPICKING BETWEEN THE THREE: this one for every reference, including file-level imports, computed fresh; graph-it-live_get_symbol_callers for call sites only; graph-it-live_query_call_graph for multi-hop traversal, callees, or relation types.","toolReferenceName":"graphDependents","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy-sub)","name":"graph-it-live_trace_function_execution","tags":["graph-it-live","symbols","execution"],"displayName":"Graph-It-Live: Trace Function Execution","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file containing the function"},"maxDepth":{"type":"number","description":"Maximum call chain depth to follow (default: 10)"},"symbolName":{"type":"string","description":"The name of the function or method to trace"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Trace the full recursive call chain starting from a function or method","modelDescription":"Follows the call chain outward from one symbol, recursively, across files.\n\nWHEN: tracing a request through controller, service and repository, or mapping what a feature actually reaches.\nWHY: follows calls through multiple files instead of stopping at direct dependencies; stops at external modules, at maxDepth, or on a cycle.\nRETURNS: root symbol, call chain entries (depth, caller, callee, resolved path, 1-based line, relation=REFERENCES for a reference that is not a call), visited symbols, and whether maxDepth was hit. A name the imported module does not export has a null resolved path.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed. VUE: a Vue 3 .vue file has a component node named after the file at its <template>; a template <Child />, handler (@click=save) or interpolation is a REFERENCES edge from it and save() a CALLS edge, also from an HTML <template src> of the workspace. Global, auto-imported and dynamic :is components stay unresolved.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphTrace","canBeReferencedInPrompt":true},{"icon":"$(code)","name":"graph-it-live_analyze_file_logic","tags":["graph-it-live","symbols","ast"],"displayName":"Graph-It-Live: Analyze File Logic","inputSchema":{"type":"object","required":["filePath"],"properties":{"filePath":{"type":"string","description":"The absolute path to the file to analyze"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Analyze the intra-file call hierarchy — which functions call which within a single file","modelDescription":"Returns the call hierarchy among the symbols defined INSIDE one file, ignoring anything it imports.\n\nWHEN: understanding how a file works internally, or spotting recursion before a refactor.\nWHY: built from the file's AST, so no language server is needed. Calls are matched by name within the file.\nRETURNS: nodes (symbol id, LSP SymbolKind number, type, export status, start/end line range), call edges with call-site line numbers, and cycle detection with the symbols involved.\nNOT THIS TOOL: for what this file's symbols reach in OTHER files, use graph-it-live_get_symbol_graph.\nSUPPORTS: TypeScript, JavaScript, Python, Rust.\nFor an open-ended question, start with graph-it-live_graph_context and come here when you need this specific cut.","toolReferenceName":"graphFileLogic","canBeReferencedInPrompt":true},{"icon":"$(link)","name":"graph-it-live_resolve_module_path","tags":["graph-it-live","imports","resolution"],"displayName":"Graph-It-Live: Resolve Module Path","inputSchema":{"type":"object","required":["fromFile","moduleSpecifier"],"properties":{"fromFile":{"type":"string","description":"Absolute path of the file containing the import statement"},"moduleSpecifier":{"type":"string","description":"The module specifier to resolve (e.g. './utils', '@/components/Button', 'lodash')"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Resolve a module specifier (e.g. './utils', '@/components/Button') to its absolute file path","modelDescription":"Resolves one module specifier, as seen from a given file, to a path on disk.\n\nWHEN: \"where does this import point\", or debugging alias and extension resolution.\nWHY: applies tsconfig path aliases, implicit extensions (.ts, .tsx, .js, .jsx, .vue, .svelte, .gql) and index-file resolution.\nRETURNS: whether resolution succeeded and the resolved workspace-relative path.","toolReferenceName":"graphResolve","canBeReferencedInPrompt":true},{"icon":"$(warning)","name":"graph-it-live_analyze_breaking_changes","tags":["graph-it-live","symbols","refactoring"],"displayName":"Graph-It-Live: Analyze Breaking Changes","inputSchema":{"type":"object","required":["filePath","oldContent"],"properties":{"filePath":{"type":"string","description":"Absolute path to the file being modified"},"newContent":{"type":"string","description":"The new file content (if omitted, reads the current file from disk)"},"oldContent":{"type":"string","description":"The previous file content to compare against"},"symbolName":{"type":"string","description":"Optional: restrict analysis to a specific symbol name"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Detect breaking changes when modifying function signatures, interface members, or type aliases","modelDescription":"Compares two versions of a file and reports which signature changes break callers.\n\nWHEN: validating an edit before committing, or writing migration notes for an API change.\nWHY: diffs the parsed signatures rather than the text, so added optional parameters are separated from breaking ones.\nRETURNS: breaking changes (type, symbol, description, severity, old and new value, line) and non-breaking changes. Without newContent the current file on disk is used.\nDETECTS: added required parameter, removed parameter, changed parameter or return type, optional made required, reduced visibility, removed or changed interface member, changed type alias.\nINPUT: oldContent must be the full previous file content, not a placeholder. With symbolName, an unknown symbol returns an error listing close name matches, a symbol missing from a non-empty oldContent that declares nothing returns an error, and a symbol new in newContent is reported as a non-breaking change.","toolReferenceName":"graphBreaking","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_query_call_graph","tags":["graph-it-live","callgraph","symbols"],"displayName":"Graph-It-Live: Query Call Graph","inputSchema":{"type":"object","required":["filePath","symbolName"],"properties":{"depth":{"type":"number","description":"Maximum BFS traversal depth (default: 2, max: 10)"},"filePath":{"type":"string","description":"Absolute path to the file containing the target symbol"},"symbolId":{"type":"string","description":"Exact node id from a previous result or candidate, valid for the current index only (ids embed the line). A stale id returns reason 'stale_selector'"},"direction":{"enum":["callers","callees","both"],"type":"string","description":"Traversal direction: 'callers' (who calls this), 'callees' (what it calls), or 'both' (default)"},"startLine":{"type":"number","description":"Declaration line of the symbol, 0-based like startLine in results and candidates (editor line 3 is 2). Selects one of several same-name symbols"},"symbolName":{"type":"string","description":"Name of the symbol to query (function, class, method). A bare name shared by several symbols in the file returns reason 'ambiguous' with candidates; qualified names such as 'Class.method' are not supported"},"relationTypes":{"type":"array","items":{"enum":["CALLS","INHERITS","IMPLEMENTS","USES","REFERENCES"],"type":"string"},"description":"Filter by relation types (default: all types included)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Query cross-file callers and callees of a symbol via BFS traversal on the indexed call graph database","modelDescription":"Traces calls across files for several hops, in either direction, from a SQLite-backed call graph.\n\nWHEN: \"who calls X\" (direction=callers, depth=1), \"what does X call\" (direction=callees), multi-hop traversal (\"three levels deep\"), or cycle detection across modules.\nWHY: built from tree-sitter AST analysis, so it holds real call edges (CALLS, INHERITS, IMPLEMENTS), runtime references (REFERENCES) and type-only references (USES) rather than import edges. Every relation type is returned unless relationTypes narrows it.\nREFERENCES: a function passed as an argument (register(save), items.map(format), Python cb=save, Java this::save, C# Register(Save)), and in .jsx/.tsx files a JSX component (<Card />, <UI.Card />) or an attribute value (onClick={save}, render={Row}), is a REFERENCES edge: rendered or passed, never reported as a call; register(save()) and onClick={() => save()} are CALLS edges at their line. REACT: Imports resolve through aliases, barrels and default exports to the declaration (a default export keeps its declared name), and memo(), forwardRef() and lazy(() => import('./literal')) to the wrapped component. Lowercase intrinsic tags, parameters or locals named like a function, members of objects other than this/self, non-literal or unknown wrappers, and unimported or ambiguous names stay unresolved, never guessed; props contracts are not analysed. VUE: a Vue 3 .vue file has a component node named after the file at its <template>; a template <Child />, handler (@click=save) or interpolation is a REFERENCES edge from it and save() a CALLS edge, also from an HTML <template src> of the workspace. Global, auto-imported and dynamic :is components stay unresolved.\nRETURNS: the matched symbol, its callers and callees with file and call-site line, relation type, and a cyclic flag per edge. Defaults: direction=both, depth=2.\nSELECTING: two same-name methods in one file return reason=ambiguous with candidates; pass one candidate's symbolId or startLine to select it exactly. A stale selector returns reason=stale_selector (ids embed the line and change after edits); 'Class.method' names are not supported.\nNOT THIS TOOL: for every file that imports a file, use graph-it-live_find_referencing_files.\nLIMITS: needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphCallGraph","canBeReferencedInPrompt":true},{"icon":"$(trash)","name":"graph-it-live_scan_dead_code","tags":["graph-it-live","symbols","dead-code"],"displayName":"Graph-It-Live: Scan Dead Code","inputSchema":{"type":"object","properties":{"maxFiles":{"type":"number","description":"Optional cap on analysed files (default: every analysable file in scope, no upper bound). When the cap stops the scan, truncated=true and filesBeyondLimit > 0: the result is partial."},"scopePath":{"type":"string","description":"Optional absolute path to a directory to restrict the scan scope (defaults to entire workspace)"},"minConfidence":{"enum":["high","medium","low"],"type":"string","default":"high","description":"Lowest confidence listed (default: high). high: the file is imported, no importer uses the export and no other evidence of use was found: a deletion candidate. medium: only tests use it, a computed import may reach it, a decorator may register it, its name is written again in its file (or, in Rust, in another file), or it sits in a test file. low: nothing imports the file (entry point by convention, script, config), review only. Unlisted items are counted in byConfidence."},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"},"unreferencedFiles":{"type":"boolean","default":false,"description":"List whole files no production file imports instead of unused exports (default: false): low (no-importer) when nothing imports the file, medium (test-only-use) when only tests do. minConfidence then defaults to low. medium items list testImporters, the tests to delete or clean up with the file. Left out: test files, manifest entry points, files a non-test file names by path (bundler entry, package.json script), JSX/Vue default exports, .d.ts files, *.config.* files, files a folder's .gitignore ignores, Python package __init__.py."}}},"userDescription":"Workspace-wide scan for unused exported symbols (dead code) across the entire project or a scoped directory","modelDescription":"Lists the unused exported symbols across a whole workspace or directory.\n\nWHEN: auditing code quality, or cleaning up before a refactor; use find_unused_symbols for a single file.\nWHY: combines the reverse index with per-file symbol analysis, so the scan stays linear instead of comparing every file against every other.\nRETURNS: files scanned, files holding dead code, total unused symbols, per-file unused symbol lists (each with confidence, reasons and evidence), byConfidence, scan duration, and truncated with filesBeyondLimit when maxFiles stopped the scan. Without maxFiles every analysable file in scope is scanned (no upper bound). truncated=true means a partial result: report it as partial, never as the whole workspace.\nCONFIDENCE: every item has confidence and reasons. high (importers-use-other-exports): the file is imported, no importer uses the export and no other evidence of use was found: a deletion candidate. medium: test-only-use (only tests use it), dynamic-import-in-workspace (a computed import() / require() / import_module may reach the file, or a Python importer reads attributes by computed name), convention:decorated (a Python decorator may register it), named-in-own-file (its file writes the name again: dropping export may be the fix), name-written-elsewhere (Rust: another Rust file writes the name), convention:test-file, named-in-deploy-manifest (a Dockerfile, compose, serverless, SAM or Procfile writes module.name, such as a Lambda handler), convention:generated (the file header says it is generated), published-deep-import (a published package without an exports map that the workspace imports by deep path, so outside projects may too). low (no-importer): nothing imports the file, often an entry point by convention (script, handler, config), review only. minConfidence (default high) sets the lowest level listed; byConfidence counts every item found and hint says how to list the others.\nENTRY POINTS: an export a manifest declares is never listed, nor what it re-exports or calls: package.json main, module, browser, types, exports, bin (npm default index.js for a publishable package without them), pyproject / setup.cfg / setup.py scripts and entry points, __main__.py, __all__, the pub items of a Cargo lib crate, Rust #[no_mangle] / #[proc_macro] functions; so is a JSX or Vue default export (convention:framework-default-export).\nUNREFERENCED FILES: unreferencedFiles=true lists whole files instead (the cheapest deletions), from the reverse index without symbol analysis: low (no-importer) when no workspace file imports the file, directly or as a barrel's target; medium (test-only-use) when only tests import it, with testImporters = the tests to delete or clean up with it, a quick cleanup win. Other reasons as for exports: dynamic-import-in-workspace, named-in-deploy-manifest, convention:generated, published-deep-import. Each file has exports (0 for a script or side-effect module); minConfidence defaults to low. Left out, and listed as excluded with verbose: test files, manifest entry points, files whose path a non-test file writes (named-in:<file>: a bundler entry, a package.json script, a CI workflow or action, a Makefile, justfile, Taskfile or .sh script, working-directory and cd honoured), JSX/Vue default exports, files a framework loads by file name (convention:framework-route, when a package.json above depends on it: Next.js app/pages routes, SvelteKit, Remix, Nuxt incl. layers, Astro, Expo Router, Gatsby, Storybook stories), files a bundler loads (import.meta.glob, new URL(..., import.meta.url), an HTML page's script entry), files named by a run-time template (config.${mode}.ts), migrations folders (convention:migration), .<tool>rc files, .d.ts/.d.mts/.d.cts declarations, tool configs (*.config.ts), files a folder's .gitignore ignores (build output) and Python package __init__.py. CASCADE: then the files only those dead files and tests import, chains and dead cycles included, listed after them with reason cascade, via = their dead importers, at a confidence never above theirs (low for a cycle nothing else imports); an entry point, a live importer, a dead file something may still load (dynamic import, deploy manifest) or a dead file that runs as a program (no export like main.ts, or a __main__ guard) stops it. Every dead file has tests = the tests that import nothing but dead files, to delete with it.\nLIMITS: scopePath must be an absolute path inside the workspace; results are incomplete while background indexing runs; duration grows with file count (about 90 s for 12,000 files); an export reached only through a dynamic lookup can still be listed.","toolReferenceName":"graphDeadCode","canBeReferencedInPrompt":true},{"icon":"$(git-pull-request)","name":"graph-it-live_review_pr","tags":["graph-it-live","review","git"],"displayName":"Graph-It-Live: Review PR","inputSchema":{"type":"object","required":["baseRef"],"properties":{"baseRef":{"type":"string","description":"Git base ref to compare against, for example origin/main"},"headRef":{"type":"string","description":"Optional Git head ref; defaults to the checked-out worktree"},"maxDepth":{"type":"number","description":"Optional impact traversal depth (1-10, default 3)"},"maxFiles":{"type":"number","description":"Optional maximum number of changed files to analyse (default 200, no upper bound)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Review a local Git diff against a base ref and report its risk with per-symbol evidence","modelDescription":"Reviews a local Git diff and reports the risk it carries, with per-symbol evidence.\n\nWHEN: before opening a pull request, or as a CI gate.\nWHY: combines the parsed signatures of both revisions with the workspace index, so signature changes are scored against their real callers.\nRETURNS: deterministic risk level, per-symbol evidence, impact counts, and an explicit list of what could not be analysed. With graphit.architecture.json, `architecture` says whether the diff degrades or improves the declared rules: new, resolved and unchanged violations per rule, unit cycles, rules-file edits; a new error violation raises the risk. A changed .vue lists the props and events it adds or removes by name (no type check), a contract typed by an imported type or built at runtime as partial.\nLIMITS: runs git in the first workspace folder; impact counts are incomplete while background indexing runs; maxFiles caps changed files (default 200, no upper bound), time and memory grow with it.","toolReferenceName":"graphReviewPr","canBeReferencedInPrompt":true},{"icon":"$(search)","name":"graph-it-live_query_natural_language","tags":["graph-it-live","search","call-graph"],"displayName":"Graph-It-Live: Natural Language Query","inputSchema":{"type":"object","required":["question"],"properties":{"depth":{"type":"number","description":"Optional traversal depth from the matched symbols (1-5, default 2)"},"question":{"type":"string","description":"Plain-language question about the codebase"},"fileFilter":{"type":"string","description":"Optional workspace-relative glob restricting the search, for example src/**"},"tokenBudget":{"type":"number","description":"Optional token budget for the subgraph (500-16000, default 4000)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Return the call-graph subgraph relevant to a plain-language question about the codebase","modelDescription":"Returns the subgraph relevant to a plain-language question, for you to turn into an answer.\n\nWHEN: exploring a codebase from a concept rather than a known file or symbol name.\nWHY: extracts keywords (English, French, German, Spanish, Chinese or Russian questions, mapped to English identifier stems), scores seed nodes by keyword specificity and file path over the call graph index, then traverses outward from them. English identifier-like keywords in the question (\"reference compute python\") give the most precise seeds.\nRETURNS: the question, the extracted keywords, the subgraph, and timing and truncation metadata.\nLIMITS: returns graph data, not prose - you write the answer from it; needs the call graph index, built in the background when the Graph-It-Live view first loads (graph-it-live.preIndexCallGraph) or when the Call Graph panel opens; until then the tool returns an error.","toolReferenceName":"graphQuery","canBeReferencedInPrompt":true},{"icon":"$(type-hierarchy)","name":"graph-it-live_export_architecture_diagram","tags":["graph-it-live","architecture","diagram"],"displayName":"Graph-It-Live: Export Architecture Diagram","inputSchema":{"type":"object","properties":{"view":{"enum":["units","folder","matrix"],"type":"string","description":"Optional: units (default) draws every unit; folder the groups of the unit or folder named by folder (default when folder is set); matrix the dependency structure matrix of that level"},"rules":{"type":"boolean","description":"Optional: draw the violations of graphit.architecture.json in the error colour"},"theme":{"enum":["light","dark"],"type":"string","description":"Optional SVG colours (default light); svg only"},"config":{"type":"string","description":"Optional rules file with rules, relative to the workspace (default graphit.architecture.json)"},"folder":{"type":"string","description":"Optional unit or folder key, /-separated, for example src/analyzer"},"output":{"type":"string","description":"Optional file to write, relative to the workspace; without it a diagram over the inline cap goes to architecture.<diagramFormat> (architecture.diagram-spec.json for a spec)"},"baseline":{"type":"string","description":"Optional accepted violations file with rules, relative to the workspace (default graphit.architecture.baseline.json when it exists)"},"diagramFormat":{"enum":["svg","html","diagram-spec"],"type":"string","description":"Optional: svg (default), html (one self-contained page following the reader light or dark scheme) or diagram-spec (the level's data as JSON for a diagram skill)"},"response_format":{"enum":["toon","markdown","json"],"type":"string","default":"toon","description":"Output format: 'toon' (default, compact Token-Oriented Object Notation), 'markdown' (readable lists and tables), or 'json' (the raw object, for code that parses it)"}}},"userDescription":"Draw a static architecture diagram of the workspace as SVG or self-contained HTML","modelDescription":"Draws a static architecture diagram of the workspace (units, one unit or folder's groups, or their dependency matrix) as SVG or self-contained HTML, or returns its data as a diagram spec.\n\nWHEN: \"draw the architecture\", \"give me a diagram for the README / the PR / the design doc\", or to share as a picture the structure that graph-it architecture reports as data. For a polished or branded diagram drawn by a diagram skill, use diagramFormat 'diagram-spec' and draw only the nodes and edges it lists.\nWHY: the same diagram as graph-it diagram and the VS Code Architecture view: layers top to bottom (layer 0 at the bottom), cycle members in one block, stroke widths by file-pair count; with rules, the violations of graphit.architecture.json in the error colour and the baseline's accepted ones dashed. Deterministic: one index revision gives one geometry, with no network and no absolute path in the output.\nRETURNS: format, counts (one line, e.g. '7 units · 3 layers · 1 cycle · 0 violations', covering the whole level), and either markup (the SVG or HTML, inline up to 60,000 characters) or path (workspace-relative file written, when output is set or the diagram is over the cap; default architecture.<diagramFormat>, architecture.diagram-spec.json for a spec) with its size in characters. A diagram-spec is JSON (schemas/diagram-spec.schema.json): every node with label, layer, file count and role, layers, weighted edges with kind and broken rules, cycles, violations and the caption lines.\nLIMITS: import relations only (static analysis); at most 60 nodes drawn (a spec lists them all), the largest kept and a note counting the others, so draw one folder at a time on large levels; output must stay inside the workspace and an existing file there is replaced; analyses every source file on each call.","toolReferenceName":"graphArchitectureDiagram","canBeReferencedInPrompt":true}],"mcpServerDefinitionProviders":[{"id":"graphItLiveMcp","label":"Graph-It-Live Dependency Analyzer"}]},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 25 tools for GitHub Copilot, Cu","directories":{},"displayName":"Graph-It-Live","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"_nodeVersion":"24.22.2","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@vscode/vsce-sign@2.1.0":true},"dependencies":{"ink":"^8.0.0","react":"^19.3.1","web-tree-sitter":"^0.26.13"},"galleryBanner":{"color":"#2D3748","theme":"dark"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","glob":"^14.0.3","ovsx":"^1.3.0","mocha":"^11.8.0","eslint":"^10.14.0","vitest":"^4.1.12","esbuild":"^0.28.2","globals":"^17.13.0","happy-dom":"^21.0.4","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.12","fast-check":"^4.10.2","typescript":"^6.0.3","@types/node":"^25.9.9","@types/mocha":"^10.0.10","@types/react":"^19.3.0","@vscode/vsce":"^4.1.0","@types/sql.js":"^1.4.11","@types/vscode":"1.101.0","@types/react-dom":"^19.3.0","typescript-eslint":"^8.72.1","@vitest/coverage-v8":"^4.1.12","@vscode/test-electron":"^3.1.0","@testing-library/react":"^16.3.3","esbuild-css-modules-plugin":"^3.1.5"},"activationEvents":["onStartupFinished"],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/graph-it-live_1.25.1_1794599642208_0.7545457124630784"}}},"time":{"created":"2026-04-07T06:21:52.303Z","modified":"2026-11-13T19:54:02.873Z","1.0.0":"2026-04-07T06:21:52.828Z","1.0.1":"2026-04-07T06:28:26.451Z","1.0.2":"2026-04-12T13:42:27.164Z","1.9.0":"2026-04-12T18:15:06.336Z","1.9.1":"2026-04-24T07:00:25.525Z","1.9.2":"2026-05-09T17:52:15.832Z","1.9.3":"2026-05-10T19:27:12.754Z","1.9.4":"2026-05-25T12:38:05.545Z","1.9.5":"2026-05-26T16:51:56.846Z","1.9.6":"2026-05-29T17:53:38.015Z","1.9.7":"2026-06-19T17:31:44.937Z","1.9.8":"2026-06-19T18:31:03.602Z","1.10.0":"2026-06-27T12:36:12.888Z","1.11.0":"2026-07-06T07:05:19.235Z","1.12.0":"2026-07-17T09:57:02.240Z","1.13.0":"2026-07-20T15:23:37.205Z","1.13.1":"2026-07-21T15:55:39.782Z","1.13.2":"2026-07-23T16:33:37.007Z","1.13.3":"2026-07-24T15:21:05.345Z","1.13.4":"2026-08-17T15:52:23.370Z","1.13.5":"2026-08-19T17:20:11.350Z","1.13.6":"2026-08-28T07:03:56.376Z","1.14.0":"2026-08-28T07:59:14.903Z","1.14.1":"2026-08-28T15:07:07.957Z","1.14.2":"2026-09-12T12:53:21.781Z","1.14.3":"2026-09-12T21:16:52.722Z","1.14.4":"2026-09-13T17:09:27.716Z","1.15.0":"2026-09-14T16:57:01.752Z","1.15.1":"2026-09-15T17:20:48.989Z","1.16.0":"2026-09-27T11:22:06.210Z","1.16.1":"2026-09-28T12:12:39.371Z","1.17.0":"2026-10-01T16:35:10.527Z","1.17.1":"2026-10-02T15:46:02.931Z","1.18.0":"2026-10-09T15:34:30.255Z","1.19.0":"2026-10-12T19:57:15.693Z","1.20.0":"2026-10-15T10:27:57.483Z","1.21.0":"2026-10-24T19:01:28.766Z","1.21.1":"2026-10-26T22:08:39.604Z","1.21.2":"2026-10-31T17:46:50.880Z","1.21.3":"2026-11-01T13:49:31.254Z","1.22.0":"2026-11-05T18:48:20.307Z","1.23.0":"2026-11-06T15:07:25.677Z","1.23.1":"2026-11-06T22:43:40.988Z","1.24.0":"2026-11-08T17:40:11.350Z","1.24.1":"2026-11-09T09:18:03.123Z","1.24.2":"2026-11-09T19:14:26.598Z","1.25.0":"2026-11-12T08:11:05.705Z","1.25.1":"2026-11-13T19:54:02.495Z"},"bugs":{"url":"https://github.com/magic5644/Graph-It-Live/issues"},"author":{"name":"magic56"},"license":"MIT","homepage":"https://magic5644.github.io/Graph-It-Live/","keywords":["dependency graph","dependency","graph","visualization","import","typescript","javascript","python","java","go","csharp","rust","vue","svelte","graphql","circular dependency","cycle detection","architecture","code analysis","code map","codemap","call graph","call hierarchy","symbol","dead code","unused exports","breaking changes","impact analysis","reverse dependency","refactoring","code navigation","project structure","mcp","mcp server","model context protocol","copilot","cursor","claude","windsurf","antigravity","ai","llm","ai agent"],"repository":{"url":"git+https://github.com/magic5644/Graph-It-Live.git","type":"git"},"description":"AI-first dependency graph & code intelligence for VS Code. Visualize file imports, symbol call hierarchies, and cross-file call graphs. Detect circular dependencies, dead code, and breaking changes. Built-in MCP Server with 25 tools for GitHub Copilot, Cu","maintainers":[{"name":"glebournault","email":"glebournault@gmail.com"}],"readme":"# Graph-It-Live\n\n<div align=\"center\">\n  <img src=\"media/Graph-It-Live-Logo-256.png\" alt=\"Graph-It-Live logo\" width=\"400\"/>\n\n  **See your codebase as a graph — in VS Code, your CLI, and your AI assistant.**\n\n</div>\n\n[![Version](https://vsmarketplacebadges.dev/version/magic5644.graph-it-live.svg)](https://marketplace.visualstudio.com/items?itemName=magic5644.graph-it-live)\n[![VS Code installs](https://vsmarketplacebadges.dev/installs-short/magic5644.graph-it-live.svg?label=vscode+installs)](https://marketplace.visualstudio.com/items?itemName=magic5644.graph-it-live)\n[![Open VSX](https://img.shields.io/open-vsx/v/magic5644/graph-it-live?label=Open%20VSX&logo=eclipse&logoColor=white)](https://open-vsx.org/extension/magic5644/graph-it-live)\n[![Open VSX Downloads](https://img.shields.io/open-vsx/dt/magic5644/graph-it-live?label=Open%20VSX%20Downloads)](https://open-vsx.org/extension/magic5644/graph-it-live)\n[![npm](https://img.shields.io/npm/v/%40magic5644%2Fgraph-it-live?label=npm%20CLI&logo=npm&logoColor=white)](https://www.npmjs.com/package/@magic5644/graph-it-live)\n[![License](https://img.shields.io/github/license/magic5644/Graph-It-Live)](LICENSE)\n\nGraph-It-Live analyzes imports, symbols, calls, cycles, unused exports, and change impact. Use it as a VS Code extension, a standalone CLI, or an MCP/native tool provider for GitHub Copilot and other AI clients. Analysis runs locally and returns evidence from your codebase.\n\n### ▶ Watch the videos\n\nClick an image to play its video (sound on).\n\n**The 75-second tour**\n\n[![Graph-It-Live 75-second tour: the dependency graph in VS Code, coloured by import clusters](media/graph-it-live-promo-poster.png)](media/graph-it-live-promo.mp4)\n\nIt walks through the file graph with Louvain import clusters, the Dependency Structure Matrix, boundary rules declared in `graphit.architecture.json`, and an AI agent fixing a rule violation through the Graph-It-Live MCP server.\n\n**A real architecture fix in 120 seconds**\n\n[![Graph-It-Live 120-second architecture fix: before and after diagram where src/shared stops importing src/analyzer and the analyzer depends on interfaces in src/shared](media/graph-it-live-architecture-fix-poster.png)](media/graph-it-live-architecture-fix.mp4)\n\nIt replays how this repository fixed issue #434, with real outputs. You see a circular import in the live dependency graph (ReactFlow) and units in layers with their cycle in the Architecture view, both on `tests/fixtures/workspaces-project`. Then come the call graph, the matrix cycle between `analyzer` and `shared`, and `graph-it check-architecture` failing on 12 violations. Next, the REPL walks the importers, an AI agent extracts interfaces into `src/shared` through the MCP server to invert the dependency, and the review gate scores the pull request. The check ends green.\n\n**From a messy repository to a clean architecture in 2 minutes**\n\n[![graph-it init on a legacy shop: the generated rules, with callouts explaining that each folder may import only what it imports today](media/graph-it-live-init-poster.png)](media/graph-it-live-init.mp4)\n\nIt cleans up `tests/demo/legacy-shop`, a small shop with no rules, two cycles and dead code, using real outputs and one step at a time.\n\n1. `graph-it init` writes `graphit.architecture.json` from today's imports, and `graph-it check-architecture` passes on day one.\n2. `graph-it check` lists the dead code with its confidence. Deleting it removes one cycle, and a second scan finds what only the deleted code used.\n3. The quick wins point at the import behind the last cycle; moving one file fixes it.\n4. The rules are tightened to match the clean code.\n5. A pull request that brings a cycle back fails the Graph-It Review Gate (`graph-it review-pr`). The fix turns it green.\n\n## Table of Contents\n\n- [What it does](#what-it-does)\n- [Quick start](#quick-start)\n- [Features](#features)\n- [Standalone CLI](#standalone-cli)\n- [AI integrations](#ai-integrations)\n- [Configuration](#configuration)\n- [CI review gate](#ci-review-gate)\n- [Supported languages](#supported-languages)\n- [Documentation](#documentation)\n- [Development](#development)\n- [License](#license)\n\n## What it does\n\nGraph-It-Live provides three views of a codebase:\n\n| View | Answers | Analysis layer |\n| --- | --- | --- |\n| **File graph** | Which files import this file? What depends on this module? | Regex and AST parsing |\n| **Symbol view** | Which functions and classes call each other in this file? | AST analysis |\n| **Live call graph** | Which symbols call each other across files? | Tree-sitter and SQLite |\n\nUse the same graph data to navigate code, review refactors, generate codemaps, and give AI assistants focused context instead of entire source files.\n\n<div align=\"center\">\n  <img src=\"media/demo-plugin-graph-it-live.gif\" alt=\"Graph-It-Live dependency graph\" width=\"800\"/>\n</div>\n\n## Quick start\n\n### VS Code extension\n\n**Requirements:** VS Code 1.101 or later. Install from the [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=magic5644.graph-it-live) or [Open VSX](https://open-vsx.org/extension/magic5644/graph-it-live).\n\n1. Open a project.\n2. Open the Graph-It-Live view from the Activity Bar.\n3. Run **Graph-It-Live: Show Dependency Graph** from the Command Palette.\n4. Click a file to open it, double-click it for the Symbol View, or use **Show Call Graph** for cross-file calls.\n\nSupported projects include TypeScript, JavaScript, Python, Rust, C#, Go, Java, Vue, Svelte, and GraphQL.\n\n### First useful actions\n\n| Goal | Action |\n| --- | --- |\n| Explore imports | Open the dependency graph and expand a file node |\n| Inspect functions | Switch to **Symbol View** or double-click a file |\n| Find callers | Open **Show Call Graph** with a symbol selected |\n| Find reverse dependencies | Use **Show Reverse Dependencies** |\n| Hide unused imports | Enable **Filter Unused Dependencies** |\n| Refresh analysis | Run **Refresh Graph** or **Force Graph-It-Live re-index** |\n\n## Features\n\n### File dependency graph\n\n- Visualize file-to-file imports across a workspace.\n- Detect circular dependencies and highlight cycles.\n- Expand and collapse nodes as you explore.\n- Open files directly from graph nodes.\n- Find reverse dependencies with an indexed lookup.\n\n### Symbol View\n\nDrill into TypeScript, JavaScript, Python, or Rust files to see functions, classes, variables, outgoing calls, incoming callers, and recursive calls. Click a symbol to navigate to its definition.\n\n<div align=\"center\">\n  <img src=\"media/drill-down-symbol-view.png\" alt=\"Graph-It-Live Symbol View\" width=\"600\"/>\n</div>\n\n### Live Call Graph\n\nThe Live Call Graph shows cross-file symbol relationships in a Cytoscape.js panel.\n\n- Expand callers and callees with a depth from 1 to 5. A view shows at most 500 symbols, nearest hops first; a notice counts the hidden ones.\n- Group symbols by folder.\n- Number calls in invocation order.\n- Highlight self-recursion and mutual recursion.\n- Filter by symbol type or folder.\n- Refresh automatically after file saves.\n- Show runtime references that are not calls as `REFERENCES` edges: a passed function (`register(save)`, `items.map(format)`) in every language, and in `.jsx` and `.tsx` files a rendered component (`<Card />`) or an attribute value (`onClick={save}`). An edge appears only when the name resolves to an import or to one declaration in the file. Imports resolve through aliases, barrels, default exports, `lazy(() => import('./literal'))`, and `memo()` or `forwardRef()` around a component name. Identified React components carry the React icon and color here, in the file graph and in the Symbol View.\n\n<div align=\"center\">\n  <img src=\"media/call-graph-view-example.png\" alt=\"Graph-It-Live live call graph\" width=\"800\"/>\n</div>\n\n<div align=\"center\">\n  <img src=\"media/react-identity-views.png\" alt=\"React test fixture in three views: file graph with App.tsx and Card.tsx marked React, Symbol View with the Card component, call graph where App and Card reference each other in a cycle\" width=\"800\"/>\n</div>\n\n*React components on a test fixture: the file graph marks `.tsx` files that declare components, the Symbol View marks the `Card` component, and the call graph shows `App` and `Card` rendering each other: two `REFERENCES` edges, red because they form a cycle. Open any `.jsx` or `.tsx` file; the React badge in each view's legend names the mark.*\n\nThe Live Call Graph supports TypeScript, JavaScript, React (JSX and TSX, parsed with the TSX grammar), Vue, Svelte, Python, Rust, C#, Go, Java, and GraphQL. C#, Go, Java, and GraphQL are supported in the file graph and Live Call Graph; Symbol View support is currently limited to TypeScript, JavaScript, Python, and Rust. In GraphQL, operations and fragments call the fragments they spread; an operation's default root type (`Query`, `Mutation`, `Subscription`), type conditions, field, argument and variable types, and union members are type-only references (`USES`, shown with `includeTypeOnly`); `implements` is an `IMPLEMENTS` edge.\n\nA method call links only when the type of its receiver is proven: `this`/`self`, a parameter or variable with a declared type, a construction (`new Calculator()`, `Calculator()`), or a static call (`Calculator.create()`). The type can be declared in the same file or in another one. In TypeScript, JavaScript, and Python, it must be bound by an import (aliases, barrels, default and type-only imports included). The call reaches the method that this class declares in its own body. When a method is declared more than once (Python redefinition, TypeScript overloads), it reaches the last declaration. Inherited methods, union or unknown types, and a rebound variable create no edge. They never reach a same-named method of another class. Java and Go are the exception: a receiver of unknown type still links by method name.\n\nIn TypeScript and Python, a call on a returned value links too, read from the annotation of the function or method that returns it, never inferred:\n\n- a named return type: `make(): Calculator`, `def make() -> Calculator` (also `-> \"Calculator\"`). The name resolves in the callee's file, through its own imports;\n- a fluent method: `: this` or `-> Self` returns the receiver's type, so `b.setX(1).build().compute()` follows each link;\n- an identity generic: `<T>(value: T): T`, or `def f(value: T) -> T` with a `TypeVar` or a PEP 695 parameter, returns the type of its argument.\n\nA chain stops at its first unproven link and after 8 calls. An unannotated return, a union, `Promise<T>`/`Awaited`, `Optional[T]`, utility types, other generics, `any`/`unknown`, overloads with different return types and `async def` create no edge. Java, C#, Go and Rust do not type returned values yet: Java and Go link such a call by method name, C# and Rust do not link it.\n\n### Architecture view\n\nThe Architecture view draws the whole workspace as **units** (packages, else top-level folders) in layers, with the import edges between them, their roles and their cycles. It answers three questions: what are my layers, who depends on this, and does the code follow my rules. The [architecture guide](docs/architecture.md) defines every term, explains the marks of each view and how to fix what they raise: cycles, rule violations, unmatched files.\n\n<div align=\"center\">\n<img src=\"media/architecture-units-overview.png\" alt=\"Architecture view of an npm-workspaces monorepo: units in layers, a cycle between two shared libraries, rule violations in red\" width=\"800\"/>\n</div>\n\n*Units in layers with their roles, a cycle outlined, and rule violations (test fixture monorepo). Open it with *Switch to Architecture View* in the *Dependency Graph* view title bar.*\n\nQuick start:\n\n1. Open the *Dependency Graph* view and click *Switch to Architecture View* (icon `$(type-hierarchy)`).\n2. Double-click a unit to enter its folders; *Escape* goes back.\n3. Click an edge to list the file pairs behind it.\n4. Select a node, then *Dependents by group* to see every group that imports it.\n5. Click *Matrix* for the dependency structure matrix of the level.\n\nThe CLI (`graph-it architecture --level units`) and the MCP tool `explore_architecture` report the same counts.\n\n<div align=\"center\">\n<img src=\"media/architecture-roles-filter.png\" alt=\"Units legend with role badges; the libraries filter keeps only the five library units\" width=\"800\"/>\n</div>\n\n*Role badges: `[library?]` inferred, `[library]` declared. Click a role in the units legend to filter.*\n\n<div align=\"center\">\n<img src=\"media/architecture-navigate-groups.gif\" alt=\"Navigating Graph-It-Live's architecture: enter src, then analyzer, Fit the whole level, go back with the breadcrumb\" width=\"800\"/>\n</div>\n\n*Double-click a unit or folder to enter it; the breadcrumb or *Escape* goes back.*\n\n<div align=\"center\">\n<img src=\"media/architecture-edge-evidence.gif\" alt=\"Clicking a unit edge lists its file pairs; clicking a file opens it at the import\" width=\"800\"/>\n</div>\n\n*Click an edge for its file pairs, then a file to open it.*\n\n<div align=\"center\">\n<img src=\"media/architecture-selection-dependents.gif\" alt=\"Selecting a unit, running Dependents by group, and expanding one group's files\" width=\"800\"/>\n</div>\n\n*Select a node, then *Dependents by group* in the bottom-left action bar.*\n\n<div align=\"center\">\n<img src=\"media/architecture-large-workspace.png\" alt=\"Header of a 61-group level: 50 of 61 groups shown, Show more groups, and Find reporting a match in a hidden group\" width=\"600\"/>\n</div>\n\n*Enter a unit with more than 50 folder groups: the view draws the 50 largest, and *Show more groups* draws up to 150.*\n\n<div align=\"center\">\n<img src=\"media/architecture-matrix.png\" alt=\"Dependency structure matrix of Graph-It-Live's src folder: every cell below the diagonal, no cycle\" width=\"800\"/>\n</div>\n\n*Click *Matrix* in the *Graph | Matrix* switch for the dependency structure matrix.*\n\nTo share the drawn level as a picture, click *Export Architecture Diagram* (icon `$(desktop-download)`) in the *Dependency Graph* view title bar, then save it as `.svg`, `.html` or `.png`. *Copy Architecture Diagram as SVG* (icon `$(copy)`) puts the SVG on the clipboard. Both commands are also in the Command Palette while the Architecture view is open. The export draws the units, or the groups of the entered unit or folder, as a graph or a matrix, with the rule violations of the view; the graph also keeps the role filter and *Min. imports*, which the matrix does not apply. It uses the renderer of `graph-it diagram`: without a role or *Min. imports* filter, the same level gives the same SVG as the CLI; the PNG is that SVG at twice its size, and the SVG follows the editor's light or dark theme. Exports need the default `graph-it-live.communityMode` (`path`).\n\n<div align=\"center\">\n<img src=\"media/vscode-diagram-export-libraries.png\" alt=\"Exported diagram of the workspaces-project fixture with the library role filter: three library units in two layers, the cycle between @ws/core and @ws/types outlined, and a legend\" width=\"648\"/>\n</div>\n\n*An exported diagram with the role filter on `library`: the caption names the filter.*\n\n### Architecture rules\n\nDeclare your intended architecture in `graphit.architecture.json` at the workspace root: `elements` name sets of files, `rules` say what each may import, and `roles` declare what each unit is. The view lists each rule with its violations; `graph-it check-architecture` exits with 1 on a new `error` violation, so it can gate CI, with SARIF output for code scanning and a baseline for existing code. On existing code, `graph-it init` writes the config from today's imports, so only new drift fails, and reports quick wins and the reading of the dependency matrix. See [the config file](docs/architecture.md#the-config-file) for a complete example.\n\n<div align=\"center\">\n<img src=\"media/architecture-rules-violations.gif\" alt=\"Architecture view Rules panel: clicking a rule lists its violating file pairs, clicking a file opens it at the import\" width=\"800\"/>\n</div>\n\n*Write `graphit.architecture.json` at the workspace root, then click *Refresh*: click a rule to list the file pairs that break it, then a file to open it.*\n\n<div align=\"center\">\n<img src=\"media/cli-check-architecture-report.png\" alt=\"Terminal running graph-it check-architecture on the rules test fixture: FAILED with 3 new error violations, a rules table, new violations grouped by rule with the importing line, one unmatched file, exit code 1\" width=\"800\"/>\n</div>\n\n*`graph-it check-architecture` on the rules test fixture: verdict, totals, rules table, then each new violation as `importing/file.ts:line → target`. Add `--verbose` to list baselined violations, `--format markdown` for a PR comment.*\n\n### Unused dependencies and impact analysis\n\n- Hide or dim unused dependencies.\n- Detect unused exported symbols.\n- Trace execution from a function or symbol.\n- Identify callers affected by a signature change.\n- Generate a codemap with exports, internals, dependencies, dependents, and call flow.\n\n<div align=\"center\">\n  <img src=\"media/demo-filter-hide-mode.gif\" alt=\"Unused dependencies hidden from the graph\" width=\"600\"/>\n  <img src=\"media/demo-filter-dim-mode.gif\" alt=\"Unused dependencies dimmed in the graph\" width=\"600\"/>\n</div>\n\n### While a view loads\n\n<div align=\"center\">\n  <img src=\"media/loading-state-views.png\" alt=\"The four loading states: file and symbol views waiting for graph data, call graph indexing at 40 percent, Architecture view building 120 of 400 files, matrix building\" width=\"800\"/>\n</div>\n\n*Every view shows the same loading state with the Graph-It-Live logo: what it waits for, and a progress bar once the percentage is known (call graph indexing, Architecture build). You see it when a view opens before its data is ready, for example *Show Call Graph* on a workspace not indexed yet.*\n\n## Standalone CLI\n\nUse the same analysis engine without VS Code. Install it globally:\n\n```bash\nnpm install -g @magic5644/graph-it-live\n```\n\nOr run it with `npx`:\n\n```bash\nnpx @magic5644/graph-it-live scan\n```\n\nOn an existing codebase, start with `graph-it init`: it guards the architecture you have today (only new drift fails `graph-it check-architecture`) and lists the quick wins.\n\nWith `--output <dir>`, `init` also writes `report.md`, SVG diagrams and `index.html`. This offline page groups the files by architecture unit and lists the report's findings beside the graph. Click a finding to centre the graph on its files.\n\n<div align=\"center\">\n<img src=\"media/init-explorable-page.png\" alt=\"index.html written by graph-it init --output on tests/demo/legacy-shop: the Findings panel lists the dead files and the cycles to cut, the graph shows the files grouped by unit, two dead files with a dashed border and the cycle edges in orange\" width=\"800\"/>\n</div>\n\n*`graph-it init --output report` on `tests/demo/legacy-shop`, then open `report/index.html`.*\n\n`--focus <unit|folder>` keeps one unit or folder and its direct neighbours, and adds a panel listing what it depends on and what uses it:\n\n<div align=\"center\">\n<img src=\"media/init-focus.png\" alt=\"index.html with --focus billing: only billing and its neighbour orders, the cycle-break and mutual-import findings for billing, and a Focus panel listing orders under Depends on and Used by, each with 1 file pair in a unit cycle\" width=\"800\"/>\n</div>\n\n*`graph-it init --focus billing --output report` on `tests/demo/legacy-shop`.*\n\nCommon commands:\n\n```text\ngraph-it scan                         Index the workspace\ngraph-it summary                      Show a workspace overview\ngraph-it summary <file>               Generate a file codemap\ngraph-it trace <file#Symbol>          Trace execution from a symbol\ngraph-it explain <file>               Explain intra-file call flow\ngraph-it path <file>                  Show a dependency path\ngraph-it check [path]                 Find unused exported symbols\ngraph-it architecture --groups        Show the workspace architecture by folder or community\ngraph-it init                         Generate graphit.architecture.json from the current code, plus quick wins\ngraph-it check-architecture           Check imports against graphit.architecture.json\ngraph-it diagram                      Write a static architecture diagram (SVG, HTML or diagram spec)\ngraph-it query \"<question>\"           Ask a natural-language graph question\ngraph-it context \"<question>\"         Retrieve bounded graph context\ngraph-it wiki                         Generate a navigable Markdown wiki\ngraph-it serve                        Start the MCP stdio server\ngraph-it export [path]                Export the graph as HTML\ngraph-it --help                       Show all commands and options\n```\n\nAnalysis commands support `--format json|toon|markdown`. `trace`, `path` and `architecture` also support `--format mermaid`, `architecture --matrix` supports `--format csv`, `check-architecture` and `review-pr` support `--format sarif`, and `diagram` writes `--format svg|html|diagram-spec` (the last for a diagram skill). Use `--workspace <path>` or `-w` to analyze a project other than the current directory. Outside a project (no `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, `pom.xml`, `*.csproj` or other supported marker at or above the current directory), the CLI exits with code `3`; the MCP server (`graph-it serve`, the plugins) starts without indexing, and its tools ask for `graphitlive_set_workspace` or `WORKSPACE_ROOT`.\n\nSee the [complete CLI reference](docs/CLI.md), including installation troubleshooting, REPL commands, output formats, and tool details.\n\nRun `graph-it` without arguments for the interactive REPL. Press `Esc` on an empty line to move into the results: `j`/`k` move a cursor, `[`/`]` jump between results, `Space` folds one, `z` folds all, and `Enter` on a file or symbol line opens its actions (`/explain`, `/check-dependencies`, `/trace`, Open in editor). File rows are clickable links in terminals that support OSC 8; `/mouse on` adds wheel and click support.\n\n<div align=\"center\">\n<img src=\"media/repl-results-navigation.gif\" alt=\"graph-it REPL on this repository: two commands run, Esc moves focus into the results, the cursor jumps between result titles, the first result folds, Enter on a file line opens the actions menu, z folds and unfolds every result\" width=\"800\"/>\n</div>\n\n*The REPL on this repository: results focus, jumps between results, folding and the actions menu ([key reference](docs/CLI.md#results-navigation)).*\n\n### Unified graph context\n\n`graph-it context` combines imports, symbols, calls, tests, impact, paths, hubs, and communities in one bounded response. It supports `search`, `neighbors`, `path`, `impact`, `refactor`, and `overview` modes.\n\n```bash\ngraph-it context \"what calls the request handler\" --scope 'src/**' --format toon\ngraph-it context --mode path --from src/api.ts#handle --to src/db.ts#query\ngraph-it context --mode impact --seeds src/api.ts#handle --depth 3 --format json\n```\n\nUse `--detail compact` and `--token-budget` for agent-oriented responses. See the [TOON format specification](docs/architecture/TOON_FORMAT.md) for the output format and measurement protocol.\n\n## AI integrations\n\nGraph-It-Live exposes local graph analysis to GitHub Copilot, Claude, Cursor, Windsurf, Antigravity, and other MCP-compatible clients.\n\n### Token savings\n\nMCP tools and the native Copilot tools answer in compact TOON by default; pass `response_format: \"json\"` when a script parses the result. Run `graph-it stats` to see what that saves across the CLI, the MCP server and VS Code: the last 50 sessions per source, an **all sources** total, and cumulative totals that rotation never reduces.\n\n![graph-it stats on this repository: 1,822 tool calls over the CLI and MCP sources used 644,751 TOON tokens instead of 1,336,776 in JSON, in both the history window and the cumulative totals](media/stats-cumulative-totals.png)\n\n*`graph-it stats --format markdown` on this repository's own usage: TOON used about half the tokens of the same answers in JSON. Counts are `cl100k_base` estimates; your ratio depends on the tools you call.*\n\n### Native Copilot tools\n\nWhen the extension is installed, use these tools in Copilot Agent mode without configuring MCP:\n\n| Tool group | Capabilities |\n| --- | --- |\n| Navigation | Dependencies, reverse dependencies, imports, module resolution, workspace index status |\n| Symbols | Symbol graphs, callers, dependents, execution traces |\n| Refactoring | Breaking changes, impact analysis, unused symbols, dead-code scans, Git diff review |\n| Context | File logic, codemaps, unified graph context, natural-language graph queries |\n| Call graph | Cross-file caller/callee queries and neighbourhood expansion |\n\nThe graph-context tool is available as `#graphContext`. Other native references include `#graphDeps`, `#graphFindRefs`, `#graphCallers`, `#graphImpact`, `#graphCodemap`, `#graphTrace`, `#graphDeadCode`, `#graphReviewPr`, `#graphQuery`, and `#graphArchitectureDiagram`.\n\nThe native tools answer in compact TOON by default, like the MCP server. Pass `response_format: \"markdown\"` for readable tables, or `\"json\"` to get the raw object.\n\n### MCP server\n\nThe MCP server exposes 25 graph-analysis tools. Enable it in VS Code with `graph-it-live.enableMcpServer`, or start it from the CLI:\n\n```bash\ngraph-it serve\n```\n\nFor VS Code, add `.vscode/mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"graph-it-live\": {\n      \"type\": \"stdio\",\n      \"command\": \"graph-it\",\n      \"args\": [\"serve\"],\n      \"env\": {\n        \"WORKSPACE_ROOT\": \"${workspaceFolder}\"\n      }\n    }\n  }\n}\n```\n\nFor Cursor, use `.cursor/mcp.json` with the same server definition under `mcpServers` instead of `servers`. The same `graph-it serve` command works with Claude Desktop, Claude Code, Windsurf, and Antigravity. See the [CLI/MCP documentation](docs/CLI.md) for client-specific configuration and environment variables.\n\nFor Codex CLI:\n\n```bash\ncodex mcp add graph-it-live --env WORKSPACE_ROOT=/path/to/project -- graph-it serve\n```\n\n### Portable agent plugin\n\nThe [`plugins/graph-it-live/`](plugins/graph-it-live/) directory is the portable Agent Plugin package.\nIt bundles the MCP server and five skills: `graph-it-live`, `graph-it-refactor`, `onboarding-express`,\n`dead-code-hunter` and `pr-review`. Install it with the client you use:\n\n#### Claude Code\n\nFrom Claude Code, add the repository marketplace and install the plugin:\n\n```text\nclaude plugin marketplace add magic5644/Graph-It-Live\n/plugin install graph-it-live@graph-it-live\n```\n\nFor a local checkout, start a session with `claude --plugin-dir ./plugins/graph-it-live`.\n\n#### GitHub Copilot CLI\n\n```text\ncopilot plugin marketplace add magic5644/Graph-It-Live\ncopilot plugin install graph-it-live@graph-it-live\n```\n\n#### VS Code\n\n1. Open the Command Palette.\n2. Run **Chat: Install Plugin From Source**.\n3. Select `plugins/graph-it-live/`.\n\nThe VS Code extension itself remains available from the [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=magic5644.graph-it-live)\nand [Open VSX](https://open-vsx.org/extension/magic5644/graph-it-live).\n\n#### Cursor\n\nOpen the **Plugins** panel, choose **Install from local source**, and select\n`plugins/graph-it-live/`.\n\n#### Codex\n\nAdd the repository's [Codex marketplace catalog](.agents/plugins/marketplace.json) to a configured\nplugin marketplace, then open `/plugins` in Codex and install **Graph-It-Live**.\n\n#### Windsurf, Antigravity, and other MCP clients\n\nThese clients can use the MCP server directly. Add this server entry to the client's MCP configuration:\n\n```json\n{\n  \"graph-it-live\": {\n    \"type\": \"stdio\",\n    \"command\": \"npx\",\n    \"args\": [\"-y\", \"@magic5644/graph-it-live@latest\", \"serve\"]\n  }\n}\n```\n\nUse the client's MCP configuration file and its expected top-level key (`servers` or `mcpServers`).\nSee the [MCP server instructions](#mcp-server) for ready-to-copy VS Code, Cursor, and Codex examples.\n\nThe repository also includes marketplace catalogs for [Claude Code](.claude-plugin/marketplace.json),\n[GitHub Copilot](.github/plugin/marketplace.json) and [Codex](.agents/plugins/marketplace.json). The MCP entry pins the\nlatest published `@magic5644/graph-it-live` version and starts it with `npx`, so a\ncached package starts without a new download (npm still revalidates the package metadata); a workflow updates the pin, the plugin manifests and\nthe marketplace versions after each npm publish.\n\n### Agent skill\n\nInstall the Graph-It-Live skill for an AI agent:\n\n```bash\nnpx skills add magic5644/skills/graph-it-live\n```\n\nThe skill documents graph queries, codemaps, impact analysis, dead-code detection, and safe refactoring workflows.\n\n## Configuration\n\n### Branch Watch\n\nBranch Watch is disabled by default. Enable `graph-it-live.branchWatch.enabled` for a workspace folder, select a local Git base branch and optionally a local or remote head branch, and use the native Branch status view to inspect changes automatically (it starts collapsed in the Graph-It-Live panel: expand it, or run `Graph-It-Live: Show Branch Status`). Branch selections are stored per workspace in the ignored `.graph-it/branch-watch.json`; the `baseRef` and `headRef` settings are retained only as a legacy fallback. An empty head, or a head equal to the checked-out branch, uses the current branch plus the final on-disk state; another head branch compares committed branch refs and does not include untracked workspace files. It never fetches, runs tests, or reports test success. The view shows file impact for supported languages, the same signature review as `graph-it review-pr` (TypeScript, JavaScript, Vue and Python, deleted files included, an unreadable file reported as a limitation), the import cycles the changes introduce, aggravate or touch, and explicit limitations. Cycles are read from the whole import graphs, as `graph-it review-pr` reads them: the head from the warmed index (nothing is parsed again on a file event) and the merge base from a private Git copy, parsed once per merge-base commit and reused until the base moves. On each file event, only the edited files are compared again; importers and consumers are always read fresh. Impact traversal is intentionally bounded (depth 3 and at most `graph-it-live.branchWatch.maxFiles` files, 200 by default), so a partial result is reported with its risk and confidence instead of being presented as complete. Right-click any message row and choose `Copy Message` to pass the exact text to an LLM or issue. The reminder `Tests must pass before delivery.` is informational.\n\nBranch Watch requires the Graph-It-Live workspace root to be a supported Git repository. A folder without Git, an unborn or detached repository, conflicts, an inaccessible index, or an unsupported VCS is shown as `Branch watch unavailable`; the normal graph and CLI/MCP tools remain available.\n\nSet these options in VS Code settings:\n\n| Setting | Default | Purpose |\n| --- | --- | --- |\n| `graph-it-live.branchWatch.enabled` | `false` | Enable Branch Watch for the workspace folder |\n| `graph-it-live.branchWatch.maxFiles` | `200` | Limit the changed files Branch Watch analyzes and the files its impact walk visits; cycles are not bounded |\n| `graph-it-live.performanceProfile` | `default` | Select `default`, `low-memory`, `high-performance`, or `custom` |\n| `graph-it-live.enableMcpServer` | `false` | Enable the built-in MCP server |\n| `graph-it-live.maxDepth` | `50` | Limit dependency traversal depth |\n| `graph-it-live.excludeNodeModules` | `true` | Exclude dependencies from `node_modules` |\n| `graph-it-live.enableBackgroundIndexing` | `true` | Build reverse-dependency indexes in the background |\n| `graph-it-live.unusedDependencyMode` | `hide` | Hide or dim unused dependencies |\n| `graph-it-live.communityMode` | `path` | Group graph communities by folder (`path`) or by import structure (`louvain`); same as CLI `--communities` |\n| `graph-it-live.preIndexCallGraph` | `true` | Pre-index the Live Call Graph |\n| `graph-it-live.symbolViewLayout` | `hierarchical` | Select `hierarchical`, `force-directed`, or `radial` |\n\nWorkspace indexing (extension, CLI, and MCP) skips paths listed in the root `.gitignore`, plus `tests/fixtures/` and `out-*/` by default. Add a root `.graphitignore` with gitignore syntax to exclude more paths, or negate a rule to include it again, for example `!tests/fixtures/`.\n\n`performanceProfile` sets indexing concurrency, cache sizes, and unused-analysis limits. To tune them by hand, select `custom` and edit the **Advanced: Performance overrides** section (search `@tag:advanced graph-it-live` in the Settings editor). The other profiles ignore these overrides.\n\n## CI review gate\n\nThe `graph-it review-pr` command performs a deterministic local Git diff review before CI. It compares exported TypeScript, JavaScript, Vue and Python signatures, lists every file still importing a removed export, follows bounded dependent-symbol impact, and reports cycle evidence, unused exports, test candidates, and consumer standing. Consumers are classified as updated in the diff, covered by a test path, or unverified. The score reflects the highest-risk changed symbol; a high risk is report data, not a failing exit status. With a `graphit.architecture.json`, it also checks the rules on the base and on the head and says whether the diff degrades or improves the architecture: new, resolved and unchanged violations per rule, unit cycles, and edits of the rules files; a new `error` violation raises the risk and fails the Review Gate.\n\nBy default, `--base <ref>` is compared with the current working tree, including staged and unstaged file contents. Pass `--head <ref>` to compare two Git refs. Use `--depth` and `--max-files` to bound impact traversal and changed-file analysis. See the [`review-pr` CLI reference](docs/CLI.md#review-pr) for scoring thresholds, output formats, limitations, and examples.\n\n<div align=\"center\">\n  <img src=\"media/review-pr-architecture-rules.png\" alt=\"Rendered review-pr Markdown on the rules test fixture: Architecture rules DEGRADED, one new frontend-not-backend error violation from mfe/checkout to backend, one resolved violation from frontend, two unchanged unit cycles\" width=\"800\"/>\n</div>\n\n*`graph-it review-pr --base HEAD --format markdown` on the rules test fixture, rendered as the Review Gate Action posts it: the diff moves a backend import from `frontend` to `mfe/checkout`, so one violation is resolved and one new `error` violation fails the gate; the two existing unit cycles stay unchanged.*\n\nThe reusable GitHub Action is informational by default. Set `fail-on-risk: high` or `critical` to gate a pull request. Add it to a consumer workflow with [`docs/examples/graph-it-review-gate.yml`](docs/examples/graph-it-review-gate.yml).\n\nUse `pull_request`, not `pull_request_target`, for untrusted pull requests. The action analyzes the consumer checkout in an isolated temporary directory and sends only a sanitized report to GitHub.\n\n## Supported languages\n\n| Language | File graph | Symbol View | Live Call Graph |\n| --- | :---: | :---: | :---: |\n| TypeScript / JavaScript | Yes | Yes | Yes |\n| React (JSX / TSX) | Yes | Yes | Yes |\n| Vue 3 (SFC) | Yes | Yes | Yes |\n| Svelte | Yes | Yes | Yes |\n| Python | Yes | Yes | Yes |\n| Rust | Yes | Yes | Yes |\n| C# / Go / Java | Yes | No | Yes |\n| GraphQL | Yes | No | Yes |\n\n**Vue 3 single-file components** (Vue 3.x, `<script>` and `<script setup>`, JS, TS, JSX and TSX): imports, symbols and call graph nodes keep the line and column of the `.vue` file. The template links `<Child />`, handlers (`@click=\"save\"` passes, `save()` calls), interpolations, slots and custom directives to the script bindings they use, so a component used only in the template is not reported unused. `<script src>` and an HTML `<template src>` inside the workspace are read, and an edit of the external file refreshes its `.vue`. `.vue` files and the SFC component node show the Vue logo and green in every graph, apart from React. Review and Branch Watch report props and events added or removed by name.\n\n<div align=\"center\">\n  <img src=\"media/vue-call-graph.png\" alt=\"Call graph of the Parent Vue component on a test fixture: Parent references the Child and ChildRow components, the save handler and the LazyPanel async component, and calls format from format.ts\" width=\"600\"/>\n</div>\n\n*The Vue template in the Live Call Graph, on a test fixture: put the cursor in the `<template>` of `Parent.vue` and run **Graph-It-Live: Show Call Graph**. `<Child @save=\"save\" />` and `<child-row>` become `REFERENCES` edges (dashed), `{{ format(count) }}` and `@click=\"save()\"` become calls (solid). The green nodes with the Vue logo are SFC components.*\n\n<div align=\"center\">\n  <img src=\"media/vue-file-graph.png\" alt=\"File graph of Parent.vue on a test fixture: Parent.vue imports format.ts, ChildRow.vue and Child.vue, and the .vue files are green with the Vue logo\" width=\"600\"/>\n</div>\n\n*The file graph of the same fixture: open `Parent.vue` and run **Graph-It-Live: Show Dependency Graph**. `.vue` files are green with the Vue logo; the Vue badge in the legend names the mark.*\n\nNot resolved, and never guessed: Vue 2, Nuxt and other auto-imports, globally or plugin-registered components, a dynamic `:is`, a `pug` template, and an external file outside the workspace or reached through a symbolic link. A template that cannot be read fully counts every script binding as used. Props and events typed by an imported type or built at runtime are reported as partial; props/emits type compatibility is not checked. An external template edited while no Graph-It process is watching it is read again when its `.vue` changes or the index is rebuilt.\n\n## Documentation\n\n- [CLI reference](docs/CLI.md) — commands, REPL, output formats, and MCP tools\n- [Architecture guide](docs/architecture.md) — Architecture view, `graphit.architecture.json` rules, and `check-architecture`\n- [Development guide](DEVELOPMENT.md) — setup, builds, tests, and WASM architecture\n- [Contributing guide](CONTRIBUTING.md) — contribution workflow and conventions\n- [System architecture](docs/architecture/codemaps/architecture.md)\n- [Class hierarchy](docs/architecture/codemaps/class-hierarchy.md)\n- [TOON format](docs/architecture/TOON_FORMAT.md)\n- [Coding standards](docs/development/CODING_STANDARDS.md)\n- [Cross-platform testing](docs/development/CROSS_PLATFORM_TESTING.md)\n- [Performance optimizations](docs/architecture/PERFORMANCE_OPTIMIZATIONS.md)\n- [Documentation index](docs/README.md)\n\n## Development\n\nRequirements: Node.js 22 or later and npm.\n\n```bash\ngit clone https://github.com/magic5644/Graph-It-Live.git\ncd Graph-It-Live\nnpm install\nnpm run build\n```\n\nPress F5 in VS Code to launch the Extension Development Host.\n\n| Command | Purpose |\n| --- | --- |\n| `npm run build` | Build the extension and copy WASM assets |\n| `npm test` | Run unit tests |\n| `npm run test:cli` | Run CLI tests |\n| `npm run test:vscode` | Run VS Code E2E tests |\n| `npm run lint` | Run ESLint |\n| `npm run check:types` | Run strict TypeScript checks |\n| `npm run package` | Build the VSIX package |\n| `npm run package:verify` | Verify package contents |\n\nSee [DEVELOPMENT.md](DEVELOPMENT.md) for the full project structure, test strategy, WASM details, and troubleshooting.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n\nLanguage icons are provided by [SuperTinyIcons](https://github.com/edent/SuperTinyIcons) under the CC0-1.0 license.\n\n## Star History\n\n<a href=\"https://www.star-history.com/?repos=magic5644%2FGraph-It-Live&type=date&legend=top-left\">\n <picture>\n   <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/chart?repos=magic5644/Graph-It-Live&type=date&theme=dark&legend=top-left&sealed_token=tKWEQ11VLzMx4dC3ZHvyM8J379zHlmU2lUlVABHWQ0yWeTNDwbvy9zxbYFSFiAod0MZ9RHDFy-KYuzkXEI37LhEfGiMP0nsPPtRiLlYlkl53OsTFff_MFSn2SNJXeoPlb3AzuInU8ln9JYhKJIZs4-LgsJ2R8z5pGIFFQBJmfiWvlywCcW-8XbztB03E\" />\n   <source media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/chart?repos=magic5644/Graph-It-Live&type=date&legend=top-left&sealed_token=tKWEQ11VLzMx4dC3ZHvyM8J379zHlmU2lUlVABHWQ0yWeTNDwbvy9zxbYFSFiAod0MZ9RHDFy-KYuzkXEI37LhEfGiMP0nsPPtRiLlYlkl53OsTFff_MFSn2SNJXeoPlb3AzuInU8ln9JYhKJIZs4-LgsJ2R8z5pGIFFQBJmfiWvlywCcW-8XbztB03E\" />\n   <img alt=\"Star History Chart\" src=\"https://api.star-history.com/chart?repos=magic5644/Graph-It-Live&type=date&legend=top-left&sealed_token=tKWEQ11VLzMx4dC3ZHvyM8J379zHlmU2lUlVABHWQ0yWeTNDwbvy9zxbYFSFiAod0MZ9RHDFy-KYuzkXEI37LhEfGiMP0nsPPtRiLlYlkl53OsTFff_MFSn2SNJXeoPlb3AzuInU8ln9JYhKJIZs4-LgsJ2R8z5pGIFFQBJmfiWvlywCcW-8XbztB03E\" />\n </picture>\n</a>\n","readmeFilename":"README.md"}