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.
Files changed (217) hide show
  1. {codeboarding-0.13.2/codeboarding.egg-info → codeboarding-0.13.4}/PKG-INFO +7 -3
  2. {codeboarding-0.13.2 → codeboarding-0.13.4}/PYPI.md +6 -2
  3. {codeboarding-0.13.2 → codeboarding-0.13.4}/README.md +10 -4
  4. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/abstraction_agent.py +26 -43
  5. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/agent.py +1 -1
  6. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/agent_responses.py +20 -16
  7. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/cluster_methods_mixin.py +136 -305
  8. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/content_hash.py +22 -0
  9. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/details_agent.py +19 -62
  10. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/file_index_models.py +10 -0
  11. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/incremental_agent.py +268 -37
  12. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/incremental_results.py +3 -0
  13. codeboarding-0.13.4/agents/planner_agent.py +181 -0
  14. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/__init__.py +0 -9
  15. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/abstract_prompt_factory.py +0 -16
  16. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/claude_prompts.py +19 -170
  17. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/deepseek_prompts.py +22 -169
  18. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/gemini_flash_prompts.py +20 -154
  19. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/glm_prompts.py +21 -178
  20. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/gpt_prompts.py +20 -151
  21. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/kimi_prompts.py +21 -152
  22. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/prompts/prompt_factory.py +0 -16
  23. codeboarding-0.13.4/agents/relation_edges.py +291 -0
  24. codeboarding-0.13.4/agents/repair.py +101 -0
  25. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/validation.py +0 -212
  26. {codeboarding-0.13.2 → codeboarding-0.13.4}/caching/__init__.py +1 -2
  27. {codeboarding-0.13.2 → codeboarding-0.13.4}/caching/details_cache.py +1 -21
  28. {codeboarding-0.13.2 → codeboarding-0.13.4/codeboarding.egg-info}/PKG-INFO +7 -3
  29. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding.egg-info/SOURCES.txt +3 -4
  30. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/commands/full_analysis.py +7 -3
  31. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/analysis.py +17 -8
  32. {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/__init__.py +5 -1
  33. {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/analysis_json.py +52 -5
  34. {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/cluster_delta.py +253 -34
  35. codeboarding-0.13.4/diagram_analysis/diagram_generator.py +1777 -0
  36. {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/exceptions.py +31 -6
  37. {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/file_index.py +19 -1
  38. {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/io_utils.py +61 -11
  39. {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/run_context.py +11 -9
  40. codeboarding-0.13.4/diagram_analysis/scope_plan.py +260 -0
  41. codeboarding-0.13.4/diagram_analysis/tree_shape.py +122 -0
  42. {codeboarding-0.13.2 → codeboarding-0.13.4}/github_action.py +14 -2
  43. {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/function_size.py +8 -8
  44. {codeboarding-0.13.2 → codeboarding-0.13.4}/health/runner.py +9 -8
  45. {codeboarding-0.13.2 → codeboarding-0.13.4}/main.py +3 -2
  46. {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/stats.py +13 -0
  47. {codeboarding-0.13.2 → codeboarding-0.13.4}/output_generators/html_template.py +3 -0
  48. {codeboarding-0.13.2 → codeboarding-0.13.4}/output_generators/markdown.py +1 -1
  49. {codeboarding-0.13.2 → codeboarding-0.13.4}/output_generators/sphinx.py +5 -1
  50. {codeboarding-0.13.2 → codeboarding-0.13.4}/pyproject.toml +6 -15
  51. {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/__init__.py +8 -1
  52. {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/ignore.py +21 -32
  53. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/__init__.py +1 -1
  54. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/analysis_cache.py +25 -3
  55. codeboarding-0.13.4/static_analyzer/cluster_helpers.py +577 -0
  56. codeboarding-0.13.4/static_analyzer/cluster_relations.py +582 -0
  57. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/constants.py +9 -0
  58. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/csharp_adapter.py +4 -0
  59. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/go_adapter.py +25 -0
  60. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/php_adapter.py +32 -0
  61. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/call_graph_builder.py +21 -12
  62. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/edge_builder.py +19 -1
  63. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/language_adapter.py +12 -2
  64. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/lsp_client.py +61 -7
  65. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/models.py +6 -0
  66. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/protocols.py +3 -0
  67. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/result_converter.py +66 -2
  68. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/source_inspector.py +35 -0
  69. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/graph.py +90 -173
  70. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/incremental_orchestrator.py +31 -6
  71. codeboarding-0.13.4/static_analyzer/internal_references.py +98 -0
  72. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/language_results.py +6 -1
  73. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/method_cluster_paths.py +21 -0
  74. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/reference_resolver.py +23 -24
  75. {codeboarding-0.13.2 → codeboarding-0.13.4}/telemetry/service.py +36 -6
  76. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_github_action.py +43 -0
  77. codeboarding-0.13.4/tests/test_telemetry_service.py +99 -0
  78. codeboarding-0.13.2/agents/cluster_budget.py +0 -21
  79. codeboarding-0.13.2/agents/incremental_planning_agent.py +0 -305
  80. codeboarding-0.13.2/agents/planner_agent.py +0 -117
  81. codeboarding-0.13.2/agents/relation_edges.py +0 -52
  82. codeboarding-0.13.2/agents/repair.py +0 -276
  83. codeboarding-0.13.2/agents/scope_operations.py +0 -35
  84. codeboarding-0.13.2/diagram_analysis/diagram_generator.py +0 -997
  85. codeboarding-0.13.2/static_analyzer/cfg_skip_planner.py +0 -214
  86. codeboarding-0.13.2/static_analyzer/cluster_helpers.py +0 -511
  87. codeboarding-0.13.2/static_analyzer/cluster_relations.py +0 -324
  88. codeboarding-0.13.2/static_analyzer/internal_references.py +0 -72
  89. {codeboarding-0.13.2 → codeboarding-0.13.4}/LICENSE +0 -0
  90. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/__init__.py +0 -0
  91. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/change_status.py +0 -0
  92. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/cluster_ids.py +0 -0
  93. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/constants.py +0 -0
  94. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/dependency_discovery.py +0 -0
  95. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/llm_config.py +0 -0
  96. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/llm_errors.py +0 -0
  97. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/meta_agent.py +0 -0
  98. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/model_capabilities.py +0 -0
  99. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/retry.py +0 -0
  100. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/scope_ids.py +0 -0
  101. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/__init__.py +0 -0
  102. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/base.py +0 -0
  103. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/component_bridge_edges.py +0 -0
  104. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/get_external_deps.py +0 -0
  105. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/get_method_invocations.py +0 -0
  106. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/list_git_changes.py +0 -0
  107. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_cfg.py +0 -0
  108. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_docs.py +0 -0
  109. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_file.py +0 -0
  110. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_file_structure.py +0 -0
  111. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_packages.py +0 -0
  112. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_source.py +0 -0
  113. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/read_structure.py +0 -0
  114. {codeboarding-0.13.2 → codeboarding-0.13.4}/agents/tools/toolkit.py +0 -0
  115. {codeboarding-0.13.2 → codeboarding-0.13.4}/caching/cache.py +0 -0
  116. {codeboarding-0.13.2 → codeboarding-0.13.4}/caching/meta_cache.py +0 -0
  117. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding.egg-info/dependency_links.txt +0 -0
  118. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding.egg-info/entry_points.txt +0 -0
  119. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding.egg-info/requires.txt +0 -0
  120. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding.egg-info/top_level.txt +0 -0
  121. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/__init__.py +0 -0
  122. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/bootstrap.py +0 -0
  123. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/commands/__init__.py +0 -0
  124. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/commands/incremental_analysis.py +0 -0
  125. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/commands/partial_analysis.py +0 -0
  126. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_cli/view_instructions.py +0 -0
  127. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/__init__.py +0 -0
  128. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/orchestration.py +0 -0
  129. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/rendering.py +0 -0
  130. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/sources/__init__.py +0 -0
  131. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/sources/local.py +0 -0
  132. {codeboarding-0.13.2 → codeboarding-0.13.4}/codeboarding_workflows/sources/remote.py +0 -0
  133. {codeboarding-0.13.2 → codeboarding-0.13.4}/constants.py +0 -0
  134. {codeboarding-0.13.2 → codeboarding-0.13.4}/core/__init__.py +0 -0
  135. {codeboarding-0.13.2 → codeboarding-0.13.4}/core/plugin_loader.py +0 -0
  136. {codeboarding-0.13.2 → codeboarding-0.13.4}/core/protocols.py +0 -0
  137. {codeboarding-0.13.2 → codeboarding-0.13.4}/core/registry.py +0 -0
  138. {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/cluster_snapshot.py +0 -0
  139. {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/file_coverage.py +0 -0
  140. {codeboarding-0.13.2 → codeboarding-0.13.4}/diagram_analysis/run_mode.py +0 -0
  141. {codeboarding-0.13.2 → codeboarding-0.13.4}/health/__init__.py +0 -0
  142. {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/__init__.py +0 -0
  143. {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/circular_deps.py +0 -0
  144. {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/cohesion.py +0 -0
  145. {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/coupling.py +0 -0
  146. {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/god_class.py +0 -0
  147. {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/inheritance.py +0 -0
  148. {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/instability.py +0 -0
  149. {codeboarding-0.13.2 → codeboarding-0.13.4}/health/checks/unused_code_diagnostics.py +0 -0
  150. {codeboarding-0.13.2 → codeboarding-0.13.4}/health/config.py +0 -0
  151. {codeboarding-0.13.2 → codeboarding-0.13.4}/health/models.py +0 -0
  152. {codeboarding-0.13.2 → codeboarding-0.13.4}/install.py +0 -0
  153. {codeboarding-0.13.2 → codeboarding-0.13.4}/logging_config.py +0 -0
  154. {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/__init__.py +0 -0
  155. {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/callbacks.py +0 -0
  156. {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/context.py +0 -0
  157. {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/mixin.py +0 -0
  158. {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/paths.py +0 -0
  159. {codeboarding-0.13.2 → codeboarding-0.13.4}/monitoring/writers.py +0 -0
  160. {codeboarding-0.13.2 → codeboarding-0.13.4}/output_generators/__init__.py +0 -0
  161. {codeboarding-0.13.2 → codeboarding-0.13.4}/output_generators/html.py +0 -0
  162. {codeboarding-0.13.2 → codeboarding-0.13.4}/output_generators/mdx.py +0 -0
  163. {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/change_detector.py +0 -0
  164. {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/errors.py +0 -0
  165. {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/fingerprint_diff.py +0 -0
  166. {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/git_ops.py +0 -0
  167. {codeboarding-0.13.2 → codeboarding-0.13.4}/repo_utils/path_utils.py +0 -0
  168. {codeboarding-0.13.2 → codeboarding-0.13.4}/setup.cfg +0 -0
  169. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/analysis_result.py +0 -0
  170. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/csharp_config_scanner.py +0 -0
  171. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/dotnet_sdk.py +0 -0
  172. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/__init__.py +0 -0
  173. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/__init__.py +0 -0
  174. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/java_adapter.py +0 -0
  175. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/python_adapter.py +0 -0
  176. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/rust_adapter.py +0 -0
  177. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/adapters/typescript_adapter.py +0 -0
  178. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/edge_build_context.py +0 -0
  179. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/hierarchy_builder.py +0 -0
  180. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/lsp_constants.py +0 -0
  181. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/progress.py +0 -0
  182. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/symbol_table.py +0 -0
  183. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/engine/utils.py +0 -0
  184. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/java_config_scanner.py +0 -0
  185. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/java_utils.py +0 -0
  186. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/leiden_utils.py +0 -0
  187. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/lsp_client/__init__.py +0 -0
  188. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/lsp_client/diagnostics.py +0 -0
  189. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/node.py +0 -0
  190. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/programming_language.py +0 -0
  191. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/scanner.py +0 -0
  192. {codeboarding-0.13.2 → codeboarding-0.13.4}/static_analyzer/typescript_config_scanner.py +0 -0
  193. {codeboarding-0.13.2 → codeboarding-0.13.4}/telemetry/__init__.py +0 -0
  194. {codeboarding-0.13.2 → codeboarding-0.13.4}/telemetry/device_id.py +0 -0
  195. {codeboarding-0.13.2 → codeboarding-0.13.4}/telemetry/events.py +0 -0
  196. {codeboarding-0.13.2 → codeboarding-0.13.4}/telemetry/schemas.py +0 -0
  197. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_cli_parser.py +0 -0
  198. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_install.py +0 -0
  199. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_logging_config.py +0 -0
  200. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_main.py +0 -0
  201. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_pyproject_packages.py +0 -0
  202. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_registry_coverage.py +0 -0
  203. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_telemetry_events.py +0 -0
  204. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_tool_registry.py +0 -0
  205. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_user_config.py +0 -0
  206. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_view_instructions.py +0 -0
  207. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_vscode_constants.py +0 -0
  208. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_windows_compatibility.py +0 -0
  209. {codeboarding-0.13.2 → codeboarding-0.13.4}/tests/test_windows_encoding.py +0 -0
  210. {codeboarding-0.13.2 → codeboarding-0.13.4}/tool_registry/__init__.py +0 -0
  211. {codeboarding-0.13.2 → codeboarding-0.13.4}/tool_registry/installers.py +0 -0
  212. {codeboarding-0.13.2 → codeboarding-0.13.4}/tool_registry/manifest.py +0 -0
  213. {codeboarding-0.13.2 → codeboarding-0.13.4}/tool_registry/paths.py +0 -0
  214. {codeboarding-0.13.2 → codeboarding-0.13.4}/tool_registry/registry.py +0 -0
  215. {codeboarding-0.13.2 → codeboarding-0.13.4}/user_config.py +0 -0
  216. {codeboarding-0.13.2 → codeboarding-0.13.4}/utils.py +0 -0
  217. {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.2
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
  [![Website](https://img.shields.io/badge/Site-CodeBoarding.org-5865F2?style=for-the-badge&logoColor=white)](https://codeboarding.org)
76
+ [![Web platform](https://img.shields.io/badge/Web%20platform-app.codeboarding.org-2563EB?style=for-the-badge&logoColor=white)](https://app.codeboarding.org)
76
77
  [![Discord](https://img.shields.io/badge/Discord-Join%20Us-5865F2?style=for-the-badge&logoColor=white)](https://discord.gg/T5zHTJYFuy)
77
78
  [![GitHub](https://img.shields.io/badge/GitHub-CodeBoarding-181717?style=for-the-badge&logo=github&logoColor=white)](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=1,
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` | Diagram depth (default: 1) |
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
  [![Website](https://img.shields.io/badge/Site-CodeBoarding.org-5865F2?style=for-the-badge&logoColor=white)](https://codeboarding.org)
4
+ [![Web platform](https://img.shields.io/badge/Web%20platform-app.codeboarding.org-2563EB?style=for-the-badge&logoColor=white)](https://app.codeboarding.org)
4
5
  [![Discord](https://img.shields.io/badge/Discord-Join%20Us-5865F2?style=for-the-badge&logoColor=white)](https://discord.gg/T5zHTJYFuy)
5
6
  [![GitHub](https://img.shields.io/badge/GitHub-CodeBoarding-181717?style=for-the-badge&logo=github&logoColor=white)](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=1,
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` | Diagram depth (default: 1) |
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
  [![CodeBoarding demo](https://gist.githubusercontent.com/ivanmilevtues/1c4f921066613516cfd7b938014a6877/raw/611aec7711556807860ff2e1679a5dc4c0c23fed/CodeBoarding_extension_demo.gif)](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
- # Increase diagram depth
128
- python main.py full --local ./my-project --depth-level 2
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
- build_all_cluster_results,
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
- logger.info(f"[AbstractionAgent] Grouping CFG clusters for: {self.project_name}")
92
-
93
- programming_langs = self.static_analysis.get_languages()
94
-
95
- # Measure everything that wraps cfg_clusters (system message + rendered
96
- # template with an empty slot) so the skip planner can back it out of
97
- # the input window before budgeting the cluster string.
98
- overhead_chars = len(str(self.system_message.content)) + len(
99
- self.prompts["group_clusters"].format(
100
- cfg_clusters="",
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: Group related clusters together into logical components
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: Generate abstract components from grouped clusters
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, ToolMessage
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, Optional
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, MethodEntry
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 looking up component names."""
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
- relation.src_id = name_to_id.get(relation.src_name, "")
659
- relation.dst_id = name_to_id.get(relation.dst_name, "")
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"