codeboarding 0.13.10__tar.gz → 0.13.11__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.10/codeboarding.egg-info → codeboarding-0.13.11}/PKG-INFO +1 -1
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/llm_config.py +33 -12
- {codeboarding-0.13.10 → codeboarding-0.13.11/codeboarding.egg-info}/PKG-INFO +1 -1
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding.egg-info/SOURCES.txt +0 -1
- {codeboarding-0.13.10 → codeboarding-0.13.11}/diagram_analysis/file_index.py +2 -2
- {codeboarding-0.13.10 → codeboarding-0.13.11}/pyproject.toml +1 -1
- codeboarding-0.13.10/health_main.py +0 -152
- {codeboarding-0.13.10 → codeboarding-0.13.11}/LICENSE +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/PYPI.md +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/README.md +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/abstraction_agent.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/agent.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/agent_responses.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/change_status.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/component_ownership.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/constants.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/content_hash.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/dependency_discovery.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/details_agent.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/file_index_models.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/incremental_agent.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/incremental_results.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/llm_errors.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/llm_renderers/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/llm_renderers/call_graph.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/llm_renderers/clustering.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/meta_agent.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/model_capabilities.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/planner_agent.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/prompts/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/prompts/abstract_prompt_factory.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/prompts/claude_prompts.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/prompts/deepseek_prompts.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/prompts/gemini_flash_prompts.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/prompts/glm_prompts.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/prompts/gpt_prompts.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/prompts/kimi_prompts.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/prompts/prompt_factory.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/relation_edges.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/repair.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/retry.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/scope_ids.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/static_analysis_enricher_mixin.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/base.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/component_bridge_edges.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/get_external_deps.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/get_method_invocations.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/list_git_changes.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/read_cfg.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/read_docs.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/read_file.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/read_file_structure.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/read_packages.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/read_source.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/read_structure.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/tools/toolkit.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/agents/validation.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/caching/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/caching/cache.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/caching/meta_cache.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/clustering_ids.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding.egg-info/dependency_links.txt +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding.egg-info/entry_points.txt +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding.egg-info/requires.txt +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding.egg-info/top_level.txt +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_cli/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_cli/bootstrap.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_cli/commands/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_cli/commands/full_analysis.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_cli/commands/incremental_analysis.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_cli/commands/partial_analysis.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_cli/render.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_cli/view_instructions.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_workflows/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_workflows/analysis.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_workflows/orchestration.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_workflows/sources/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_workflows/sources/local.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_workflows/sources/remote.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/constants.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/core/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/core/plugin_loader.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/core/protocols.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/core/registry.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/diagram_analysis/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/diagram_analysis/analysis_json.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/diagram_analysis/diagram_generator.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/diagram_analysis/exceptions.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/diagram_analysis/file_coverage.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/diagram_analysis/incremental_changes.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/diagram_analysis/io_utils.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/diagram_analysis/run_context.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/diagram_analysis/run_mode.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/diagram_analysis/scope_plan.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/diagram_analysis/tree_shape.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/github_action.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/health/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/health/checks/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/health/checks/circular_deps.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/health/checks/function_size.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/health/checks/unused_code_diagnostics.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/health/config.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/health/models.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/health/runner.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/install.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/logging_config.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/main.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/monitoring/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/monitoring/callbacks.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/monitoring/context.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/monitoring/mixin.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/monitoring/paths.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/monitoring/stats.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/monitoring/writers.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/output_generators/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/output_generators/html.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/output_generators/html_template.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/output_generators/markdown.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/output_generators/mdx.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/output_generators/rendering.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/output_generators/sphinx.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/repo_utils/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/repo_utils/change_detector.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/repo_utils/errors.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/repo_utils/fingerprint_diff.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/repo_utils/git_ops.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/repo_utils/ignore.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/repo_utils/path_utils.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/setup.cfg +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/analysis_cache.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/analysis_result.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/cfg/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/cfg/call_graph.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/cfg/edge.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/cfg/location_key.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/cluster_relations.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/clustering/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/clustering/cache.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/clustering/delta.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/clustering/engine.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/clustering/exceptions.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/clustering/expansion.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/clustering/grouping.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/clustering/models.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/clustering/service.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/clustering/snapshot.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/config.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/csharp_config_scanner.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/dotnet_sdk.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/adapters/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/adapters/csharp_adapter.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/adapters/go_adapter.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/adapters/java_adapter.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/adapters/php_adapter.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/adapters/python_adapter.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/adapters/rust_adapter.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/adapters/typescript_adapter.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/call_graph_builder.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/edge_build_context.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/edge_builder.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/hierarchy_builder.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/language_adapter.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/lsp_client.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/lsp_constants.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/lsp_recycler.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/models.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/process_memory.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/progress.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/protocols.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/result_converter.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/source_inspector.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/symbol_table.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/engine/utils.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/incremental_orchestrator.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/internal_references.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/java_config_scanner.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/java_utils.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/language_results.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/leiden_utils.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/lsp_client/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/lsp_client/diagnostics.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/node.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/programming_language.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/reference_resolver.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/scanner.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/static_analyzer/typescript_config_scanner.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/telemetry/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/telemetry/device_id.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/telemetry/events.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/telemetry/schemas.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/telemetry/service.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_cli_parser.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_github_action.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_install.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_logging_config.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_main.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_persisted_analysis_artifacts.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_pyproject_packages.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_registry_coverage.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_telemetry_events.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_telemetry_service.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_tool_registry.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_user_config.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_view_instructions.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_vscode_constants.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_windows_compatibility.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tests/test_windows_encoding.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tool_registry/__init__.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tool_registry/installers.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tool_registry/manifest.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tool_registry/paths.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/tool_registry/registry.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/user_config.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/utils.py +0 -0
- {codeboarding-0.13.10 → codeboarding-0.13.11}/vscode_constants.py +0 -0
|
@@ -91,6 +91,8 @@ class LLMConfig:
|
|
|
91
91
|
selection_envs: Env vars that select this provider — any one being set selects it.
|
|
92
92
|
api_key_env: Env var holding the provider's secret, or None when the
|
|
93
93
|
underlying SDK reads its credentials from the environment itself.
|
|
94
|
+
base_url_env: Env var that overrides the provider endpoint, or an empty string when unsupported.
|
|
95
|
+
default_base_url: Built-in endpoint used when base_url_env is unset, or an empty string for the SDK default.
|
|
94
96
|
agent_model: The "agent" model used for complex reasoning and agentic tasks.
|
|
95
97
|
parsing_model: The "parsing" model used for fast, cost-effective extraction and parsing tasks.
|
|
96
98
|
agent_temperature: Temperature for the agent model. Defaults to 0 for deterministic behavior
|
|
@@ -109,6 +111,8 @@ class LLMConfig:
|
|
|
109
111
|
parsing_temperature: float = LLMDefaults.DEFAULT_PARSING_TEMPERATURE
|
|
110
112
|
extra_args: dict[str, Any] = field(default_factory=dict)
|
|
111
113
|
api_key_env: str | None = None
|
|
114
|
+
base_url_env: str = ""
|
|
115
|
+
default_base_url: str = ""
|
|
112
116
|
keyless_capable: bool = False
|
|
113
117
|
"""Whether this provider can run without a real API key.
|
|
114
118
|
|
|
@@ -139,6 +143,10 @@ class LLMConfig:
|
|
|
139
143
|
value = v() if callable(v) else v
|
|
140
144
|
if value is not None:
|
|
141
145
|
resolved[k] = value
|
|
146
|
+
if self.base_url_env:
|
|
147
|
+
base_url = os.getenv(self.base_url_env, self.default_base_url or None)
|
|
148
|
+
if base_url is not None:
|
|
149
|
+
resolved["base_url"] = base_url
|
|
142
150
|
return resolved
|
|
143
151
|
|
|
144
152
|
|
|
@@ -152,8 +160,8 @@ LLM_PROVIDERS = {
|
|
|
152
160
|
parsing_model="gpt-4o-mini",
|
|
153
161
|
llm_type=LLMType.GPT4,
|
|
154
162
|
keyless_capable=True,
|
|
163
|
+
base_url_env="OPENAI_BASE_URL",
|
|
155
164
|
extra_args={
|
|
156
|
-
"base_url": lambda: os.getenv("OPENAI_BASE_URL"),
|
|
157
165
|
"max_tokens": None,
|
|
158
166
|
"timeout": None,
|
|
159
167
|
"max_retries": 0,
|
|
@@ -166,8 +174,9 @@ LLM_PROVIDERS = {
|
|
|
166
174
|
agent_model="google/gemini-3.7-flash",
|
|
167
175
|
parsing_model="openai/gpt-5-mini",
|
|
168
176
|
llm_type=LLMType.GEMINI_FLASH,
|
|
177
|
+
base_url_env="VERCEL_BASE_URL",
|
|
178
|
+
default_base_url="https://ai-gateway.vercel.sh/v1",
|
|
169
179
|
extra_args={
|
|
170
|
-
"base_url": lambda: os.getenv("VERCEL_BASE_URL", f"https://ai-gateway.vercel.sh/v1"),
|
|
171
180
|
"max_tokens": None,
|
|
172
181
|
"timeout": None,
|
|
173
182
|
"max_retries": 0,
|
|
@@ -180,8 +189,8 @@ LLM_PROVIDERS = {
|
|
|
180
189
|
agent_model="claude-sonnet-5",
|
|
181
190
|
parsing_model="claude-haiku-4-5",
|
|
182
191
|
llm_type=LLMType.CLAUDE,
|
|
192
|
+
base_url_env="ANTHROPIC_BASE_URL",
|
|
183
193
|
extra_args={
|
|
184
|
-
"base_url": lambda: os.getenv("ANTHROPIC_BASE_URL"),
|
|
185
194
|
"thinking": {"type": "disabled"},
|
|
186
195
|
"max_tokens": 8192,
|
|
187
196
|
"timeout": None,
|
|
@@ -239,9 +248,7 @@ LLM_PROVIDERS = {
|
|
|
239
248
|
llm_type=LLMType.GEMINI_FLASH,
|
|
240
249
|
agent_temperature=LLMDefaults.DEFAULT_AGENT_TEMPERATURE,
|
|
241
250
|
parsing_temperature=LLMDefaults.DEFAULT_PARSING_TEMPERATURE,
|
|
242
|
-
|
|
243
|
-
"base_url": lambda: os.getenv("OLLAMA_BASE_URL"),
|
|
244
|
-
},
|
|
251
|
+
base_url_env="OLLAMA_BASE_URL",
|
|
245
252
|
),
|
|
246
253
|
"deepseek": LLMConfig(
|
|
247
254
|
chat_class=ChatOpenAI,
|
|
@@ -250,8 +257,9 @@ LLM_PROVIDERS = {
|
|
|
250
257
|
agent_model="deepseek-v4-flash",
|
|
251
258
|
parsing_model="deepseek-v4-flash",
|
|
252
259
|
llm_type=LLMType.DEEPSEEK,
|
|
260
|
+
base_url_env="DEEPSEEK_BASE_URL",
|
|
261
|
+
default_base_url="https://api.deepseek.com/v1",
|
|
253
262
|
extra_args={
|
|
254
|
-
"base_url": lambda: os.getenv("DEEPSEEK_BASE_URL", "https://api.deepseek.com/v1"),
|
|
255
263
|
"max_tokens": None,
|
|
256
264
|
"timeout": None,
|
|
257
265
|
"max_retries": 0,
|
|
@@ -264,8 +272,9 @@ LLM_PROVIDERS = {
|
|
|
264
272
|
agent_model="glm-4.7-flash",
|
|
265
273
|
parsing_model="glm-4.7-flash",
|
|
266
274
|
llm_type=LLMType.GLM,
|
|
275
|
+
base_url_env="GLM_BASE_URL",
|
|
276
|
+
default_base_url="https://open.bigmodel.cn/api/paas/v4",
|
|
267
277
|
extra_args={
|
|
268
|
-
"base_url": lambda: os.getenv("GLM_BASE_URL", "https://open.bigmodel.cn/api/paas/v4"),
|
|
269
278
|
"max_tokens": None,
|
|
270
279
|
"timeout": None,
|
|
271
280
|
"max_retries": 0,
|
|
@@ -278,8 +287,9 @@ LLM_PROVIDERS = {
|
|
|
278
287
|
agent_model="kimi-k2.6",
|
|
279
288
|
parsing_model="kimi-k2.6",
|
|
280
289
|
llm_type=LLMType.KIMI,
|
|
290
|
+
base_url_env="KIMI_BASE_URL",
|
|
291
|
+
default_base_url="https://api.moonshot.cn/v1",
|
|
281
292
|
extra_args={
|
|
282
|
-
"base_url": lambda: os.getenv("KIMI_BASE_URL", "https://api.moonshot.cn/v1"),
|
|
283
293
|
"max_tokens": None,
|
|
284
294
|
"timeout": None,
|
|
285
295
|
"max_retries": 0,
|
|
@@ -292,8 +302,9 @@ LLM_PROVIDERS = {
|
|
|
292
302
|
agent_model="google/gemini-3.7-flash",
|
|
293
303
|
parsing_model="google/gemini-3.7-flash",
|
|
294
304
|
llm_type=LLMType.GEMINI_FLASH,
|
|
305
|
+
base_url_env="OPENROUTER_BASE_URL",
|
|
306
|
+
default_base_url="https://openrouter.ai/api/v1",
|
|
295
307
|
extra_args={
|
|
296
|
-
"base_url": lambda: os.getenv("OPENROUTER_BASE_URL", "https://openrouter.ai/api/v1"),
|
|
297
308
|
"max_tokens": None,
|
|
298
309
|
"timeout": None,
|
|
299
310
|
"max_retries": 0,
|
|
@@ -306,8 +317,9 @@ LLM_PROVIDERS = {
|
|
|
306
317
|
agent_model="openai/gpt-5.4-mini",
|
|
307
318
|
parsing_model="openai/gpt-5.4-mini",
|
|
308
319
|
llm_type=LLMType.GPT4,
|
|
320
|
+
base_url_env="ORCAROUTER_BASE_URL",
|
|
321
|
+
default_base_url="https://api.orcarouter.ai/v1",
|
|
309
322
|
extra_args={
|
|
310
|
-
"base_url": lambda: os.getenv("ORCAROUTER_BASE_URL", "https://api.orcarouter.ai/v1"),
|
|
311
323
|
"max_tokens": None,
|
|
312
324
|
"timeout": None,
|
|
313
325
|
"max_retries": 0,
|
|
@@ -323,8 +335,8 @@ LLM_PROVIDERS = {
|
|
|
323
335
|
parsing_model="gpt-4o-mini",
|
|
324
336
|
llm_type=LLMType.GPT4,
|
|
325
337
|
keyless_capable=True,
|
|
338
|
+
base_url_env="LITELLM_BASE_URL",
|
|
326
339
|
extra_args={
|
|
327
|
-
"base_url": lambda: os.getenv("LITELLM_BASE_URL"),
|
|
328
340
|
"max_tokens": None,
|
|
329
341
|
"timeout": None,
|
|
330
342
|
"max_retries": 0,
|
|
@@ -333,6 +345,15 @@ LLM_PROVIDERS = {
|
|
|
333
345
|
}
|
|
334
346
|
|
|
335
347
|
|
|
348
|
+
LLM_PROVIDER_ENV_VARS: frozenset[str] = frozenset(
|
|
349
|
+
var
|
|
350
|
+
for config in LLM_PROVIDERS.values()
|
|
351
|
+
for var in [*config.selection_envs, config.api_key_env, config.base_url_env]
|
|
352
|
+
if var
|
|
353
|
+
)
|
|
354
|
+
LLM_ENV_VARS: frozenset[str] = LLM_PROVIDER_ENV_VARS | frozenset({"AGENT_MODEL", "PARSING_MODEL"})
|
|
355
|
+
|
|
356
|
+
|
|
336
357
|
def _all_selection_envs() -> list[str]:
|
|
337
358
|
return sorted({var for config in LLM_PROVIDERS.values() for var in config.selection_envs})
|
|
338
359
|
|
|
@@ -27,7 +27,7 @@ def build_file_methods_from_nodes(
|
|
|
27
27
|
source_cache: SourceCache | None = None,
|
|
28
28
|
) -> list[FileMethodGroup]:
|
|
29
29
|
"""Build sorted file/method groups from assigned CFG nodes."""
|
|
30
|
-
by_file: dict[str, dict[tuple[int, int, str, str], MethodEntry]] = defaultdict(dict)
|
|
30
|
+
by_file: dict[str, dict[tuple[int, int, int, str, str], MethodEntry]] = defaultdict(dict)
|
|
31
31
|
file_cache = source_cache if source_cache is not None else {}
|
|
32
32
|
|
|
33
33
|
for node in nodes:
|
|
@@ -35,7 +35,7 @@ def build_file_methods_from_nodes(
|
|
|
35
35
|
continue
|
|
36
36
|
file_path = normalize_repo_path(node.file_path, repo_dir)
|
|
37
37
|
method_name = node.fully_qualified_name.split(".")[-1]
|
|
38
|
-
dedupe_key = (node.line_start, node.line_end, node.type.name, method_name)
|
|
38
|
+
dedupe_key = (node.line_start, node.line_end, node.col_start, node.type.name, method_name)
|
|
39
39
|
candidate = MethodEntry(
|
|
40
40
|
qualified_name=node.fully_qualified_name,
|
|
41
41
|
start_line=node.line_start,
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
"""Standalone entry point for running health checks on a repository.
|
|
2
|
-
|
|
3
|
-
Runs static analysis and health checks only — no LLM agents or diagram generation.
|
|
4
|
-
Useful for testing health checks in isolation and for CI/CD health gates.
|
|
5
|
-
|
|
6
|
-
Usage:
|
|
7
|
-
# Local repository (output written to <repo>/.codeboarding/health/)
|
|
8
|
-
python health_main.py --local /path/to/repo
|
|
9
|
-
|
|
10
|
-
# Remote repository (cloned to cwd/repos/, output to cwd/<repo_name>/.codeboarding/health/)
|
|
11
|
-
python health_main.py https://github.com/user/repo
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
import argparse
|
|
15
|
-
import logging
|
|
16
|
-
from pathlib import Path
|
|
17
|
-
|
|
18
|
-
from health.runner import run_health_checks
|
|
19
|
-
from health.config import initialize_health_dir, load_health_config
|
|
20
|
-
from logging_config import setup_logging
|
|
21
|
-
from repo_utils import clone_repository, get_repo_name
|
|
22
|
-
from static_analyzer import get_static_analysis
|
|
23
|
-
from utils import CODEBOARDING_DIR_NAME, get_artifact_dir
|
|
24
|
-
from vscode_constants import update_config
|
|
25
|
-
|
|
26
|
-
logger = logging.getLogger(__name__)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def run_health_check_local(
|
|
30
|
-
repo_path: Path,
|
|
31
|
-
project_name: str | None = None,
|
|
32
|
-
) -> None:
|
|
33
|
-
"""Run health checks on a local repository.
|
|
34
|
-
|
|
35
|
-
Args:
|
|
36
|
-
repo_path: Path to a local repository
|
|
37
|
-
project_name: Optional project name (default: repo directory name)
|
|
38
|
-
"""
|
|
39
|
-
resolved_repo_path = repo_path.resolve()
|
|
40
|
-
if not resolved_repo_path.is_dir():
|
|
41
|
-
raise ValueError(f"Repository path does not exist: {resolved_repo_path}")
|
|
42
|
-
|
|
43
|
-
resolved_project_name = project_name or resolved_repo_path.name
|
|
44
|
-
output_dir = resolved_repo_path / CODEBOARDING_DIR_NAME
|
|
45
|
-
|
|
46
|
-
output_dir.mkdir(parents=True, exist_ok=True)
|
|
47
|
-
setup_logging(log_dir=output_dir)
|
|
48
|
-
|
|
49
|
-
_run_health_checks(resolved_repo_path, resolved_project_name, output_dir)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def run_health_check_remote(
|
|
53
|
-
repo_url: str,
|
|
54
|
-
project_name: str | None = None,
|
|
55
|
-
) -> None:
|
|
56
|
-
"""Run health checks on a remote repository.
|
|
57
|
-
|
|
58
|
-
Args:
|
|
59
|
-
repo_url: URL of a remote Git repository
|
|
60
|
-
project_name: Optional project name (default: extracted from URL)
|
|
61
|
-
"""
|
|
62
|
-
repo_root = Path("repos")
|
|
63
|
-
repo_name = clone_repository(repo_url, repo_root)
|
|
64
|
-
resolved_repo_path = repo_root / repo_name
|
|
65
|
-
resolved_project_name = project_name or get_repo_name(repo_url)
|
|
66
|
-
output_dir = Path.cwd() / repo_name / CODEBOARDING_DIR_NAME
|
|
67
|
-
|
|
68
|
-
output_dir.mkdir(parents=True, exist_ok=True)
|
|
69
|
-
setup_logging(log_dir=output_dir)
|
|
70
|
-
|
|
71
|
-
_run_health_checks(resolved_repo_path, resolved_project_name, output_dir)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
def _run_health_checks(repo_path: Path, project_name: str, output_dir: Path) -> None:
|
|
75
|
-
"""Core health check logic shared by local and remote paths."""
|
|
76
|
-
logger.info(f"Running health checks on '{project_name}' at {repo_path}")
|
|
77
|
-
|
|
78
|
-
static_analysis = get_static_analysis(repo_path, cache_dir=get_artifact_dir(repo_path))
|
|
79
|
-
|
|
80
|
-
# Load health check configuration and initialize health config dir
|
|
81
|
-
health_config_dir = output_dir / "health"
|
|
82
|
-
initialize_health_dir(health_config_dir)
|
|
83
|
-
health_config = load_health_config(health_config_dir)
|
|
84
|
-
|
|
85
|
-
report = run_health_checks(static_analysis, project_name, config=health_config, repo_path=repo_path)
|
|
86
|
-
|
|
87
|
-
if report is None:
|
|
88
|
-
logger.warning("Health checks skipped: no languages found in static analysis results")
|
|
89
|
-
return
|
|
90
|
-
|
|
91
|
-
report_path = health_config_dir / "health_report.json"
|
|
92
|
-
report_path.write_text(report.model_dump_json(indent=2, exclude_none=True))
|
|
93
|
-
|
|
94
|
-
logger.info(f"Health report written to {report_path} (overall score: {report.overall_score:.3f})")
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
def main():
|
|
98
|
-
"""Main entry point that parses CLI arguments and routes to subcommands."""
|
|
99
|
-
parser = argparse.ArgumentParser(
|
|
100
|
-
description="Run static analysis health checks on a repository (local or remote)",
|
|
101
|
-
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
102
|
-
epilog="""
|
|
103
|
-
Examples:
|
|
104
|
-
# Local repository (output written to <repo>/.codeboarding/health/)
|
|
105
|
-
python health_main.py --local /path/to/repo
|
|
106
|
-
|
|
107
|
-
# Remote repository (cloned to cwd/repos/, output to cwd/<repo_name>/.codeboarding/health/)
|
|
108
|
-
python health_main.py https://github.com/user/repo
|
|
109
|
-
|
|
110
|
-
""",
|
|
111
|
-
)
|
|
112
|
-
parser.add_argument(
|
|
113
|
-
"repositories",
|
|
114
|
-
nargs="*",
|
|
115
|
-
help="One or more remote Git repository URLs to run health checks on",
|
|
116
|
-
)
|
|
117
|
-
parser.add_argument("--local", type=Path, help="Path to a local repository")
|
|
118
|
-
parser.add_argument(
|
|
119
|
-
"--project-name",
|
|
120
|
-
type=str,
|
|
121
|
-
default=None,
|
|
122
|
-
help="Name of the project (default: extracted from repo path or URL)",
|
|
123
|
-
)
|
|
124
|
-
parser.add_argument(
|
|
125
|
-
"--binary-location", type=Path, help="Path to the binary directory for language servers and tools"
|
|
126
|
-
)
|
|
127
|
-
|
|
128
|
-
args = parser.parse_args()
|
|
129
|
-
|
|
130
|
-
# Validate: must provide either remote repos or --local, not both
|
|
131
|
-
has_remote = bool(args.repositories)
|
|
132
|
-
has_local = args.local is not None
|
|
133
|
-
|
|
134
|
-
if has_remote == has_local:
|
|
135
|
-
parser.error("Provide either one or more remote repositories or --local, but not both.")
|
|
136
|
-
|
|
137
|
-
# Resolve binary paths for tools (tokei, LSP servers, etc.)
|
|
138
|
-
if args.binary_location:
|
|
139
|
-
update_config(args.binary_location)
|
|
140
|
-
|
|
141
|
-
try:
|
|
142
|
-
if has_local:
|
|
143
|
-
run_health_check_local(args.local, args.project_name)
|
|
144
|
-
else:
|
|
145
|
-
for repo_url in args.repositories:
|
|
146
|
-
run_health_check_remote(repo_url, args.project_name)
|
|
147
|
-
except ValueError as e:
|
|
148
|
-
parser.error(str(e))
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
if __name__ == "__main__":
|
|
152
|
-
main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeboarding-0.13.10 → codeboarding-0.13.11}/codeboarding_cli/commands/incremental_analysis.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|