diff --git a/analysis/deps/graph.json b/analysis/deps/graph.json index 87d7d31..e8bd6d1 100644 --- a/analysis/deps/graph.json +++ b/analysis/deps/graph.json @@ -1,799 +1,1980 @@ { - "metadata": { - "generated_at": "2025-01-07", - "tool": "structural-analysis-agent", - "version": "1.0", - "workspace_root": ".", - "extraction_method": "static-import-parsing" - }, - "crates": { - "g3": { - "path": ".", - "type": "binary", - "files": ["src/main.rs", "examples/verify_message_id.rs"] - }, - "g3-cli": { - "path": "crates/g3-cli", - "type": "library", - "files": [ - "src/lib.rs", - "src/filter_json.rs", - "src/machine_ui_writer.rs", - "src/retro_tui.rs", - "src/simple_output.rs", - "src/theme.rs", - "src/tui.rs", - "src/ui_writer_impl.rs", - "tests/cli_integration_test.rs", - "tests/coach_feedback_extraction_test.rs", - "tests/filter_json_test.rs" - ] - }, - "g3-core": { - "path": "crates/g3-core", - "type": "library", - "files": [ - "src/lib.rs", - "src/background_process.rs", - "src/code_search/mod.rs", - "src/code_search/searcher.rs", - "src/context_window.rs", - "src/error_handling.rs", - "src/error_handling_test.rs", - "src/feedback_extraction.rs", - "src/paths.rs", - "src/project.rs", - "src/prompts.rs", - "src/provider_config.rs", - "src/retry.rs", - "src/session_continuation.rs", - "src/streaming_parser.rs", - "src/take_screenshot_test.rs", - "src/task_result.rs", - "src/task_result_comprehensive_tests.rs", - "src/task_result_tests.rs", - "src/tilde_expansion_tests.rs", - "src/tool_definitions.rs", - "src/tool_dispatch.rs", - "src/tools/executor.rs", - "src/tools/file_ops.rs", - "src/tools/misc.rs", - "src/tools/mod.rs", - "src/tools/shell.rs", - "src/tools/todo.rs", - "src/tools/webdriver.rs", - "src/ui_writer.rs", - "src/utils.rs", - "src/webdriver_session.rs", - "examples/inspect_ast.rs", - "examples/inspect_python_ast.rs", - "examples/test_python_query.rs", - "tests/auto_continue_test.rs", - "tests/background_process_demo_test.rs", - "tests/code_search_test.rs", - "tests/duplicate_detection_test.rs", - "tests/final_output_todo_check_test.rs", - "tests/incomplete_tool_call_test.rs", - "tests/read_image_test.rs", - "tests/streaming_parser_test.rs", - "tests/test_agent_session_id.rs", - "tests/test_context_thinning.rs", - "tests/test_preflight_max_tokens.rs", - "tests/test_reset_with_summary.rs", - "tests/test_session_continuation.rs", - "tests/test_system_message_loading.rs", - "tests/test_todo_completion.rs", - "tests/test_todo_context_thinning.rs", - "tests/test_todo_persistence.rs", - "tests/test_token_counting.rs", - "tests/todo_staleness_test.rs", - "tests/tool_execution_test.rs" - ] - }, - "g3-config": { - "path": "crates/g3-config", - "type": "library", - "files": [ - "src/lib.rs", - "src/tests.rs", - "tests/test_multiple_tool_calls.rs" - ] - }, - "g3-providers": { - "path": "crates/g3-providers", - "type": "library", - "files": [ - "src/lib.rs", - "src/anthropic.rs", - "src/databricks.rs", - "src/embedded.rs", - "src/oauth.rs", - "src/openai.rs", - "tests/cache_control_error_regression_test.rs", - "tests/cache_control_integration_test.rs", - "tests/message_serialization_test.rs" - ] - }, - "g3-planner": { - "path": "crates/g3-planner", - "type": "library", - "files": [ - "src/lib.rs", - "src/code_explore.rs", - "src/git.rs", - "src/history.rs", - "src/llm.rs", - "src/planner.rs", - "src/prompts.rs", - "src/state.rs", - "tests/commit_history_ordering_test.rs", - "tests/logging_test.rs", - "tests/planner_test.rs", - "tests/retry_feedback_test.rs" - ] - }, - "g3-execution": { - "path": "crates/g3-execution", - "type": "library", - "files": [ - "src/lib.rs", - "examples/setup_coverage_tools.rs" - ] - }, - "g3-computer-control": { - "path": "crates/g3-computer-control", - "type": "library", - "files": [ - "build.rs", - "src/lib.rs", - "src/types.rs", - "src/macax/mod.rs", - "src/macax/controller.rs", - "src/macax/tests.rs", - "src/ocr/mod.rs", - "src/ocr/tesseract.rs", - "src/ocr/vision.rs", - "src/platform/mod.rs", - "src/platform/linux.rs", - "src/platform/macos.rs", - "src/platform/macos_window_matching_test.rs", - "src/platform/windows.rs", - "src/webdriver/mod.rs", - "src/webdriver/chrome.rs", - "src/webdriver/safari.rs", - "examples/debug_screenshot.rs", - "examples/list_windows.rs", - "examples/macax_demo.rs", - "examples/safari_demo.rs", - "examples/test_permission_prompt.rs", - "examples/test_screencapture_direct.rs", - "examples/test_screenshot_fix.rs", - "examples/test_type_text.rs", - "examples/test_vision.rs", - "examples/test_window_capture.rs", - "tests/integration_test.rs" - ] - }, - "g3-console": { - "path": "crates/g3-console", - "type": "binary+library", - "files": [ - "src/lib.rs", - "src/main.rs", - "src/launch.rs", - "src/logs.rs", - "src/api/mod.rs", - "src/api/control.rs", - "src/api/instances.rs", - "src/api/logs.rs", - "src/api/state.rs", - "src/models/mod.rs", - "src/models/instance.rs", - "src/models/message.rs", - "src/process/mod.rs", - "src/process/controller.rs", - "src/process/detector.rs", - "examples/debug_detector.rs", - "examples/test_api.rs", - "examples/test_detector.rs" - ] - }, - "g3-ensembles": { - "path": "crates/g3-ensembles", - "type": "library", - "files": [ - "src/lib.rs", - "src/flock.rs", - "src/status.rs", - "src/tests.rs", - "tests/integration_tests.rs" - ] - } - }, - "crate_dependencies": [ + "edges": [ { - "from": "g3", - "to": "g3-cli", - "type": "path", - "evidence": "Cargo.toml: g3-cli = { path = \"crates/g3-cli\" }" + "evidence": "Cargo.toml: g3 depends on g3-cli", + "source": "g3", + "target": "g3-cli", + "type": "crate_dependency" }, { - "from": "g3", - "to": "g3-providers", - "type": "path", - "evidence": "Cargo.toml: g3-providers = { path = \"crates/g3-providers\" }" + "evidence": "Cargo.toml: g3 depends on g3-providers", + "source": "g3", + "target": "g3-providers", + "type": "crate_dependency" }, { - "from": "g3-cli", - "to": "g3-core", - "type": "path", - "evidence": "Cargo.toml: g3-core = { path = \"../g3-core\" }" + "evidence": "Cargo.toml: g3-cli depends on g3-core", + "source": "g3-cli", + "target": "g3-core", + "type": "crate_dependency" }, { - "from": "g3-cli", - "to": "g3-config", - "type": "path", - "evidence": "Cargo.toml: g3-config = { path = \"../g3-config\" }" + "evidence": "Cargo.toml: g3-cli depends on g3-config", + "source": "g3-cli", + "target": "g3-config", + "type": "crate_dependency" }, { - "from": "g3-cli", - "to": "g3-planner", - "type": "path", - "evidence": "Cargo.toml: g3-planner = { path = \"../g3-planner\" }" + "evidence": "Cargo.toml: g3-cli depends on g3-planner", + "source": "g3-cli", + "target": "g3-planner", + "type": "crate_dependency" }, { - "from": "g3-cli", - "to": "g3-providers", - "type": "path", - "evidence": "Cargo.toml: g3-providers = { path = \"../g3-providers\" }" + "evidence": "Cargo.toml: g3-cli depends on g3-computer-control", + "source": "g3-cli", + "target": "g3-computer-control", + "type": "crate_dependency" }, { - "from": "g3-cli", - "to": "g3-ensembles", - "type": "path", - "evidence": "Cargo.toml: g3-ensembles = { path = \"../g3-ensembles\" }" + "evidence": "Cargo.toml: g3-cli depends on g3-providers", + "source": "g3-cli", + "target": "g3-providers", + "type": "crate_dependency" }, { - "from": "g3-core", - "to": "g3-providers", - "type": "path", - "evidence": "Cargo.toml: g3-providers = { path = \"../g3-providers\" }" + "evidence": "Cargo.toml: g3-cli depends on g3-ensembles", + "source": "g3-cli", + "target": "g3-ensembles", + "type": "crate_dependency" }, { - "from": "g3-core", - "to": "g3-config", - "type": "path", - "evidence": "Cargo.toml: g3-config = { path = \"../g3-config\" }" + "evidence": "Cargo.toml: g3-core depends on g3-providers", + "source": "g3-core", + "target": "g3-providers", + "type": "crate_dependency" }, { - "from": "g3-core", - "to": "g3-execution", - "type": "path", - "evidence": "Cargo.toml: g3-execution = { path = \"../g3-execution\" }" + "evidence": "Cargo.toml: g3-core depends on g3-config", + "source": "g3-core", + "target": "g3-config", + "type": "crate_dependency" }, { - "from": "g3-core", - "to": "g3-computer-control", - "type": "path", - "evidence": "Cargo.toml: g3-computer-control = { path = \"../g3-computer-control\" }" + "evidence": "Cargo.toml: g3-core depends on g3-execution", + "source": "g3-core", + "target": "g3-execution", + "type": "crate_dependency" }, { - "from": "g3-planner", - "to": "g3-providers", - "type": "path", - "evidence": "Cargo.toml: g3-providers = { path = \"../g3-providers\" }" + "evidence": "Cargo.toml: g3-core depends on g3-computer-control", + "source": "g3-core", + "target": "g3-computer-control", + "type": "crate_dependency" }, { - "from": "g3-planner", - "to": "g3-core", - "type": "path", - "evidence": "Cargo.toml: g3-core = { path = \"../g3-core\" }" + "evidence": "Cargo.toml: g3-ensembles depends on g3-core", + "source": "g3-ensembles", + "target": "g3-core", + "type": "crate_dependency" }, { - "from": "g3-planner", - "to": "g3-config", - "type": "path", - "evidence": "Cargo.toml: g3-config = { path = \"../g3-config\" }" + "evidence": "Cargo.toml: g3-ensembles depends on g3-config", + "source": "g3-ensembles", + "target": "g3-config", + "type": "crate_dependency" }, { - "from": "g3-ensembles", - "to": "g3-core", - "type": "path", - "evidence": "Cargo.toml: g3-core = { path = \"../g3-core\" }" + "evidence": "Cargo.toml: g3-planner depends on g3-providers", + "source": "g3-planner", + "target": "g3-providers", + "type": "crate_dependency" }, { - "from": "g3-ensembles", - "to": "g3-config", - "type": "path", - "evidence": "Cargo.toml: g3-config = { path = \"../g3-config\" }" + "evidence": "Cargo.toml: g3-planner depends on g3-core", + "source": "g3-planner", + "target": "g3-core", + "type": "crate_dependency" + }, + { + "evidence": "Cargo.toml: g3-planner depends on g3-config", + "source": "g3-planner", + "target": "g3-config", + "type": "crate_dependency" + }, + { + "evidence": "pub mod filter_json;", + "source": "./crates/g3-cli/src/lib.rs", + "target": "./crates/g3-cli/src/filter_json.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod streaming_markdown;", + "source": "./crates/g3-cli/src/lib.rs", + "target": "./crates/g3-cli/src/streaming_markdown.rs", + "type": "mod_declaration" + }, + { + "evidence": "use g3_config::Config;", + "source": "./crates/g3-cli/src/lib.rs", + "target": "g3-config", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::{project::Project, ui_writer::UiWriter, Agent, DiscoveryOptions};", + "source": "./crates/g3-cli/src/lib.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::error_handling::{classify_error, ErrorType, RecoverableError};", + "source": "./crates/g3-cli/src/lib.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "mod simple_output;", + "source": "./crates/g3-cli/src/lib.rs", + "target": "./crates/g3-cli/src/simple_output.rs", + "type": "mod_declaration" + }, + { + "evidence": "mod ui_writer_impl;", + "source": "./crates/g3-cli/src/lib.rs", + "target": "./crates/g3-cli/src/ui_writer_impl.rs", + "type": "mod_declaration" + }, + { + "evidence": "mod machine_ui_writer;", + "source": "./crates/g3-cli/src/lib.rs", + "target": "./crates/g3-cli/src/machine_ui_writer.rs", + "type": "mod_declaration" + }, + { + "evidence": "use g3_core::get_agent_system_prompt;", + "source": "./crates/g3-cli/src/lib.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::find_incomplete_agent_session;", + "source": "./crates/g3-cli/src/lib.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::error_handling::{classify_error, ErrorType, RecoverableError};", + "source": "./crates/g3-cli/src/lib.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::error_handling::{classify_error, ErrorType, RecoverableError};", + "source": "./crates/g3-cli/src/lib.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::ui_writer::UiWriter;", + "source": "./crates/g3-cli/src/machine_ui_writer.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::ui_writer::UiWriter;", + "source": "./crates/g3-cli/src/ui_writer_impl.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_cli::filter_json::{filter_json_tool_calls, reset_json_tool_state};", + "source": "./crates/g3-cli/tests/filter_json_stress_test.rs", + "target": "g3-cli", + "type": "file_to_crate" + }, + { + "evidence": "use g3_cli::filter_json::{filter_json_tool_calls, reset_json_tool_state};", + "source": "./crates/g3-cli/tests/filter_json_test.rs", + "target": "g3-cli", + "type": "file_to_crate" + }, + { + "evidence": "use g3_cli::streaming_markdown::StreamingMarkdownFormatter;", + "source": "./crates/g3-cli/tests/streaming_markdown_test.rs", + "target": "g3-cli", + "type": "file_to_crate" + }, + { + "evidence": "use g3_computer_control::MacAxController;", + "source": "./crates/g3-computer-control/examples/macax_demo.rs", + "target": "g3-computer-control", + "type": "file_to_crate" + }, + { + "evidence": "use g3_computer_control::webdriver::WebDriverController;", + "source": "./crates/g3-computer-control/examples/safari_demo.rs", + "target": "g3-computer-control", + "type": "file_to_crate" + }, + { + "evidence": "use g3_computer_control::SafariDriver;", + "source": "./crates/g3-computer-control/examples/safari_demo.rs", + "target": "g3-computer-control", + "type": "file_to_crate" + }, + { + "evidence": "use g3_computer_control::create_controller;", + "source": "./crates/g3-computer-control/examples/test_permission_prompt.rs", + "target": "g3-computer-control", + "type": "file_to_crate" + }, + { + "evidence": "use g3_computer_control::MacAxController;", + "source": "./crates/g3-computer-control/examples/test_type_text.rs", + "target": "g3-computer-control", + "type": "file_to_crate" + }, + { + "evidence": "use g3_computer_control::ocr::{DefaultOCR, OCREngine};", + "source": "./crates/g3-computer-control/examples/test_vision.rs", + "target": "g3-computer-control", + "type": "file_to_crate" + }, + { + "evidence": "use g3_computer_control::create_controller;", + "source": "./crates/g3-computer-control/examples/test_window_capture.rs", + "target": "g3-computer-control", + "type": "file_to_crate" + }, + { + "evidence": "pub mod macax;", + "source": "./crates/g3-computer-control/src/lib.rs", + "target": "./crates/g3-computer-control/src/macax/mod.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod ocr;", + "source": "./crates/g3-computer-control/src/lib.rs", + "target": "./crates/g3-computer-control/src/ocr/mod.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod platform;", + "source": "./crates/g3-computer-control/src/lib.rs", + "target": "./crates/g3-computer-control/src/platform/mod.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod types;", + "source": "./crates/g3-computer-control/src/lib.rs", + "target": "./crates/g3-computer-control/src/types.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod webdriver;", + "source": "./crates/g3-computer-control/src/lib.rs", + "target": "./crates/g3-computer-control/src/webdriver/mod.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod controller;", + "source": "./crates/g3-computer-control/src/macax/mod.rs", + "target": "./crates/g3-computer-control/src/macax/controller.rs", + "type": "mod_declaration" + }, + { + "evidence": "mod tests;", + "source": "./crates/g3-computer-control/src/macax/mod.rs", + "target": "./crates/g3-computer-control/src/macax/tests.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod vision;", + "source": "./crates/g3-computer-control/src/ocr/mod.rs", + "target": "./crates/g3-computer-control/src/ocr/vision.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod tesseract;", + "source": "./crates/g3-computer-control/src/ocr/mod.rs", + "target": "./crates/g3-computer-control/src/ocr/tesseract.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod macos;", + "source": "./crates/g3-computer-control/src/platform/mod.rs", + "target": "./crates/g3-computer-control/src/platform/macos.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod linux;", + "source": "./crates/g3-computer-control/src/platform/mod.rs", + "target": "./crates/g3-computer-control/src/platform/linux.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod windows;", + "source": "./crates/g3-computer-control/src/platform/mod.rs", + "target": "./crates/g3-computer-control/src/platform/windows.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod safari;", + "source": "./crates/g3-computer-control/src/webdriver/mod.rs", + "target": "./crates/g3-computer-control/src/webdriver/safari.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod chrome;", + "source": "./crates/g3-computer-control/src/webdriver/mod.rs", + "target": "./crates/g3-computer-control/src/webdriver/chrome.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod diagnostics;", + "source": "./crates/g3-computer-control/src/webdriver/mod.rs", + "target": "./crates/g3-computer-control/src/webdriver/diagnostics.rs", + "type": "mod_declaration" + }, + { + "evidence": "use g3_computer_control::*;", + "source": "./crates/g3-computer-control/tests/integration_test.rs", + "target": "g3-computer-control", + "type": "file_to_crate" + }, + { + "evidence": "mod tests;", + "source": "./crates/g3-config/src/lib.rs", + "target": "./crates/g3-config/src/tests.rs", + "type": "mod_declaration" + }, + { + "evidence": "mod searcher;", + "source": "./crates/g3-core/src/code_search/mod.rs", + "target": "./crates/g3-core/src/code_search/searcher.rs", + "type": "mod_declaration" + }, + { + "evidence": "use g3_providers::{Message, MessageRole, Usage};", + "source": "./crates/g3-core/src/context_window.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "pub mod context_window;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/context_window.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod background_process;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/background_process.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod code_search;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/code_search/mod.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod error_handling;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/error_handling.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod feedback_extraction;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/feedback_extraction.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod paths;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/paths.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod project;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/project.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod provider_registration;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/provider_registration.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod provider_config;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/provider_config.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod retry;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/retry.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod session;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/session.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod session_continuation;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/session_continuation.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod streaming_parser;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/streaming_parser.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod task_result;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/task_result.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod tool_dispatch;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/tool_dispatch.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod tool_definitions;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/tool_definitions.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod tools;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/tools/mod.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod ui_writer;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/ui_writer.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod streaming;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/streaming.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod utils;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/utils.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod webdriver_session;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/webdriver_session.rs", + "type": "mod_declaration" + }, + { + "evidence": "mod task_result_comprehensive_tests;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/task_result_comprehensive_tests.rs", + "type": "mod_declaration" + }, + { + "evidence": "mod tilde_expansion_tests;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/tilde_expansion_tests.rs", + "type": "mod_declaration" + }, + { + "evidence": "mod error_handling_test;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/error_handling_test.rs", + "type": "mod_declaration" + }, + { + "evidence": "mod prompts;", + "source": "./crates/g3-core/src/lib.rs", + "target": "./crates/g3-core/src/prompts.rs", + "type": "mod_declaration" + }, + { + "evidence": "use g3_config::Config;", + "source": "./crates/g3-core/src/lib.rs", + "target": "g3-config", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::{CacheControl, CompletionRequest, Message, MessageRole, ProviderRegistry};", + "source": "./crates/g3-core/src/lib.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_config::Config;", + "source": "./crates/g3-core/src/provider_config.rs", + "target": "g3-config", + "type": "file_to_crate" + }, + { + "evidence": "use g3_config::Config;", + "source": "./crates/g3-core/src/provider_registration.rs", + "target": "g3-config", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::ProviderRegistry;", + "source": "./crates/g3-core/src/provider_registration.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::MessageRole;", + "source": "./crates/g3-core/src/session.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::{CompletionRequest, MessageRole};", + "source": "./crates/g3-core/src/streaming.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::{Message, MessageRole};", + "source": "./crates/g3-core/src/task_result_comprehensive_tests.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::Tool;", + "source": "./crates/g3-core/src/tool_definitions.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_config::Config;", + "source": "./crates/g3-core/src/tools/executor.rs", + "target": "g3-config", + "type": "file_to_crate" + }, + { + "evidence": "pub mod executor;", + "source": "./crates/g3-core/src/tools/mod.rs", + "target": "./crates/g3-core/src/tools/executor.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod file_ops;", + "source": "./crates/g3-core/src/tools/mod.rs", + "target": "./crates/g3-core/src/tools/file_ops.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod memory;", + "source": "./crates/g3-core/src/tools/mod.rs", + "target": "./crates/g3-core/src/tools/memory.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod misc;", + "source": "./crates/g3-core/src/tools/mod.rs", + "target": "./crates/g3-core/src/tools/misc.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod research;", + "source": "./crates/g3-core/src/tools/mod.rs", + "target": "./crates/g3-core/src/tools/research.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod shell;", + "source": "./crates/g3-core/src/tools/mod.rs", + "target": "./crates/g3-core/src/tools/shell.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod todo;", + "source": "./crates/g3-core/src/tools/mod.rs", + "target": "./crates/g3-core/src/tools/todo.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod webdriver;", + "source": "./crates/g3-core/src/tools/mod.rs", + "target": "./crates/g3-core/src/tools/webdriver.rs", + "type": "mod_declaration" + }, + { + "evidence": "use g3_config::WebDriverBrowser;", + "source": "./crates/g3-core/src/tools/research.rs", + "target": "g3-config", + "type": "file_to_crate" + }, + { + "evidence": "use g3_computer_control::WebDriverController;", + "source": "./crates/g3-core/src/tools/webdriver.rs", + "target": "g3-computer-control", + "type": "file_to_crate" + }, + { + "evidence": "use g3_config::WebDriverBrowser;", + "source": "./crates/g3-core/src/tools/webdriver.rs", + "target": "g3-config", + "type": "file_to_crate" + }, + { + "evidence": "use g3_computer_control::{ChromeDriver, SafariDriver, WebDriverController, WebElement};", + "source": "./crates/g3-core/src/webdriver_session.rs", + "target": "g3-computer-control", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::background_process::BackgroundProcessManager;", + "source": "./crates/g3-core/tests/background_process_demo_test.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::code_search::{execute_code_search, CodeSearchRequest, SearchSpec};", + "source": "./crates/g3-core/tests/code_search_test.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::StreamingToolParser;", + "source": "./crates/g3-core/tests/duplicate_detection_test.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::CompletionChunk;", + "source": "./crates/g3-core/tests/duplicate_detection_test.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::StreamingToolParser;", + "source": "./crates/g3-core/tests/incomplete_tool_call_test.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::CompletionChunk;", + "source": "./crates/g3-core/tests/incomplete_tool_call_test.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::ImageContent;", + "source": "./crates/g3-core/tests/read_image_test.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::StreamingToolParser;", + "source": "./crates/g3-core/tests/streaming_parser_test.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::CompletionChunk;", + "source": "./crates/g3-core/tests/streaming_parser_test.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_config::Config;", + "source": "./crates/g3-core/tests/test_agent_session_id.rs", + "target": "g3-config", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::ui_writer::NullUiWriter;", + "source": "./crates/g3-core/tests/test_agent_session_id.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::Agent;", + "source": "./crates/g3-core/tests/test_agent_session_id.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::ContextWindow;", + "source": "./crates/g3-core/tests/test_context_thinning.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::{Message, MessageRole};", + "source": "./crates/g3-core/tests/test_context_thinning.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_config::Config;", + "source": "./crates/g3-core/tests/test_preflight_max_tokens.rs", + "target": "g3-config", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::ContextWindow;", + "source": "./crates/g3-core/tests/test_preflight_max_tokens.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::ContextWindow;", + "source": "./crates/g3-core/tests/test_reset_with_summary.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::{Message, MessageRole};", + "source": "./crates/g3-core/tests/test_reset_with_summary.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::session_continuation::{", + "source": "./crates/g3-core/tests/test_session_continuation.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::session_continuation::find_incomplete_agent_session;", + "source": "./crates/g3-core/tests/test_session_continuation.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::session_continuation::find_incomplete_agent_session;", + "source": "./crates/g3-core/tests/test_session_continuation.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::session_continuation::find_incomplete_agent_session;", + "source": "./crates/g3-core/tests/test_session_continuation.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::ContextWindow;", + "source": "./crates/g3-core/tests/test_system_message_loading.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::{Message, MessageRole};", + "source": "./crates/g3-core/tests/test_system_message_loading.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::ContextWindow;", + "source": "./crates/g3-core/tests/test_todo_context_thinning.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::{Message, MessageRole};", + "source": "./crates/g3-core/tests/test_todo_context_thinning.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::ui_writer::NullUiWriter;", + "source": "./crates/g3-core/tests/test_todo_persistence.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::Agent;", + "source": "./crates/g3-core/tests/test_todo_persistence.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::ContextWindow;", + "source": "./crates/g3-core/tests/test_token_counting.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::{Message, MessageRole, Usage};", + "source": "./crates/g3-core/tests/test_token_counting.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_config::Config;", + "source": "./crates/g3-core/tests/todo_staleness_test.rs", + "target": "g3-config", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::ui_writer::UiWriter;", + "source": "./crates/g3-core/tests/todo_staleness_test.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::{Agent, ToolCall};", + "source": "./crates/g3-core/tests/todo_staleness_test.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::ToolCall;", + "source": "./crates/g3-core/tests/tool_execution_test.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::apply_unified_diff_to_string;", + "source": "./crates/g3-core/tests/tool_execution_test.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_config::Config;", + "source": "./crates/g3-ensembles/src/flock.rs", + "target": "g3-config", + "type": "file_to_crate" + }, + { + "evidence": "pub mod flock;", + "source": "./crates/g3-ensembles/src/lib.rs", + "target": "./crates/g3-ensembles/src/flock.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod status;", + "source": "./crates/g3-ensembles/src/lib.rs", + "target": "./crates/g3-ensembles/src/status.rs", + "type": "mod_declaration" + }, + { + "evidence": "mod tests;", + "source": "./crates/g3-ensembles/src/lib.rs", + "target": "./crates/g3-ensembles/src/tests.rs", + "type": "mod_declaration" + }, + { + "evidence": "use g3_ensembles::{FlockConfig, FlockMode};", + "source": "./crates/g3-ensembles/tests/integration_tests.rs", + "target": "g3-ensembles", + "type": "file_to_crate" + }, + { + "evidence": "use g3_ensembles::FlockStatus;", + "source": "./crates/g3-ensembles/tests/integration_tests.rs", + "target": "g3-ensembles", + "type": "file_to_crate" + }, + { + "evidence": "use g3_execution::ensure_coverage_tools_installed;", + "source": "./crates/g3-execution/examples/setup_coverage_tools.rs", + "target": "g3-execution", + "type": "file_to_crate" + }, + { + "evidence": "mod code_explore;", + "source": "./crates/g3-planner/src/lib.rs", + "target": "./crates/g3-planner/src/code_explore.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod git;", + "source": "./crates/g3-planner/src/lib.rs", + "target": "./crates/g3-planner/src/git.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod history;", + "source": "./crates/g3-planner/src/lib.rs", + "target": "./crates/g3-planner/src/history.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod llm;", + "source": "./crates/g3-planner/src/lib.rs", + "target": "./crates/g3-planner/src/llm.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod planner;", + "source": "./crates/g3-planner/src/lib.rs", + "target": "./crates/g3-planner/src/planner.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod prompts;", + "source": "./crates/g3-planner/src/lib.rs", + "target": "./crates/g3-planner/src/prompts.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod state;", + "source": "./crates/g3-planner/src/lib.rs", + "target": "./crates/g3-planner/src/state.rs", + "type": "mod_declaration" + }, + { + "evidence": "use g3_providers::{CompletionRequest, LLMProvider, Message, MessageRole};", + "source": "./crates/g3-planner/src/lib.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_config::Config;", + "source": "./crates/g3-planner/src/llm.rs", + "target": "g3-config", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::project::Project;", + "source": "./crates/g3-planner/src/llm.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::Agent;", + "source": "./crates/g3-planner/src/llm.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::error_handling::{classify_error, ErrorType};", + "source": "./crates/g3-planner/src/llm.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::{CompletionRequest, LLMProvider, Message, MessageRole};", + "source": "./crates/g3-planner/src/llm.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::project::Project;", + "source": "./crates/g3-planner/src/planner.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::retry::{execute_with_retry, RetryConfig, RetryResult};", + "source": "./crates/g3-planner/src/planner.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::feedback_extraction::{extract_coach_feedback, FeedbackExtractionConfig};", + "source": "./crates/g3-planner/src/planner.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::Agent;", + "source": "./crates/g3-planner/src/planner.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_planner::planner::PlannerConfig;", + "source": "./crates/g3-planner/tests/commit_history_ordering_test.rs", + "target": "g3-planner", + "type": "file_to_crate" + }, + { + "evidence": "use g3_planner::history;", + "source": "./crates/g3-planner/tests/commit_history_ordering_test.rs", + "target": "g3-planner", + "type": "file_to_crate" + }, + { + "evidence": "use g3_planner::history;", + "source": "./crates/g3-planner/tests/commit_history_ordering_test.rs", + "target": "g3-planner", + "type": "file_to_crate" + }, + { + "evidence": "use g3_planner::history;", + "source": "./crates/g3-planner/tests/commit_history_ordering_test.rs", + "target": "g3-planner", + "type": "file_to_crate" + }, + { + "evidence": "use g3_planner::history;", + "source": "./crates/g3-planner/tests/commit_history_ordering_test.rs", + "target": "g3-planner", + "type": "file_to_crate" + }, + { + "evidence": "use g3_planner::history;", + "source": "./crates/g3-planner/tests/commit_history_ordering_test.rs", + "target": "g3-planner", + "type": "file_to_crate" + }, + { + "evidence": "use g3_planner::git;", + "source": "./crates/g3-planner/tests/commit_history_ordering_test.rs", + "target": "g3-planner", + "type": "file_to_crate" + }, + { + "evidence": "use g3_planner::history;", + "source": "./crates/g3-planner/tests/commit_history_ordering_test.rs", + "target": "g3-planner", + "type": "file_to_crate" + }, + { + "evidence": "use g3_planner::{create_tool_message, explore_codebase, extract_shell_commands};", + "source": "./crates/g3-planner/tests/planner_test.rs", + "target": "g3-planner", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::MessageRole;", + "source": "./crates/g3-planner/tests/planner_test.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::feedback_extraction::{ExtractedFeedback, FeedbackExtractionConfig, FeedbackSource};", + "source": "./crates/g3-planner/tests/retry_feedback_test.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "use g3_core::retry::RetryConfig;", + "source": "./crates/g3-planner/tests/retry_feedback_test.rs", + "target": "g3-core", + "type": "file_to_crate" + }, + { + "evidence": "mod streaming;", + "source": "./crates/g3-providers/src/lib.rs", + "target": "./crates/g3-providers/src/streaming.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod anthropic;", + "source": "./crates/g3-providers/src/lib.rs", + "target": "./crates/g3-providers/src/anthropic.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod databricks;", + "source": "./crates/g3-providers/src/lib.rs", + "target": "./crates/g3-providers/src/databricks.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod embedded;", + "source": "./crates/g3-providers/src/lib.rs", + "target": "./crates/g3-providers/src/embedded.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod oauth;", + "source": "./crates/g3-providers/src/lib.rs", + "target": "./crates/g3-providers/src/oauth.rs", + "type": "mod_declaration" + }, + { + "evidence": "pub mod openai;", + "source": "./crates/g3-providers/src/lib.rs", + "target": "./crates/g3-providers/src/openai.rs", + "type": "mod_declaration" + }, + { + "evidence": "use g3_providers::{CacheControl, Message, MessageRole};", + "source": "./crates/g3-providers/tests/cache_control_error_regression_test.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::{CacheControl, Message, MessageRole};", + "source": "./crates/g3-providers/tests/cache_control_integration_test.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::{Message, MessageRole, CacheControl, Tool};", + "source": "./crates/g3-providers/tests/message_serialization_test.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_providers::{Message, MessageRole};", + "source": "./examples/verify_message_id.rs", + "target": "g3-providers", + "type": "file_to_crate" + }, + { + "evidence": "use g3_cli::run;", + "source": "./src/main.rs", + "target": "g3-cli", + "type": "file_to_crate" } ], - "file_dependencies": [ + "nodes": [ { - "from": "src/main.rs", - "to": "crates/g3-cli/src/lib.rs", - "import": "use g3_cli::run", - "type": "crate-import" + "crate": "g3-cli", + "file_type": "module", + "id": "./crates/g3-cli/src/filter_json.rs", + "type": "file" }, { - "from": "examples/verify_message_id.rs", - "to": "crates/g3-providers/src/lib.rs", - "import": "use g3_providers::{Message, MessageRole}", - "type": "crate-import" + "crate": "g3-cli", + "file_type": "lib", + "id": "./crates/g3-cli/src/lib.rs", + "type": "file" }, { - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-config/src/lib.rs", - "import": "use g3_config::Config", - "type": "crate-import" + "crate": "g3-cli", + "file_type": "module", + "id": "./crates/g3-cli/src/machine_ui_writer.rs", + "type": "file" }, { - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-core/src/lib.rs", - "import": "use g3_core::{project::Project, ui_writer::UiWriter, Agent, DiscoveryOptions}", - "type": "crate-import" + "crate": "g3-cli", + "file_type": "module", + "id": "./crates/g3-cli/src/simple_output.rs", + "type": "file" }, { - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-core/src/error_handling.rs", - "import": "use g3_core::error_handling::{classify_error, ErrorType, RecoverableError}", - "type": "crate-import" + "crate": "g3-cli", + "file_type": "module", + "id": "./crates/g3-cli/src/streaming_markdown.rs", + "type": "file" }, { - "from": "crates/g3-cli/src/ui_writer_impl.rs", - "to": "crates/g3-core/src/ui_writer.rs", - "import": "use g3_core::ui_writer::UiWriter", - "type": "crate-import" + "crate": "g3-cli", + "file_type": "module", + "id": "./crates/g3-cli/src/theme.rs", + "type": "file" }, { - "from": "crates/g3-cli/src/ui_writer_impl.rs", - "to": "crates/g3-cli/src/filter_json.rs", - "import": "use crate::filter_json::{filter_json_tool_calls, reset_json_tool_state}", - "type": "crate-internal" + "crate": "g3-cli", + "file_type": "module", + "id": "./crates/g3-cli/src/ui_writer_impl.rs", + "type": "file" }, { - "from": "crates/g3-cli/src/machine_ui_writer.rs", - "to": "crates/g3-core/src/ui_writer.rs", - "import": "use g3_core::ui_writer::UiWriter", - "type": "crate-import" + "crate": "g3-cli", + "file_type": "test", + "id": "./crates/g3-cli/tests/cli_integration_test.rs", + "type": "file" }, { - "from": "crates/g3-cli/src/retro_tui.rs", - "to": "crates/g3-cli/src/theme.rs", - "import": "use crate::theme::ColorTheme", - "type": "crate-internal" + "crate": "g3-cli", + "file_type": "test", + "id": "./crates/g3-cli/tests/coach_feedback_extraction_test.rs", + "type": "file" }, { - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-config/src/lib.rs", - "import": "use g3_config::Config", - "type": "crate-import" + "crate": "g3-cli", + "file_type": "test", + "id": "./crates/g3-cli/tests/filter_json_stress_test.rs", + "type": "file" }, { - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-providers/src/lib.rs", - "import": "use g3_providers::{CacheControl, CompletionRequest, Message, MessageRole, ProviderRegistry}", - "type": "crate-import" + "crate": "g3-cli", + "file_type": "test", + "id": "./crates/g3-cli/tests/filter_json_test.rs", + "type": "file" }, { - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/ui_writer.rs", - "import": "use crate::ui_writer::UiWriter", - "type": "crate-internal" + "crate": "g3-cli", + "file_type": "test", + "id": "./crates/g3-cli/tests/streaming_markdown_test.rs", + "type": "file" }, { - "from": "crates/g3-core/src/context_window.rs", - "to": "crates/g3-providers/src/lib.rs", - "import": "use g3_providers::{Message, MessageRole, Usage}", - "type": "crate-import" + "crate": "g3-computer-control", + "file_type": "build", + "id": "./crates/g3-computer-control/build.rs", + "type": "file" }, { - "from": "crates/g3-core/src/context_window.rs", - "to": "crates/g3-core/src/paths.rs", - "import": "use crate::paths::get_thinned_dir", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "example", + "id": "./crates/g3-computer-control/examples/debug_screenshot.rs", + "type": "file" }, { - "from": "crates/g3-core/src/streaming_parser.rs", - "to": "crates/g3-core/src/lib.rs", - "import": "use crate::ToolCall", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "example", + "id": "./crates/g3-computer-control/examples/list_windows.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tool_dispatch.rs", - "to": "crates/g3-core/src/tools/executor.rs", - "import": "use crate::tools::executor::ToolContext", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "example", + "id": "./crates/g3-computer-control/examples/macax_demo.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tool_dispatch.rs", - "to": "crates/g3-core/src/tools/mod.rs", - "import": "use crate::tools::{file_ops, misc, shell, todo, webdriver}", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "example", + "id": "./crates/g3-computer-control/examples/safari_demo.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tool_dispatch.rs", - "to": "crates/g3-core/src/ui_writer.rs", - "import": "use crate::ui_writer::UiWriter", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "example", + "id": "./crates/g3-computer-control/examples/test_permission_prompt.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tools/executor.rs", - "to": "crates/g3-core/src/background_process.rs", - "import": "use crate::background_process::BackgroundProcessManager", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "example", + "id": "./crates/g3-computer-control/examples/test_screencapture_direct.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tools/executor.rs", - "to": "crates/g3-core/src/paths.rs", - "import": "use crate::paths::{ensure_session_dir, get_session_todo_path, get_todo_path}", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "example", + "id": "./crates/g3-computer-control/examples/test_screenshot_fix.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tools/executor.rs", - "to": "crates/g3-core/src/webdriver_session.rs", - "import": "use crate::webdriver_session::WebDriverSession", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "example", + "id": "./crates/g3-computer-control/examples/test_type_text.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tools/executor.rs", - "to": "crates/g3-config/src/lib.rs", - "import": "use g3_config::Config", - "type": "crate-import" + "crate": "g3-computer-control", + "file_type": "example", + "id": "./crates/g3-computer-control/examples/test_vision.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tools/file_ops.rs", - "to": "crates/g3-core/src/ui_writer.rs", - "import": "use crate::ui_writer::UiWriter", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "example", + "id": "./crates/g3-computer-control/examples/test_window_capture.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tools/file_ops.rs", - "to": "crates/g3-core/src/utils.rs", - "import": "use crate::utils::resolve_path_with_unicode_fallback", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "lib", + "id": "./crates/g3-computer-control/src/lib.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tools/shell.rs", - "to": "crates/g3-core/src/ui_writer.rs", - "import": "use crate::ui_writer::UiWriter", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/macax/controller.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tools/shell.rs", - "to": "crates/g3-core/src/utils.rs", - "import": "use crate::utils::resolve_paths_in_shell_command", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/macax/mod.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tools/misc.rs", - "to": "crates/g3-core/src/ui_writer.rs", - "import": "use crate::ui_writer::UiWriter", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/macax/tests.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tools/todo.rs", - "to": "crates/g3-core/src/ui_writer.rs", - "import": "use crate::ui_writer::UiWriter", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/ocr/mod.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tools/webdriver.rs", - "to": "crates/g3-computer-control/src/lib.rs", - "import": "use g3_computer_control::WebDriverController", - "type": "crate-import" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/ocr/tesseract.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tools/webdriver.rs", - "to": "crates/g3-core/src/webdriver_session.rs", - "import": "use crate::webdriver_session::WebDriverSession", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/ocr/vision.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tools/webdriver.rs", - "to": "crates/g3-core/src/ui_writer.rs", - "import": "use crate::ui_writer::UiWriter", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/platform/linux.rs", + "type": "file" }, { - "from": "crates/g3-core/src/webdriver_session.rs", - "to": "crates/g3-computer-control/src/lib.rs", - "import": "use g3_computer_control::{ChromeDriver, SafariDriver, WebDriverController, WebElement}", - "type": "crate-import" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/platform/macos.rs", + "type": "file" }, { - "from": "crates/g3-core/src/feedback_extraction.rs", - "to": "crates/g3-core/src/lib.rs", - "import": "use crate::{logs_dir, Agent, TaskResult}", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "test", + "id": "./crates/g3-computer-control/src/platform/macos_window_matching_test.rs", + "type": "file" }, { - "from": "crates/g3-core/src/feedback_extraction.rs", - "to": "crates/g3-core/src/ui_writer.rs", - "import": "use crate::ui_writer::UiWriter", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/platform/mod.rs", + "type": "file" }, { - "from": "crates/g3-core/src/task_result.rs", - "to": "crates/g3-core/src/context_window.rs", - "import": "use crate::ContextWindow", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/platform/windows.rs", + "type": "file" }, { - "from": "crates/g3-core/src/task_result_comprehensive_tests.rs", - "to": "crates/g3-core/src/context_window.rs", - "import": "use crate::{ContextWindow, TaskResult}", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/types.rs", + "type": "file" }, { - "from": "crates/g3-core/src/task_result_comprehensive_tests.rs", - "to": "crates/g3-providers/src/lib.rs", - "import": "use g3_providers::{Message, MessageRole}", - "type": "crate-import" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/webdriver/chrome.rs", + "type": "file" }, { - "from": "crates/g3-core/src/tool_definitions.rs", - "to": "crates/g3-providers/src/lib.rs", - "import": "use g3_providers::Tool", - "type": "crate-import" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/webdriver/diagnostics.rs", + "type": "file" }, { - "from": "crates/g3-core/src/provider_config.rs", - "to": "crates/g3-config/src/lib.rs", - "import": "use g3_config::Config", - "type": "crate-import" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/webdriver/mod.rs", + "type": "file" }, { - "from": "crates/g3-core/src/retry.rs", - "to": "crates/g3-core/src/error_handling.rs", - "import": "use crate::error_handling::{calculate_retry_delay, classify_error, ErrorType, RecoverableError}", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "module", + "id": "./crates/g3-computer-control/src/webdriver/safari.rs", + "type": "file" }, { - "from": "crates/g3-core/src/retry.rs", - "to": "crates/g3-core/src/ui_writer.rs", - "import": "use crate::ui_writer::UiWriter", - "type": "crate-internal" + "crate": "g3-computer-control", + "file_type": "test", + "id": "./crates/g3-computer-control/tests/integration_test.rs", + "type": "file" }, { - "from": "crates/g3-core/src/retry.rs", - "to": "crates/g3-core/src/lib.rs", - "import": "use crate::{Agent, DiscoveryOptions, TaskResult}", - "type": "crate-internal" + "crate": "g3-config", + "file_type": "lib", + "id": "./crates/g3-config/src/lib.rs", + "type": "file" }, { - "from": "crates/g3-providers/src/anthropic.rs", - "to": "crates/g3-providers/src/lib.rs", - "import": "use crate::{...}", - "type": "crate-internal" + "crate": "g3-config", + "file_type": "module", + "id": "./crates/g3-config/src/tests.rs", + "type": "file" }, { - "from": "crates/g3-providers/src/databricks.rs", - "to": "crates/g3-providers/src/lib.rs", - "import": "use crate::{...}", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "example", + "id": "./crates/g3-core/examples/inspect_ast.rs", + "type": "file" }, { - "from": "crates/g3-providers/src/openai.rs", - "to": "crates/g3-providers/src/lib.rs", - "import": "use crate::{...}", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "example", + "id": "./crates/g3-core/examples/inspect_python_ast.rs", + "type": "file" }, { - "from": "crates/g3-providers/src/embedded.rs", - "to": "crates/g3-providers/src/lib.rs", - "import": "use crate::{...}", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "example", + "id": "./crates/g3-core/examples/test_python_query.rs", + "type": "file" }, { - "from": "crates/g3-planner/src/lib.rs", - "to": "crates/g3-providers/src/lib.rs", - "import": "use g3_providers::{CompletionRequest, LLMProvider, Message, MessageRole}", - "type": "crate-import" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/background_process.rs", + "type": "file" }, { - "from": "crates/g3-planner/src/llm.rs", - "to": "crates/g3-config/src/lib.rs", - "import": "use g3_config::Config", - "type": "crate-import" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/code_search/mod.rs", + "type": "file" }, { - "from": "crates/g3-planner/src/llm.rs", - "to": "crates/g3-core/src/project.rs", - "import": "use g3_core::project::Project", - "type": "crate-import" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/code_search/searcher.rs", + "type": "file" }, { - "from": "crates/g3-planner/src/llm.rs", - "to": "crates/g3-core/src/lib.rs", - "import": "use g3_core::Agent", - "type": "crate-import" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/context_window.rs", + "type": "file" }, { - "from": "crates/g3-planner/src/llm.rs", - "to": "crates/g3-core/src/error_handling.rs", - "import": "use g3_core::error_handling::{classify_error, ErrorType}", - "type": "crate-import" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/error_handling.rs", + "type": "file" }, { - "from": "crates/g3-planner/src/llm.rs", - "to": "crates/g3-providers/src/lib.rs", - "import": "use g3_providers::{CompletionRequest, LLMProvider, Message, MessageRole}", - "type": "crate-import" + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/src/error_handling_test.rs", + "type": "file" }, { - "from": "crates/g3-planner/src/llm.rs", - "to": "crates/g3-planner/src/prompts.rs", - "import": "use crate::prompts", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/feedback_extraction.rs", + "type": "file" }, { - "from": "crates/g3-planner/src/planner.rs", - "to": "crates/g3-planner/src/git.rs", - "import": "use crate::git", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "lib", + "id": "./crates/g3-core/src/lib.rs", + "type": "file" }, { - "from": "crates/g3-planner/src/planner.rs", - "to": "crates/g3-planner/src/history.rs", - "import": "use crate::history", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/paths.rs", + "type": "file" }, { - "from": "crates/g3-planner/src/planner.rs", - "to": "crates/g3-planner/src/llm.rs", - "import": "use crate::llm", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/project.rs", + "type": "file" }, { - "from": "crates/g3-planner/src/planner.rs", - "to": "crates/g3-planner/src/state.rs", - "import": "use crate::state::{...}", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/prompts.rs", + "type": "file" }, { - "from": "crates/g3-ensembles/src/flock.rs", - "to": "crates/g3-config/src/lib.rs", - "import": "use g3_config::Config", - "type": "crate-import" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/provider_config.rs", + "type": "file" }, { - "from": "crates/g3-ensembles/src/flock.rs", - "to": "crates/g3-ensembles/src/status.rs", - "import": "use crate::status::{FlockStatus, SegmentState, SegmentStatus}", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/provider_registration.rs", + "type": "file" }, { - "from": "crates/g3-computer-control/src/platform/macos.rs", - "to": "crates/g3-computer-control/src/ocr/mod.rs", - "import": "use crate::ocr::{DefaultOCR, OCREngine}", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/retry.rs", + "type": "file" }, { - "from": "crates/g3-computer-control/src/platform/macos.rs", - "to": "crates/g3-computer-control/src/types.rs", - "import": "use crate::{...}", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/session.rs", + "type": "file" }, { - "from": "crates/g3-computer-control/src/platform/linux.rs", - "to": "crates/g3-computer-control/src/types.rs", - "import": "use crate::{types::*, ComputerController}", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/session_continuation.rs", + "type": "file" }, { - "from": "crates/g3-computer-control/src/platform/windows.rs", - "to": "crates/g3-computer-control/src/types.rs", - "import": "use crate::{types::*, ComputerController}", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/streaming.rs", + "type": "file" }, { - "from": "crates/g3-computer-control/src/ocr/vision.rs", - "to": "crates/g3-computer-control/src/types.rs", - "import": "use crate::types::TextLocation", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/streaming_parser.rs", + "type": "file" }, { - "from": "crates/g3-computer-control/src/ocr/tesseract.rs", - "to": "crates/g3-computer-control/src/types.rs", - "import": "use crate::types::TextLocation", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/src/take_screenshot_test.rs", + "type": "file" }, { - "from": "crates/g3-computer-control/src/ocr/mod.rs", - "to": "crates/g3-computer-control/src/types.rs", - "import": "use crate::types::TextLocation", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/task_result.rs", + "type": "file" }, { - "from": "crates/g3-console/src/main.rs", - "to": "crates/g3-console/src/api/mod.rs", - "import": "use g3_console::api", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/task_result_comprehensive_tests.rs", + "type": "file" }, { - "from": "crates/g3-console/src/main.rs", - "to": "crates/g3-console/src/launch.rs", - "import": "use g3_console::launch", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/task_result_tests.rs", + "type": "file" }, { - "from": "crates/g3-console/src/main.rs", - "to": "crates/g3-console/src/process/mod.rs", - "import": "use g3_console::process", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/tilde_expansion_tests.rs", + "type": "file" }, { - "from": "crates/g3-console/src/api/instances.rs", - "to": "crates/g3-console/src/logs.rs", - "import": "use crate::logs::{LogParser, StatsAggregator}", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/tool_definitions.rs", + "type": "file" }, { - "from": "crates/g3-console/src/api/instances.rs", - "to": "crates/g3-console/src/models/mod.rs", - "import": "use crate::models::*", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/tool_dispatch.rs", + "type": "file" }, { - "from": "crates/g3-console/src/api/instances.rs", - "to": "crates/g3-console/src/process/detector.rs", - "import": "use crate::process::ProcessDetector", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/tools/executor.rs", + "type": "file" }, { - "from": "crates/g3-console/src/api/control.rs", - "to": "crates/g3-console/src/models/mod.rs", - "import": "use crate::models::*", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/tools/file_ops.rs", + "type": "file" }, { - "from": "crates/g3-console/src/api/control.rs", - "to": "crates/g3-console/src/process/controller.rs", - "import": "use crate::process::ProcessController", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/tools/memory.rs", + "type": "file" }, { - "from": "crates/g3-console/src/api/state.rs", - "to": "crates/g3-console/src/launch.rs", - "import": "use crate::launch::ConsoleState", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/tools/misc.rs", + "type": "file" }, { - "from": "crates/g3-console/src/api/logs.rs", - "to": "crates/g3-console/src/logs.rs", - "import": "use crate::logs::LogParser", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/tools/mod.rs", + "type": "file" }, { - "from": "crates/g3-console/src/api/logs.rs", - "to": "crates/g3-console/src/process/detector.rs", - "import": "use crate::process::ProcessDetector", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/tools/research.rs", + "type": "file" }, { - "from": "crates/g3-console/src/logs.rs", - "to": "crates/g3-console/src/models/mod.rs", - "import": "use crate::models::{InstanceStats, TurnInfo}", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/tools/shell.rs", + "type": "file" }, { - "from": "crates/g3-console/src/process/controller.rs", - "to": "crates/g3-console/src/models/mod.rs", - "import": "use crate::models::LaunchParams", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/tools/todo.rs", + "type": "file" }, { - "from": "crates/g3-console/src/process/detector.rs", - "to": "crates/g3-console/src/models/mod.rs", - "import": "use crate::models::{ExecutionMethod, Instance, InstanceStatus, InstanceType}", - "type": "crate-internal" + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/tools/webdriver.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/ui_writer.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/utils.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "module", + "id": "./crates/g3-core/src/webdriver_session.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/auto_continue_test.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/background_process_demo_test.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/code_search_test.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/duplicate_detection_test.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/incomplete_tool_call_test.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/read_file_token_limit_test.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/read_image_test.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/streaming_parser_test.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/test_agent_session_id.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/test_context_thinning.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/test_preflight_max_tokens.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/test_reset_with_summary.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/test_session_continuation.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/test_system_message_loading.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/test_todo_completion.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/test_todo_context_thinning.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/test_todo_persistence.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/test_token_counting.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/todo_staleness_test.rs", + "type": "file" + }, + { + "crate": "g3-core", + "file_type": "test", + "id": "./crates/g3-core/tests/tool_execution_test.rs", + "type": "file" + }, + { + "crate": "g3-ensembles", + "file_type": "module", + "id": "./crates/g3-ensembles/src/flock.rs", + "type": "file" + }, + { + "crate": "g3-ensembles", + "file_type": "lib", + "id": "./crates/g3-ensembles/src/lib.rs", + "type": "file" + }, + { + "crate": "g3-ensembles", + "file_type": "module", + "id": "./crates/g3-ensembles/src/status.rs", + "type": "file" + }, + { + "crate": "g3-ensembles", + "file_type": "module", + "id": "./crates/g3-ensembles/src/tests.rs", + "type": "file" + }, + { + "crate": "g3-ensembles", + "file_type": "test", + "id": "./crates/g3-ensembles/tests/integration_tests.rs", + "type": "file" + }, + { + "crate": "g3-execution", + "file_type": "example", + "id": "./crates/g3-execution/examples/setup_coverage_tools.rs", + "type": "file" + }, + { + "crate": "g3-execution", + "file_type": "lib", + "id": "./crates/g3-execution/src/lib.rs", + "type": "file" + }, + { + "crate": "g3-planner", + "file_type": "module", + "id": "./crates/g3-planner/src/code_explore.rs", + "type": "file" + }, + { + "crate": "g3-planner", + "file_type": "module", + "id": "./crates/g3-planner/src/git.rs", + "type": "file" + }, + { + "crate": "g3-planner", + "file_type": "module", + "id": "./crates/g3-planner/src/history.rs", + "type": "file" + }, + { + "crate": "g3-planner", + "file_type": "lib", + "id": "./crates/g3-planner/src/lib.rs", + "type": "file" + }, + { + "crate": "g3-planner", + "file_type": "module", + "id": "./crates/g3-planner/src/llm.rs", + "type": "file" + }, + { + "crate": "g3-planner", + "file_type": "module", + "id": "./crates/g3-planner/src/planner.rs", + "type": "file" + }, + { + "crate": "g3-planner", + "file_type": "module", + "id": "./crates/g3-planner/src/prompts.rs", + "type": "file" + }, + { + "crate": "g3-planner", + "file_type": "module", + "id": "./crates/g3-planner/src/state.rs", + "type": "file" + }, + { + "crate": "g3-planner", + "file_type": "test", + "id": "./crates/g3-planner/tests/commit_history_ordering_test.rs", + "type": "file" + }, + { + "crate": "g3-planner", + "file_type": "test", + "id": "./crates/g3-planner/tests/logging_test.rs", + "type": "file" + }, + { + "crate": "g3-planner", + "file_type": "test", + "id": "./crates/g3-planner/tests/planner_test.rs", + "type": "file" + }, + { + "crate": "g3-planner", + "file_type": "test", + "id": "./crates/g3-planner/tests/retry_feedback_test.rs", + "type": "file" + }, + { + "crate": "g3-providers", + "file_type": "module", + "id": "./crates/g3-providers/src/anthropic.rs", + "type": "file" + }, + { + "crate": "g3-providers", + "file_type": "module", + "id": "./crates/g3-providers/src/databricks.rs", + "type": "file" + }, + { + "crate": "g3-providers", + "file_type": "module", + "id": "./crates/g3-providers/src/embedded.rs", + "type": "file" + }, + { + "crate": "g3-providers", + "file_type": "lib", + "id": "./crates/g3-providers/src/lib.rs", + "type": "file" + }, + { + "crate": "g3-providers", + "file_type": "module", + "id": "./crates/g3-providers/src/oauth.rs", + "type": "file" + }, + { + "crate": "g3-providers", + "file_type": "module", + "id": "./crates/g3-providers/src/openai.rs", + "type": "file" + }, + { + "crate": "g3-providers", + "file_type": "module", + "id": "./crates/g3-providers/src/streaming.rs", + "type": "file" + }, + { + "crate": "g3-providers", + "file_type": "test", + "id": "./crates/g3-providers/tests/cache_control_error_regression_test.rs", + "type": "file" + }, + { + "crate": "g3-providers", + "file_type": "test", + "id": "./crates/g3-providers/tests/cache_control_integration_test.rs", + "type": "file" + }, + { + "crate": "g3-providers", + "file_type": "test", + "id": "./crates/g3-providers/tests/message_serialization_test.rs", + "type": "file" + }, + { + "crate": "g3", + "file_type": "example", + "id": "./examples/verify_message_id.rs", + "type": "file" + }, + { + "crate": "g3", + "file_type": "main", + "id": "./src/main.rs", + "type": "file" + }, + { + "id": "g3", + "type": "crate" + }, + { + "id": "g3-cli", + "type": "crate" + }, + { + "id": "g3-core", + "type": "crate" + }, + { + "id": "g3-providers", + "type": "crate" + }, + { + "id": "g3-config", + "type": "crate" + }, + { + "id": "g3-execution", + "type": "crate" + }, + { + "id": "g3-computer-control", + "type": "crate" + }, + { + "id": "g3-ensembles", + "type": "crate" + }, + { + "id": "g3-planner", + "type": "crate" } - ], - "statistics": { - "total_crates": 10, - "total_files": 139, - "crate_dependency_edges": 16, - "file_dependency_edges": 72 - } -} + ] +} \ No newline at end of file diff --git a/analysis/deps/graph.summary.md b/analysis/deps/graph.summary.md index 7d7fd20..b18d9d5 100644 --- a/analysis/deps/graph.summary.md +++ b/analysis/deps/graph.summary.md @@ -2,27 +2,47 @@ ## Overview -| Metric | Value | +| Metric | Count | |--------|-------| -| Total Crates | 10 | -| Total Source Files | 139 | -| Crate-Level Dependency Edges | 16 | -| File-Level Dependency Edges | 72 | +| Total nodes | 143 | +| Crate nodes | 9 | +| File nodes | 134 | +| Total edges | 189 | -## Crate Inventory +## Node Distribution -| Crate | Type | File Count | Path | -|-------|------|------------|------| -| g3 | binary | 2 | . | -| g3-cli | library | 11 | crates/g3-cli | -| g3-core | library | 55 | crates/g3-core | -| g3-config | library | 3 | crates/g3-config | -| g3-providers | library | 9 | crates/g3-providers | -| g3-planner | library | 12 | crates/g3-planner | -| g3-execution | library | 2 | crates/g3-execution | -| g3-computer-control | library | 28 | crates/g3-computer-control | -| g3-console | binary+library | 18 | crates/g3-console | -| g3-ensembles | library | 5 | crates/g3-ensembles | +### Files by Crate + +| Crate | File Count | +|-------|------------| +| g3-core | 60 | +| g3-computer-control | 29 | +| g3-cli | 12 | +| g3-planner | 12 | +| g3-providers | 10 | +| g3-ensembles | 5 | +| g3 (root) | 2 | +| g3-config | 2 | +| g3-execution | 2 | + +### Files by Type + +| Type | Count | +|------|-------| +| module | 72 | +| test | 37 | +| example | 15 | +| lib | 8 | +| build | 1 | +| main | 1 | + +## Edge Distribution + +| Edge Type | Count | Description | +|-----------|-------|-------------| +| file_to_crate | 101 | File imports from external crate | +| mod_declaration | 71 | Module declaration within crate | +| crate_dependency | 17 | Cargo.toml dependency | ## Crate Dependency Structure @@ -39,6 +59,7 @@ g3 (root binary) │ │ ├── g3-providers │ │ ├── g3-core │ │ └── g3-config +│ ├── g3-computer-control │ ├── g3-providers │ └── g3-ensembles │ ├── g3-core @@ -46,69 +67,49 @@ g3 (root binary) └── g3-providers ``` -## Fan-In Analysis (Crates Depended Upon) +## Top Fan-In Nodes (Most Depended Upon) -| Crate | Fan-In | Dependents | -|-------|--------|------------| -| g3-config | 5 | g3-cli, g3-core, g3-planner, g3-ensembles | -| g3-providers | 4 | g3, g3-cli, g3-core, g3-planner | -| g3-core | 3 | g3-cli, g3-planner, g3-ensembles | -| g3-cli | 1 | g3 | -| g3-planner | 1 | g3-cli | -| g3-ensembles | 1 | g3-cli | -| g3-execution | 1 | g3-core | -| g3-computer-control | 1 | g3-core | -| g3-console | 0 | (standalone) | -| g3 | 0 | (root) | +| Node | Fan-In | +|------|--------| +| g3-core | 43 | +| g3-providers | 27 | +| g3-config | 16 | +| g3-computer-control | 12 | +| g3-planner | 10 | +| g3-cli | 5 | +| g3-ensembles | 3 | +| g3-execution | 2 | -## Fan-Out Analysis (Crates Depending On Others) +## Top Fan-Out Nodes (Most Dependencies) -| Crate | Fan-Out | Dependencies | -|-------|---------|-------------| -| g3-cli | 5 | g3-core, g3-config, g3-planner, g3-providers, g3-ensembles | -| g3-core | 4 | g3-providers, g3-config, g3-execution, g3-computer-control | -| g3-planner | 3 | g3-providers, g3-core, g3-config | -| g3-ensembles | 2 | g3-core, g3-config | -| g3 | 2 | g3-cli, g3-providers | -| g3-config | 0 | (leaf) | -| g3-providers | 0 | (leaf) | -| g3-execution | 0 | (leaf) | -| g3-computer-control | 0 | (leaf) | -| g3-console | 0 | (standalone) | +| Node | Fan-Out | +|------|--------| +| ./crates/g3-core/src/lib.rs | 27 | +| ./crates/g3-cli/src/lib.rs | 12 | +| ./crates/g3-core/src/tools/mod.rs | 8 | +| ./crates/g3-planner/src/lib.rs | 8 | +| ./crates/g3-providers/src/lib.rs | 6 | +| g3-cli | 6 | +| ./crates/g3-computer-control/src/lib.rs | 5 | +| ./crates/g3-planner/src/llm.rs | 5 | ## Entrypoints -| Binary | Entry File | -|--------|------------| -| g3 | src/main.rs | -| g3-console | crates/g3-console/src/main.rs | +| File | Type | Description | +|------|------|-------------| +| ./src/main.rs | main | Root binary entrypoint | +| ./crates/g3-cli/src/lib.rs | lib | CLI library root | +| ./crates/g3-core/src/lib.rs | lib | Core engine library root | +| ./crates/g3-providers/src/lib.rs | lib | LLM providers library root | +| ./crates/g3-config/src/lib.rs | lib | Configuration library root | +| ./crates/g3-execution/src/lib.rs | lib | Execution library root | +| ./crates/g3-computer-control/src/lib.rs | lib | Computer control library root | +| ./crates/g3-ensembles/src/lib.rs | lib | Ensembles library root | +| ./crates/g3-planner/src/lib.rs | lib | Planner library root | -## High Fan-In Files (Within Crates) +## Extraction Method -| File | Fan-In | Role | -|------|--------|------| -| g3-core/src/ui_writer.rs | 10 | UI abstraction trait | -| g3-core/src/lib.rs | 8 | Core agent types (Agent, ToolCall, etc.) | -| g3-providers/src/lib.rs | 7 | Provider types (Message, MessageRole, etc.) | -| g3-config/src/lib.rs | 5 | Configuration (Config) | -| g3-core/src/utils.rs | 2 | Utility functions | -| g3-core/src/paths.rs | 2 | Path utilities | -| g3-core/src/webdriver_session.rs | 2 | WebDriver session management | -| g3-computer-control/src/types.rs | 5 | Type definitions | -| g3-console/src/models/mod.rs | 5 | Data models | - -## Leaf Crates (No Internal Dependencies) - -- g3-config -- g3-providers -- g3-execution -- g3-computer-control -- g3-console - -## Extraction Limitations - -1. **Dynamic imports**: Conditional compilation (`#[cfg(...)]`) may hide platform-specific dependencies -2. **Macro-generated imports**: Imports generated by macros are not captured -3. **Re-exports**: Transitive re-exports through `pub use` are not fully traced -4. **Test dependencies**: Test-only dependencies (dev-dependencies) are included but not distinguished in file-level analysis -5. **Build scripts**: build.rs dependencies are not analyzed for import relationships +- Crate dependencies: Parsed from `Cargo.toml` files +- File-to-crate edges: Extracted from `use g3_*::` statements +- Module declarations: Extracted from `mod` and `pub mod` statements +- File classification: Based on path patterns and filename conventions diff --git a/analysis/deps/hotspots.md b/analysis/deps/hotspots.md index 34fc506..fa8f76f 100644 --- a/analysis/deps/hotspots.md +++ b/analysis/deps/hotspots.md @@ -1,95 +1,101 @@ -# Dependency Hotspots +# Coupling Hotspots -## Definition +## Identification Method -Hotspots are code artifacts with disproportionate coupling, measured by: -- **Fan-in**: Number of files/crates that depend on this artifact -- **Fan-out**: Number of files/crates this artifact depends on -- **Cross-group edges**: Dependencies that cross module/crate boundaries +Hotspots identified by: +1. Fan-in: Number of incoming edges (dependents) +2. Fan-out: Number of outgoing edges (dependencies) +3. Cross-crate edges: Files with imports from multiple external crates ## Crate-Level Hotspots -### High Fan-In Crates +### By Fan-In (Most Depended Upon) -| Crate | Fan-In | Evidence | -|-------|--------|----------| -| g3-config | 5 | Depended on by: g3-cli, g3-core, g3-planner, g3-ensembles, (tests) | -| g3-providers | 4 | Depended on by: g3, g3-cli, g3-core, g3-planner | -| g3-core | 3 | Depended on by: g3-cli, g3-planner, g3-ensembles | +| Crate | Fan-In | Dependents | +|-------|--------|------------| +| g3-core | 43 | g3-cli, g3-ensembles, g3-planner + 40 file imports | +| g3-providers | 27 | g3-core, g3-planner + 25 file imports | +| g3-config | 16 | g3-cli, g3-core, g3-ensembles, g3-planner + 12 file imports | +| g3-computer-control | 12 | g3-cli, g3-core + 10 file imports | -### High Fan-Out Crates +### By Fan-Out (Most Dependencies) -| Crate | Fan-Out | Evidence | -|-------|---------|----------| -| g3-cli | 5 | Depends on: g3-core, g3-config, g3-planner, g3-providers, g3-ensembles | -| g3-core | 4 | Depends on: g3-providers, g3-config, g3-execution, g3-computer-control | -| g3-planner | 3 | Depends on: g3-providers, g3-core, g3-config | +| Crate | Fan-Out | Dependencies | +|-------|---------|-------------| +| g3-cli | 6 | g3-core, g3-config, g3-planner, g3-computer-control, g3-providers, g3-ensembles | +| g3-core | 4 | g3-providers, g3-config, g3-execution, g3-computer-control | +| g3-planner | 3 | g3-providers, g3-core, g3-config | +| g3-ensembles | 2 | g3-core, g3-config | ## File-Level Hotspots -### High Fan-In Files +### By Fan-Out (Files with Most Dependencies) -| File | Fan-In | Importing Files | -|------|--------|----------------| -| `g3-core/src/ui_writer.rs` | 10 | lib.rs, tool_dispatch.rs, retry.rs, feedback_extraction.rs, tools/file_ops.rs, tools/shell.rs, tools/misc.rs, tools/todo.rs, tools/webdriver.rs, tools/executor.rs | -| `g3-core/src/lib.rs` | 8 | streaming_parser.rs, feedback_extraction.rs, retry.rs, task_result_comprehensive_tests.rs, (external: g3-cli, g3-planner, g3-ensembles) | -| `g3-providers/src/lib.rs` | 7 | anthropic.rs, databricks.rs, openai.rs, embedded.rs, (external: g3-core, g3-planner, examples) | -| `g3-config/src/lib.rs` | 5 | (external: g3-core, g3-cli, g3-planner, g3-ensembles, tools/executor.rs) | -| `g3-computer-control/src/types.rs` | 5 | platform/macos.rs, platform/linux.rs, platform/windows.rs, ocr/mod.rs, ocr/vision.rs, ocr/tesseract.rs | -| `g3-console/src/models/mod.rs` | 5 | api/instances.rs, api/control.rs, logs.rs, process/controller.rs, process/detector.rs | - -### High Fan-Out Files - -| File | Fan-Out | Dependencies | +| File | Fan-Out | Description | |------|---------|-------------| -| `g3-core/src/tools/executor.rs` | 5 | background_process.rs, paths.rs, ui_writer.rs, webdriver_session.rs, g3-config | -| `g3-core/src/tool_dispatch.rs` | 4 | tools/executor.rs, tools/mod.rs, ui_writer.rs, ToolCall | -| `g3-core/src/retry.rs` | 4 | error_handling.rs, ui_writer.rs, lib.rs (Agent, TaskResult) | -| `g3-planner/src/llm.rs` | 5 | g3-config, g3-core/project, g3-core/Agent, g3-core/error_handling, g3-providers, prompts.rs | -| `g3-console/src/api/instances.rs` | 3 | logs.rs, models, process/detector.rs | +| ./crates/g3-core/src/lib.rs | 27 | Core library root - declares 22 modules + 5 external imports | +| ./crates/g3-cli/src/lib.rs | 12 | CLI library root - 5 modules + 7 external imports | +| ./crates/g3-core/src/tools/mod.rs | 8 | Tools module - declares 8 submodules | +| ./crates/g3-planner/src/lib.rs | 8 | Planner library root - 7 modules + 1 external import | +| ./crates/g3-providers/src/lib.rs | 6 | Providers library root - 5 modules + 1 internal | +| ./crates/g3-computer-control/src/lib.rs | 5 | Computer control root - 5 modules | +| ./crates/g3-planner/src/llm.rs | 5 | LLM integration - 5 external imports | -## Cross-Boundary Dependencies +### Files with Cross-Crate Imports -### External Crate Imports (Cross-Crate) +| File | External Crates Imported | +|------|-------------------------| +| ./crates/g3-cli/src/lib.rs | g3-config, g3-core | +| ./crates/g3-core/src/lib.rs | g3-config, g3-providers | +| ./crates/g3-core/src/context_window.rs | g3-providers | +| ./crates/g3-core/src/streaming.rs | g3-providers | +| ./crates/g3-core/src/tool_definitions.rs | g3-providers | +| ./crates/g3-core/src/tools/executor.rs | g3-config | +| ./crates/g3-core/src/tools/research.rs | g3-config | +| ./crates/g3-core/src/tools/webdriver.rs | g3-computer-control | +| ./crates/g3-core/src/webdriver_session.rs | g3-computer-control | +| ./crates/g3-planner/src/llm.rs | g3-config, g3-core, g3-providers | +| ./crates/g3-planner/src/lib.rs | g3-providers | +| ./crates/g3-ensembles/src/flock.rs | g3-config | -| From Crate | To Crate | Import Count | Key Types | -|------------|----------|--------------|----------| -| g3-core | g3-providers | 5 | Message, MessageRole, Usage, CacheControl, Tool, CompletionRequest, ProviderRegistry | -| g3-core | g3-config | 3 | Config | -| g3-core | g3-computer-control | 2 | WebDriverController, ChromeDriver, SafariDriver, WebElement | -| g3-cli | g3-core | 3 | Agent, UiWriter, DiscoveryOptions, Project, error_handling | -| g3-planner | g3-core | 3 | Agent, Project, error_handling | -| g3-planner | g3-providers | 2 | Message, MessageRole, LLMProvider, CompletionRequest | -| g3-ensembles | g3-core | 1 | (via g3-config) | +## High-Coupling Observations -## Coupling Metrics Summary +### g3-core/src/lib.rs -| Metric | Value | Threshold | Status | -|--------|-------|-----------|--------| -| Max crate fan-in | 5 (g3-config) | - | Expected for config | -| Max crate fan-out | 5 (g3-cli) | - | Expected for CLI | -| Max file fan-in | 10 (ui_writer.rs) | - | Trait abstraction | -| Max file fan-out | 5 (executor.rs, llm.rs) | - | Orchestration files | -| Cross-crate edges | 16 | - | Moderate | +- Fan-out: 27 (highest in codebase) +- Declares 22 public modules +- Imports from: g3-config, g3-providers +- Central hub for all core functionality -## Observations +### g3-providers -1. **ui_writer.rs** has highest file-level fan-in (10 dependents) - - This is a trait definition, high fan-in is expected - - Implements dependency inversion pattern +- Fan-in: 27 (second highest) +- Imported by 25 files across 3 crates +- Provides: Message, MessageRole, CompletionRequest, LLMProvider, etc. +- Core abstraction layer for LLM communication -2. **g3-config** has highest crate-level fan-in (5 dependents) - - Configuration is appropriately centralized - - No code duplication observed +### g3-config -3. **g3-cli** has highest crate-level fan-out (5 dependencies) - - Expected for application entry point - - Orchestrates all major subsystems +- Fan-in: 16 +- Imported by 12 files across 4 crates +- Provides: Config struct +- Shared configuration across all layers -4. **tools/executor.rs** has high fan-out within g3-core - - Central tool execution context - - Coordinates background processes, paths, webdriver, config +## Representative Evidence -5. **g3-console** is isolated - - No dependencies on other workspace crates - - Standalone monitoring application +### g3-core imports from g3-providers (18 edges) + +``` +./crates/g3-core/src/lib.rs: use g3_providers::{CacheControl, CompletionRequest, Message, MessageRole, ProviderRegistry}; +./crates/g3-core/src/context_window.rs: use g3_providers::{Message, MessageRole, Usage}; +./crates/g3-core/src/streaming.rs: use g3_providers::{CompletionRequest, MessageRole}; +./crates/g3-core/src/tool_definitions.rs: use g3_providers::Tool; +``` + +### g3-planner imports from g3-core (5 edges) + +``` +./crates/g3-planner/src/llm.rs: use g3_core::project::Project; +./crates/g3-planner/src/llm.rs: use g3_core::Agent; +./crates/g3-planner/src/llm.rs: use g3_core::error_handling::{classify_error, ErrorType}; +``` diff --git a/analysis/deps/layers.observed.md b/analysis/deps/layers.observed.md index 1bd8a6f..38bb8fe 100644 --- a/analysis/deps/layers.observed.md +++ b/analysis/deps/layers.observed.md @@ -1,127 +1,106 @@ # Observed Layering -## Layer Structure +## Derivation Method -Based on crate dependencies and file imports, the following layers are observed: +Layers derived mechanically from: +1. Crate dependency direction in Cargo.toml +2. Path-based grouping within crates +3. Import directionality between files -``` -┌─────────────────────────────────────────────────────────────┐ -│ LAYER 5: Binaries │ -│ │ -│ g3 (src/main.rs) g3-console (src/main.rs) │ -│ │ │ │ -└─────────┼───────────────────────────┼───────────────────────┘ - │ │ - ▼ ▼ -┌─────────────────────────────────────────────────────────────┐ -│ LAYER 4: Application │ -│ │ -│ g3-cli g3-console (lib) │ -│ ├── Interactive CLI ├── Web API │ -│ ├── TUI rendering ├── Process management │ -│ └── Session management └── Log parsing │ -│ │ -└─────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────┐ -│ LAYER 3: Orchestration │ -│ │ -│ g3-planner g3-ensembles │ -│ ├── Planning workflow ├── Flock mode │ -│ ├── Git integration └── Multi-agent status │ -│ └── LLM coordination │ -│ │ -└─────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────┐ -│ LAYER 2: Core │ -│ │ -│ g3-core │ -│ ├── Agent engine (lib.rs) │ -│ ├── Context window management │ -│ ├── Tool dispatch & execution │ -│ ├── Streaming parser │ -│ ├── Error handling & retry │ -│ └── Code search (tree-sitter) │ -│ │ -└─────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────┐ -│ LAYER 1: Foundation │ -│ │ -│ g3-providers g3-config g3-execution │ -│ ├── Anthropic ├── TOML └── Coverage tools │ -│ ├── Databricks │ parsing │ -│ ├── OpenAI └── Settings g3-computer-control │ -│ ├── Embedded ├── Platform (macOS/ │ -│ └── OAuth │ Linux/Windows) │ -│ ├── OCR │ -│ ├── WebDriver │ -│ └── MacAX │ -│ │ -└─────────────────────────────────────────────────────────────┘ -``` +## Crate Layers -## Layer Dependency Rules +### Layer 0: Foundation (No internal dependencies) -| From Layer | May Depend On | -|------------|---------------| -| 5 (Binaries) | 4, 1 | -| 4 (Application) | 3, 2, 1 | -| 3 (Orchestration) | 2, 1 | -| 2 (Core) | 1 | -| 1 (Foundation) | (none - leaf) | +| Crate | Purpose (from Cargo.toml description) | +|-------|---------------------------------------| +| g3-config | Configuration management | +| g3-execution | Code execution engine | +| g3-providers | LLM provider abstractions | +| g3-computer-control | Computer control (no description) | -## Observed Violations +### Layer 1: Core Services + +| Crate | Dependencies | +|-------|-------------| +| g3-core | g3-providers, g3-config, g3-execution, g3-computer-control | + +### Layer 2: Higher-Level Services + +| Crate | Dependencies | +|-------|-------------| +| g3-ensembles | g3-core, g3-config | +| g3-planner | g3-providers, g3-core, g3-config | + +### Layer 3: Application + +| Crate | Dependencies | +|-------|-------------| +| g3-cli | g3-core, g3-config, g3-planner, g3-computer-control, g3-providers, g3-ensembles | +| g3 (root) | g3-cli, g3-providers | + +## Module Groupings Within Crates + +### g3-core (60 files) + +| Group | Files | Purpose | +|-------|-------|--------| +| tools/ | 9 | Tool implementations (file_ops, shell, webdriver, etc.) | +| code_search/ | 2 | Tree-sitter based code search | +| root modules | 22 | Core functionality (agent, context, streaming, etc.) | +| tests/ | 27 | Integration and unit tests | + +### g3-computer-control (29 files) + +| Group | Files | Purpose | +|-------|-------|--------| +| platform/ | 5 | OS-specific implementations (macos, linux, windows) | +| webdriver/ | 4 | Browser automation (safari, chrome) | +| ocr/ | 3 | Text recognition (tesseract, vision) | +| macax/ | 3 | macOS accessibility | +| examples/ | 12 | Usage examples | + +### g3-providers (10 files) + +| Group | Files | Purpose | +|-------|-------|--------| +| providers | 5 | LLM implementations (anthropic, databricks, openai, embedded) | +| support | 3 | OAuth, streaming utilities | +| tests/ | 3 | Provider tests | + +### g3-planner (12 files) + +| Group | Files | Purpose | +|-------|-------|--------| +| core | 7 | Planner logic (planner, state, llm, git, history) | +| tests/ | 4 | Planner tests | + +## Observed Directionality + +### Cross-Crate Import Patterns + +| From Crate | To Crate | Edge Count | +|------------|----------|------------| +| g3-cli | g3-core | 5 | +| g3-cli | g3-config | 2 | +| g3-cli | g3-computer-control | 1 | +| g3-core | g3-providers | 18 | +| g3-core | g3-config | 6 | +| g3-core | g3-computer-control | 2 | +| g3-planner | g3-providers | 3 | +| g3-planner | g3-core | 5 | +| g3-planner | g3-config | 1 | +| g3-ensembles | g3-core | 1 | +| g3-ensembles | g3-config | 1 | + +### Layer Violations **None detected.** -All observed dependencies follow the layering rules: -- Higher layers depend only on lower layers -- No skip-level violations that bypass intermediate layers inappropriately -- No upward dependencies +All observed imports follow the declared crate dependency direction. +No file imports from a crate that is not declared as a dependency. -## Cross-Cutting Concerns +## Uncertainty -### g3-config -Used by: g3-cli, g3-core, g3-planner, g3-ensembles -- Provides `Config` struct across all layers -- Appropriate as foundation-level shared configuration - -### g3-providers -Used by: g3, g3-cli, g3-core, g3-planner -- Provides `Message`, `MessageRole`, `LLMProvider` types -- Core abstraction for LLM communication -- Appropriate as foundation-level abstraction - -### UiWriter trait (g3-core/src/ui_writer.rs) -Used by: 10 files within g3-core, implemented by g3-cli -- Abstraction for output rendering -- Defined in core, implemented in application layer -- Follows dependency inversion principle - -## Module Groupings by Path Convention - -| Path Pattern | Purpose | Crates | -|--------------|---------|--------| -| `src/tools/*` | Tool implementations | g3-core | -| `src/api/*` | HTTP API handlers | g3-console | -| `src/models/*` | Data structures | g3-console | -| `src/process/*` | Process management | g3-console | -| `src/platform/*` | OS-specific code | g3-computer-control | -| `src/ocr/*` | OCR implementations | g3-computer-control | -| `src/webdriver/*` | Browser automation | g3-computer-control | -| `src/macax/*` | macOS accessibility | g3-computer-control | -| `src/code_search/*` | Tree-sitter search | g3-core | - -## Confidence Assessment - -| Aspect | Confidence | Notes | -|--------|------------|-------| -| Crate-level layering | High | Derived from Cargo.toml | -| File-level layering | Medium | Based on import analysis | -| Violation detection | Medium | May miss dynamic/conditional deps | -| Module groupings | High | Based on path conventions | +- Internal `use crate::` imports not fully resolved to specific files +- Some module relationships inferred from `mod` declarations only +- Test files may have additional dev-dependencies not tracked diff --git a/analysis/deps/limitations.md b/analysis/deps/limitations.md index adfacee..3ee3568 100644 --- a/analysis/deps/limitations.md +++ b/analysis/deps/limitations.md @@ -1,121 +1,103 @@ # Analysis Limitations -## Extraction Method +## What Was Observed -This analysis used static parsing of: -1. `Cargo.toml` files for crate-level dependencies -2. `use` statements in `.rs` files for file-level imports -3. `mod` declarations for module structure +| Source | Method | Confidence | +|--------|--------|------------| +| Crate dependencies | Parsed from Cargo.toml `[dependencies]` sections | High | +| External crate imports | Regex match on `use g3_*::` statements | High | +| Module declarations | Regex match on `mod` and `pub mod` statements | High | +| File classification | Path pattern matching (tests/, examples/, lib.rs, etc.) | High | -## What Could Not Be Observed +## What Was Not Observed -### 1. Conditional Compilation +### 1. Internal Module Imports -Dependencies gated by `#[cfg(...)]` attributes may be: -- Platform-specific (e.g., `#[cfg(target_os = "macos")]`) -- Feature-gated (e.g., `#[cfg(feature = "..." )]`) -- Test-only (e.g., `#[cfg(test)]`) +`use crate::` statements were detected but not resolved to specific target files. -**Impact**: Some edges may only exist on specific platforms or with specific features enabled. +**Impact**: File-to-file edges within a crate are incomplete. Only `mod` declaration edges are captured. -**Affected crates**: -- `g3-computer-control`: Has platform-specific modules (macos.rs, linux.rs, windows.rs) -- `g3-providers`: May have feature-gated provider implementations +**Example not captured**: +```rust +// In ./crates/g3-core/src/streaming.rs +use crate::context_window::ContextWindow; // Edge to context_window.rs not in graph +``` -### 2. Macro-Generated Code +### 2. Re-exports -Imports generated by procedural macros are not captured: -- `#[derive(...)]` macros -- `async_trait` macro expansions -- Custom derive macros +`pub use` statements that re-export items from submodules are not tracked as separate edges. -**Impact**: Some implicit dependencies on trait implementations may be missed. +**Impact**: Transitive dependencies through re-exports are not visible. -### 3. Re-exports +**Example**: +```rust +// In ./crates/g3-core/src/lib.rs +pub use context_window::{ContextWindow, ThinScope}; // Re-export not tracked +``` -Transitive re-exports via `pub use` are partially traced: -- Direct re-exports in `lib.rs` are captured -- Nested re-exports may not be fully resolved +### 3. Conditional Compilation -**Example**: `g3-providers/src/lib.rs` likely re-exports types from submodules. +`#[cfg(...)]` attributes on imports are not parsed. All imports are treated as unconditional. -### 4. Dynamic Dispatch +**Impact**: Platform-specific dependencies (e.g., macOS-only code in g3-computer-control) appear as universal. -Trait object usage (`dyn Trait`) creates runtime dependencies not visible in imports: -- `Box` -- `Arc` +### 4. Macro-Generated Imports -**Impact**: Actual runtime coupling may be higher than static analysis shows. +Imports generated by macros (e.g., `derive` macros, `include!`) are not detected. -### 5. Build Script Dependencies +**Impact**: Some edges may be missing if macros generate `use` statements. -`build.rs` files were identified but not analyzed for: -- Generated code dependencies -- Native library linkage -- Environment-based configuration +### 5. Dev-Dependencies -**Affected**: `g3-computer-control/build.rs` +Only `[dependencies]` sections were parsed. `[dev-dependencies]` were not included in crate-level edges. -### 6. External Crate Dependencies +**Impact**: Test-only dependencies (e.g., `tempfile`, `serial_test`) are not in the graph. -Only workspace-internal dependencies were analyzed. External crates from crates.io are listed in Cargo.toml but not traced at file level: -- `tokio`, `reqwest`, `serde`, etc. -- `tree-sitter-*` language grammars -- Platform-specific crates (`core-graphics`, `x11`, `windows`) +### 6. Build Dependencies -### 7. Test File Dependencies +`[build-dependencies]` were not parsed. -Test files in `tests/` directories were included but: -- May have different dependency patterns than production code -- Use `dev-dependencies` not distinguished from regular dependencies -- Integration tests may have broader access than unit tests +**Impact**: Build script dependencies are not represented. -### 8. Example File Dependencies +### 7. Feature-Gated Dependencies -Files in `examples/` directories: -- Included in file counts -- May demonstrate usage patterns not representative of core dependencies -- Often have simplified or demonstration-only imports +Cargo features that enable optional dependencies are not tracked. + +**Impact**: Optional dependencies appear the same as required ones. + +### 8. Workspace Dependencies + +`[workspace.dependencies]` are resolved but the inheritance relationship is not tracked. + +**Impact**: Cannot distinguish workspace-inherited vs crate-specific dependency versions. ## What Was Inferred -### 1. Module-to-File Mapping +| Inference | Basis | Confidence | +|-----------|-------|------------| +| File type classification | Filename and path patterns | Medium-High | +| Module file resolution | Rust module naming conventions (mod.rs, name.rs) | High | +| Crate membership | File path prefix matching | High | -`mod foo;` declarations were mapped to `foo.rs` or `foo/mod.rs` by convention. +## Potential Invalidation Conditions -**Confidence**: High (Rust standard convention) +1. **Non-standard module structure**: If any crate uses `#[path = "..."]` attributes to override module paths, those edges will be incorrect. -### 2. Crate Root Identification +2. **Generated code**: If any `.rs` files are generated at build time (not checked into git), they are not included. -`lib.rs` was assumed to be the crate root for libraries. -`main.rs` was assumed to be the binary entry point. +3. **Symlinks**: Symbolic links in the source tree are not followed or detected. -**Confidence**: High (Cargo convention) +4. **External workspace members**: Only crates in `./crates/` and root `./src/` were analyzed. External workspace members would be missed. -### 3. Import Target Resolution +## Verification Commands -`use crate::foo::Bar` was resolved to the file containing module `foo`. +To verify crate-level dependencies match Cargo's resolution: +```bash +cargo tree --prefix none --no-dedupe | grep '^g3-' +``` -**Confidence**: Medium (may miss re-exports) - -### 4. Cross-Crate Import Resolution - -`use g3_core::Agent` was mapped to `g3-core/src/lib.rs`. - -**Confidence**: Medium (actual definition may be in submodule) - -## What May Invalidate Conclusions - -1. **Significant refactoring** since analysis date -2. **Feature flags** enabling/disabling major functionality -3. **Platform-specific builds** with different dependency graphs -4. **Workspace configuration changes** in Cargo.toml -5. **New crates added** to workspace - -## Recommendations for Improved Analysis - -1. Use `cargo metadata` for authoritative crate dependency graph -2. Use `cargo tree` for transitive dependency analysis -3. Use `rust-analyzer` for precise import resolution -4. Run analysis on each target platform separately -5. Analyze with all feature combinations +To find imports not captured by this analysis: +```bash +rg 'use crate::' --type rust | wc -l # Internal imports (not fully resolved) +rg 'pub use' --type rust | wc -l # Re-exports (not tracked) +``` diff --git a/analysis/deps/sccs.md b/analysis/deps/sccs.md index 319bcee..8859226 100644 --- a/analysis/deps/sccs.md +++ b/analysis/deps/sccs.md @@ -1,169 +1,40 @@ -# Strongly Connected Components Analysis - -## Crate-Level SCCs - -**Result: No cycles detected** - -All 10 crates form a directed acyclic graph (DAG). Each crate is its own trivial SCC of size 1. - -### Topological Order (Bottom to Top) - -1. **Leaf crates** (no internal dependencies): - - g3-config - - g3-providers - - g3-execution - - g3-computer-control - -2. **Mid-level crates**: - - g3-core (depends on: g3-providers, g3-config, g3-execution, g3-computer-control) - - g3-console (standalone, no workspace dependencies) - -3. **Higher-level crates**: - - g3-planner (depends on: g3-providers, g3-core, g3-config) - - g3-ensembles (depends on: g3-core, g3-config) - -4. **Application layer**: - - g3-cli (depends on: g3-core, g3-config, g3-planner, g3-providers, g3-ensembles) - -5. **Root binary**: - - g3 (depends on: g3-cli, g3-providers) - -## File-Level SCCs Within Crates - -### g3-core - -No non-trivial SCCs detected. Internal module dependencies are acyclic: - -``` -lib.rs -├── ui_writer.rs -├── context_window.rs -│ └── paths.rs -├── streaming_parser.rs -├── tool_dispatch.rs -│ └── tools/mod.rs -│ ├── executor.rs -│ │ ├── background_process.rs -│ │ ├── paths.rs -│ │ └── webdriver_session.rs -│ ├── file_ops.rs → utils.rs, ui_writer.rs -│ ├── shell.rs → utils.rs, ui_writer.rs -│ ├── misc.rs → ui_writer.rs -│ ├── todo.rs → ui_writer.rs -│ └── webdriver.rs → webdriver_session.rs, ui_writer.rs -├── error_handling.rs -├── retry.rs → error_handling.rs, ui_writer.rs -├── feedback_extraction.rs → ui_writer.rs -├── task_result.rs → context_window.rs -└── provider_config.rs -``` - -### g3-providers - -No non-trivial SCCs. Provider implementations depend on lib.rs types: - -``` -lib.rs (types: Message, MessageRole, LLMProvider, etc.) -├── anthropic.rs -├── databricks.rs -├── openai.rs -├── embedded.rs -└── oauth.rs -``` - -### g3-planner - -No non-trivial SCCs: - -``` -lib.rs -├── planner.rs -│ ├── git.rs -│ ├── history.rs -│ ├── llm.rs → prompts.rs -│ └── state.rs -├── code_explore.rs -└── prompts.rs -``` - -### g3-computer-control - -No non-trivial SCCs: - -``` -lib.rs -├── types.rs -├── platform/mod.rs -│ ├── macos.rs → ocr/mod.rs, types.rs -│ ├── linux.rs → types.rs -│ └── windows.rs → types.rs -├── ocr/mod.rs → types.rs -│ ├── vision.rs → types.rs -│ └── tesseract.rs → types.rs -├── webdriver/mod.rs -│ ├── safari.rs -│ └── chrome.rs -└── macax/mod.rs - └── controller.rs -``` - -### g3-console - -No non-trivial SCCs: - -``` -lib.rs -├── models/mod.rs -│ ├── instance.rs -│ └── message.rs -├── api/mod.rs -│ ├── instances.rs → logs.rs, models, process/detector.rs -│ ├── control.rs → models, process/controller.rs -│ ├── logs.rs → logs.rs, process/detector.rs -│ └── state.rs → launch.rs -├── process/mod.rs -│ ├── controller.rs → models -│ └── detector.rs → models -├── logs.rs → models -└── launch.rs -``` - -### g3-ensembles - -No non-trivial SCCs: - -``` -lib.rs -├── flock.rs → status.rs -└── status.rs -``` - -### g3-cli - -No non-trivial SCCs: - -``` -lib.rs -├── filter_json.rs -├── ui_writer_impl.rs → filter_json.rs -├── machine_ui_writer.rs -├── retro_tui.rs → theme.rs -├── theme.rs -├── tui.rs -└── simple_output.rs -``` +# Strongly Connected Components (Cycles) ## Summary -| Scope | Non-Trivial SCCs | Largest SCC Size | -|-------|------------------|------------------| -| Crate-level | 0 | 1 (all trivial) | -| File-level (g3-core) | 0 | 1 | -| File-level (g3-providers) | 0 | 1 | -| File-level (g3-planner) | 0 | 1 | -| File-level (g3-computer-control) | 0 | 1 | -| File-level (g3-console) | 0 | 1 | -| File-level (g3-ensembles) | 0 | 1 | -| File-level (g3-cli) | 0 | 1 | +**No non-trivial strongly connected components detected.** -The codebase exhibits clean layered architecture with no circular dependencies. +The dependency graph is acyclic at both the crate level and the file level. + +## Analysis Details + +- Algorithm: Tarjan's SCC algorithm +- Scope: All 143 nodes (9 crates + 134 files) +- Result: 0 cycles with size > 1 + +## Crate-Level Verification + +The crate dependency graph forms a directed acyclic graph (DAG): + +``` +Leaf crates (no dependencies on other g3-* crates): + - g3-providers + - g3-config + - g3-execution + - g3-computer-control + +Intermediate crates: + - g3-core → depends on: g3-providers, g3-config, g3-execution, g3-computer-control + - g3-ensembles → depends on: g3-core, g3-config + - g3-planner → depends on: g3-providers, g3-core, g3-config + +Top-level crates: + - g3-cli → depends on: g3-core, g3-config, g3-planner, g3-computer-control, g3-providers, g3-ensembles + - g3 (root) → depends on: g3-cli, g3-providers +``` + +## Implications + +- No circular dependencies exist between crates +- Build order is deterministic +- Crates can be compiled in topological order