codegraphcontext 0.1.40__tar.gz → 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. {codegraphcontext-0.1.40/src/codegraphcontext.egg-info → codegraphcontext-0.2.0}/PKG-INFO +9 -4
  2. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/README.md +8 -3
  3. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/pyproject.toml +1 -1
  4. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/cli/config_manager.py +2 -2
  5. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/cli/main.py +35 -35
  6. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/cli/setup_wizard.py +6 -6
  7. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/cli/visualizer.py +17 -17
  8. codegraphcontext-0.2.0/src/codegraphcontext/core/bundle_registry.py +171 -0
  9. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/core/cgc_bundle.py +77 -9
  10. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/core/database.py +2 -1
  11. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/prompts.py +6 -4
  12. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tool_definitions.py +2 -2
  13. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/code_finder.py +96 -96
  14. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/graph_builder.py +66 -66
  15. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/handlers/analysis_handlers.py +4 -4
  16. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/handlers/management_handlers.py +49 -10
  17. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/c.py +7 -7
  18. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/cpp.py +7 -7
  19. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/csharp.py +30 -30
  20. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/go.py +7 -7
  21. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/haskell.py +24 -24
  22. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/java.py +23 -23
  23. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/javascript.py +7 -7
  24. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/kotlin.py +24 -24
  25. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/php.py +18 -18
  26. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/python.py +14 -14
  27. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/ruby.py +7 -7
  28. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/rust.py +7 -7
  29. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/scala.py +27 -27
  30. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/swift.py +23 -23
  31. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/typescript.py +9 -9
  32. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/languages/typescriptjsx.py +7 -7
  33. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/query_tool_languages/cpp_toolkit.py +14 -14
  34. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/system.py +2 -2
  35. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0/src/codegraphcontext.egg-info}/PKG-INFO +9 -4
  36. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext.egg-info/SOURCES.txt +1 -0
  37. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/LICENSE +0 -0
  38. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/MANIFEST.in +0 -0
  39. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/setup.cfg +0 -0
  40. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/__init__.py +0 -0
  41. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/__main__.py +0 -0
  42. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/cli/__init__.py +0 -0
  43. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/cli/cli_helpers.py +0 -0
  44. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/cli/registry_commands.py +0 -0
  45. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/cli/setup_macos.py +0 -0
  46. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/core/__init__.py +0 -0
  47. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/core/database_falkordb.py +0 -0
  48. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/core/falkor_worker.py +0 -0
  49. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/core/jobs.py +0 -0
  50. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/core/watcher.py +0 -0
  51. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/server.py +0 -0
  52. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/__init__.py +0 -0
  53. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/advanced_language_query_tool.py +0 -0
  54. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/handlers/indexing_handlers.py +0 -0
  55. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/handlers/query_handlers.py +0 -0
  56. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/handlers/watcher_handlers.py +0 -0
  57. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/package_resolver.py +0 -0
  58. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/query_tool_languages/c_toolkit.py +0 -0
  59. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/query_tool_languages/csharp_toolkit.py +0 -0
  60. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/query_tool_languages/go_toolkit.py +0 -0
  61. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/query_tool_languages/haskell_toolkit.py +0 -0
  62. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/query_tool_languages/java_toolkit.py +0 -0
  63. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/query_tool_languages/javascript_toolkit.py +0 -0
  64. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/query_tool_languages/python_toolkit.py +0 -0
  65. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/query_tool_languages/ruby_toolkit.py +0 -0
  66. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/query_tool_languages/rust_toolkit.py +0 -0
  67. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/query_tool_languages/scala_toolkit.py +0 -0
  68. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/query_tool_languages/swift_toolkit.py +0 -0
  69. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/tools/query_tool_languages/typescript_toolkit.py +0 -0
  70. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/utils/debug_log.py +0 -0
  71. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/utils/tree_sitter_manager.py +0 -0
  72. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext/utils/visualize_graph.py +0 -0
  73. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext.egg-info/dependency_links.txt +0 -0
  74. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext.egg-info/entry_points.txt +0 -0
  75. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext.egg-info/requires.txt +0 -0
  76. {codegraphcontext-0.1.40 → codegraphcontext-0.2.0}/src/codegraphcontext.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codegraphcontext
3
- Version: 0.1.40
3
+ Version: 0.2.0
4
4
  Summary: An MCP server that indexes local code into a graph database to provide context to AI assistants.
5
5
  Author-email: Shashank Shekhar Singh <shashankshekharsingh1205@gmail.com>
6
6
  License: MIT License
@@ -113,6 +113,7 @@ Dynamic: license-file
113
113
  </a>
114
114
  </p>
115
115
 
116
+
116
117
  A powerful **MCP server** and **CLI toolkit** that indexes local code into a graph database to provide context to AI assistants and developers. Use it as a standalone CLI for comprehensive code analysis or connect it to your favorite AI IDE via MCP for AI-powered code understanding.
117
118
 
118
119
  ---
@@ -128,6 +129,12 @@ A powerful **MCP server** and **CLI toolkit** that indexes local code into a gra
128
129
 
129
130
  ## ✨ Experience CGC
130
131
 
132
+
133
+ ### 👨🏻‍💻 Installation and CLI
134
+ > Install in seconds with pip and unlock a powerful CLI for code graph analysis.
135
+ ![Install and unlock the CLI instantly](https://github.com/CodeGraphContext/CodeGraphContext/blob/main/images/install&cli.gif)
136
+
137
+
131
138
  ### 🛠️ Indexing in Seconds
132
139
  > The CLI intelligently parses your tree-sitter nodes to build the graph.
133
140
  ![Indexing using an MCP client](https://github.com/CodeGraphContext/CodeGraphContext/blob/main/images/Indexing.gif)
@@ -139,7 +146,7 @@ A powerful **MCP server** and **CLI toolkit** that indexes local code into a gra
139
146
  ---
140
147
 
141
148
  ## Project Details
142
- - **Version:** 0.1.40
149
+ - **Version:** 0.2.0
143
150
  - **Authors:** Shashank Shekhar Singh <shashankshekharsingh1205@gmail.com>
144
151
  - **License:** MIT License (See [LICENSE](LICENSE) for details)
145
152
  - **Website:** [CodeGraphContext](http://codegraphcontext.vercel.app/)
@@ -418,8 +425,6 @@ Add the following server configuration to your client's settings file (e.g., VS
418
425
  "NEO4J_URI": "YOUR_NEO4J_URI",
419
426
  "NEO4J_USERNAME": "YOUR_NEO4J_USERNAME",
420
427
  "NEO4J_PASSWORD": "YOUR_NEO4J_PASSWORD"
421
- },
422
- "disabled": false
423
428
  },
424
429
  "disabled": false,
425
430
  "alwaysAllow": []
@@ -51,6 +51,7 @@
51
51
  </a>
52
52
  </p>
53
53
 
54
+
54
55
  A powerful **MCP server** and **CLI toolkit** that indexes local code into a graph database to provide context to AI assistants and developers. Use it as a standalone CLI for comprehensive code analysis or connect it to your favorite AI IDE via MCP for AI-powered code understanding.
55
56
 
56
57
  ---
@@ -66,6 +67,12 @@ A powerful **MCP server** and **CLI toolkit** that indexes local code into a gra
66
67
 
67
68
  ## ✨ Experience CGC
68
69
 
70
+
71
+ ### 👨🏻‍💻 Installation and CLI
72
+ > Install in seconds with pip and unlock a powerful CLI for code graph analysis.
73
+ ![Install and unlock the CLI instantly](https://github.com/CodeGraphContext/CodeGraphContext/blob/main/images/install&cli.gif)
74
+
75
+
69
76
  ### 🛠️ Indexing in Seconds
70
77
  > The CLI intelligently parses your tree-sitter nodes to build the graph.
71
78
  ![Indexing using an MCP client](https://github.com/CodeGraphContext/CodeGraphContext/blob/main/images/Indexing.gif)
@@ -77,7 +84,7 @@ A powerful **MCP server** and **CLI toolkit** that indexes local code into a gra
77
84
  ---
78
85
 
79
86
  ## Project Details
80
- - **Version:** 0.1.40
87
+ - **Version:** 0.2.0
81
88
  - **Authors:** Shashank Shekhar Singh <shashankshekharsingh1205@gmail.com>
82
89
  - **License:** MIT License (See [LICENSE](LICENSE) for details)
83
90
  - **Website:** [CodeGraphContext](http://codegraphcontext.vercel.app/)
@@ -356,8 +363,6 @@ Add the following server configuration to your client's settings file (e.g., VS
356
363
  "NEO4J_URI": "YOUR_NEO4J_URI",
357
364
  "NEO4J_USERNAME": "YOUR_NEO4J_USERNAME",
358
365
  "NEO4J_PASSWORD": "YOUR_NEO4J_PASSWORD"
359
- },
360
- "disabled": false
361
366
  },
362
367
  "disabled": false,
363
368
  "alwaysAllow": []
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "codegraphcontext"
3
- version = "0.1.40"
3
+ version = "0.2.0"
4
4
  description = "An MCP server that indexes local code into a graph database to provide context to AI assistants."
5
5
  authors = [{ name = "Shashank Shekhar Singh", email = "shashankshekharsingh1205@gmail.com" }]
6
6
  readme = "README.md"
@@ -38,7 +38,7 @@ DEFAULT_CONFIG = {
38
38
  "PARALLEL_WORKERS": "4",
39
39
  "CACHE_ENABLED": "true",
40
40
  "IGNORE_DIRS": "node_modules,venv,.venv,env,.env,dist,build,target,out,.git,.idea,.vscode,__pycache__",
41
- "INDEX_SOURCE": "false",
41
+ "INDEX_SOURCE": "true",
42
42
  }
43
43
 
44
44
  # Configuration key descriptions
@@ -61,7 +61,7 @@ CONFIG_DESCRIPTIONS = {
61
61
  "PARALLEL_WORKERS": "Number of parallel indexing workers",
62
62
  "CACHE_ENABLED": "Enable caching for faster re-indexing",
63
63
  "IGNORE_DIRS": "Comma-separated list of directory names to ignore during indexing",
64
- "INDEX_SOURCE": "Store full source code in graph database (recommended false)",
64
+ "INDEX_SOURCE": "Store full source code in graph database (for faster indexing use false, for better performance use true)",
65
65
  }
66
66
 
67
67
  # Valid values for each config key
@@ -1049,7 +1049,7 @@ def find_by_name(
1049
1049
  for f in funcs: f['type'] = 'Function'
1050
1050
  for c in classes: c['type'] = 'Class'
1051
1051
  for v in variables: v['type'] = 'Variable'
1052
- for m in modules: m['type'] = 'Module'; m['file_path'] = m.get('name', 'External') # Modules might differ
1052
+ for m in modules: m['type'] = 'Module'; m['path'] = m.get('name', 'External') # Modules might differ
1053
1053
  for i in imports:
1054
1054
  i['type'] = 'Import'
1055
1055
  i['name'] = i.get('alias') or i.get('imported_name')
@@ -1076,12 +1076,12 @@ def find_by_name(
1076
1076
  results = code_finder.find_by_module_name(name)
1077
1077
  for r in results:
1078
1078
  r['type'] = 'Module'
1079
- r['file_path'] = r.get('name')
1079
+ r['path'] = r.get('name')
1080
1080
 
1081
1081
  elif type.lower() == 'file':
1082
1082
  # Quick query for file
1083
1083
  with db_manager.get_driver().session() as session:
1084
- res = session.run("MATCH (n:File) WHERE n.name = $name RETURN n.name as name, n.path as file_path, n.is_dependency as is_dependency", name=name)
1084
+ res = session.run("MATCH (n:File) WHERE n.name = $name RETURN n.name as name, n.path as path, n.is_dependency as is_dependency", name=name)
1085
1085
  results = [dict(record) for record in res]
1086
1086
  for r in results: r['type'] = 'File'
1087
1087
 
@@ -1100,9 +1100,9 @@ def find_by_name(
1100
1100
  table.add_column("Location", style="dim", overflow="fold")
1101
1101
 
1102
1102
  for res in results:
1103
- file_path = res.get('file_path', '') or ''
1103
+ path = res.get('path', '') or ''
1104
1104
  line_str = str(res.get('line_number', ''))
1105
- location_str = f"{file_path}:{line_str}" if line_str else file_path
1105
+ location_str = f"{path}:{line_str}" if line_str else path
1106
1106
 
1107
1107
  table.add_row(
1108
1108
  res.get('name', ''),
@@ -1148,7 +1148,7 @@ def find_by_pattern(
1148
1148
  RETURN
1149
1149
  labels(n)[0] as type,
1150
1150
  n.name as name,
1151
- n.file_path as file_path,
1151
+ n.path as path,
1152
1152
  n.line_number as line_number,
1153
1153
  n.is_dependency as is_dependency
1154
1154
  ORDER BY n.is_dependency ASC, n.name
@@ -1161,7 +1161,7 @@ def find_by_pattern(
1161
1161
  RETURN
1162
1162
  labels(n)[0] as type,
1163
1163
  n.name as name,
1164
- n.file_path as file_path,
1164
+ n.path as path,
1165
1165
  n.line_number as line_number,
1166
1166
  n.is_dependency as is_dependency
1167
1167
  ORDER BY n.is_dependency ASC, n.name
@@ -1191,9 +1191,9 @@ def find_by_pattern(
1191
1191
  table.add_column("Source", style="yellow")
1192
1192
 
1193
1193
  for res in results:
1194
- file_path = res.get('file_path', '') or ''
1194
+ path = res.get('path', '') or ''
1195
1195
  line_str = str(res.get('line_number', '') if res.get('line_number') is not None else '')
1196
- location_str = f"{file_path}:{line_str}" if line_str else file_path
1196
+ location_str = f"{path}:{line_str}" if line_str else path
1197
1197
 
1198
1198
  table.add_row(
1199
1199
  res.get('name', ''),
@@ -1250,9 +1250,9 @@ def find_by_type(
1250
1250
  table.add_column("Source", style="yellow")
1251
1251
 
1252
1252
  for res in results:
1253
- file_path = res.get('file_path', '') or ''
1253
+ path = res.get('path', '') or ''
1254
1254
  line_str = str(res.get('line_number', ''))
1255
- location_str = f"{file_path}:{line_str}" if line_str else file_path
1255
+ location_str = f"{path}:{line_str}" if line_str else path
1256
1256
 
1257
1257
  table.add_row(
1258
1258
  res.get('name', ''),
@@ -1295,9 +1295,9 @@ def find_by_variable(
1295
1295
  table.add_column("Context", style="yellow")
1296
1296
 
1297
1297
  for res in results:
1298
- file_path = res.get('file_path', '') or ''
1298
+ path = res.get('path', '') or ''
1299
1299
  line_str = str(res.get('line_number', ''))
1300
- location_str = f"{file_path}:{line_str}" if line_str else file_path
1300
+ location_str = f"{path}:{line_str}" if line_str else path
1301
1301
 
1302
1302
  table.add_row(
1303
1303
  res.get('name', ''),
@@ -1355,9 +1355,9 @@ def find_by_content_search(
1355
1355
  table.add_column("Location", style="dim", overflow="fold")
1356
1356
 
1357
1357
  for res in results:
1358
- file_path = res.get('file_path', '') or ''
1358
+ path = res.get('path', '') or ''
1359
1359
  line_str = str(res.get('line_number', ''))
1360
- location_str = f"{file_path}:{line_str}" if line_str else file_path
1360
+ location_str = f"{path}:{line_str}" if line_str else path
1361
1361
 
1362
1362
  table.add_row(
1363
1363
  res.get('name', ''),
@@ -1402,9 +1402,9 @@ def find_by_decorator_search(
1402
1402
 
1403
1403
  for res in results:
1404
1404
  decorators_str = ", ".join(res.get('decorators', []))
1405
- file_path = res.get('file_path', '') or ''
1405
+ path = res.get('path', '') or ''
1406
1406
  line_str = str(res.get('line_number', ''))
1407
- location_str = f"{file_path}:{line_str}" if line_str else file_path
1407
+ location_str = f"{path}:{line_str}" if line_str else path
1408
1408
 
1409
1409
  table.add_row(
1410
1410
  res.get('function_name', ''),
@@ -1447,9 +1447,9 @@ def find_by_argument_search(
1447
1447
  table.add_column("Location", style="dim", overflow="fold")
1448
1448
 
1449
1449
  for res in results:
1450
- file_path = res.get('file_path', '') or ''
1450
+ path = res.get('path', '') or ''
1451
1451
  line_str = str(res.get('line_number', ''))
1452
- location_str = f"{file_path}:{line_str}" if line_str else file_path
1452
+ location_str = f"{path}:{line_str}" if line_str else path
1453
1453
 
1454
1454
  table.add_row(
1455
1455
  res.get('function_name', ''),
@@ -1508,9 +1508,9 @@ def analyze_calls(
1508
1508
  table.add_column("Type", style="yellow")
1509
1509
 
1510
1510
  for result in results:
1511
- file_path = result.get("called_file_path", "")
1511
+ path = result.get("called_file_path", "")
1512
1512
  line_str = str(result.get("called_line_number", ""))
1513
- location_str = f"{file_path}:{line_str}" if line_str else file_path
1513
+ location_str = f"{path}:{line_str}" if line_str else path
1514
1514
 
1515
1515
  table.add_row(
1516
1516
  result.get("called_function", ""),
@@ -1564,10 +1564,10 @@ def analyze_callers(
1564
1564
 
1565
1565
 
1566
1566
  for result in results:
1567
- file_path = result.get("caller_file_path", "")
1567
+ path = result.get("caller_file_path", "")
1568
1568
  line_number = result.get("caller_line_number")
1569
1569
 
1570
- location = f"{file_path}:{line_number}" if line_number else file_path
1570
+ location = f"{path}:{line_number}" if line_number else path
1571
1571
 
1572
1572
  table.add_row(
1573
1573
  result.get("caller_function", ""),
@@ -1627,7 +1627,7 @@ def analyze_chain(
1627
1627
  indent = " " * i
1628
1628
 
1629
1629
  # Print function
1630
- console.print(f"{indent}[cyan]{func.get('name', 'Unknown')}[/cyan] [dim]({func.get('file_path', '')}:{func.get('line_number', '')})[/dim]")
1630
+ console.print(f"{indent}[cyan]{func.get('name', 'Unknown')}[/cyan] [dim]({func.get('path', '')}:{func.get('line_number', '')})[/dim]")
1631
1631
 
1632
1632
  # If there is a next step, print the connecting call detail
1633
1633
  if i < len(functions) - 1 and i < len(call_details):
@@ -1694,9 +1694,9 @@ def analyze_dependencies(
1694
1694
  table.add_column("Location", style="cyan", overflow="fold")
1695
1695
 
1696
1696
  for imp in results['importers']:
1697
- file_path = imp.get('importer_file_path', '')
1697
+ path = imp.get('importer_file_path', '')
1698
1698
  line_str = str(imp.get('import_line_number', ''))
1699
- location_str = f"{file_path}:{line_str}" if line_str else file_path
1699
+ location_str = f"{path}:{line_str}" if line_str else path
1700
1700
 
1701
1701
  table.add_row(
1702
1702
  location_str
@@ -1799,7 +1799,7 @@ def analyze_complexity(
1799
1799
  if result:
1800
1800
  console.print(f"\n[bold cyan]Complexity for '{path}':[/bold cyan]")
1801
1801
  console.print(f" Cyclomatic Complexity: [yellow]{result.get('complexity', 'N/A')}[/yellow]")
1802
- console.print(f" File: [dim]{result.get('file_path', '')}[/dim]")
1802
+ console.print(f" File: [dim]{result.get('path', '')}[/dim]")
1803
1803
  console.print(f" Line: [dim]{result.get('line_number', '')}[/dim]")
1804
1804
  else:
1805
1805
  console.print(f"[yellow]Function '{path}' not found or has no complexity data[/yellow]")
@@ -1819,9 +1819,9 @@ def analyze_complexity(
1819
1819
  for func in results:
1820
1820
  complexity = func.get('complexity', 0)
1821
1821
  color = "red" if complexity > threshold else "yellow" if complexity > threshold/2 else "green"
1822
- file_path = func.get('file_path', '')
1822
+ path = func.get('path', '')
1823
1823
  line_str = str(func.get('line_number', ''))
1824
- location_str = f"{file_path}:{line_str}" if line_str else file_path
1824
+ location_str = f"{path}:{line_str}" if line_str else path
1825
1825
 
1826
1826
  table.add_row(
1827
1827
  func.get('function_name', ''),
@@ -1868,9 +1868,9 @@ def analyze_dead_code(
1868
1868
  table.add_column("Location", style="dim", overflow="fold")
1869
1869
 
1870
1870
  for func in unused_funcs:
1871
- file_path = func.get('file_path', '')
1871
+ path = func.get('path', '')
1872
1872
  line_str = str(func.get('line_number', ''))
1873
- location_str = f"{file_path}:{line_str}" if line_str else file_path
1873
+ location_str = f"{path}:{line_str}" if line_str else path
1874
1874
 
1875
1875
  table.add_row(
1876
1876
  func.get('function_name', ''),
@@ -1924,9 +1924,9 @@ def analyze_overrides(
1924
1924
  table.add_column("Location", style="dim", overflow="fold")
1925
1925
 
1926
1926
  for res in results:
1927
- file_path = res.get('class_file_path', '')
1927
+ path = res.get('class_file_path', '')
1928
1928
  line_str = str(res.get('function_line_number', ''))
1929
- location_str = f"{file_path}:{line_str}" if line_str else file_path
1929
+ location_str = f"{path}:{line_str}" if line_str else path
1930
1930
 
1931
1931
  table.add_row(
1932
1932
  res.get('class_name', ''),
@@ -1989,9 +1989,9 @@ def analyze_variable_usage(
1989
1989
  table.add_column("Value", style="yellow")
1990
1990
 
1991
1991
  for item in items:
1992
- file_path = item.get('file_path', '')
1992
+ path = item.get('path', '')
1993
1993
  line_str = str(item.get('line_number', ''))
1994
- location_str = f"{file_path}:{line_str}" if line_str else file_path
1994
+ location_str = f"{path}:{line_str}" if line_str else path
1995
1995
 
1996
1996
  table.add_row(
1997
1997
  item.get('scope_name', ''),
@@ -466,9 +466,9 @@ def setup_existing_db():
466
466
  {"type": "input", "message": "Please enter the path to your credentials file:", "name": "cred_file_path"}
467
467
  ]
468
468
  file_path_str = prompt(path_questions).get("cred_file_path", "")
469
- file_path = Path(file_path_str.strip())
470
- if file_path.exists() and file_path.is_file():
471
- file_to_parse = file_path
469
+ path = Path(file_path_str.strip())
470
+ if path.exists() and path.is_file():
471
+ file_to_parse = path
472
472
  else:
473
473
  console.print("[red]❌ The specified file path does not exist or is not a file.[/red]")
474
474
  return
@@ -584,9 +584,9 @@ def setup_hosted_db():
584
584
  {"type": "input", "message": "Please enter the path to your credentials file:", "name": "cred_file_path"}
585
585
  ]
586
586
  file_path_str = prompt(path_questions).get("cred_file_path", "")
587
- file_path = Path(file_path_str.strip())
588
- if file_path.exists() and file_path.is_file():
589
- file_to_parse = file_path
587
+ path = Path(file_path_str.strip())
588
+ if path.exists() and path.is_file():
589
+ file_to_parse = path
590
590
  else:
591
591
  console.print("[red]❌ The specified file path does not exist or is not a file.[/red]")
592
592
  return
@@ -486,13 +486,13 @@ def visualize_call_graph(
486
486
  if direction == "outgoing":
487
487
  # calls: function_name -> called_function
488
488
  func_name = result.get("called_function", f"unknown_{idx}")
489
- file_path = result.get("called_file_path", "")
489
+ path = result.get("called_file_path", "")
490
490
  line_num = result.get("called_line_number", "")
491
491
  is_dep = result.get("called_is_dependency", False)
492
492
  else:
493
493
  # callers: caller_function -> function_name
494
494
  func_name = result.get("caller_function", f"unknown_{idx}")
495
- file_path = result.get("caller_file_path", "")
495
+ path = result.get("caller_file_path", "")
496
496
  line_num = result.get("caller_line_number", "")
497
497
  is_dep = result.get("caller_is_dependency", False)
498
498
 
@@ -507,7 +507,7 @@ def visualize_call_graph(
507
507
  "id": node_id,
508
508
  "label": func_name,
509
509
  "group": node_type,
510
- "title": f"{func_name}\nFile: {file_path}\nLine: {line_num}",
510
+ "title": f"{func_name}\nFile: {path}\nLine: {line_num}",
511
511
  "color": color
512
512
  })
513
513
  seen_nodes.add(node_id)
@@ -563,7 +563,7 @@ def visualize_call_chain(
563
563
 
564
564
  for idx, func in enumerate(functions):
565
565
  func_name = func.get("name", f"unknown_{idx}")
566
- file_path = func.get("file_path", "")
566
+ path = func.get("path", "")
567
567
  line_num = func.get("line_number", "")
568
568
 
569
569
  node_id = f"chain{chain_idx}_{func_name}_{idx}"
@@ -582,7 +582,7 @@ def visualize_call_chain(
582
582
  "id": node_id,
583
583
  "label": func_name,
584
584
  "group": node_type,
585
- "title": f"{func_name}\nFile: {file_path}\nLine: {line_num}",
585
+ "title": f"{func_name}\nFile: {path}\nLine: {line_num}",
586
586
  "color": color,
587
587
  "level": idx # For hierarchical layout
588
588
  })
@@ -647,8 +647,8 @@ def visualize_dependencies(
647
647
 
648
648
  # Files that import this module
649
649
  for idx, imp in enumerate(importers):
650
- file_path = imp.get("importer_file_path", f"file_{idx}")
651
- file_name = Path(file_path).name if file_path else f"file_{idx}"
650
+ path = imp.get("importer_file_path", f"file_{idx}")
651
+ file_name = Path(path).name if path else f"file_{idx}"
652
652
  node_id = f"importer_{idx}"
653
653
 
654
654
  if node_id not in seen_nodes:
@@ -657,7 +657,7 @@ def visualize_dependencies(
657
657
  "id": node_id,
658
658
  "label": file_name,
659
659
  "group": "Importer",
660
- "title": f"File: {file_path}\nLine: {imp.get('import_line_number', '')}",
660
+ "title": f"File: {path}\nLine: {imp.get('import_line_number', '')}",
661
661
  "color": color
662
662
  })
663
663
  seen_nodes.add(node_id)
@@ -747,7 +747,7 @@ def visualize_inheritance_tree(
747
747
  # Parent classes (above)
748
748
  for idx, parent in enumerate(parents):
749
749
  parent_name = parent.get("parent_class", f"Parent_{idx}")
750
- file_path = parent.get("parent_file_path", "")
750
+ path = parent.get("parent_file_path", "")
751
751
  node_id = f"parent_{idx}"
752
752
 
753
753
  if node_id not in seen_nodes:
@@ -756,7 +756,7 @@ def visualize_inheritance_tree(
756
756
  "id": node_id,
757
757
  "label": parent_name,
758
758
  "group": "Parent",
759
- "title": f"Parent: {parent_name}\nFile: {file_path}",
759
+ "title": f"Parent: {parent_name}\nFile: {path}",
760
760
  "color": color,
761
761
  "level": 0 # Top level
762
762
  })
@@ -772,7 +772,7 @@ def visualize_inheritance_tree(
772
772
  # Child classes (below)
773
773
  for idx, child in enumerate(children):
774
774
  child_name = child.get("child_class", f"Child_{idx}")
775
- file_path = child.get("child_file_path", "")
775
+ path = child.get("child_file_path", "")
776
776
  node_id = f"child_{idx}"
777
777
 
778
778
  if node_id not in seen_nodes:
@@ -781,7 +781,7 @@ def visualize_inheritance_tree(
781
781
  "id": node_id,
782
782
  "label": child_name,
783
783
  "group": "Child",
784
- "title": f"Child: {child_name}\nFile: {file_path}",
784
+ "title": f"Child: {child_name}\nFile: {path}",
785
785
  "color": color,
786
786
  "level": 2 # Bottom level
787
787
  })
@@ -839,7 +839,7 @@ def visualize_overrides(
839
839
  # Classes implementing this method
840
840
  for idx, res in enumerate(results):
841
841
  class_name = res.get("class_name", f"Class_{idx}")
842
- file_path = res.get("class_file_path", "")
842
+ path = res.get("class_file_path", "")
843
843
  line_num = res.get("function_line_number", "")
844
844
  node_id = f"class_{idx}"
845
845
 
@@ -849,7 +849,7 @@ def visualize_overrides(
849
849
  "id": node_id,
850
850
  "label": class_name,
851
851
  "group": "Class",
852
- "title": f"Class: {class_name}\nFile: {file_path}\nLine: {line_num}",
852
+ "title": f"Class: {class_name}\nFile: {path}\nLine: {line_num}",
853
853
  "color": color
854
854
  })
855
855
  seen_nodes.add(node_id)
@@ -877,7 +877,7 @@ def visualize_search_results(
877
877
  Visualize search/find results as a cluster of nodes.
878
878
 
879
879
  Args:
880
- results: List of search results with name, type, file_path, etc.
880
+ results: List of search results with name, type, path, etc.
881
881
  search_term: The search term used
882
882
  search_type: Type of search (name, pattern, type)
883
883
 
@@ -908,7 +908,7 @@ def visualize_search_results(
908
908
  for idx, res in enumerate(results):
909
909
  name = res.get("name", f"result_{idx}")
910
910
  node_type = res.get("type", "Unknown")
911
- file_path = res.get("file_path", "")
911
+ path = res.get("path", "")
912
912
  line_num = res.get("line_number", "")
913
913
  is_dep = res.get("is_dependency", False)
914
914
 
@@ -920,7 +920,7 @@ def visualize_search_results(
920
920
  "id": node_id,
921
921
  "label": name,
922
922
  "group": node_type,
923
- "title": f"{node_type}: {name}\nFile: {file_path}\nLine: {line_num}",
923
+ "title": f"{node_type}: {name}\nFile: {path}\nLine: {line_num}",
924
924
  "color": color
925
925
  })
926
926
  seen_nodes.add(node_id)