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.
- {codeboarding-0.9.4/codeboarding.egg-info → codeboarding-0.9.6}/PKG-INFO +16 -20
- {codeboarding-0.9.4 → codeboarding-0.9.6}/PYPI.md +14 -0
- codeboarding-0.9.6/README.md +159 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/abstraction_agent.py +27 -20
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/agent.py +92 -156
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/agent_responses.py +98 -30
- codeboarding-0.9.6/agents/change_status.py +9 -0
- codeboarding-0.9.6/agents/cluster_methods_mixin.py +601 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/constants.py +1 -1
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/details_agent.py +82 -25
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/llm_config.py +3 -3
- codeboarding-0.9.6/agents/meta_agent.py +67 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/planner_agent.py +19 -7
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/__init__.py +0 -3
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/abstract_prompt_factory.py +0 -4
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/claude_prompts.py +66 -59
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/deepseek_prompts.py +66 -62
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/gemini_flash_prompts.py +66 -59
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/glm_prompts.py +70 -65
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/gpt_prompts.py +66 -59
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/kimi_prompts.py +65 -65
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/prompts/prompt_factory.py +0 -4
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_cfg.py +6 -5
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_file_structure.py +1 -2
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_source.py +10 -30
- codeboarding-0.9.6/agents/validation.py +630 -0
- codeboarding-0.9.6/caching/__init__.py +12 -0
- codeboarding-0.9.6/caching/cache.py +310 -0
- codeboarding-0.9.6/caching/details_cache.py +58 -0
- codeboarding-0.9.6/caching/meta_cache.py +111 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6/codeboarding.egg-info}/PKG-INFO +16 -20
- {codeboarding-0.9.4 → codeboarding-0.9.6}/codeboarding.egg-info/SOURCES.txt +12 -16
- {codeboarding-0.9.4 → codeboarding-0.9.6}/codeboarding.egg-info/requires.txt +0 -17
- {codeboarding-0.9.4 → codeboarding-0.9.6}/codeboarding.egg-info/top_level.txt +1 -0
- codeboarding-0.9.6/constants.py +14 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/diagram_analysis/__init__.py +1 -1
- {codeboarding-0.9.4 → codeboarding-0.9.6}/diagram_analysis/analysis_json.py +237 -82
- {codeboarding-0.9.4 → codeboarding-0.9.6}/diagram_analysis/diagram_generator.py +79 -110
- codeboarding-0.9.6/diagram_analysis/incremental_types.py +70 -0
- codeboarding-0.9.6/diagram_analysis/incremental_updater.py +325 -0
- {codeboarding-0.9.4/diagram_analysis/incremental → codeboarding-0.9.6/diagram_analysis}/io_utils.py +26 -7
- {codeboarding-0.9.4 → codeboarding-0.9.6}/diagram_analysis/manifest.py +3 -2
- codeboarding-0.9.6/diagram_analysis/run_context.py +57 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/github_action.py +5 -4
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/function_size.py +2 -2
- codeboarding-0.9.6/health_main.py +151 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/install.py +150 -88
- codeboarding-0.9.6/logging_config.py +136 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/main.py +68 -30
- {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/paths.py +3 -4
- {codeboarding-0.9.4 → codeboarding-0.9.6}/output_generators/markdown.py +17 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/output_generators/mdx.py +24 -1
- {codeboarding-0.9.4 → codeboarding-0.9.6}/output_generators/sphinx.py +22 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/pyproject.toml +4 -22
- {codeboarding-0.9.4 → codeboarding-0.9.6}/repo_utils/__init__.py +1 -1
- {codeboarding-0.9.4 → codeboarding-0.9.6}/repo_utils/change_detector.py +12 -7
- codeboarding-0.9.6/repo_utils/ignore.py +305 -0
- codeboarding-0.9.6/repo_utils/method_diff.py +177 -0
- codeboarding-0.9.6/static_analyzer/__init__.py +524 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/analysis_cache.py +80 -20
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/analysis_result.py +200 -19
- codeboarding-0.9.6/static_analyzer/cluster_relations.py +175 -0
- codeboarding-0.9.6/static_analyzer/constants.py +164 -0
- codeboarding-0.9.6/static_analyzer/graph.py +619 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/incremental_orchestrator.py +194 -221
- codeboarding-0.9.6/static_analyzer/node.py +67 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/reference_resolve_mixin.py +46 -25
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/scanner.py +9 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/tests/test_github_action.py +6 -9
- codeboarding-0.9.6/tests/test_install.py +203 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/tests/test_logging_config.py +50 -33
- {codeboarding-0.9.4 → codeboarding-0.9.6}/tests/test_main.py +48 -7
- codeboarding-0.9.6/tests/test_tool_registry.py +94 -0
- codeboarding-0.9.6/tests/test_user_config.py +65 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/tests/test_windows_compatibility.py +1 -1
- {codeboarding-0.9.4 → codeboarding-0.9.6}/tests/test_windows_encoding.py +1 -1
- {codeboarding-0.9.4 → codeboarding-0.9.6}/tool_registry.py +121 -18
- {codeboarding-0.9.4 → codeboarding-0.9.6}/utils.py +36 -0
- codeboarding-0.9.4/README.md +0 -281
- codeboarding-0.9.4/agents/cluster_methods_mixin.py +0 -284
- codeboarding-0.9.4/agents/meta_agent.py +0 -105
- codeboarding-0.9.4/agents/validation.py +0 -383
- codeboarding-0.9.4/caching/__init__.py +0 -4
- codeboarding-0.9.4/caching/cache.py +0 -29
- codeboarding-0.9.4/caching/meta_cache.py +0 -227
- codeboarding-0.9.4/diagram_analysis/incremental/__init__.py +0 -63
- codeboarding-0.9.4/diagram_analysis/incremental/component_checker.py +0 -236
- codeboarding-0.9.4/diagram_analysis/incremental/file_manager.py +0 -217
- codeboarding-0.9.4/diagram_analysis/incremental/impact_analyzer.py +0 -238
- codeboarding-0.9.4/diagram_analysis/incremental/models.py +0 -72
- codeboarding-0.9.4/diagram_analysis/incremental/path_patching.py +0 -164
- codeboarding-0.9.4/diagram_analysis/incremental/reexpansion.py +0 -166
- codeboarding-0.9.4/diagram_analysis/incremental/scoped_analysis.py +0 -227
- codeboarding-0.9.4/diagram_analysis/incremental/updater.py +0 -464
- codeboarding-0.9.4/diagram_analysis/incremental/validation.py +0 -48
- codeboarding-0.9.4/health_main.py +0 -122
- codeboarding-0.9.4/logging_config.py +0 -119
- codeboarding-0.9.4/repo_utils/ignore.py +0 -341
- codeboarding-0.9.4/static_analyzer/__init__.py +0 -475
- codeboarding-0.9.4/static_analyzer/constants.py +0 -166
- codeboarding-0.9.4/static_analyzer/graph.py +0 -746
- codeboarding-0.9.4/static_analyzer/lsp_client/client.py +0 -1750
- codeboarding-0.9.4/static_analyzer/lsp_client/java_client.py +0 -517
- codeboarding-0.9.4/static_analyzer/lsp_client/language_settings.py +0 -97
- codeboarding-0.9.4/static_analyzer/lsp_client/typescript_client.py +0 -235
- codeboarding-0.9.4/tests/test_incremental_analyzer.py +0 -204
- codeboarding-0.9.4/tests/test_install.py +0 -51
- {codeboarding-0.9.4 → codeboarding-0.9.6}/LICENSE +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/__init__.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/dependency_discovery.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/__init__.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/base.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/get_external_deps.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/get_method_invocations.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_docs.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_file.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_git_diff.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_packages.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/read_structure.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/agents/tools/toolkit.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/codeboarding.egg-info/dependency_links.txt +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/codeboarding.egg-info/entry_points.txt +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/core/__init__.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/core/plugin_loader.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/core/protocols.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/core/registry.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/diagram_analysis/file_coverage.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/diagram_analysis/version.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/duckdb_crud.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/__init__.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/__init__.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/circular_deps.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/cohesion.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/coupling.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/god_class.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/inheritance.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/instability.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/checks/unused_code_diagnostics.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/config.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/constants.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/models.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/health/runner.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/__init__.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/callbacks.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/context.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/mixin.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/stats.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/monitoring/writers.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/output_generators/__init__.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/output_generators/html.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/output_generators/html_template.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/repo_utils/errors.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/repo_utils/git_diff.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/setup.cfg +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/cluster_change_analyzer.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/cluster_helpers.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/git_diff_analyzer.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/java_config_scanner.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/java_utils.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/lsp_client/__init__.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/lsp_client/diagnostics.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/programming_language.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/static_analyzer/typescript_config_scanner.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/tests/test_vscode_constants.py +0 -0
- {codeboarding-0.9.4 → codeboarding-0.9.6}/user_config.py +0 -0
- {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.
|
|
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
|
+
[](https://open-vsx.org/extension/CodeBoarding/codeboarding)
|
|
10
|
+
|
|
11
|
+
Install the extension from Open VSX.
|
|
12
|
+
|
|
13
|
+
[](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
|
|
14
|
+
[](https://www.typescriptlang.org/)
|
|
15
|
+
[](https://www.java.com/)
|
|
16
|
+
[](https://www.python.org/)
|
|
17
|
+
[](https://go.dev/)
|
|
18
|
+
[](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
|
-
|
|
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,
|
|
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 =
|
|
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
|
-
|
|
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:
|
|
138
|
-
|
|
139
|
-
# Step 4:
|
|
140
|
-
self.
|
|
141
|
-
# Step 5:
|
|
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
|
|
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
|