codeboarding 0.9.4__tar.gz → 0.9.6__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 (166) hide show
  1. {codeboarding-0.9.4/codeboarding.egg-info → codeboarding-0.9.6}/PKG-INFO +16 -20
  2. {codeboarding-0.9.4 → codeboarding-0.9.6}/PYPI.md +14 -0
  3. codeboarding-0.9.6/README.md +159 -0
  4. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/abstraction_agent.py +27 -20
  5. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/agent.py +92 -156
  6. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/agent_responses.py +98 -30
  7. codeboarding-0.9.6/agents/change_status.py +9 -0
  8. codeboarding-0.9.6/agents/cluster_methods_mixin.py +601 -0
  9. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/constants.py +1 -1
  10. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/details_agent.py +82 -25
  11. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/llm_config.py +3 -3
  12. codeboarding-0.9.6/agents/meta_agent.py +67 -0
  13. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/planner_agent.py +19 -7
  14. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/__init__.py +0 -3
  15. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/abstract_prompt_factory.py +0 -4
  16. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/claude_prompts.py +66 -59
  17. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/deepseek_prompts.py +66 -62
  18. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/gemini_flash_prompts.py +66 -59
  19. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/glm_prompts.py +70 -65
  20. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/gpt_prompts.py +66 -59
  21. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/kimi_prompts.py +65 -65
  22. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/prompt_factory.py +0 -4
  23. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_cfg.py +6 -5
  24. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_file_structure.py +1 -2
  25. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_source.py +10 -30
  26. codeboarding-0.9.6/agents/validation.py +630 -0
  27. codeboarding-0.9.6/caching/__init__.py +12 -0
  28. codeboarding-0.9.6/caching/cache.py +310 -0
  29. codeboarding-0.9.6/caching/details_cache.py +58 -0
  30. codeboarding-0.9.6/caching/meta_cache.py +111 -0
  31. {codeboarding-0.9.4 → codeboarding-0.9.6/codeboarding.egg-info}/PKG-INFO +16 -20
  32. {codeboarding-0.9.4 → codeboarding-0.9.6}/codeboarding.egg-info/SOURCES.txt +12 -16
  33. {codeboarding-0.9.4 → codeboarding-0.9.6}/codeboarding.egg-info/requires.txt +0 -17
  34. {codeboarding-0.9.4 → codeboarding-0.9.6}/codeboarding.egg-info/top_level.txt +1 -0
  35. codeboarding-0.9.6/constants.py +14 -0
  36. {codeboarding-0.9.4 → codeboarding-0.9.6}/diagram_analysis/__init__.py +1 -1
  37. {codeboarding-0.9.4 → codeboarding-0.9.6}/diagram_analysis/analysis_json.py +237 -82
  38. {codeboarding-0.9.4 → codeboarding-0.9.6}/diagram_analysis/diagram_generator.py +79 -110
  39. codeboarding-0.9.6/diagram_analysis/incremental_types.py +70 -0
  40. codeboarding-0.9.6/diagram_analysis/incremental_updater.py +325 -0
  41. {codeboarding-0.9.4/diagram_analysis/incremental → codeboarding-0.9.6/diagram_analysis}/io_utils.py +26 -7
  42. {codeboarding-0.9.4 → codeboarding-0.9.6}/diagram_analysis/manifest.py +3 -2
  43. codeboarding-0.9.6/diagram_analysis/run_context.py +57 -0
  44. {codeboarding-0.9.4 → codeboarding-0.9.6}/github_action.py +5 -4
  45. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/function_size.py +2 -2
  46. codeboarding-0.9.6/health_main.py +151 -0
  47. {codeboarding-0.9.4 → codeboarding-0.9.6}/install.py +150 -88
  48. codeboarding-0.9.6/logging_config.py +136 -0
  49. {codeboarding-0.9.4 → codeboarding-0.9.6}/main.py +68 -30
  50. {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/paths.py +3 -4
  51. {codeboarding-0.9.4 → codeboarding-0.9.6}/output_generators/markdown.py +17 -0
  52. {codeboarding-0.9.4 → codeboarding-0.9.6}/output_generators/mdx.py +24 -1
  53. {codeboarding-0.9.4 → codeboarding-0.9.6}/output_generators/sphinx.py +22 -0
  54. {codeboarding-0.9.4 → codeboarding-0.9.6}/pyproject.toml +4 -22
  55. {codeboarding-0.9.4 → codeboarding-0.9.6}/repo_utils/__init__.py +1 -1
  56. {codeboarding-0.9.4 → codeboarding-0.9.6}/repo_utils/change_detector.py +12 -7
  57. codeboarding-0.9.6/repo_utils/ignore.py +305 -0
  58. codeboarding-0.9.6/repo_utils/method_diff.py +177 -0
  59. codeboarding-0.9.6/static_analyzer/__init__.py +524 -0
  60. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/analysis_cache.py +80 -20
  61. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/analysis_result.py +200 -19
  62. codeboarding-0.9.6/static_analyzer/cluster_relations.py +175 -0
  63. codeboarding-0.9.6/static_analyzer/constants.py +164 -0
  64. codeboarding-0.9.6/static_analyzer/graph.py +619 -0
  65. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/incremental_orchestrator.py +194 -221
  66. codeboarding-0.9.6/static_analyzer/node.py +67 -0
  67. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/reference_resolve_mixin.py +46 -25
  68. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/scanner.py +9 -0
  69. {codeboarding-0.9.4 → codeboarding-0.9.6}/tests/test_github_action.py +6 -9
  70. codeboarding-0.9.6/tests/test_install.py +203 -0
  71. {codeboarding-0.9.4 → codeboarding-0.9.6}/tests/test_logging_config.py +50 -33
  72. {codeboarding-0.9.4 → codeboarding-0.9.6}/tests/test_main.py +48 -7
  73. codeboarding-0.9.6/tests/test_tool_registry.py +94 -0
  74. codeboarding-0.9.6/tests/test_user_config.py +65 -0
  75. {codeboarding-0.9.4 → codeboarding-0.9.6}/tests/test_windows_compatibility.py +1 -1
  76. {codeboarding-0.9.4 → codeboarding-0.9.6}/tests/test_windows_encoding.py +1 -1
  77. {codeboarding-0.9.4 → codeboarding-0.9.6}/tool_registry.py +121 -18
  78. {codeboarding-0.9.4 → codeboarding-0.9.6}/utils.py +36 -0
  79. codeboarding-0.9.4/README.md +0 -281
  80. codeboarding-0.9.4/agents/cluster_methods_mixin.py +0 -284
  81. codeboarding-0.9.4/agents/meta_agent.py +0 -105
  82. codeboarding-0.9.4/agents/validation.py +0 -383
  83. codeboarding-0.9.4/caching/__init__.py +0 -4
  84. codeboarding-0.9.4/caching/cache.py +0 -29
  85. codeboarding-0.9.4/caching/meta_cache.py +0 -227
  86. codeboarding-0.9.4/diagram_analysis/incremental/__init__.py +0 -63
  87. codeboarding-0.9.4/diagram_analysis/incremental/component_checker.py +0 -236
  88. codeboarding-0.9.4/diagram_analysis/incremental/file_manager.py +0 -217
  89. codeboarding-0.9.4/diagram_analysis/incremental/impact_analyzer.py +0 -238
  90. codeboarding-0.9.4/diagram_analysis/incremental/models.py +0 -72
  91. codeboarding-0.9.4/diagram_analysis/incremental/path_patching.py +0 -164
  92. codeboarding-0.9.4/diagram_analysis/incremental/reexpansion.py +0 -166
  93. codeboarding-0.9.4/diagram_analysis/incremental/scoped_analysis.py +0 -227
  94. codeboarding-0.9.4/diagram_analysis/incremental/updater.py +0 -464
  95. codeboarding-0.9.4/diagram_analysis/incremental/validation.py +0 -48
  96. codeboarding-0.9.4/health_main.py +0 -122
  97. codeboarding-0.9.4/logging_config.py +0 -119
  98. codeboarding-0.9.4/repo_utils/ignore.py +0 -341
  99. codeboarding-0.9.4/static_analyzer/__init__.py +0 -475
  100. codeboarding-0.9.4/static_analyzer/constants.py +0 -166
  101. codeboarding-0.9.4/static_analyzer/graph.py +0 -746
  102. codeboarding-0.9.4/static_analyzer/lsp_client/client.py +0 -1750
  103. codeboarding-0.9.4/static_analyzer/lsp_client/java_client.py +0 -517
  104. codeboarding-0.9.4/static_analyzer/lsp_client/language_settings.py +0 -97
  105. codeboarding-0.9.4/static_analyzer/lsp_client/typescript_client.py +0 -235
  106. codeboarding-0.9.4/tests/test_incremental_analyzer.py +0 -204
  107. codeboarding-0.9.4/tests/test_install.py +0 -51
  108. {codeboarding-0.9.4 → codeboarding-0.9.6}/LICENSE +0 -0
  109. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/__init__.py +0 -0
  110. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/dependency_discovery.py +0 -0
  111. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/__init__.py +0 -0
  112. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/base.py +0 -0
  113. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/get_external_deps.py +0 -0
  114. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/get_method_invocations.py +0 -0
  115. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_docs.py +0 -0
  116. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_file.py +0 -0
  117. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_git_diff.py +0 -0
  118. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_packages.py +0 -0
  119. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_structure.py +0 -0
  120. {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/toolkit.py +0 -0
  121. {codeboarding-0.9.4 → codeboarding-0.9.6}/codeboarding.egg-info/dependency_links.txt +0 -0
  122. {codeboarding-0.9.4 → codeboarding-0.9.6}/codeboarding.egg-info/entry_points.txt +0 -0
  123. {codeboarding-0.9.4 → codeboarding-0.9.6}/core/__init__.py +0 -0
  124. {codeboarding-0.9.4 → codeboarding-0.9.6}/core/plugin_loader.py +0 -0
  125. {codeboarding-0.9.4 → codeboarding-0.9.6}/core/protocols.py +0 -0
  126. {codeboarding-0.9.4 → codeboarding-0.9.6}/core/registry.py +0 -0
  127. {codeboarding-0.9.4 → codeboarding-0.9.6}/diagram_analysis/file_coverage.py +0 -0
  128. {codeboarding-0.9.4 → codeboarding-0.9.6}/diagram_analysis/version.py +0 -0
  129. {codeboarding-0.9.4 → codeboarding-0.9.6}/duckdb_crud.py +0 -0
  130. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/__init__.py +0 -0
  131. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/__init__.py +0 -0
  132. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/circular_deps.py +0 -0
  133. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/cohesion.py +0 -0
  134. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/coupling.py +0 -0
  135. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/god_class.py +0 -0
  136. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/inheritance.py +0 -0
  137. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/instability.py +0 -0
  138. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/unused_code_diagnostics.py +0 -0
  139. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/config.py +0 -0
  140. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/constants.py +0 -0
  141. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/models.py +0 -0
  142. {codeboarding-0.9.4 → codeboarding-0.9.6}/health/runner.py +0 -0
  143. {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/__init__.py +0 -0
  144. {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/callbacks.py +0 -0
  145. {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/context.py +0 -0
  146. {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/mixin.py +0 -0
  147. {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/stats.py +0 -0
  148. {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/writers.py +0 -0
  149. {codeboarding-0.9.4 → codeboarding-0.9.6}/output_generators/__init__.py +0 -0
  150. {codeboarding-0.9.4 → codeboarding-0.9.6}/output_generators/html.py +0 -0
  151. {codeboarding-0.9.4 → codeboarding-0.9.6}/output_generators/html_template.py +0 -0
  152. {codeboarding-0.9.4 → codeboarding-0.9.6}/repo_utils/errors.py +0 -0
  153. {codeboarding-0.9.4 → codeboarding-0.9.6}/repo_utils/git_diff.py +0 -0
  154. {codeboarding-0.9.4 → codeboarding-0.9.6}/setup.cfg +0 -0
  155. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/cluster_change_analyzer.py +0 -0
  156. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/cluster_helpers.py +0 -0
  157. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/git_diff_analyzer.py +0 -0
  158. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/java_config_scanner.py +0 -0
  159. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/java_utils.py +0 -0
  160. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/lsp_client/__init__.py +0 -0
  161. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/lsp_client/diagnostics.py +0 -0
  162. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/programming_language.py +0 -0
  163. {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/typescript_config_scanner.py +0 -0
  164. {codeboarding-0.9.4 → codeboarding-0.9.6}/tests/test_vscode_constants.py +0 -0
  165. {codeboarding-0.9.4 → codeboarding-0.9.6}/user_config.py +0 -0
  166. {codeboarding-0.9.4 → codeboarding-0.9.6}/vscode_constants.py +0 -0
@@ -1,15 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codeboarding
3
- Version: 0.9.4
3
+ Version: 0.9.6
4
4
  Summary: Interactive Diagrams for Code
5
5
  Author: CodeBoarding Team
6
- License: MIT
6
+ License-Expression: MIT
7
7
  Project-URL: Repository, https://github.com/CodeBoarding/CodeBoarding
8
8
  Project-URL: Documentation, https://github.com/CodeBoarding/CodeBoarding/blob/main/.codeboarding/overview.md
9
9
  Keywords: code-understanding,code-visualization,code-analysis,diagrams,documentation,llm,static-analysis,mermaid,onboarding
10
10
  Classifier: Development Status :: 4 - Beta
11
11
  Classifier: Intended Audience :: Developers
12
- Classifier: License :: OSI Approved :: MIT License
13
12
  Classifier: Programming Language :: Python :: 3.12
14
13
  Classifier: Programming Language :: Python :: 3.13
15
14
  Classifier: Topic :: Software Development :: Documentation
@@ -17,23 +16,14 @@ Classifier: Topic :: Software Development :: Code Generators
17
16
  Requires-Python: <3.14,>=3.12
18
17
  Description-Content-Type: text/markdown
19
18
  License-File: LICENSE
20
- Requires-Dist: asgiref>=3.9
21
- Requires-Dist: async-timeout>=4.0
22
19
  Requires-Dist: docker>=7.1
23
20
  Requires-Dist: dotenv>=0.9
24
21
  Requires-Dist: duckdb>=1.3
25
22
  Requires-Dist: dulwich>=0.22
26
- Requires-Dist: email-validator>=2.2
27
- Requires-Dist: exceptiongroup>=1.2
28
23
  Requires-Dist: fastapi>=0.115
29
24
  Requires-Dist: filelock>=3.12
30
25
  Requires-Dist: gitpython>=3.1
31
26
  Requires-Dist: google-api-core>=2.10
32
- Requires-Dist: google-genai>=1.10
33
- Requires-Dist: gql>=3.5
34
- Requires-Dist: injector>=0.21
35
- Requires-Dist: ipykernel>=6.29
36
- Requires-Dist: isort>=6.0
37
27
  Requires-Dist: jsonschema>=4.25
38
28
  Requires-Dist: langchain>=1.2
39
29
  Requires-Dist: langchain-anthropic>=1.3
@@ -46,21 +36,13 @@ Requires-Dist: langchain-openai>=1.1
46
36
  Requires-Dist: markdown>=3.8
47
37
  Requires-Dist: markdown-it-py>=3.0
48
38
  Requires-Dist: markitdown>=0.1
49
- Requires-Dist: matplotlib>=3.10
50
39
  Requires-Dist: networkx>=3.4
51
- Requires-Dist: openpyxl>=3.1
52
- Requires-Dist: pandas>=2.2
53
40
  Requires-Dist: pathspec>=0.12
54
- Requires-Dist: pydot>=3.0
55
41
  Requires-Dist: pyyaml>=6.0
56
42
  Requires-Dist: regex>=2024.11
57
43
  Requires-Dist: rich>=12.6
58
- Requires-Dist: seaborn>=0.13
59
- Requires-Dist: tomli>=2.2
60
44
  Requires-Dist: trustcall>=0.0.39
61
- Requires-Dist: typer>=0.9
62
45
  Requires-Dist: uvicorn>=0.23
63
- Requires-Dist: wcwidth>=0.2.13
64
46
  Provides-Extra: dev
65
47
  Requires-Dist: pytest>=8.3; extra == "dev"
66
48
  Requires-Dist: pytest-cov>=7.0; extra == "dev"
@@ -91,12 +73,26 @@ Dynamic: license-file
91
73
 
92
74
  ---
93
75
 
76
+ ## Requirements
77
+
78
+ - **Python 3.12 or 3.13** — other versions are currently not supported.
79
+
94
80
  ## Installation
95
81
 
82
+ The recommended way to install the CLI is with [pipx](https://pipx.pypa.io), which automatically creates an isolated environment:
83
+
84
+ ```bash
85
+ pipx install codeboarding --python python3.12
86
+ ```
87
+
88
+ Alternatively, install into an existing virtual environment with pip:
89
+
96
90
  ```bash
97
91
  pip install codeboarding
98
92
  ```
99
93
 
94
+ > Installing into the global Python environment with `pip` is not recommended — it can cause dependency conflicts and will fail if the system Python is not 3.12 or 3.13.
95
+
100
96
  Language server binaries are downloaded automatically on first use. To pre-install them explicitly (useful in CI or restricted environments):
101
97
 
102
98
  ```bash
@@ -14,12 +14,26 @@
14
14
 
15
15
  ---
16
16
 
17
+ ## Requirements
18
+
19
+ - **Python 3.12 or 3.13** — other versions are currently not supported.
20
+
17
21
  ## Installation
18
22
 
23
+ The recommended way to install the CLI is with [pipx](https://pipx.pypa.io), which automatically creates an isolated environment:
24
+
25
+ ```bash
26
+ pipx install codeboarding --python python3.12
27
+ ```
28
+
29
+ Alternatively, install into an existing virtual environment with pip:
30
+
19
31
  ```bash
20
32
  pip install codeboarding
21
33
  ```
22
34
 
35
+ > Installing into the global Python environment with `pip` is not recommended — it can cause dependency conflicts and will fail if the system Python is not 3.12 or 3.13.
36
+
23
37
  Language server binaries are downloaded automatically on first use. To pre-install them explicitly (useful in CI or restricted environments):
24
38
 
25
39
  ```bash
@@ -0,0 +1,159 @@
1
+ # CodeBoarding
2
+
3
+ See what your AI is building before it breaks.
4
+
5
+ CodeBoarding gives developers and coding agents a visual map of a codebase. It combines static analysis with LLM reasoning to generate architecture diagrams, component-level documentation, and navigable outputs you can use in your IDE, CI, and docs.
6
+
7
+ [Website](https://codeboarding.org) · [Open VSX extension](https://open-vsx.org/extension/CodeBoarding/codeboarding) · [Explore examples](https://codeboarding.org/diagrams) · [VS Code extension](https://marketplace.visualstudio.com/items?itemName=Codeboarding.codeboarding) · [GitHub Action](https://github.com/marketplace/actions/codeboarding-diagram-first-documentation) ·[Discord](https://discord.gg/T5zHTJYFuy)
8
+
9
+ [![CodeBoarding demo](https://gist.githubusercontent.com/ivanmilevtues/1c4f921066613516cfd7b938014a6877/raw/611aec7711556807860ff2e1679a5dc4c0c23fed/CodeBoarding_extension_demo.gif)](https://open-vsx.org/extension/CodeBoarding/codeboarding)
10
+
11
+ Install the extension from Open VSX.
12
+
13
+ [![JavaScript](https://img.shields.io/badge/JavaScript-222222?style=flat-square&logo=javascript&logoColor=F7DF1E)](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
14
+ [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
15
+ [![Java](https://img.shields.io/badge/Java-E76F00?style=flat-square&logo=openjdk&logoColor=white)](https://www.java.com/)
16
+ [![Python](https://img.shields.io/badge/Python-3776AB?style=flat-square&logo=python&logoColor=white)](https://www.python.org/)
17
+ [![Go](https://img.shields.io/badge/Go-00ADD8?style=flat-square&logo=go&logoColor=white)](https://go.dev/)
18
+ [![PHP](https://img.shields.io/badge/PHP-777BB4?style=flat-square&logo=php&logoColor=white)](https://www.php.net/)
19
+
20
+ ## Few use cases:
21
+
22
+ - Keep architecture visible while agents code.
23
+ - Review AI-generated changes with system context before they turn into hidden debt.
24
+ - Understand large repositories faster with layered diagrams and component breakdowns.
25
+ - Share the same visual model across local workflows, IDEs, pull requests, and docs.
26
+
27
+ ## What CodeBoarding generates
28
+
29
+ - High-level system architecture diagrams.
30
+ - Deeper component diagrams for important subsystems.
31
+ - Markdown documentation in `.codeboarding/`.
32
+ - Mermaid output that is easy to embed in docs and PRs.
33
+ - Incremental updates when only part of the codebase changes.
34
+
35
+ ## How it works
36
+
37
+ ```mermaid
38
+ graph LR
39
+ Application_Orchestrator_Repository_Manager["Application Orchestrator & Repository Manager"]
40
+ LLM_Agent_Core["LLM Agent Core"]
41
+ Static_Code_Analyzer["Static Code Analyzer"]
42
+ Agent_Tooling_Interface["Agent Tooling Interface"]
43
+ Incremental_Analysis_Engine["Incremental Analysis Engine"]
44
+ Documentation_Diagram_Generator["Documentation & Diagram Generator"]
45
+ Application_Orchestrator_Repository_Manager -- "Orchestrator initiates analysis workflow, leveraging incremental updates based on detected code changes." --> Incremental_Analysis_Engine
46
+ Application_Orchestrator_Repository_Manager -- "Orchestrator passes project context and triggers the main analysis workflow for the LLM Agent." --> LLM_Agent_Core
47
+ Incremental_Analysis_Engine -- "Incremental engine requests static analysis for specific code segments (new or changed)." --> Static_Code_Analyzer
48
+ Static_Code_Analyzer -- "Static analyzer provides analysis results to the incremental engine for caching." --> Incremental_Analysis_Engine
49
+ LLM_Agent_Core -- "LLM Agent invokes specialized tools to interact with the codebase and analysis data." --> Agent_Tooling_Interface
50
+ Agent_Tooling_Interface -- "Agent tools query the static analysis engine for detailed code insights." --> Static_Code_Analyzer
51
+ Static_Code_Analyzer -- "Static analysis engine provides requested data to the agent tools." --> Agent_Tooling_Interface
52
+ LLM_Agent_Core -- "LLM Agent delivers structured analysis insights for documentation and diagram generation." --> Documentation_Diagram_Generator
53
+ click Application_Orchestrator_Repository_Manager href "https://github.com/CodeBoarding/CodeBoarding/blob/main/.codeboarding/Application_Orchestrator_Repository_Manager.md" "Details"
54
+ click LLM_Agent_Core href "https://github.com/CodeBoarding/CodeBoarding/blob/main/.codeboarding/LLM_Agent_Core.md" "Details"
55
+ click Static_Code_Analyzer href "https://github.com/CodeBoarding/CodeBoarding/blob/main/.codeboarding/Static_Code_Analyzer.md" "Details"
56
+ click Agent_Tooling_Interface href "https://github.com/CodeBoarding/CodeBoarding/blob/main/.codeboarding/Agent_Tooling_Interface.md" "Details"
57
+ click Incremental_Analysis_Engine href "https://github.com/CodeBoarding/CodeBoarding/blob/main/.codeboarding/Incremental_Analysis_Engine.md" "Details"
58
+ click Documentation_Diagram_Generator href "https://github.com/CodeBoarding/CodeBoarding/blob/main/.codeboarding/Documentation_Diagram_Generator.md" "Details"
59
+ ```
60
+
61
+ For a deeper architecture walkthrough, see [`.codeboarding/overview.md`](.codeboarding/overview.md).
62
+
63
+ ## Quick start
64
+
65
+ ### Run from source
66
+
67
+ ```bash
68
+ uv sync --frozen
69
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
70
+ python install.py
71
+ python main.py --local /path/to/repo
72
+ ```
73
+
74
+ ### Use the packaged CLI
75
+
76
+ Requires **Python 3.12 or 3.13**. The recommended install method is [pipx](https://pipx.pypa.io), which keeps the CLI in its own isolated environment:
77
+
78
+ ```bash
79
+ pipx install codeboarding --python python3.12
80
+ codeboarding-setup
81
+ codeboarding --local /path/to/repo
82
+ ```
83
+
84
+ Or, if you prefer pip, install into a virtual environment (not the global Python):
85
+
86
+ ```bash
87
+ pip install codeboarding
88
+ codeboarding-setup
89
+ codeboarding --local /path/to/repo
90
+ ```
91
+
92
+ Output is written to `/path/to/repo/.codeboarding/`.
93
+
94
+ `python install.py` and `codeboarding-setup` download language server binaries to `~/.codeboarding/servers/`, shared across projects. `npm` is required for Python, TypeScript, JavaScript, and PHP language servers; if it is missing, setup can install it via `nodeenv`.
95
+
96
+ ## Configuration
97
+
98
+ On first run, CodeBoarding creates `~/.codeboarding/config.toml`. Set one provider there or use environment variables.
99
+
100
+ ```toml
101
+ [provider]
102
+ # openai_api_key = "sk-..."
103
+ # anthropic_api_key = "sk-ant-..."
104
+ # google_api_key = "AIza..."
105
+ # vercel_api_key = "vck_..."
106
+ # aws_bearer_token_bedrock = "..."
107
+ # ollama_base_url = "http://localhost:11434"
108
+ # openrouter_api_key = "sk-..."
109
+
110
+ [llm]
111
+ # agent_model = "gemini-3-flash"
112
+ # parsing_model = "gemini-3-flash"
113
+ ```
114
+
115
+ Shell environment variables such as `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_API_KEY`, and `OLLAMA_BASE_URL` take precedence over the config file. For private repositories, set `GITHUB_TOKEN` in your environment.
116
+
117
+ ## Common commands
118
+
119
+ ```bash
120
+ # Analyze a local repository
121
+ python main.py --local ./my-project
122
+
123
+ # Increase diagram depth
124
+ python main.py --local ./my-project --depth-level 2
125
+
126
+ # Re-analyze only changed parts when possible
127
+ python main.py --local ./my-project --incremental
128
+
129
+ # Update a single component by ID
130
+ python main.py --local ./my-project --partial-component-id "1.2"
131
+
132
+ # Analyze a remote GitHub repository
133
+ python main.py https://github.com/pytorch/pytorch
134
+ ```
135
+
136
+ ## Where to use it
137
+
138
+ - [CLI](https://github.com/CodeBoarding/CodeBoarding) for local analysis, automation, and CI workflows.
139
+ - [VS Code extension](https://marketplace.visualstudio.com/items?itemName=Codeboarding.codeboarding) for in-editor visual architecture.
140
+ - [GitHub Action](https://github.com/marketplace/actions/codeboarding-diagram-first-documentation) to keep diagrams updated in CI.
141
+
142
+ ## Supported stack
143
+
144
+ - Languages: Python, TypeScript, JavaScript, Java, Go, PHP.
145
+ - LLM providers: OpenAI, Anthropic, Google, Vercel AI Gateway, AWS Bedrock, Ollama, OpenRouter, and more.
146
+
147
+ ## Examples
148
+
149
+ - Visualized 800+ open-source repositories.
150
+ - Browse generated examples in [GeneratedOnBoardings](https://github.com/CodeBoarding/GeneratedOnBoardings).
151
+ - Try the hosted explorer at [codeboarding.org/diagrams](https://codeboarding.org/diagrams).
152
+
153
+ ## Contributing
154
+
155
+ If you want to improve CodeBoarding, open an [issue](https://github.com/CodeBoarding/CodeBoarding/issues) or send a pull request. We welcome improvements to analysis quality, output generators, integrations, and developer experience.
156
+
157
+ ## Vision
158
+
159
+ CodeBoarding is building an open standard for code understanding: a visual, accurate, high-level representation of a codebase that both humans and agents can use.
@@ -1,8 +1,8 @@
1
1
  import logging
2
2
  from pathlib import Path
3
3
 
4
- from langchain_core.prompts import PromptTemplate
5
4
  from langchain_core.language_models import BaseChatModel
5
+ from langchain_core.prompts import PromptTemplate
6
6
 
7
7
  from agents.agent import CodeBoardingAgent
8
8
  from agents.agent_responses import (
@@ -11,24 +11,26 @@ from agents.agent_responses import (
11
11
  MetaAnalysisInsights,
12
12
  assign_component_ids,
13
13
  )
14
+ from agents.cluster_methods_mixin import ClusterMethodsMixin
14
15
  from agents.prompts import (
15
- get_system_message,
16
16
  get_cluster_grouping_message,
17
17
  get_final_analysis_message,
18
+ get_system_message,
18
19
  )
19
- from agents.cluster_methods_mixin import ClusterMethodsMixin
20
20
  from agents.validation import (
21
21
  ValidationContext,
22
22
  validate_cluster_coverage,
23
- validate_component_relationships,
23
+ validate_group_name_coverage,
24
24
  validate_key_entities,
25
- validate_cluster_ids_populated,
26
25
  validate_relation_component_names,
27
26
  )
28
27
  from monitoring import trace
29
28
  from static_analyzer.analysis_result import StaticAnalysisResults
29
+ from static_analyzer.cluster_helpers import (
30
+ build_all_cluster_results,
31
+ get_all_cluster_ids,
32
+ )
30
33
  from static_analyzer.graph import ClusterResult
31
- from static_analyzer.cluster_helpers import build_all_cluster_results, get_all_cluster_ids
32
34
 
33
35
  logger = logging.getLogger(__name__)
34
36
 
@@ -86,19 +88,20 @@ class AbstractionAgent(ClusterMethodsMixin, CodeBoardingAgent):
86
88
  cluster_results=cluster_results,
87
89
  expected_cluster_ids=get_all_cluster_ids(cluster_results),
88
90
  ),
91
+ max_validation_attempts=3,
89
92
  )
90
93
  return cluster_analysis
91
94
 
92
95
  @trace
93
96
  def step_final_analysis(
94
- self, cluster_analysis: ClusterAnalysis, cluster_results: dict[str, ClusterResult]
97
+ self, llm_cluster_analysis: ClusterAnalysis, cluster_results: dict[str, ClusterResult]
95
98
  ) -> AnalysisInsights:
96
99
  logger.info(f"[AbstractionAgent] Generating final analysis for: {self.project_name}")
97
100
 
98
101
  meta_context_str = self.meta_context.llm_str() if self.meta_context else "No project context available."
99
102
  project_type = self.meta_context.project_type if self.meta_context else "unknown"
100
103
 
101
- cluster_str = cluster_analysis.llm_str() if cluster_analysis else "No cluster analysis available."
104
+ cluster_str = llm_cluster_analysis.llm_str() if llm_cluster_analysis else "No cluster analysis available."
102
105
 
103
106
  prompt = self.prompts["final_analysis"].format(
104
107
  project_name=self.project_name,
@@ -111,6 +114,8 @@ class AbstractionAgent(ClusterMethodsMixin, CodeBoardingAgent):
111
114
  context = ValidationContext(
112
115
  cluster_results=cluster_results,
113
116
  cfg_graphs={lang: self.static_analysis.get_cfg(lang) for lang in self.static_analysis.get_languages()},
117
+ static_analysis=self.static_analysis,
118
+ llm_cluster_analysis=llm_cluster_analysis,
114
119
  )
115
120
 
116
121
  return self._validation_invoke(
@@ -118,11 +123,11 @@ class AbstractionAgent(ClusterMethodsMixin, CodeBoardingAgent):
118
123
  AnalysisInsights,
119
124
  validators=[
120
125
  validate_relation_component_names,
121
- validate_component_relationships,
126
+ validate_group_name_coverage,
122
127
  validate_key_entities,
123
- validate_cluster_ids_populated,
124
128
  ],
125
129
  context=context,
130
+ max_validation_attempts=3,
126
131
  )
127
132
 
128
133
  def run(self):
@@ -134,17 +139,19 @@ class AbstractionAgent(ClusterMethodsMixin, CodeBoardingAgent):
134
139
 
135
140
  # Step 2: Generate abstract components from grouped clusters
136
141
  analysis = self.step_final_analysis(cluster_analysis, cluster_results)
137
- # Step 3: Sanitize cluster IDs (remove invalid ones)
138
- self._sanitize_component_cluster_ids(analysis, cluster_results=cluster_results)
139
- # Step 4: Assign files to components (deterministic + LLM-based with validation)
140
- self.classify_files(analysis, cluster_results, self.static_analysis.get_all_source_files())
141
- # Step 5: Fix source code reference lines (resolves reference_file paths for key_entities)
142
+ # Step 3: Assign hierarchical component IDs ("1", "2", "3", ...)
143
+ assign_component_ids(analysis)
144
+ # Step 4: Resolve cluster IDs deterministically from group names
145
+ self._resolve_cluster_ids_from_groups(analysis, cluster_analysis)
146
+ # Step 5: Populate file_methods deterministically from cluster results + orphan assignment
147
+ self.populate_file_methods(analysis, cluster_results)
148
+
149
+ # Step 6: Build static inter-component relations from CFG edges
150
+ self.build_static_relations(analysis)
151
+
152
+ # Step 7: Fix source code reference lines (resolves reference_file paths for key_entities)
142
153
  analysis = self.fix_source_code_reference_lines(analysis)
143
- # Step 6: Ensure unique key entities across components
154
+ # Step 8: Ensure unique key entities across components
144
155
  self._ensure_unique_key_entities(analysis)
145
- # Step 7: Ensure unique file assignments across components
146
- self._ensure_unique_file_assignments(analysis)
147
- # Step 8: Assign deterministic component IDs
148
- assign_component_ids(analysis)
149
156
 
150
157
  return analysis, cluster_results