codeboarding 0.13.2__tar.gz → 0.13.4__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.13.2/codeboarding.egg-info → codeboarding-0.13.4}/PKG-INFO +7 -3
- {codeboarding-0.13.2 → codeboarding-0.13.4}/PYPI.md +6 -2
- {codeboarding-0.13.2 → codeboarding-0.13.4}/README.md +10 -4
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/abstraction_agent.py +26 -43
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/agent.py +1 -1
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/agent_responses.py +20 -16
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/cluster_methods_mixin.py +136 -305
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/content_hash.py +22 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/details_agent.py +19 -62
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/file_index_models.py +10 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/incremental_agent.py +268 -37
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/incremental_results.py +3 -0
- codeboarding-0.13.4/agents/planner_agent.py +181 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/__init__.py +0 -9
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/abstract_prompt_factory.py +0 -16
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/claude_prompts.py +19 -170
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/deepseek_prompts.py +22 -169
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/gemini_flash_prompts.py +20 -154
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/glm_prompts.py +21 -178
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/gpt_prompts.py +20 -151
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/kimi_prompts.py +21 -152
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/prompt_factory.py +0 -16
- codeboarding-0.13.4/agents/relation_edges.py +291 -0
- codeboarding-0.13.4/agents/repair.py +101 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/validation.py +0 -212
- {codeboarding-0.13.2 → codeboarding-0.13.4}/caching/__init__.py +1 -2
- {codeboarding-0.13.2 → codeboarding-0.13.4}/caching/details_cache.py +1 -21
- {codeboarding-0.13.2 → codeboarding-0.13.4/codeboarding.egg-info}/PKG-INFO +7 -3
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding.egg-info/SOURCES.txt +3 -4
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/commands/full_analysis.py +7 -3
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/analysis.py +17 -8
- {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/__init__.py +5 -1
- {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/analysis_json.py +52 -5
- {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/cluster_delta.py +253 -34
- codeboarding-0.13.4/diagram_analysis/diagram_generator.py +1777 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/exceptions.py +31 -6
- {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/file_index.py +19 -1
- {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/io_utils.py +61 -11
- {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/run_context.py +11 -9
- codeboarding-0.13.4/diagram_analysis/scope_plan.py +260 -0
- codeboarding-0.13.4/diagram_analysis/tree_shape.py +122 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/github_action.py +14 -2
- {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/function_size.py +8 -8
- {codeboarding-0.13.2 → codeboarding-0.13.4}/health/runner.py +9 -8
- {codeboarding-0.13.2 → codeboarding-0.13.4}/main.py +3 -2
- {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/stats.py +13 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/output_generators/html_template.py +3 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/output_generators/markdown.py +1 -1
- {codeboarding-0.13.2 → codeboarding-0.13.4}/output_generators/sphinx.py +5 -1
- {codeboarding-0.13.2 → codeboarding-0.13.4}/pyproject.toml +6 -15
- {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/__init__.py +8 -1
- {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/ignore.py +21 -32
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/__init__.py +1 -1
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/analysis_cache.py +25 -3
- codeboarding-0.13.4/static_analyzer/cluster_helpers.py +577 -0
- codeboarding-0.13.4/static_analyzer/cluster_relations.py +582 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/constants.py +9 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/csharp_adapter.py +4 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/go_adapter.py +25 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/php_adapter.py +32 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/call_graph_builder.py +21 -12
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/edge_builder.py +19 -1
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/language_adapter.py +12 -2
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/lsp_client.py +61 -7
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/models.py +6 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/protocols.py +3 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/result_converter.py +66 -2
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/source_inspector.py +35 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/graph.py +90 -173
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/incremental_orchestrator.py +31 -6
- codeboarding-0.13.4/static_analyzer/internal_references.py +98 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/language_results.py +6 -1
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/method_cluster_paths.py +21 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/reference_resolver.py +23 -24
- {codeboarding-0.13.2 → codeboarding-0.13.4}/telemetry/service.py +36 -6
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_github_action.py +43 -0
- codeboarding-0.13.4/tests/test_telemetry_service.py +99 -0
- codeboarding-0.13.2/agents/cluster_budget.py +0 -21
- codeboarding-0.13.2/agents/incremental_planning_agent.py +0 -305
- codeboarding-0.13.2/agents/planner_agent.py +0 -117
- codeboarding-0.13.2/agents/relation_edges.py +0 -52
- codeboarding-0.13.2/agents/repair.py +0 -276
- codeboarding-0.13.2/agents/scope_operations.py +0 -35
- codeboarding-0.13.2/diagram_analysis/diagram_generator.py +0 -997
- codeboarding-0.13.2/static_analyzer/cfg_skip_planner.py +0 -214
- codeboarding-0.13.2/static_analyzer/cluster_helpers.py +0 -511
- codeboarding-0.13.2/static_analyzer/cluster_relations.py +0 -324
- codeboarding-0.13.2/static_analyzer/internal_references.py +0 -72
- {codeboarding-0.13.2 → codeboarding-0.13.4}/LICENSE +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/change_status.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/cluster_ids.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/constants.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/dependency_discovery.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/llm_config.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/llm_errors.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/meta_agent.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/model_capabilities.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/retry.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/scope_ids.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/base.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/component_bridge_edges.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/get_external_deps.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/get_method_invocations.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/list_git_changes.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_cfg.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_docs.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_file.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_file_structure.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_packages.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_source.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_structure.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/toolkit.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/caching/cache.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/caching/meta_cache.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding.egg-info/dependency_links.txt +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding.egg-info/entry_points.txt +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding.egg-info/requires.txt +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding.egg-info/top_level.txt +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/bootstrap.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/commands/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/commands/incremental_analysis.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/commands/partial_analysis.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/view_instructions.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/orchestration.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/rendering.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/sources/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/sources/local.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/sources/remote.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/constants.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/core/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/core/plugin_loader.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/core/protocols.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/core/registry.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/cluster_snapshot.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/file_coverage.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/run_mode.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/health/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/circular_deps.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/cohesion.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/coupling.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/god_class.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/inheritance.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/instability.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/unused_code_diagnostics.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/health/config.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/health/models.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/install.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/logging_config.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/callbacks.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/context.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/mixin.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/paths.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/writers.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/output_generators/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/output_generators/html.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/output_generators/mdx.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/change_detector.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/errors.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/fingerprint_diff.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/git_ops.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/path_utils.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/setup.cfg +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/analysis_result.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/csharp_config_scanner.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/dotnet_sdk.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/java_adapter.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/python_adapter.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/rust_adapter.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/typescript_adapter.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/edge_build_context.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/hierarchy_builder.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/lsp_constants.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/progress.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/symbol_table.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/utils.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/java_config_scanner.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/java_utils.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/leiden_utils.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/lsp_client/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/lsp_client/diagnostics.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/node.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/programming_language.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/scanner.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/typescript_config_scanner.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/telemetry/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/telemetry/device_id.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/telemetry/events.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/telemetry/schemas.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_cli_parser.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_install.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_logging_config.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_main.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_pyproject_packages.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_registry_coverage.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_telemetry_events.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_tool_registry.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_user_config.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_view_instructions.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_vscode_constants.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_windows_compatibility.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_windows_encoding.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tool_registry/__init__.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tool_registry/installers.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tool_registry/manifest.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tool_registry/paths.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/tool_registry/registry.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/user_config.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/utils.py +0 -0
- {codeboarding-0.13.2 → codeboarding-0.13.4}/vscode_constants.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codeboarding
|
|
3
|
-
Version: 0.13.
|
|
3
|
+
Version: 0.13.4
|
|
4
4
|
Summary: Interactive Diagrams for Code
|
|
5
5
|
Author: CodeBoarding Team
|
|
6
6
|
License-Expression: MIT
|
|
@@ -73,6 +73,7 @@ Dynamic: license-file
|
|
|
73
73
|
# CodeBoarding
|
|
74
74
|
|
|
75
75
|
[](https://codeboarding.org)
|
|
76
|
+
[](https://app.codeboarding.org)
|
|
76
77
|
[](https://discord.gg/T5zHTJYFuy)
|
|
77
78
|
[](https://github.com/CodeBoarding/CodeBoarding)
|
|
78
79
|
|
|
@@ -130,6 +131,9 @@ codeboarding full --local /path/to/repo
|
|
|
130
131
|
codeboarding full https://github.com/user/repo
|
|
131
132
|
```
|
|
132
133
|
|
|
134
|
+
To explore the result interactively, open the [web platform](https://app.codeboarding.org) and load the
|
|
135
|
+
generated `.codeboarding/analysis.json` — it is parsed in your browser, nothing is uploaded.
|
|
136
|
+
|
|
133
137
|
### Python API
|
|
134
138
|
|
|
135
139
|
```python
|
|
@@ -153,7 +157,7 @@ generator = DiagramGenerator(
|
|
|
153
157
|
temp_folder=output_dir,
|
|
154
158
|
repo_name="my-project",
|
|
155
159
|
output_dir=output_dir,
|
|
156
|
-
depth_level=
|
|
160
|
+
depth_level=3, # safety-valve cap; a component that outgrows the leaf ceiling is flagged expandable and can be expanded on demand
|
|
157
161
|
)
|
|
158
162
|
[analysis_path] = generator.generate_analysis()
|
|
159
163
|
|
|
@@ -211,7 +215,7 @@ codeboarding partial --local PATH --component-id ID # update one component
|
|
|
211
215
|
| Option | Description |
|
|
212
216
|
|---|---|
|
|
213
217
|
| `--local PATH` | Analyze a local repository (output: `PATH/.codeboarding/`) |
|
|
214
|
-
| `--depth-level INT` |
|
|
218
|
+
| `--depth-level INT` | Safety-valve depth cap (default: 3) on how deep auto-expansion goes; a component that outgrows the leaf ceiling is flagged expandable regardless, and can be expanded on demand |
|
|
215
219
|
| `--force` | (full only) Force full reanalysis, skip cached static analysis |
|
|
216
220
|
| `--base-ref REF` / `--target-ref REF` | (incremental only) Git refs to diff |
|
|
217
221
|
| `--component-id ID` | (partial only) ID of the component to update |
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# CodeBoarding
|
|
2
2
|
|
|
3
3
|
[](https://codeboarding.org)
|
|
4
|
+
[](https://app.codeboarding.org)
|
|
4
5
|
[](https://discord.gg/T5zHTJYFuy)
|
|
5
6
|
[](https://github.com/CodeBoarding/CodeBoarding)
|
|
6
7
|
|
|
@@ -58,6 +59,9 @@ codeboarding full --local /path/to/repo
|
|
|
58
59
|
codeboarding full https://github.com/user/repo
|
|
59
60
|
```
|
|
60
61
|
|
|
62
|
+
To explore the result interactively, open the [web platform](https://app.codeboarding.org) and load the
|
|
63
|
+
generated `.codeboarding/analysis.json` — it is parsed in your browser, nothing is uploaded.
|
|
64
|
+
|
|
61
65
|
### Python API
|
|
62
66
|
|
|
63
67
|
```python
|
|
@@ -81,7 +85,7 @@ generator = DiagramGenerator(
|
|
|
81
85
|
temp_folder=output_dir,
|
|
82
86
|
repo_name="my-project",
|
|
83
87
|
output_dir=output_dir,
|
|
84
|
-
depth_level=
|
|
88
|
+
depth_level=3, # safety-valve cap; a component that outgrows the leaf ceiling is flagged expandable and can be expanded on demand
|
|
85
89
|
)
|
|
86
90
|
[analysis_path] = generator.generate_analysis()
|
|
87
91
|
|
|
@@ -139,7 +143,7 @@ codeboarding partial --local PATH --component-id ID # update one component
|
|
|
139
143
|
| Option | Description |
|
|
140
144
|
|---|---|
|
|
141
145
|
| `--local PATH` | Analyze a local repository (output: `PATH/.codeboarding/`) |
|
|
142
|
-
| `--depth-level INT` |
|
|
146
|
+
| `--depth-level INT` | Safety-valve depth cap (default: 3) on how deep auto-expansion goes; a component that outgrows the leaf ceiling is flagged expandable regardless, and can be expanded on demand |
|
|
143
147
|
| `--force` | (full only) Force full reanalysis, skip cached static analysis |
|
|
144
148
|
| `--base-ref REF` / `--target-ref REF` | (incremental only) Git refs to diff |
|
|
145
149
|
| `--component-id ID` | (partial only) ID of the component to update |
|
|
@@ -4,7 +4,7 @@ See what your AI is building before it breaks.
|
|
|
4
4
|
|
|
5
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
6
|
|
|
7
|
-
[Website](https://codeboarding.org) <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=0855d476-b2d0-44cc-b93d-69b47504719c" width="0" height="0" /> · [Open VSX extension](https://open-vsx.org/extension/CodeBoarding/codeboarding) <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=ce87464c-2792-46b0-9ea2-87eefe853d7e" width="0" height="0" /> · [Explore examples](https://codeboarding.org/diagrams) · [VS Code extension](https://marketplace.visualstudio.com/items?itemName=Codeboarding.codeboarding) <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=8a3d26e0-6f6b-49c0-8482-114445de56a5" width="0" height="0" /> · [GitHub Action](https://github.com/marketplace/actions/codeboarding-action) ·[Discord](https://discord.gg/T5zHTJYFuy)
|
|
7
|
+
[Website](https://codeboarding.org) <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=0855d476-b2d0-44cc-b93d-69b47504719c" width="0" height="0" /> · [Web platform](https://app.codeboarding.org) · [Open VSX extension](https://open-vsx.org/extension/CodeBoarding/codeboarding) <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=ce87464c-2792-46b0-9ea2-87eefe853d7e" width="0" height="0" /> · [Explore examples](https://codeboarding.org/diagrams) · [VS Code extension](https://marketplace.visualstudio.com/items?itemName=Codeboarding.codeboarding) <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=8a3d26e0-6f6b-49c0-8482-114445de56a5" width="0" height="0" /> · [GitHub Action](https://github.com/marketplace/actions/codeboarding-action) · [Discord](https://discord.gg/T5zHTJYFuy)
|
|
8
8
|
|
|
9
9
|
[](https://open-vsx.org/extension/CodeBoarding/codeboarding) <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=ce87464c-2792-46b0-9ea2-87eefe853d7e" width="0" height="0" />
|
|
10
10
|
|
|
@@ -91,7 +91,9 @@ codeboarding-setup
|
|
|
91
91
|
codeboarding full --local /path/to/repo
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
-
Output is written to `/path/to/repo/.codeboarding/`.
|
|
94
|
+
Output is written to `/path/to/repo/.codeboarding/`. To explore it interactively, open the
|
|
95
|
+
[web platform](https://app.codeboarding.org) and drop in the generated `analysis.json` — it stays
|
|
96
|
+
in your browser, nothing is uploaded. (The CLI prints this reminder after every successful run.)
|
|
95
97
|
|
|
96
98
|
`python install.py` and `codeboarding-setup` download language server binaries to `~/.codeboarding/servers/`, shared across projects. Node.js (and its bundled `npm`) is required for the Python, TypeScript, JavaScript, and PHP language servers; if neither `node` nor `CODEBOARDING_NODE_PATH` is set, setup downloads a pinned Node.js runtime into `~/.codeboarding/servers/nodeenv/` automatically.
|
|
97
99
|
|
|
@@ -124,8 +126,10 @@ Shell environment variables such as `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOG
|
|
|
124
126
|
# Analyze a local repository
|
|
125
127
|
python main.py full --local ./my-project
|
|
126
128
|
|
|
127
|
-
#
|
|
128
|
-
|
|
129
|
+
# Raise the depth ceiling to auto-expand deeper (rarely needed — a component that
|
|
130
|
+
# outgrows the leaf ceiling is flagged expandable at whatever depth the run stops
|
|
131
|
+
# and can be expanded on demand; --depth-level is a safety-valve cap, default 3)
|
|
132
|
+
python main.py full --local ./my-project --depth-level 5
|
|
129
133
|
|
|
130
134
|
# Re-analyze only changed parts when possible
|
|
131
135
|
python main.py incremental --local ./my-project
|
|
@@ -148,6 +152,7 @@ python main.py full https://github.com/pytorch/pytorch
|
|
|
148
152
|
## Where to use it
|
|
149
153
|
|
|
150
154
|
- [CLI](https://github.com/CodeBoarding/CodeBoarding) for local analysis, automation, and CI workflows.
|
|
155
|
+
- [Web platform](https://app.codeboarding.org) to explore any analysis in the browser — open a public repo, load an `analysis.json`, or review an architecture diff on a pull request.
|
|
151
156
|
- [VS Code extension](https://marketplace.visualstudio.com/items?itemName=Codeboarding.codeboarding) <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=8a3d26e0-6f6b-49c0-8482-114445de56a5" width="0" height="0" /> for in-editor visual architecture.
|
|
152
157
|
- [GitHub Action](https://github.com/marketplace/actions/codeboarding-action) to keep diagrams updated in CI.
|
|
153
158
|
|
|
@@ -161,6 +166,7 @@ python main.py full https://github.com/pytorch/pytorch
|
|
|
161
166
|
- Visualized 800+ open-source repositories.
|
|
162
167
|
- Browse generated examples in [GeneratedOnBoardings](https://github.com/CodeBoarding/GeneratedOnBoardings).
|
|
163
168
|
- Try the hosted explorer at [codeboarding.org/diagrams](https://codeboarding.org/diagrams) <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=0855d476-b2d0-44cc-b93d-69b47504719c" width="0" height="0" />.
|
|
169
|
+
- Open any public repo that has a committed `.codeboarding/analysis.json` at [app.codeboarding.org](https://app.codeboarding.org) — no install, no login. This repo included: [app.codeboarding.org/CodeBoarding/CodeBoarding](https://app.codeboarding.org/CodeBoarding/CodeBoarding).
|
|
164
170
|
|
|
165
171
|
## Telemetry
|
|
166
172
|
|
|
@@ -17,7 +17,6 @@ from agents.agent_responses import (
|
|
|
17
17
|
)
|
|
18
18
|
from agents.cluster_methods_mixin import ClusterMethodsMixin
|
|
19
19
|
from agents.prompts import (
|
|
20
|
-
get_cluster_grouping_message,
|
|
21
20
|
get_final_analysis_message,
|
|
22
21
|
get_api_surfaces_message,
|
|
23
22
|
get_relation_analysis_message,
|
|
@@ -28,17 +27,15 @@ from agents.relation_edges import index_relation_endpoints
|
|
|
28
27
|
from agents.repair import ComponentRepairContext, repair_component_group_names, repair_key_entities
|
|
29
28
|
from agents.validation import (
|
|
30
29
|
ValidationContext,
|
|
31
|
-
validate_cluster_coverage,
|
|
32
30
|
validate_group_name_coverage,
|
|
33
31
|
validate_key_entities,
|
|
34
32
|
validate_relations,
|
|
35
33
|
)
|
|
36
34
|
from monitoring import trace
|
|
35
|
+
from static_analyzer import StaticAnalysisFatalError
|
|
37
36
|
from static_analyzer.analysis_result import StaticAnalysisResults
|
|
38
|
-
from static_analyzer.cluster_helpers import
|
|
39
|
-
|
|
40
|
-
get_all_cluster_ids,
|
|
41
|
-
)
|
|
37
|
+
from static_analyzer.cluster_helpers import build_all_cluster_results
|
|
38
|
+
from static_analyzer.constants import Language
|
|
42
39
|
from static_analyzer.graph import ClusterResult
|
|
43
40
|
|
|
44
41
|
logger = logging.getLogger(__name__)
|
|
@@ -61,10 +58,6 @@ class AbstractionAgent(ClusterMethodsMixin, CodeBoardingAgent):
|
|
|
61
58
|
self.meta_context = meta_context
|
|
62
59
|
|
|
63
60
|
self.prompts = {
|
|
64
|
-
"group_clusters": PromptTemplate(
|
|
65
|
-
template=get_cluster_grouping_message(),
|
|
66
|
-
input_variables=["cfg_clusters"],
|
|
67
|
-
),
|
|
68
61
|
"final_analysis": PromptTemplate(
|
|
69
62
|
template=get_final_analysis_message(),
|
|
70
63
|
input_variables=["cluster_analysis"],
|
|
@@ -88,37 +81,18 @@ class AbstractionAgent(ClusterMethodsMixin, CodeBoardingAgent):
|
|
|
88
81
|
|
|
89
82
|
@trace
|
|
90
83
|
def step_clusters_grouping(self, cluster_results: dict[str, ClusterResult]) -> ClusterAnalysis:
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
)
|
|
103
|
-
cluster_str = self._build_cluster_string(
|
|
104
|
-
programming_langs, cluster_results, prompt_overhead_chars=overhead_chars
|
|
105
|
-
)
|
|
106
|
-
|
|
107
|
-
prompt = self.prompts["group_clusters"].format(
|
|
108
|
-
cfg_clusters=cluster_str,
|
|
109
|
-
)
|
|
110
|
-
|
|
111
|
-
cluster_analysis = self._invoke_validate(
|
|
112
|
-
prompt,
|
|
113
|
-
ClusterAnalysis,
|
|
114
|
-
validators=[validate_cluster_coverage],
|
|
115
|
-
validation_context=ValidationContext(
|
|
116
|
-
cluster_results=cluster_results,
|
|
117
|
-
expected_cluster_ids=get_all_cluster_ids(cluster_results),
|
|
118
|
-
),
|
|
119
|
-
max_validation_attempts=3,
|
|
120
|
-
)
|
|
121
|
-
return cluster_analysis
|
|
84
|
+
"""Deterministically partition leaf clusters into the top-level component groups.
|
|
85
|
+
|
|
86
|
+
Resolution-tuned Leiden picks both the count (modularity peak over
|
|
87
|
+
``[5, 8]``) and the membership, so the top-level structure is stable across
|
|
88
|
+
re-runs — the LLM no longer decides it; it only names them in the
|
|
89
|
+
final-analysis step.
|
|
90
|
+
"""
|
|
91
|
+
logger.info(f"[AbstractionAgent] Super-clustering leaf clusters for: {self.project_name}")
|
|
92
|
+
cfg_graphs = {
|
|
93
|
+
lang: self.static_analysis.get_cfg(Language(lang)).clustering_networkx() for lang in cluster_results
|
|
94
|
+
}
|
|
95
|
+
return self.deterministic_cluster_grouping(cluster_results, cfg_graphs)
|
|
122
96
|
|
|
123
97
|
@trace
|
|
124
98
|
def step_final_analysis(
|
|
@@ -162,6 +136,7 @@ class AbstractionAgent(ClusterMethodsMixin, CodeBoardingAgent):
|
|
|
162
136
|
validation_context=context,
|
|
163
137
|
max_validation_attempts=3,
|
|
164
138
|
)
|
|
139
|
+
self.assemble_one_component_per_group(architecture, llm_cluster_analysis, cluster_results)
|
|
165
140
|
return AnalysisInsights(
|
|
166
141
|
description=architecture.description,
|
|
167
142
|
components=architecture.components,
|
|
@@ -219,10 +194,18 @@ class AbstractionAgent(ClusterMethodsMixin, CodeBoardingAgent):
|
|
|
219
194
|
# Build full cluster results dict for all languages ONCE
|
|
220
195
|
cluster_results = build_all_cluster_results(self.static_analysis)
|
|
221
196
|
|
|
222
|
-
# Step 1:
|
|
197
|
+
# Step 1: Deterministically partition leaf clusters into the top-level groups (Leiden, modularity-peak N)
|
|
223
198
|
cluster_analysis = self.step_clusters_grouping(cluster_results)
|
|
199
|
+
if not cluster_analysis.cluster_components:
|
|
200
|
+
# No leaf clusters means the repo has no callable structure to abstract
|
|
201
|
+
# (unsupported/empty/no-code). Fail loudly instead of emptying the
|
|
202
|
+
# architecture and crashing downstream in populate_file_methods.
|
|
203
|
+
raise StaticAnalysisFatalError(
|
|
204
|
+
f"No component groups found for {self.project_name}: the static analysis produced "
|
|
205
|
+
"no callable structure to build an architecture from."
|
|
206
|
+
)
|
|
224
207
|
|
|
225
|
-
# Step 2:
|
|
208
|
+
# Step 2: Name and describe each fixed group into a component (LLM, one component per group)
|
|
226
209
|
analysis = self.step_final_analysis(cluster_analysis, cluster_results)
|
|
227
210
|
# Step 3: Assign hierarchical component IDs ("1", "2", "3", ...)
|
|
228
211
|
assign_component_ids(analysis)
|
|
@@ -7,7 +7,7 @@ from typing import Protocol, TypeVar
|
|
|
7
7
|
from google.api_core.exceptions import ResourceExhausted
|
|
8
8
|
from langchain_core.exceptions import OutputParserException
|
|
9
9
|
from langchain_core.language_models import BaseChatModel
|
|
10
|
-
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
|
|
10
|
+
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
|
|
11
11
|
from langchain_core.output_parsers import PydanticOutputParser
|
|
12
12
|
from langchain_core.prompts import PromptTemplate
|
|
13
13
|
from langchain.agents import create_agent
|
|
@@ -6,13 +6,13 @@ from abc import abstractmethod
|
|
|
6
6
|
from collections.abc import Hashable
|
|
7
7
|
from enum import StrEnum
|
|
8
8
|
from pathlib import PurePosixPath
|
|
9
|
-
from typing import TYPE_CHECKING, get_origin
|
|
9
|
+
from typing import TYPE_CHECKING, get_origin
|
|
10
10
|
|
|
11
11
|
from pydantic import BaseModel, Field
|
|
12
12
|
from pydantic.fields import FieldInfo
|
|
13
13
|
|
|
14
14
|
from agents.cluster_ids import CodeBoardingClusterId, GraphClusterId
|
|
15
|
-
from agents.file_index_models import FileEntry, FileMethodGroup
|
|
15
|
+
from agents.file_index_models import FileEntry, FileMethodGroup
|
|
16
16
|
from agents.scope_ids import ROOT_SCOPE_ID
|
|
17
17
|
|
|
18
18
|
logger = logging.getLogger(__name__)
|
|
@@ -644,7 +644,14 @@ def assign_component_ids(analysis: AnalysisInsights, parent_id: str = "", only_n
|
|
|
644
644
|
|
|
645
645
|
|
|
646
646
|
def assign_relation_ids(analysis: AnalysisInsights) -> None:
|
|
647
|
-
"""Assign relation component IDs by
|
|
647
|
+
"""Assign relation component IDs by name, dropping any relation whose endpoint
|
|
648
|
+
does not name a component in this scope.
|
|
649
|
+
|
|
650
|
+
Relation generation can emit an endpoint that is not a sibling — a name from a
|
|
651
|
+
neighbouring scope, or one the wording invented. Such a relation has no valid id and
|
|
652
|
+
would render as a dangling edge (``relations.endpoints_resolve``), so it is removed
|
|
653
|
+
rather than kept with an empty endpoint id.
|
|
654
|
+
"""
|
|
648
655
|
name_to_id: dict[str, str] = {}
|
|
649
656
|
for c in analysis.components:
|
|
650
657
|
if c.name in name_to_id:
|
|
@@ -654,9 +661,17 @@ def assign_relation_ids(analysis: AnalysisInsights) -> None:
|
|
|
654
661
|
)
|
|
655
662
|
else:
|
|
656
663
|
name_to_id[c.name] = c.component_id
|
|
664
|
+
resolved: list[Relation] = []
|
|
657
665
|
for relation in analysis.components_relations:
|
|
658
|
-
|
|
659
|
-
|
|
666
|
+
src_id = name_to_id.get(relation.src_name, "")
|
|
667
|
+
dst_id = name_to_id.get(relation.dst_name, "")
|
|
668
|
+
if not src_id or not dst_id:
|
|
669
|
+
logger.info(f"Dropping relation with unresolved endpoint: '{relation.src_name}' -> '{relation.dst_name}'")
|
|
670
|
+
continue
|
|
671
|
+
relation.src_id = src_id
|
|
672
|
+
relation.dst_id = dst_id
|
|
673
|
+
resolved.append(relation)
|
|
674
|
+
analysis.components_relations = resolved
|
|
660
675
|
|
|
661
676
|
|
|
662
677
|
def iter_components(
|
|
@@ -805,17 +820,6 @@ class ComponentFiles(LLMBaseModel):
|
|
|
805
820
|
return title + body
|
|
806
821
|
|
|
807
822
|
|
|
808
|
-
class ScopeRelations(LLMBaseModel):
|
|
809
|
-
"""Relations between components within a single scope."""
|
|
810
|
-
|
|
811
|
-
components_relations: list[Relation] = Field(description="Inter-component relationships within this scope.")
|
|
812
|
-
|
|
813
|
-
def llm_str(self):
|
|
814
|
-
if not self.components_relations:
|
|
815
|
-
return "No relations found."
|
|
816
|
-
return "\n".join(r.llm_str() for r in self.components_relations)
|
|
817
|
-
|
|
818
|
-
|
|
819
823
|
class ScopeOperationAction(StrEnum):
|
|
820
824
|
CREATE_COMPONENT = "create_component"
|
|
821
825
|
UPDATE_COMPONENT = "update_component"
|