diff --git a/AGENTS.md b/AGENTS.md index 247e89a..5501c30 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -67,3 +67,18 @@ These areas have subtle bugs if modified incorrectly: 3. **"Tool results are always small"** - File reads can return megabytes 4. **"Sessions persist across runs"** - Sessions are ephemeral by default 5. **"All platforms are equal"** - macOS has more features (Vision, Accessibility) + +## Dependency Analysis Artifacts + +The `analysis/deps/` directory contains static analysis artifacts generated by the euler agent: + +| File | Purpose | +|------|--------| +| `graph.json` | Canonical dependency graph with nodes (crates, files) and edges (imports) | +| `graph.summary.md` | One-page overview with metrics, entrypoints, and top fan-in/fan-out nodes | +| `sccs.md` | Strongly connected components (dependency cycles) analysis | +| `layers.observed.md` | Observed layering structure derived from dependency direction | +| `hotspots.md` | Files with disproportionate coupling (high fan-in or fan-out) | +| `limitations.md` | What could not be observed and what may invalidate conclusions | + +These artifacts are useful for understanding coupling, planning refactors, and identifying architectural boundaries. diff --git a/analysis/deps/graph.json b/analysis/deps/graph.json index f98a3ad..a56bb27 100644 --- a/analysis/deps/graph.json +++ b/analysis/deps/graph.json @@ -1,1708 +1,1976 @@ { - "crate_level": { - "edges": [ - { - "evidence": "Cargo.toml path dependency", - "from": "g3", - "to": "g3-cli", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3", - "to": "g3-providers", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-cli", - "to": "g3-core", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-cli", - "to": "g3-config", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-cli", - "to": "g3-planner", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-cli", - "to": "g3-computer-control", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-cli", - "to": "g3-providers", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-cli", - "to": "g3-ensembles", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-core", - "to": "g3-providers", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-core", - "to": "g3-config", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-core", - "to": "g3-execution", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-core", - "to": "g3-computer-control", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-planner", - "to": "g3-providers", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-planner", - "to": "g3-core", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-planner", - "to": "g3-config", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-ensembles", - "to": "g3-core", - "type": "crate_dependency" - }, - { - "evidence": "Cargo.toml path dependency", - "from": "g3-ensembles", - "to": "g3-config", - "type": "crate_dependency" - } - ], - "metrics": { - "fan_in": { - "g3-cli": 1, - "g3-computer-control": 2, - "g3-config": 4, - "g3-core": 3, - "g3-ensembles": 1, - "g3-execution": 1, - "g3-planner": 1, - "g3-providers": 4 - }, - "fan_out": { - "g3": 2, - "g3-cli": 6, - "g3-core": 4, - "g3-ensembles": 2, - "g3-planner": 3 - } - }, - "nodes": [ - { - "id": "g3", - "type": "bin" - }, - { - "id": "g3-cli", - "type": "lib" - }, - { - "id": "g3-core", - "type": "lib" - }, - { - "id": "g3-providers", - "type": "lib" - }, - { - "id": "g3-config", - "type": "lib" - }, - { - "id": "g3-execution", - "type": "lib" - }, - { - "id": "g3-computer-control", - "type": "lib" - }, - { - "id": "g3-planner", - "type": "lib" - }, - { - "id": "g3-ensembles", - "type": "lib" - }, - { - "id": "studio", - "type": "bin" - } - ] + "metadata": { + "generated_by": "euler structural analysis agent", + "workspace": "g3", + "node_count": 108, + "edge_count": 186, + "crate_count": 9, + "file_count": 99 }, - "file_level": { - "edges": [ - { - "evidence": "mod macax", - "from": "crates/g3-computer-control/src/lib.rs", - "to": "crates/g3-computer-control/src/macax/mod.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod ocr", - "from": "crates/g3-computer-control/src/lib.rs", - "to": "crates/g3-computer-control/src/ocr/mod.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod platform", - "from": "crates/g3-computer-control/src/lib.rs", - "to": "crates/g3-computer-control/src/platform/mod.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod types", - "from": "crates/g3-computer-control/src/lib.rs", - "to": "crates/g3-computer-control/src/types.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod webdriver", - "from": "crates/g3-computer-control/src/lib.rs", - "to": "crates/g3-computer-control/src/webdriver/mod.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod macos", - "from": "crates/g3-computer-control/src/platform/mod.rs", - "to": "crates/g3-computer-control/src/platform/macos.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod linux", - "from": "crates/g3-computer-control/src/platform/mod.rs", - "to": "crates/g3-computer-control/src/platform/linux.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod windows", - "from": "crates/g3-computer-control/src/platform/mod.rs", - "to": "crates/g3-computer-control/src/platform/windows.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod vision", - "from": "crates/g3-computer-control/src/ocr/mod.rs", - "to": "crates/g3-computer-control/src/ocr/vision.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod tesseract", - "from": "crates/g3-computer-control/src/ocr/mod.rs", - "to": "crates/g3-computer-control/src/ocr/tesseract.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod safari", - "from": "crates/g3-computer-control/src/webdriver/mod.rs", - "to": "crates/g3-computer-control/src/webdriver/safari.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod chrome", - "from": "crates/g3-computer-control/src/webdriver/mod.rs", - "to": "crates/g3-computer-control/src/webdriver/chrome.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod diagnostics", - "from": "crates/g3-computer-control/src/webdriver/mod.rs", - "to": "crates/g3-computer-control/src/webdriver/diagnostics.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod controller", - "from": "crates/g3-computer-control/src/macax/mod.rs", - "to": "crates/g3-computer-control/src/macax/controller.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod streaming", - "from": "crates/g3-providers/src/lib.rs", - "to": "crates/g3-providers/src/streaming.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod anthropic", - "from": "crates/g3-providers/src/lib.rs", - "to": "crates/g3-providers/src/anthropic.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod databricks", - "from": "crates/g3-providers/src/lib.rs", - "to": "crates/g3-providers/src/databricks.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod embedded", - "from": "crates/g3-providers/src/lib.rs", - "to": "crates/g3-providers/src/embedded.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod oauth", - "from": "crates/g3-providers/src/lib.rs", - "to": "crates/g3-providers/src/oauth.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod openai", - "from": "crates/g3-providers/src/lib.rs", - "to": "crates/g3-providers/src/openai.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod flock", - "from": "crates/g3-ensembles/src/lib.rs", - "to": "crates/g3-ensembles/src/flock.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod status", - "from": "crates/g3-ensembles/src/lib.rs", - "to": "crates/g3-ensembles/src/status.rs", - "type": "mod_declaration" - }, - { - "evidence": "use g3_config::Config", - "from": "crates/g3-ensembles/src/flock.rs", - "to_crate": "g3-config", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_providers::MessageRole", - "from": "crates/g3-core/src/session.rs", - "to_crate": "g3-providers", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_computer_control::", - "from": "crates/g3-core/src/webdriver_session.rs", - "to_crate": "g3-computer-control", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_config::Config", - "from": "crates/g3-core/src/lib.rs", - "to_crate": "g3-config", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_providers::", - "from": "crates/g3-core/src/lib.rs", - "to_crate": "g3-providers", - "type": "cross_crate_import" - }, - { - "evidence": "mod acd", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/acd.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod context_window", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/context_window.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod background_process", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/background_process.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod compaction", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/compaction.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod code_search", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/code_search/mod.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod error_handling", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/error_handling.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod feedback_extraction", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/feedback_extraction.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod paths", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/paths.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod project", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/project.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod provider_registration", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/provider_registration.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod provider_config", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/provider_config.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod retry", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/retry.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod session", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/session.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod session_continuation", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/session_continuation.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod streaming_parser", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/streaming_parser.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod task_result", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/task_result.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod tool_dispatch", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/tool_dispatch.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod tool_definitions", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/tool_definitions.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod tools", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/tools/mod.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod ui_writer", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/ui_writer.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod streaming", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/streaming.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod utils", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/utils.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod webdriver_session", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/webdriver_session.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod task_result_comprehensive_tests", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/task_result_comprehensive_tests.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod tilde_expansion_tests", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/tilde_expansion_tests.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod error_handling_test", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/error_handling_test.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod prompts", - "from": "crates/g3-core/src/lib.rs", - "to": "crates/g3-core/src/prompts.rs", - "type": "mod_declaration" - }, - { - "evidence": "use g3_providers::", - "from": "crates/g3-core/src/context_window.rs", - "to_crate": "g3-providers", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_providers::Message", - "from": "crates/g3-core/src/acd.rs", - "to_crate": "g3-providers", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_config::Config", - "from": "crates/g3-core/src/provider_registration.rs", - "to_crate": "g3-config", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_providers::ProviderRegistry", - "from": "crates/g3-core/src/provider_registration.rs", - "to_crate": "g3-providers", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_providers::", - "from": "crates/g3-core/src/task_result_comprehensive_tests.rs", - "to_crate": "g3-providers", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_providers::Tool", - "from": "crates/g3-core/src/tool_definitions.rs", - "to_crate": "g3-providers", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_providers::", - "from": "crates/g3-core/src/streaming.rs", - "to_crate": "g3-providers", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_providers::", - "from": "crates/g3-core/src/compaction.rs", - "to_crate": "g3-providers", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_config::Config", - "from": "crates/g3-core/src/provider_config.rs", - "to_crate": "g3-config", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_config::WebDriverBrowser", - "from": "crates/g3-core/src/tools/research.rs", - "to_crate": "g3-config", - "type": "cross_crate_import" - }, - { - "evidence": "mod executor", - "from": "crates/g3-core/src/tools/mod.rs", - "to": "crates/g3-core/src/tools/executor.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod acd", - "from": "crates/g3-core/src/tools/mod.rs", - "to": "crates/g3-core/src/tools/acd.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod file_ops", - "from": "crates/g3-core/src/tools/mod.rs", - "to": "crates/g3-core/src/tools/file_ops.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod memory", - "from": "crates/g3-core/src/tools/mod.rs", - "to": "crates/g3-core/src/tools/memory.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod misc", - "from": "crates/g3-core/src/tools/mod.rs", - "to": "crates/g3-core/src/tools/misc.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod research", - "from": "crates/g3-core/src/tools/mod.rs", - "to": "crates/g3-core/src/tools/research.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod shell", - "from": "crates/g3-core/src/tools/mod.rs", - "to": "crates/g3-core/src/tools/shell.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod todo", - "from": "crates/g3-core/src/tools/mod.rs", - "to": "crates/g3-core/src/tools/todo.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod webdriver", - "from": "crates/g3-core/src/tools/mod.rs", - "to": "crates/g3-core/src/tools/webdriver.rs", - "type": "mod_declaration" - }, - { - "evidence": "use g3_computer_control::WebDriverController", - "from": "crates/g3-core/src/tools/webdriver.rs", - "to_crate": "g3-computer-control", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_config::Config", - "from": "crates/g3-core/src/tools/executor.rs", - "to_crate": "g3-config", - "type": "cross_crate_import" - }, - { - "evidence": "mod searcher", - "from": "crates/g3-core/src/code_search/mod.rs", - "to": "crates/g3-core/src/code_search/searcher.rs", - "type": "mod_declaration" - }, - { - "evidence": "use g3_core::ui_writer::UiWriter", - "from": "crates/g3-cli/src/agent_mode.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::Agent", - "from": "crates/g3-cli/src/agent_mode.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_config::Config", - "from": "crates/g3-cli/src/lib.rs", - "to_crate": "g3-config", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::project::Project", - "from": "crates/g3-cli/src/lib.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::Agent", - "from": "crates/g3-cli/src/lib.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "mod filter_json", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/filter_json.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod metrics", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/metrics.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod project_files", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/project_files.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod streaming_markdown", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/streaming_markdown.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod accumulative", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/accumulative.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod agent_mode", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/agent_mode.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod autonomous", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/autonomous.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod cli_args", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/cli_args.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod coach_feedback", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/coach_feedback.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod interactive", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/interactive.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod simple_output", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/simple_output.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod task_execution", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/task_execution.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod ui_writer_impl", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/ui_writer_impl.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod utils", - "from": "crates/g3-cli/src/lib.rs", - "to": "crates/g3-cli/src/utils.rs", - "type": "mod_declaration" - }, - { - "evidence": "use g3_core::project::Project", - "from": "crates/g3-cli/src/accumulative.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::Agent", - "from": "crates/g3-cli/src/accumulative.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::error_handling::", - "from": "crates/g3-cli/src/task_execution.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::ui_writer::UiWriter", - "from": "crates/g3-cli/src/task_execution.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::Agent", - "from": "crates/g3-cli/src/task_execution.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::Agent", - "from": "crates/g3-cli/src/coach_feedback.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::error_handling::", - "from": "crates/g3-cli/src/autonomous.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::project::Project", - "from": "crates/g3-cli/src/autonomous.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::", - "from": "crates/g3-cli/src/autonomous.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::ui_writer::UiWriter", - "from": "crates/g3-cli/src/ui_writer_impl.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::ui_writer::UiWriter", - "from": "crates/g3-cli/src/interactive.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::Agent", - "from": "crates/g3-cli/src/interactive.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_config::Config", - "from": "crates/g3-cli/src/utils.rs", - "to_crate": "g3-config", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::ui_writer::UiWriter", - "from": "crates/g3-cli/src/utils.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::Agent", - "from": "crates/g3-cli/src/utils.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_config::Config", - "from": "crates/g3-planner/src/llm.rs", - "to_crate": "g3-config", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::project::Project", - "from": "crates/g3-planner/src/llm.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::Agent", - "from": "crates/g3-planner/src/llm.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_core::error_handling::", - "from": "crates/g3-planner/src/llm.rs", - "to_crate": "g3-core", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_providers::", - "from": "crates/g3-planner/src/llm.rs", - "to_crate": "g3-providers", - "type": "cross_crate_import" - }, - { - "evidence": "use g3_providers::", - "from": "crates/g3-planner/src/lib.rs", - "to_crate": "g3-providers", - "type": "cross_crate_import" - }, - { - "evidence": "mod code_explore", - "from": "crates/g3-planner/src/lib.rs", - "to": "crates/g3-planner/src/code_explore.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod git", - "from": "crates/g3-planner/src/lib.rs", - "to": "crates/g3-planner/src/git.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod history", - "from": "crates/g3-planner/src/lib.rs", - "to": "crates/g3-planner/src/history.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod llm", - "from": "crates/g3-planner/src/lib.rs", - "to": "crates/g3-planner/src/llm.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod planner", - "from": "crates/g3-planner/src/lib.rs", - "to": "crates/g3-planner/src/planner.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod prompts", - "from": "crates/g3-planner/src/lib.rs", - "to": "crates/g3-planner/src/prompts.rs", - "type": "mod_declaration" - }, - { - "evidence": "mod state", - "from": "crates/g3-planner/src/lib.rs", - "to": "crates/g3-planner/src/state.rs", - "type": "mod_declaration" - } - ], - "metrics": { - "fan_in": { - "crates/g3-cli/src/accumulative.rs": 1, - "crates/g3-cli/src/agent_mode.rs": 1, - "crates/g3-cli/src/autonomous.rs": 1, - "crates/g3-cli/src/cli_args.rs": 1, - "crates/g3-cli/src/coach_feedback.rs": 1, - "crates/g3-cli/src/filter_json.rs": 1, - "crates/g3-cli/src/interactive.rs": 1, - "crates/g3-cli/src/metrics.rs": 1, - "crates/g3-cli/src/project_files.rs": 1, - "crates/g3-cli/src/simple_output.rs": 1, - "crates/g3-cli/src/streaming_markdown.rs": 1, - "crates/g3-cli/src/task_execution.rs": 1, - "crates/g3-cli/src/ui_writer_impl.rs": 1, - "crates/g3-cli/src/utils.rs": 1, - "crates/g3-computer-control/src/macax/controller.rs": 1, - "crates/g3-computer-control/src/macax/mod.rs": 1, - "crates/g3-computer-control/src/ocr/mod.rs": 1, - "crates/g3-computer-control/src/ocr/tesseract.rs": 1, - "crates/g3-computer-control/src/ocr/vision.rs": 1, - "crates/g3-computer-control/src/platform/linux.rs": 1, - "crates/g3-computer-control/src/platform/macos.rs": 1, - "crates/g3-computer-control/src/platform/mod.rs": 1, - "crates/g3-computer-control/src/platform/windows.rs": 1, - "crates/g3-computer-control/src/types.rs": 1, - "crates/g3-computer-control/src/webdriver/chrome.rs": 1, - "crates/g3-computer-control/src/webdriver/diagnostics.rs": 1, - "crates/g3-computer-control/src/webdriver/mod.rs": 1, - "crates/g3-computer-control/src/webdriver/safari.rs": 1, - "crates/g3-core/src/acd.rs": 1, - "crates/g3-core/src/background_process.rs": 1, - "crates/g3-core/src/code_search/mod.rs": 1, - "crates/g3-core/src/code_search/searcher.rs": 1, - "crates/g3-core/src/compaction.rs": 1, - "crates/g3-core/src/context_window.rs": 1, - "crates/g3-core/src/error_handling.rs": 1, - "crates/g3-core/src/error_handling_test.rs": 1, - "crates/g3-core/src/feedback_extraction.rs": 1, - "crates/g3-core/src/paths.rs": 1, - "crates/g3-core/src/project.rs": 1, - "crates/g3-core/src/prompts.rs": 1, - "crates/g3-core/src/provider_config.rs": 1, - "crates/g3-core/src/provider_registration.rs": 1, - "crates/g3-core/src/retry.rs": 1, - "crates/g3-core/src/session.rs": 1, - "crates/g3-core/src/session_continuation.rs": 1, - "crates/g3-core/src/streaming.rs": 1, - "crates/g3-core/src/streaming_parser.rs": 1, - "crates/g3-core/src/task_result.rs": 1, - "crates/g3-core/src/task_result_comprehensive_tests.rs": 1, - "crates/g3-core/src/tilde_expansion_tests.rs": 1, - "crates/g3-core/src/tool_definitions.rs": 1, - "crates/g3-core/src/tool_dispatch.rs": 1, - "crates/g3-core/src/tools/acd.rs": 1, - "crates/g3-core/src/tools/executor.rs": 1, - "crates/g3-core/src/tools/file_ops.rs": 1, - "crates/g3-core/src/tools/memory.rs": 1, - "crates/g3-core/src/tools/misc.rs": 1, - "crates/g3-core/src/tools/mod.rs": 1, - "crates/g3-core/src/tools/research.rs": 1, - "crates/g3-core/src/tools/shell.rs": 1, - "crates/g3-core/src/tools/todo.rs": 1, - "crates/g3-core/src/tools/webdriver.rs": 1, - "crates/g3-core/src/ui_writer.rs": 1, - "crates/g3-core/src/utils.rs": 1, - "crates/g3-core/src/webdriver_session.rs": 1, - "crates/g3-ensembles/src/flock.rs": 1, - "crates/g3-ensembles/src/status.rs": 1, - "crates/g3-planner/src/code_explore.rs": 1, - "crates/g3-planner/src/git.rs": 1, - "crates/g3-planner/src/history.rs": 1, - "crates/g3-planner/src/llm.rs": 1, - "crates/g3-planner/src/planner.rs": 1, - "crates/g3-planner/src/prompts.rs": 1, - "crates/g3-planner/src/state.rs": 1, - "crates/g3-providers/src/anthropic.rs": 1, - "crates/g3-providers/src/databricks.rs": 1, - "crates/g3-providers/src/embedded.rs": 1, - "crates/g3-providers/src/oauth.rs": 1, - "crates/g3-providers/src/openai.rs": 1, - "crates/g3-providers/src/streaming.rs": 1, - "g3-computer-control": 2, - "g3-config": 9, - "g3-core": 21, - "g3-providers": 11 - }, - "fan_out": { - "crates/g3-cli/src/accumulative.rs": 2, - "crates/g3-cli/src/agent_mode.rs": 2, - "crates/g3-cli/src/autonomous.rs": 3, - "crates/g3-cli/src/coach_feedback.rs": 1, - "crates/g3-cli/src/interactive.rs": 2, - "crates/g3-cli/src/lib.rs": 17, - "crates/g3-cli/src/task_execution.rs": 3, - "crates/g3-cli/src/ui_writer_impl.rs": 1, - "crates/g3-cli/src/utils.rs": 3, - "crates/g3-computer-control/src/lib.rs": 5, - "crates/g3-computer-control/src/macax/mod.rs": 1, - "crates/g3-computer-control/src/ocr/mod.rs": 2, - "crates/g3-computer-control/src/platform/mod.rs": 3, - "crates/g3-computer-control/src/webdriver/mod.rs": 3, - "crates/g3-core/src/acd.rs": 1, - "crates/g3-core/src/code_search/mod.rs": 1, - "crates/g3-core/src/compaction.rs": 1, - "crates/g3-core/src/context_window.rs": 1, - "crates/g3-core/src/lib.rs": 29, - "crates/g3-core/src/provider_config.rs": 1, - "crates/g3-core/src/provider_registration.rs": 2, - "crates/g3-core/src/session.rs": 1, - "crates/g3-core/src/streaming.rs": 1, - "crates/g3-core/src/task_result_comprehensive_tests.rs": 1, - "crates/g3-core/src/tool_definitions.rs": 1, - "crates/g3-core/src/tools/executor.rs": 1, - "crates/g3-core/src/tools/mod.rs": 9, - "crates/g3-core/src/tools/research.rs": 1, - "crates/g3-core/src/tools/webdriver.rs": 1, - "crates/g3-core/src/webdriver_session.rs": 1, - "crates/g3-ensembles/src/flock.rs": 1, - "crates/g3-ensembles/src/lib.rs": 2, - "crates/g3-planner/src/lib.rs": 8, - "crates/g3-planner/src/llm.rs": 5, - "crates/g3-providers/src/lib.rs": 6 - } + "nodes": [ + { + "id": "crate:g3", + "type": "crate", + "name": "g3", + "path": "." }, - "nodes": [ - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/types.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/lib.rs", - "mods_declared": [ - "macax", - "ocr", - "platform", - "types", - "webdriver" - ], - "type": "lib_root" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/platform/macos.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/platform/mod.rs", - "mods_declared": [ - "macos", - "linux", - "windows" - ], - "type": "mod_root" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/platform/windows.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/platform/linux.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/ocr/vision.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/ocr/tesseract.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/ocr/mod.rs", - "mods_declared": [ - "vision", - "tesseract" - ], - "type": "mod_root" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/webdriver/diagnostics.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/webdriver/safari.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/webdriver/mod.rs", - "mods_declared": [ - "safari", - "chrome", - "diagnostics" - ], - "type": "mod_root" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/webdriver/chrome.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/macax/controller.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/macax/mod.rs", - "mods_declared": [ - "controller" - ], - "type": "mod_root" - }, - { - "crate": "g3-computer-control", - "id": "crates/g3-computer-control/src/macax/tests.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "studio", - "id": "crates/studio/src/session.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "studio", - "id": "crates/studio/src/git.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "studio", - "id": "crates/studio/src/main.rs", - "mods_declared": [ - "git", - "session" - ], - "type": "bin_root" - }, - { - "crate": "g3-providers", - "id": "crates/g3-providers/src/lib.rs", - "mods_declared": [ - "streaming", - "anthropic", - "databricks", - "embedded", - "oauth", - "openai" - ], - "type": "lib_root" - }, - { - "crate": "g3-providers", - "id": "crates/g3-providers/src/embedded.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-providers", - "id": "crates/g3-providers/src/oauth.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-providers", - "id": "crates/g3-providers/src/databricks.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-providers", - "id": "crates/g3-providers/src/streaming.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-providers", - "id": "crates/g3-providers/src/anthropic.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-providers", - "id": "crates/g3-providers/src/openai.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-ensembles", - "id": "crates/g3-ensembles/src/lib.rs", - "mods_declared": [ - "flock", - "status" - ], - "type": "lib_root" - }, - { - "crate": "g3-ensembles", - "id": "crates/g3-ensembles/src/status.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-ensembles", - "id": "crates/g3-ensembles/src/tests.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-ensembles", - "id": "crates/g3-ensembles/src/flock.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/session.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/prompts.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/background_process.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/ui_writer.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/tool_dispatch.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/webdriver_session.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/lib.rs", - "mods_declared": [ - "acd", - "context_window", - "background_process", - "compaction", - "code_search", - "error_handling", - "feedback_extraction", - "paths", - "project", - "provider_registration", - "provider_config", - "retry", - "session", - "session_continuation", - "streaming_parser", - "task_result", - "tool_dispatch", - "tool_definitions", - "tools", - "ui_writer", - "streaming", - "utils", - "webdriver_session", - "task_result_comprehensive_tests", - "tilde_expansion_tests", - "error_handling_test", - "prompts" - ], - "type": "lib_root" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/streaming_parser.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/paths.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/context_window.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/acd.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/feedback_extraction.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/session_continuation.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/tilde_expansion_tests.rs", - "mods_declared": [ - "tilde_expansion_tests" - ], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/task_result.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/project.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/provider_registration.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/task_result_comprehensive_tests.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/tool_definitions.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/streaming.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/task_result_tests.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/compaction.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/provider_config.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/error_handling.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/retry.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/utils.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/tools/file_ops.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/tools/shell.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/tools/research.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/tools/memory.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/tools/acd.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/tools/misc.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/tools/mod.rs", - "mods_declared": [ - "executor", - "acd", - "file_ops", - "memory", - "misc", - "research", - "shell", - "todo", - "webdriver" - ], - "type": "mod_root" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/tools/webdriver.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/tools/executor.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/tools/todo.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/code_search/searcher.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-core", - "id": "crates/g3-core/src/code_search/mod.rs", - "mods_declared": [ - "searcher" - ], - "type": "mod_root" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/agent_mode.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/simple_output.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/lib.rs", - "mods_declared": [ - "filter_json", - "metrics", - "project_files", - "streaming_markdown", - "accumulative", - "agent_mode", - "autonomous", - "cli_args", - "coach_feedback", - "interactive", - "simple_output", - "task_execution", - "ui_writer_impl", - "utils" - ], - "type": "lib_root" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/theme.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/cli_args.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/metrics.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/streaming_markdown.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/accumulative.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/task_execution.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/coach_feedback.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/project_files.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/autonomous.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/ui_writer_impl.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/interactive.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/filter_json.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-cli", - "id": "crates/g3-cli/src/utils.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-planner", - "id": "crates/g3-planner/src/llm.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-planner", - "id": "crates/g3-planner/src/prompts.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-planner", - "id": "crates/g3-planner/src/lib.rs", - "mods_declared": [ - "code_explore", - "git", - "history", - "llm", - "planner", - "prompts", - "state" - ], - "type": "lib_root" - }, - { - "crate": "g3-planner", - "id": "crates/g3-planner/src/git.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-planner", - "id": "crates/g3-planner/src/planner.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-planner", - "id": "crates/g3-planner/src/history.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-planner", - "id": "crates/g3-planner/src/state.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-planner", - "id": "crates/g3-planner/src/code_explore.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-config", - "id": "crates/g3-config/src/lib.rs", - "mods_declared": [], - "type": "lib_root" - }, - { - "crate": "g3-config", - "id": "crates/g3-config/src/tests.rs", - "mods_declared": [], - "type": "module" - }, - { - "crate": "g3-execution", - "id": "crates/g3-execution/src/lib.rs", - "mods_declared": [], - "type": "lib_root" - } - ] - }, - "generated_by": "euler_agent", - "sccs": [], - "version": "1.0" + { + "id": "crate:g3-cli", + "type": "crate", + "name": "g3-cli", + "path": "crates/g3-cli" + }, + { + "id": "crate:g3-core", + "type": "crate", + "name": "g3-core", + "path": "crates/g3-core" + }, + { + "id": "crate:g3-providers", + "type": "crate", + "name": "g3-providers", + "path": "crates/g3-providers" + }, + { + "id": "crate:g3-config", + "type": "crate", + "name": "g3-config", + "path": "crates/g3-config" + }, + { + "id": "crate:g3-execution", + "type": "crate", + "name": "g3-execution", + "path": "crates/g3-execution" + }, + { + "id": "crate:g3-planner", + "type": "crate", + "name": "g3-planner", + "path": "crates/g3-planner" + }, + { + "id": "crate:g3-computer-control", + "type": "crate", + "name": "g3-computer-control", + "path": "crates/g3-computer-control" + }, + { + "id": "crate:studio", + "type": "crate", + "name": "studio", + "path": "crates/studio" + }, + { + "id": "file:crates/g3-cli/src/accumulative.rs", + "type": "file", + "name": "accumulative.rs", + "path": "crates/g3-cli/src/accumulative.rs", + "crate": "g3-cli", + "module": "accumulative" + }, + { + "id": "file:crates/g3-cli/src/agent_mode.rs", + "type": "file", + "name": "agent_mode.rs", + "path": "crates/g3-cli/src/agent_mode.rs", + "crate": "g3-cli", + "module": "agent_mode" + }, + { + "id": "file:crates/g3-cli/src/autonomous.rs", + "type": "file", + "name": "autonomous.rs", + "path": "crates/g3-cli/src/autonomous.rs", + "crate": "g3-cli", + "module": "autonomous" + }, + { + "id": "file:crates/g3-cli/src/cli_args.rs", + "type": "file", + "name": "cli_args.rs", + "path": "crates/g3-cli/src/cli_args.rs", + "crate": "g3-cli", + "module": "cli_args" + }, + { + "id": "file:crates/g3-cli/src/coach_feedback.rs", + "type": "file", + "name": "coach_feedback.rs", + "path": "crates/g3-cli/src/coach_feedback.rs", + "crate": "g3-cli", + "module": "coach_feedback" + }, + { + "id": "file:crates/g3-cli/src/commands.rs", + "type": "file", + "name": "commands.rs", + "path": "crates/g3-cli/src/commands.rs", + "crate": "g3-cli", + "module": "commands" + }, + { + "id": "file:crates/g3-cli/src/completion.rs", + "type": "file", + "name": "completion.rs", + "path": "crates/g3-cli/src/completion.rs", + "crate": "g3-cli", + "module": "completion" + }, + { + "id": "file:crates/g3-cli/src/display.rs", + "type": "file", + "name": "display.rs", + "path": "crates/g3-cli/src/display.rs", + "crate": "g3-cli", + "module": "display" + }, + { + "id": "file:crates/g3-cli/src/embedded_agents.rs", + "type": "file", + "name": "embedded_agents.rs", + "path": "crates/g3-cli/src/embedded_agents.rs", + "crate": "g3-cli", + "module": "embedded_agents" + }, + { + "id": "file:crates/g3-cli/src/filter_json.rs", + "type": "file", + "name": "filter_json.rs", + "path": "crates/g3-cli/src/filter_json.rs", + "crate": "g3-cli", + "module": "filter_json" + }, + { + "id": "file:crates/g3-cli/src/g3_status.rs", + "type": "file", + "name": "g3_status.rs", + "path": "crates/g3-cli/src/g3_status.rs", + "crate": "g3-cli", + "module": "g3_status" + }, + { + "id": "file:crates/g3-cli/src/interactive.rs", + "type": "file", + "name": "interactive.rs", + "path": "crates/g3-cli/src/interactive.rs", + "crate": "g3-cli", + "module": "interactive" + }, + { + "id": "file:crates/g3-cli/src/language_prompts.rs", + "type": "file", + "name": "language_prompts.rs", + "path": "crates/g3-cli/src/language_prompts.rs", + "crate": "g3-cli", + "module": "language_prompts" + }, + { + "id": "file:crates/g3-cli/src/lib.rs", + "type": "file", + "name": "lib.rs", + "path": "crates/g3-cli/src/lib.rs", + "crate": "g3-cli", + "module": null + }, + { + "id": "file:crates/g3-cli/src/metrics.rs", + "type": "file", + "name": "metrics.rs", + "path": "crates/g3-cli/src/metrics.rs", + "crate": "g3-cli", + "module": "metrics" + }, + { + "id": "file:crates/g3-cli/src/project.rs", + "type": "file", + "name": "project.rs", + "path": "crates/g3-cli/src/project.rs", + "crate": "g3-cli", + "module": "project" + }, + { + "id": "file:crates/g3-cli/src/project_files.rs", + "type": "file", + "name": "project_files.rs", + "path": "crates/g3-cli/src/project_files.rs", + "crate": "g3-cli", + "module": "project_files" + }, + { + "id": "file:crates/g3-cli/src/simple_output.rs", + "type": "file", + "name": "simple_output.rs", + "path": "crates/g3-cli/src/simple_output.rs", + "crate": "g3-cli", + "module": "simple_output" + }, + { + "id": "file:crates/g3-cli/src/streaming_markdown.rs", + "type": "file", + "name": "streaming_markdown.rs", + "path": "crates/g3-cli/src/streaming_markdown.rs", + "crate": "g3-cli", + "module": "streaming_markdown" + }, + { + "id": "file:crates/g3-cli/src/task_execution.rs", + "type": "file", + "name": "task_execution.rs", + "path": "crates/g3-cli/src/task_execution.rs", + "crate": "g3-cli", + "module": "task_execution" + }, + { + "id": "file:crates/g3-cli/src/template.rs", + "type": "file", + "name": "template.rs", + "path": "crates/g3-cli/src/template.rs", + "crate": "g3-cli", + "module": "template" + }, + { + "id": "file:crates/g3-cli/src/theme.rs", + "type": "file", + "name": "theme.rs", + "path": "crates/g3-cli/src/theme.rs", + "crate": "g3-cli", + "module": "theme" + }, + { + "id": "file:crates/g3-cli/src/ui_writer_impl.rs", + "type": "file", + "name": "ui_writer_impl.rs", + "path": "crates/g3-cli/src/ui_writer_impl.rs", + "crate": "g3-cli", + "module": "ui_writer_impl" + }, + { + "id": "file:crates/g3-cli/src/utils.rs", + "type": "file", + "name": "utils.rs", + "path": "crates/g3-cli/src/utils.rs", + "crate": "g3-cli", + "module": "utils" + }, + { + "id": "file:crates/g3-computer-control/src/lib.rs", + "type": "file", + "name": "lib.rs", + "path": "crates/g3-computer-control/src/lib.rs", + "crate": "g3-computer-control", + "module": null + }, + { + "id": "file:crates/g3-computer-control/src/platform/linux.rs", + "type": "file", + "name": "linux.rs", + "path": "crates/g3-computer-control/src/platform/linux.rs", + "crate": "g3-computer-control", + "module": "platform/linux" + }, + { + "id": "file:crates/g3-computer-control/src/platform/macos.rs", + "type": "file", + "name": "macos.rs", + "path": "crates/g3-computer-control/src/platform/macos.rs", + "crate": "g3-computer-control", + "module": "platform/macos" + }, + { + "id": "file:crates/g3-computer-control/src/platform/macos_window_matching_test.rs", + "type": "file", + "name": "macos_window_matching_test.rs", + "path": "crates/g3-computer-control/src/platform/macos_window_matching_test.rs", + "crate": "g3-computer-control", + "module": "platform/macos_window_matching_test" + }, + { + "id": "file:crates/g3-computer-control/src/platform/mod.rs", + "type": "file", + "name": "mod.rs", + "path": "crates/g3-computer-control/src/platform/mod.rs", + "crate": "g3-computer-control", + "module": "platform" + }, + { + "id": "file:crates/g3-computer-control/src/platform/windows.rs", + "type": "file", + "name": "windows.rs", + "path": "crates/g3-computer-control/src/platform/windows.rs", + "crate": "g3-computer-control", + "module": "platform/windows" + }, + { + "id": "file:crates/g3-computer-control/src/types.rs", + "type": "file", + "name": "types.rs", + "path": "crates/g3-computer-control/src/types.rs", + "crate": "g3-computer-control", + "module": "types" + }, + { + "id": "file:crates/g3-computer-control/src/webdriver/chrome.rs", + "type": "file", + "name": "chrome.rs", + "path": "crates/g3-computer-control/src/webdriver/chrome.rs", + "crate": "g3-computer-control", + "module": "webdriver/chrome" + }, + { + "id": "file:crates/g3-computer-control/src/webdriver/diagnostics.rs", + "type": "file", + "name": "diagnostics.rs", + "path": "crates/g3-computer-control/src/webdriver/diagnostics.rs", + "crate": "g3-computer-control", + "module": "webdriver/diagnostics" + }, + { + "id": "file:crates/g3-computer-control/src/webdriver/mod.rs", + "type": "file", + "name": "mod.rs", + "path": "crates/g3-computer-control/src/webdriver/mod.rs", + "crate": "g3-computer-control", + "module": "webdriver" + }, + { + "id": "file:crates/g3-computer-control/src/webdriver/safari.rs", + "type": "file", + "name": "safari.rs", + "path": "crates/g3-computer-control/src/webdriver/safari.rs", + "crate": "g3-computer-control", + "module": "webdriver/safari" + }, + { + "id": "file:crates/g3-config/src/lib.rs", + "type": "file", + "name": "lib.rs", + "path": "crates/g3-config/src/lib.rs", + "crate": "g3-config", + "module": null + }, + { + "id": "file:crates/g3-config/src/tests.rs", + "type": "file", + "name": "tests.rs", + "path": "crates/g3-config/src/tests.rs", + "crate": "g3-config", + "module": "tests" + }, + { + "id": "file:crates/g3-core/src/acd.rs", + "type": "file", + "name": "acd.rs", + "path": "crates/g3-core/src/acd.rs", + "crate": "g3-core", + "module": "acd" + }, + { + "id": "file:crates/g3-core/src/background_process.rs", + "type": "file", + "name": "background_process.rs", + "path": "crates/g3-core/src/background_process.rs", + "crate": "g3-core", + "module": "background_process" + }, + { + "id": "file:crates/g3-core/src/code_search/mod.rs", + "type": "file", + "name": "mod.rs", + "path": "crates/g3-core/src/code_search/mod.rs", + "crate": "g3-core", + "module": "code_search" + }, + { + "id": "file:crates/g3-core/src/code_search/searcher.rs", + "type": "file", + "name": "searcher.rs", + "path": "crates/g3-core/src/code_search/searcher.rs", + "crate": "g3-core", + "module": "code_search/searcher" + }, + { + "id": "file:crates/g3-core/src/compaction.rs", + "type": "file", + "name": "compaction.rs", + "path": "crates/g3-core/src/compaction.rs", + "crate": "g3-core", + "module": "compaction" + }, + { + "id": "file:crates/g3-core/src/context_window.rs", + "type": "file", + "name": "context_window.rs", + "path": "crates/g3-core/src/context_window.rs", + "crate": "g3-core", + "module": "context_window" + }, + { + "id": "file:crates/g3-core/src/error_handling.rs", + "type": "file", + "name": "error_handling.rs", + "path": "crates/g3-core/src/error_handling.rs", + "crate": "g3-core", + "module": "error_handling" + }, + { + "id": "file:crates/g3-core/src/error_handling_test.rs", + "type": "file", + "name": "error_handling_test.rs", + "path": "crates/g3-core/src/error_handling_test.rs", + "crate": "g3-core", + "module": "error_handling_test" + }, + { + "id": "file:crates/g3-core/src/feedback_extraction.rs", + "type": "file", + "name": "feedback_extraction.rs", + "path": "crates/g3-core/src/feedback_extraction.rs", + "crate": "g3-core", + "module": "feedback_extraction" + }, + { + "id": "file:crates/g3-core/src/lib.rs", + "type": "file", + "name": "lib.rs", + "path": "crates/g3-core/src/lib.rs", + "crate": "g3-core", + "module": null + }, + { + "id": "file:crates/g3-core/src/paths.rs", + "type": "file", + "name": "paths.rs", + "path": "crates/g3-core/src/paths.rs", + "crate": "g3-core", + "module": "paths" + }, + { + "id": "file:crates/g3-core/src/project.rs", + "type": "file", + "name": "project.rs", + "path": "crates/g3-core/src/project.rs", + "crate": "g3-core", + "module": "project" + }, + { + "id": "file:crates/g3-core/src/prompts.rs", + "type": "file", + "name": "prompts.rs", + "path": "crates/g3-core/src/prompts.rs", + "crate": "g3-core", + "module": "prompts" + }, + { + "id": "file:crates/g3-core/src/provider_config.rs", + "type": "file", + "name": "provider_config.rs", + "path": "crates/g3-core/src/provider_config.rs", + "crate": "g3-core", + "module": "provider_config" + }, + { + "id": "file:crates/g3-core/src/provider_registration.rs", + "type": "file", + "name": "provider_registration.rs", + "path": "crates/g3-core/src/provider_registration.rs", + "crate": "g3-core", + "module": "provider_registration" + }, + { + "id": "file:crates/g3-core/src/retry.rs", + "type": "file", + "name": "retry.rs", + "path": "crates/g3-core/src/retry.rs", + "crate": "g3-core", + "module": "retry" + }, + { + "id": "file:crates/g3-core/src/session.rs", + "type": "file", + "name": "session.rs", + "path": "crates/g3-core/src/session.rs", + "crate": "g3-core", + "module": "session" + }, + { + "id": "file:crates/g3-core/src/session_continuation.rs", + "type": "file", + "name": "session_continuation.rs", + "path": "crates/g3-core/src/session_continuation.rs", + "crate": "g3-core", + "module": "session_continuation" + }, + { + "id": "file:crates/g3-core/src/stats.rs", + "type": "file", + "name": "stats.rs", + "path": "crates/g3-core/src/stats.rs", + "crate": "g3-core", + "module": "stats" + }, + { + "id": "file:crates/g3-core/src/streaming.rs", + "type": "file", + "name": "streaming.rs", + "path": "crates/g3-core/src/streaming.rs", + "crate": "g3-core", + "module": "streaming" + }, + { + "id": "file:crates/g3-core/src/streaming_parser.rs", + "type": "file", + "name": "streaming_parser.rs", + "path": "crates/g3-core/src/streaming_parser.rs", + "crate": "g3-core", + "module": "streaming_parser" + }, + { + "id": "file:crates/g3-core/src/take_screenshot_test.rs", + "type": "file", + "name": "take_screenshot_test.rs", + "path": "crates/g3-core/src/take_screenshot_test.rs", + "crate": "g3-core", + "module": "take_screenshot_test" + }, + { + "id": "file:crates/g3-core/src/task_result.rs", + "type": "file", + "name": "task_result.rs", + "path": "crates/g3-core/src/task_result.rs", + "crate": "g3-core", + "module": "task_result" + }, + { + "id": "file:crates/g3-core/src/task_result_comprehensive_tests.rs", + "type": "file", + "name": "task_result_comprehensive_tests.rs", + "path": "crates/g3-core/src/task_result_comprehensive_tests.rs", + "crate": "g3-core", + "module": "task_result_comprehensive_tests" + }, + { + "id": "file:crates/g3-core/src/task_result_tests.rs", + "type": "file", + "name": "task_result_tests.rs", + "path": "crates/g3-core/src/task_result_tests.rs", + "crate": "g3-core", + "module": "task_result_tests" + }, + { + "id": "file:crates/g3-core/src/tilde_expansion_tests.rs", + "type": "file", + "name": "tilde_expansion_tests.rs", + "path": "crates/g3-core/src/tilde_expansion_tests.rs", + "crate": "g3-core", + "module": "tilde_expansion_tests" + }, + { + "id": "file:crates/g3-core/src/tool_definitions.rs", + "type": "file", + "name": "tool_definitions.rs", + "path": "crates/g3-core/src/tool_definitions.rs", + "crate": "g3-core", + "module": "tool_definitions" + }, + { + "id": "file:crates/g3-core/src/tool_dispatch.rs", + "type": "file", + "name": "tool_dispatch.rs", + "path": "crates/g3-core/src/tool_dispatch.rs", + "crate": "g3-core", + "module": "tool_dispatch" + }, + { + "id": "file:crates/g3-core/src/tools/acd.rs", + "type": "file", + "name": "acd.rs", + "path": "crates/g3-core/src/tools/acd.rs", + "crate": "g3-core", + "module": "tools/acd" + }, + { + "id": "file:crates/g3-core/src/tools/executor.rs", + "type": "file", + "name": "executor.rs", + "path": "crates/g3-core/src/tools/executor.rs", + "crate": "g3-core", + "module": "tools/executor" + }, + { + "id": "file:crates/g3-core/src/tools/file_ops.rs", + "type": "file", + "name": "file_ops.rs", + "path": "crates/g3-core/src/tools/file_ops.rs", + "crate": "g3-core", + "module": "tools/file_ops" + }, + { + "id": "file:crates/g3-core/src/tools/memory.rs", + "type": "file", + "name": "memory.rs", + "path": "crates/g3-core/src/tools/memory.rs", + "crate": "g3-core", + "module": "tools/memory" + }, + { + "id": "file:crates/g3-core/src/tools/misc.rs", + "type": "file", + "name": "misc.rs", + "path": "crates/g3-core/src/tools/misc.rs", + "crate": "g3-core", + "module": "tools/misc" + }, + { + "id": "file:crates/g3-core/src/tools/mod.rs", + "type": "file", + "name": "mod.rs", + "path": "crates/g3-core/src/tools/mod.rs", + "crate": "g3-core", + "module": "tools" + }, + { + "id": "file:crates/g3-core/src/tools/research.rs", + "type": "file", + "name": "research.rs", + "path": "crates/g3-core/src/tools/research.rs", + "crate": "g3-core", + "module": "tools/research" + }, + { + "id": "file:crates/g3-core/src/tools/shell.rs", + "type": "file", + "name": "shell.rs", + "path": "crates/g3-core/src/tools/shell.rs", + "crate": "g3-core", + "module": "tools/shell" + }, + { + "id": "file:crates/g3-core/src/tools/todo.rs", + "type": "file", + "name": "todo.rs", + "path": "crates/g3-core/src/tools/todo.rs", + "crate": "g3-core", + "module": "tools/todo" + }, + { + "id": "file:crates/g3-core/src/tools/webdriver.rs", + "type": "file", + "name": "webdriver.rs", + "path": "crates/g3-core/src/tools/webdriver.rs", + "crate": "g3-core", + "module": "tools/webdriver" + }, + { + "id": "file:crates/g3-core/src/ui_writer.rs", + "type": "file", + "name": "ui_writer.rs", + "path": "crates/g3-core/src/ui_writer.rs", + "crate": "g3-core", + "module": "ui_writer" + }, + { + "id": "file:crates/g3-core/src/utils.rs", + "type": "file", + "name": "utils.rs", + "path": "crates/g3-core/src/utils.rs", + "crate": "g3-core", + "module": "utils" + }, + { + "id": "file:crates/g3-core/src/webdriver_session.rs", + "type": "file", + "name": "webdriver_session.rs", + "path": "crates/g3-core/src/webdriver_session.rs", + "crate": "g3-core", + "module": "webdriver_session" + }, + { + "id": "file:crates/g3-execution/src/lib.rs", + "type": "file", + "name": "lib.rs", + "path": "crates/g3-execution/src/lib.rs", + "crate": "g3-execution", + "module": null + }, + { + "id": "file:crates/g3-planner/src/code_explore.rs", + "type": "file", + "name": "code_explore.rs", + "path": "crates/g3-planner/src/code_explore.rs", + "crate": "g3-planner", + "module": "code_explore" + }, + { + "id": "file:crates/g3-planner/src/git.rs", + "type": "file", + "name": "git.rs", + "path": "crates/g3-planner/src/git.rs", + "crate": "g3-planner", + "module": "git" + }, + { + "id": "file:crates/g3-planner/src/history.rs", + "type": "file", + "name": "history.rs", + "path": "crates/g3-planner/src/history.rs", + "crate": "g3-planner", + "module": "history" + }, + { + "id": "file:crates/g3-planner/src/lib.rs", + "type": "file", + "name": "lib.rs", + "path": "crates/g3-planner/src/lib.rs", + "crate": "g3-planner", + "module": null + }, + { + "id": "file:crates/g3-planner/src/llm.rs", + "type": "file", + "name": "llm.rs", + "path": "crates/g3-planner/src/llm.rs", + "crate": "g3-planner", + "module": "llm" + }, + { + "id": "file:crates/g3-planner/src/planner.rs", + "type": "file", + "name": "planner.rs", + "path": "crates/g3-planner/src/planner.rs", + "crate": "g3-planner", + "module": "planner" + }, + { + "id": "file:crates/g3-planner/src/prompts.rs", + "type": "file", + "name": "prompts.rs", + "path": "crates/g3-planner/src/prompts.rs", + "crate": "g3-planner", + "module": "prompts" + }, + { + "id": "file:crates/g3-planner/src/state.rs", + "type": "file", + "name": "state.rs", + "path": "crates/g3-planner/src/state.rs", + "crate": "g3-planner", + "module": "state" + }, + { + "id": "file:crates/g3-providers/src/anthropic.rs", + "type": "file", + "name": "anthropic.rs", + "path": "crates/g3-providers/src/anthropic.rs", + "crate": "g3-providers", + "module": "anthropic" + }, + { + "id": "file:crates/g3-providers/src/databricks.rs", + "type": "file", + "name": "databricks.rs", + "path": "crates/g3-providers/src/databricks.rs", + "crate": "g3-providers", + "module": "databricks" + }, + { + "id": "file:crates/g3-providers/src/embedded.rs", + "type": "file", + "name": "embedded.rs", + "path": "crates/g3-providers/src/embedded.rs", + "crate": "g3-providers", + "module": "embedded" + }, + { + "id": "file:crates/g3-providers/src/gemini.rs", + "type": "file", + "name": "gemini.rs", + "path": "crates/g3-providers/src/gemini.rs", + "crate": "g3-providers", + "module": "gemini" + }, + { + "id": "file:crates/g3-providers/src/lib.rs", + "type": "file", + "name": "lib.rs", + "path": "crates/g3-providers/src/lib.rs", + "crate": "g3-providers", + "module": null + }, + { + "id": "file:crates/g3-providers/src/mock.rs", + "type": "file", + "name": "mock.rs", + "path": "crates/g3-providers/src/mock.rs", + "crate": "g3-providers", + "module": "mock" + }, + { + "id": "file:crates/g3-providers/src/oauth.rs", + "type": "file", + "name": "oauth.rs", + "path": "crates/g3-providers/src/oauth.rs", + "crate": "g3-providers", + "module": "oauth" + }, + { + "id": "file:crates/g3-providers/src/openai.rs", + "type": "file", + "name": "openai.rs", + "path": "crates/g3-providers/src/openai.rs", + "crate": "g3-providers", + "module": "openai" + }, + { + "id": "file:crates/g3-providers/src/streaming.rs", + "type": "file", + "name": "streaming.rs", + "path": "crates/g3-providers/src/streaming.rs", + "crate": "g3-providers", + "module": "streaming" + }, + { + "id": "file:crates/studio/src/git.rs", + "type": "file", + "name": "git.rs", + "path": "crates/studio/src/git.rs", + "crate": "studio", + "module": "git" + }, + { + "id": "file:crates/studio/src/main.rs", + "type": "file", + "name": "main.rs", + "path": "crates/studio/src/main.rs", + "crate": "studio", + "module": null + }, + { + "id": "file:crates/studio/src/session.rs", + "type": "file", + "name": "session.rs", + "path": "crates/studio/src/session.rs", + "crate": "studio", + "module": "session" + } + ], + "edges": [ + { + "from": "crate:g3", + "to": "crate:g3-cli", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "crate:g3", + "to": "crate:g3-providers", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "crate:g3-cli", + "to": "crate:g3-core", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "crate:g3-cli", + "to": "crate:g3-config", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "crate:g3-cli", + "to": "crate:g3-planner", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "crate:g3-cli", + "to": "crate:g3-computer-control", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "crate:g3-cli", + "to": "crate:g3-providers", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "crate:g3-core", + "to": "crate:g3-providers", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "crate:g3-core", + "to": "crate:g3-config", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "crate:g3-core", + "to": "crate:g3-execution", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "crate:g3-core", + "to": "crate:g3-computer-control", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "crate:g3-planner", + "to": "crate:g3-providers", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "crate:g3-planner", + "to": "crate:g3-core", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "crate:g3-planner", + "to": "crate:g3-config", + "type": "crate_dependency", + "evidence": "Cargo.toml dependency declaration" + }, + { + "from": "file:crates/g3-cli/src/accumulative.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::project::Project;" + }, + { + "from": "file:crates/g3-cli/src/accumulative.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::Agent;" + }, + { + "from": "file:crates/g3-cli/src/accumulative.rs", + "to": "file:crates/g3-cli/src/autonomous.rs", + "type": "module_import", + "evidence": "use crate::autonomous::run_autonomous;" + }, + { + "from": "file:crates/g3-cli/src/accumulative.rs", + "to": "file:crates/g3-cli/src/cli_args.rs", + "type": "module_import", + "evidence": "use crate::cli_args::Cli;" + }, + { + "from": "file:crates/g3-cli/src/accumulative.rs", + "to": "file:crates/g3-cli/src/interactive.rs", + "type": "module_import", + "evidence": "use crate::interactive::run_interactive;" + }, + { + "from": "file:crates/g3-cli/src/accumulative.rs", + "to": "file:crates/g3-cli/src/simple_output.rs", + "type": "module_import", + "evidence": "use crate::simple_output::SimpleOutput;" + }, + { + "from": "file:crates/g3-cli/src/accumulative.rs", + "to": "file:crates/g3-cli/src/ui_writer_impl.rs", + "type": "module_import", + "evidence": "use crate::ui_writer_impl::ConsoleUiWriter;" + }, + { + "from": "file:crates/g3-cli/src/accumulative.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-cli/src/accumulative.rs", + "to": "file:crates/g3-cli/src/utils.rs", + "type": "module_import", + "evidence": "use crate::utils::load_config_with_cli_overrides;" + }, + { + "from": "file:crates/g3-cli/src/accumulative.rs", + "to": "file:crates/g3-cli/src/template.rs", + "type": "module_import", + "evidence": "use crate::template::process_template;" + }, + { + "from": "file:crates/g3-cli/src/accumulative.rs", + "to": "file:crates/g3-cli/src/g3_status.rs", + "type": "module_import", + "evidence": "use crate::g3_status::G3Status;" + }, + { + "from": "file:crates/g3-cli/src/agent_mode.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-cli/src/agent_mode.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::Agent;" + }, + { + "from": "file:crates/g3-cli/src/agent_mode.rs", + "to": "file:crates/g3-cli/src/project_files.rs", + "type": "module_import", + "evidence": "use crate::project_files::{combine_project_content, read_agents_config, read_include_prompt, read_workspace_memory};" + }, + { + "from": "file:crates/g3-cli/src/agent_mode.rs", + "to": "file:crates/g3-cli/src/display.rs", + "type": "module_import", + "evidence": "use crate::display::{LoadedContent, print_loaded_status, print_workspace_path};" + }, + { + "from": "file:crates/g3-cli/src/agent_mode.rs", + "to": "file:crates/g3-cli/src/language_prompts.rs", + "type": "module_import", + "evidence": "use crate::language_prompts::{get_language_prompts_for_workspace, get_agent_language_prompts_for_workspace_with_langs};" + }, + { + "from": "file:crates/g3-cli/src/agent_mode.rs", + "to": "file:crates/g3-cli/src/simple_output.rs", + "type": "module_import", + "evidence": "use crate::simple_output::SimpleOutput;" + }, + { + "from": "file:crates/g3-cli/src/agent_mode.rs", + "to": "file:crates/g3-cli/src/embedded_agents.rs", + "type": "module_import", + "evidence": "use crate::embedded_agents::load_agent_prompt;" + }, + { + "from": "file:crates/g3-cli/src/agent_mode.rs", + "to": "file:crates/g3-cli/src/ui_writer_impl.rs", + "type": "module_import", + "evidence": "use crate::ui_writer_impl::ConsoleUiWriter;" + }, + { + "from": "file:crates/g3-cli/src/agent_mode.rs", + "to": "file:crates/g3-cli/src/interactive.rs", + "type": "module_import", + "evidence": "use crate::interactive::run_interactive;" + }, + { + "from": "file:crates/g3-cli/src/agent_mode.rs", + "to": "file:crates/g3-cli/src/template.rs", + "type": "module_import", + "evidence": "use crate::template::process_template;" + }, + { + "from": "file:crates/g3-cli/src/agent_mode.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::find_incomplete_agent_session;" + }, + { + "from": "file:crates/g3-cli/src/agent_mode.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::get_agent_system_prompt;" + }, + { + "from": "file:crates/g3-cli/src/agent_mode.rs", + "to": "file:crates/g3-cli/src/g3_status.rs", + "type": "module_import", + "evidence": "use crate::g3_status::G3Status;" + }, + { + "from": "file:crates/g3-cli/src/autonomous.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::error_handling::{classify_error, ErrorType, RecoverableError};" + }, + { + "from": "file:crates/g3-cli/src/autonomous.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::project::Project;" + }, + { + "from": "file:crates/g3-cli/src/autonomous.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::{Agent, DiscoveryOptions};" + }, + { + "from": "file:crates/g3-cli/src/autonomous.rs", + "to": "file:crates/g3-cli/src/coach_feedback.rs", + "type": "module_import", + "evidence": "use crate::coach_feedback;" + }, + { + "from": "file:crates/g3-cli/src/autonomous.rs", + "to": "file:crates/g3-cli/src/metrics.rs", + "type": "module_import", + "evidence": "use crate::metrics::{format_elapsed_time, generate_turn_histogram, TurnMetrics};" + }, + { + "from": "file:crates/g3-cli/src/autonomous.rs", + "to": "file:crates/g3-cli/src/simple_output.rs", + "type": "module_import", + "evidence": "use crate::simple_output::SimpleOutput;" + }, + { + "from": "file:crates/g3-cli/src/autonomous.rs", + "to": "file:crates/g3-cli/src/ui_writer_impl.rs", + "type": "module_import", + "evidence": "use crate::ui_writer_impl::ConsoleUiWriter;" + }, + { + "from": "file:crates/g3-cli/src/autonomous.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-cli/src/coach_feedback.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::Agent;" + }, + { + "from": "file:crates/g3-cli/src/coach_feedback.rs", + "to": "file:crates/g3-cli/src/simple_output.rs", + "type": "module_import", + "evidence": "use crate::simple_output::SimpleOutput;" + }, + { + "from": "file:crates/g3-cli/src/coach_feedback.rs", + "to": "file:crates/g3-cli/src/ui_writer_impl.rs", + "type": "module_import", + "evidence": "use crate::ui_writer_impl::ConsoleUiWriter;" + }, + { + "from": "file:crates/g3-cli/src/commands.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-cli/src/commands.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::Agent;" + }, + { + "from": "file:crates/g3-cli/src/commands.rs", + "to": "file:crates/g3-cli/src/completion.rs", + "type": "module_import", + "evidence": "use crate::completion::G3Helper;" + }, + { + "from": "file:crates/g3-cli/src/commands.rs", + "to": "file:crates/g3-cli/src/g3_status.rs", + "type": "module_import", + "evidence": "use crate::g3_status::{G3Status, Status};" + }, + { + "from": "file:crates/g3-cli/src/commands.rs", + "to": "file:crates/g3-cli/src/simple_output.rs", + "type": "module_import", + "evidence": "use crate::simple_output::SimpleOutput;" + }, + { + "from": "file:crates/g3-cli/src/commands.rs", + "to": "file:crates/g3-cli/src/project.rs", + "type": "module_import", + "evidence": "use crate::project::Project;" + }, + { + "from": "file:crates/g3-cli/src/commands.rs", + "to": "file:crates/g3-cli/src/project.rs", + "type": "module_import", + "evidence": "use crate::project::load_and_validate_project;" + }, + { + "from": "file:crates/g3-cli/src/commands.rs", + "to": "file:crates/g3-cli/src/template.rs", + "type": "module_import", + "evidence": "use crate::template::process_template;" + }, + { + "from": "file:crates/g3-cli/src/commands.rs", + "to": "file:crates/g3-cli/src/task_execution.rs", + "type": "module_import", + "evidence": "use crate::task_execution::execute_task_with_retry;" + }, + { + "from": "file:crates/g3-cli/src/commands.rs", + "to": "file:crates/g3-cli/src/g3_status.rs", + "type": "module_import", + "evidence": "use crate::g3_status::G3Status;" + }, + { + "from": "file:crates/g3-cli/src/commands.rs", + "to": "file:crates/g3-cli/src/g3_status.rs", + "type": "module_import", + "evidence": "use crate::g3_status::G3Status;" + }, + { + "from": "file:crates/g3-cli/src/commands.rs", + "to": "file:crates/g3-cli/src/g3_status.rs", + "type": "module_import", + "evidence": "use crate::g3_status::G3Status;" + }, + { + "from": "file:crates/g3-cli/src/embedded_agents.rs", + "to": "file:crates/g3-cli/src/template.rs", + "type": "module_import", + "evidence": "use crate::template::process_template;" + }, + { + "from": "file:crates/g3-cli/src/g3_status.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::ThinScope;" + }, + { + "from": "file:crates/g3-cli/src/interactive.rs", + "to": "file:crates/g3-cli/src/completion.rs", + "type": "module_import", + "evidence": "use crate::completion::G3Helper;" + }, + { + "from": "file:crates/g3-cli/src/interactive.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-cli/src/interactive.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::Agent;" + }, + { + "from": "file:crates/g3-cli/src/interactive.rs", + "to": "file:crates/g3-cli/src/commands.rs", + "type": "module_import", + "evidence": "use crate::commands::handle_command;" + }, + { + "from": "file:crates/g3-cli/src/interactive.rs", + "to": "file:crates/g3-cli/src/display.rs", + "type": "module_import", + "evidence": "use crate::display::{LoadedContent, print_loaded_status, print_project_heading, print_workspace_path};" + }, + { + "from": "file:crates/g3-cli/src/interactive.rs", + "to": "file:crates/g3-cli/src/g3_status.rs", + "type": "module_import", + "evidence": "use crate::g3_status::{G3Status, Status};" + }, + { + "from": "file:crates/g3-cli/src/interactive.rs", + "to": "file:crates/g3-cli/src/project.rs", + "type": "module_import", + "evidence": "use crate::project::Project;" + }, + { + "from": "file:crates/g3-cli/src/interactive.rs", + "to": "file:crates/g3-cli/src/project_files.rs", + "type": "module_import", + "evidence": "use crate::project_files::extract_project_heading;" + }, + { + "from": "file:crates/g3-cli/src/interactive.rs", + "to": "file:crates/g3-cli/src/simple_output.rs", + "type": "module_import", + "evidence": "use crate::simple_output::SimpleOutput;" + }, + { + "from": "file:crates/g3-cli/src/interactive.rs", + "to": "file:crates/g3-cli/src/template.rs", + "type": "module_import", + "evidence": "use crate::template::process_template;" + }, + { + "from": "file:crates/g3-cli/src/interactive.rs", + "to": "file:crates/g3-cli/src/task_execution.rs", + "type": "module_import", + "evidence": "use crate::task_execution::execute_task_with_retry;" + }, + { + "from": "file:crates/g3-cli/src/interactive.rs", + "to": "file:crates/g3-cli/src/utils.rs", + "type": "module_import", + "evidence": "use crate::utils::display_context_progress;" + }, + { + "from": "file:crates/g3-cli/src/lib.rs", + "to": "crate:g3-config", + "type": "file_to_crate", + "evidence": "use g3_config::Config;" + }, + { + "from": "file:crates/g3-cli/src/lib.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::project::Project;" + }, + { + "from": "file:crates/g3-cli/src/lib.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::Agent;" + }, + { + "from": "file:crates/g3-cli/src/lib.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-cli/src/project_files.rs", + "to": "file:crates/g3-cli/src/template.rs", + "type": "module_import", + "evidence": "use crate::template::process_template;" + }, + { + "from": "file:crates/g3-cli/src/simple_output.rs", + "to": "file:crates/g3-cli/src/g3_status.rs", + "type": "module_import", + "evidence": "use crate::g3_status::{G3Status, Status};" + }, + { + "from": "file:crates/g3-cli/src/task_execution.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::error_handling::{calculate_retry_delay, classify_error, ErrorType, RecoverableError};" + }, + { + "from": "file:crates/g3-cli/src/task_execution.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-cli/src/task_execution.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::Agent;" + }, + { + "from": "file:crates/g3-cli/src/task_execution.rs", + "to": "file:crates/g3-cli/src/simple_output.rs", + "type": "module_import", + "evidence": "use crate::simple_output::SimpleOutput;" + }, + { + "from": "file:crates/g3-cli/src/task_execution.rs", + "to": "file:crates/g3-cli/src/g3_status.rs", + "type": "module_import", + "evidence": "use crate::g3_status::G3Status;" + }, + { + "from": "file:crates/g3-cli/src/ui_writer_impl.rs", + "to": "file:crates/g3-cli/src/filter_json.rs", + "type": "module_import", + "evidence": "use crate::filter_json::{filter_json_tool_calls, reset_json_tool_state, ToolParsingHint};" + }, + { + "from": "file:crates/g3-cli/src/ui_writer_impl.rs", + "to": "file:crates/g3-cli/src/display.rs", + "type": "module_import", + "evidence": "use crate::display::{shorten_path, shorten_paths_in_command};" + }, + { + "from": "file:crates/g3-cli/src/ui_writer_impl.rs", + "to": "file:crates/g3-cli/src/streaming_markdown.rs", + "type": "module_import", + "evidence": "use crate::streaming_markdown::StreamingMarkdownFormatter;" + }, + { + "from": "file:crates/g3-cli/src/ui_writer_impl.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-cli/src/ui_writer_impl.rs", + "to": "file:crates/g3-cli/src/g3_status.rs", + "type": "module_import", + "evidence": "use crate::g3_status::Status;" + }, + { + "from": "file:crates/g3-cli/src/utils.rs", + "to": "crate:g3-config", + "type": "file_to_crate", + "evidence": "use g3_config::Config;" + }, + { + "from": "file:crates/g3-cli/src/utils.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-cli/src/utils.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::Agent;" + }, + { + "from": "file:crates/g3-cli/src/utils.rs", + "to": "file:crates/g3-cli/src/cli_args.rs", + "type": "module_import", + "evidence": "use crate::cli_args::Cli;" + }, + { + "from": "file:crates/g3-cli/src/utils.rs", + "to": "file:crates/g3-cli/src/simple_output.rs", + "type": "module_import", + "evidence": "use crate::simple_output::SimpleOutput;" + }, + { + "from": "file:crates/g3-core/src/acd.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::Message;" + }, + { + "from": "file:crates/g3-core/src/acd.rs", + "to": "file:crates/g3-core/src/paths.rs", + "type": "module_import", + "evidence": "use crate::paths::get_fragments_dir;" + }, + { + "from": "file:crates/g3-core/src/acd.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::MessageRole;" + }, + { + "from": "file:crates/g3-core/src/compaction.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::{CompletionRequest, Message, MessageRole, ProviderRegistry};" + }, + { + "from": "file:crates/g3-core/src/compaction.rs", + "to": "file:crates/g3-core/src/context_window.rs", + "type": "module_import", + "evidence": "use crate::context_window::ContextWindow;" + }, + { + "from": "file:crates/g3-core/src/compaction.rs", + "to": "file:crates/g3-core/src/provider_config.rs", + "type": "module_import", + "evidence": "use crate::provider_config;" + }, + { + "from": "file:crates/g3-core/src/compaction.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/context_window.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::{Message, MessageRole, Usage};" + }, + { + "from": "file:crates/g3-core/src/context_window.rs", + "to": "file:crates/g3-core/src/paths.rs", + "type": "module_import", + "evidence": "use crate::paths::get_thinned_dir;" + }, + { + "from": "file:crates/g3-core/src/error_handling_test.rs", + "to": "file:crates/g3-core/src/error_handling.rs", + "type": "module_import", + "evidence": "use crate::error_handling::*;" + }, + { + "from": "file:crates/g3-core/src/feedback_extraction.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/lib.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/lib.rs", + "to": "crate:g3-config", + "type": "file_to_crate", + "evidence": "use g3_config::Config;" + }, + { + "from": "file:crates/g3-core/src/lib.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::{CacheControl, CompletionRequest, Message, MessageRole, ProviderRegistry};" + }, + { + "from": "file:crates/g3-core/src/lib.rs", + "to": "file:crates/g3-core/src/context_window.rs", + "type": "module_import", + "evidence": "use crate::context_window::ContextWindow;" + }, + { + "from": "file:crates/g3-core/src/lib.rs", + "to": "file:crates/g3-core/src/prompts.rs", + "type": "module_import", + "evidence": "use crate::prompts::get_system_prompt_for_native;" + }, + { + "from": "file:crates/g3-core/src/lib.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::{Message, MessageRole};" + }, + { + "from": "file:crates/g3-core/src/lib.rs", + "to": "file:crates/g3-core/src/compaction.rs", + "type": "module_import", + "evidence": "use crate::compaction::{perform_compaction, CompactionConfig};" + }, + { + "from": "file:crates/g3-core/src/lib.rs", + "to": "file:crates/g3-core/src/compaction.rs", + "type": "module_import", + "evidence": "use crate::compaction::{perform_compaction, CompactionConfig};" + }, + { + "from": "file:crates/g3-core/src/lib.rs", + "to": "file:crates/g3-core/src/stats.rs", + "type": "module_import", + "evidence": "use crate::stats::AgentStatsSnapshot;" + }, + { + "from": "file:crates/g3-core/src/lib.rs", + "to": "file:crates/g3-core/src/session_continuation.rs", + "type": "module_import", + "evidence": "use crate::session_continuation::{save_continuation, SessionContinuation};" + }, + { + "from": "file:crates/g3-core/src/lib.rs", + "to": "file:crates/g3-core/src/session_continuation.rs", + "type": "module_import", + "evidence": "use crate::session_continuation::clear_continuation;" + }, + { + "from": "file:crates/g3-core/src/lib.rs", + "to": "file:crates/g3-core/src/error_handling.rs", + "type": "module_import", + "evidence": "use crate::error_handling::{calculate_retry_delay, classify_error, ErrorType};" + }, + { + "from": "file:crates/g3-core/src/lib.rs", + "to": "file:crates/g3-core/src/error_handling.rs", + "type": "module_import", + "evidence": "use crate::error_handling::ErrorContext;" + }, + { + "from": "file:crates/g3-core/src/provider_config.rs", + "to": "crate:g3-config", + "type": "file_to_crate", + "evidence": "use g3_config::Config;" + }, + { + "from": "file:crates/g3-core/src/provider_registration.rs", + "to": "crate:g3-config", + "type": "file_to_crate", + "evidence": "use g3_config::Config;" + }, + { + "from": "file:crates/g3-core/src/provider_registration.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::ProviderRegistry;" + }, + { + "from": "file:crates/g3-core/src/retry.rs", + "to": "file:crates/g3-core/src/error_handling.rs", + "type": "module_import", + "evidence": "use crate::error_handling::{calculate_retry_delay, classify_error, ErrorType, RecoverableError};" + }, + { + "from": "file:crates/g3-core/src/retry.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/session.rs", + "to": "file:crates/g3-core/src/context_window.rs", + "type": "module_import", + "evidence": "use crate::context_window::ContextWindow;" + }, + { + "from": "file:crates/g3-core/src/session.rs", + "to": "file:crates/g3-core/src/paths.rs", + "type": "module_import", + "evidence": "use crate::paths::{ensure_session_dir, get_context_summary_file, get_g3_dir, get_session_file};" + }, + { + "from": "file:crates/g3-core/src/session.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::MessageRole;" + }, + { + "from": "file:crates/g3-core/src/stats.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::MessageRole;" + }, + { + "from": "file:crates/g3-core/src/stats.rs", + "to": "file:crates/g3-core/src/context_window.rs", + "type": "module_import", + "evidence": "use crate::context_window::ContextWindow;" + }, + { + "from": "file:crates/g3-core/src/stats.rs", + "to": "file:crates/g3-core/src/context_window.rs", + "type": "module_import", + "evidence": "use crate::context_window::ContextWindow;" + }, + { + "from": "file:crates/g3-core/src/streaming.rs", + "to": "file:crates/g3-core/src/context_window.rs", + "type": "module_import", + "evidence": "use crate::context_window::ContextWindow;" + }, + { + "from": "file:crates/g3-core/src/streaming.rs", + "to": "file:crates/g3-core/src/streaming_parser.rs", + "type": "module_import", + "evidence": "use crate::streaming_parser::StreamingToolParser;" + }, + { + "from": "file:crates/g3-core/src/streaming.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::{CompletionRequest, MessageRole};" + }, + { + "from": "file:crates/g3-core/src/task_result_comprehensive_tests.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::{Message, MessageRole};" + }, + { + "from": "file:crates/g3-core/src/tool_definitions.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::Tool;" + }, + { + "from": "file:crates/g3-core/src/tool_dispatch.rs", + "to": "file:crates/g3-core/src/tools/mod.rs", + "type": "module_import", + "evidence": "use crate::tools::executor::ToolContext;" + }, + { + "from": "file:crates/g3-core/src/tool_dispatch.rs", + "to": "file:crates/g3-core/src/tools/mod.rs", + "type": "module_import", + "evidence": "use crate::tools::{acd, file_ops, memory, misc, research, shell, todo, webdriver};" + }, + { + "from": "file:crates/g3-core/src/tool_dispatch.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/tools/acd.rs", + "to": "file:crates/g3-core/src/acd.rs", + "type": "module_import", + "evidence": "use crate::acd::Fragment;" + }, + { + "from": "file:crates/g3-core/src/tools/acd.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/tools/acd.rs", + "to": "file:crates/g3-core/src/acd.rs", + "type": "module_import", + "evidence": "use crate::acd::Fragment;" + }, + { + "from": "file:crates/g3-core/src/tools/acd.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::NullUiWriter;" + }, + { + "from": "file:crates/g3-core/src/tools/acd.rs", + "to": "file:crates/g3-core/src/background_process.rs", + "type": "module_import", + "evidence": "use crate::background_process::BackgroundProcessManager;" + }, + { + "from": "file:crates/g3-core/src/tools/acd.rs", + "to": "file:crates/g3-core/src/webdriver_session.rs", + "type": "module_import", + "evidence": "use crate::webdriver_session::WebDriverSession;" + }, + { + "from": "file:crates/g3-core/src/tools/acd.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::{Message, MessageRole};" + }, + { + "from": "file:crates/g3-core/src/tools/executor.rs", + "to": "file:crates/g3-core/src/background_process.rs", + "type": "module_import", + "evidence": "use crate::background_process::BackgroundProcessManager;" + }, + { + "from": "file:crates/g3-core/src/tools/executor.rs", + "to": "file:crates/g3-core/src/paths.rs", + "type": "module_import", + "evidence": "use crate::paths::{ensure_session_dir, get_session_todo_path, get_todo_path};" + }, + { + "from": "file:crates/g3-core/src/tools/executor.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/tools/executor.rs", + "to": "file:crates/g3-core/src/webdriver_session.rs", + "type": "module_import", + "evidence": "use crate::webdriver_session::WebDriverSession;" + }, + { + "from": "file:crates/g3-core/src/tools/executor.rs", + "to": "crate:g3-config", + "type": "file_to_crate", + "evidence": "use g3_config::Config;" + }, + { + "from": "file:crates/g3-core/src/tools/file_ops.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/tools/file_ops.rs", + "to": "file:crates/g3-core/src/utils.rs", + "type": "module_import", + "evidence": "use crate::utils::resolve_path_with_unicode_fallback;" + }, + { + "from": "file:crates/g3-core/src/tools/file_ops.rs", + "to": "file:crates/g3-core/src/utils.rs", + "type": "module_import", + "evidence": "use crate::utils::apply_unified_diff_to_string;" + }, + { + "from": "file:crates/g3-core/src/tools/memory.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/tools/misc.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/tools/research.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/tools/research.rs", + "to": "crate:g3-config", + "type": "file_to_crate", + "evidence": "use g3_config::WebDriverBrowser;" + }, + { + "from": "file:crates/g3-core/src/tools/shell.rs", + "to": "file:crates/g3-core/src/paths.rs", + "type": "module_import", + "evidence": "use crate::paths::{generate_short_id, get_tools_output_dir};" + }, + { + "from": "file:crates/g3-core/src/tools/shell.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/tools/shell.rs", + "to": "file:crates/g3-core/src/utils.rs", + "type": "module_import", + "evidence": "use crate::utils::resolve_paths_in_shell_command;" + }, + { + "from": "file:crates/g3-core/src/tools/shell.rs", + "to": "file:crates/g3-core/src/utils.rs", + "type": "module_import", + "evidence": "use crate::utils::shell_escape_command;" + }, + { + "from": "file:crates/g3-core/src/tools/todo.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/tools/webdriver.rs", + "to": "crate:g3-computer-control", + "type": "file_to_crate", + "evidence": "use g3_computer_control::WebDriverController;" + }, + { + "from": "file:crates/g3-core/src/tools/webdriver.rs", + "to": "file:crates/g3-core/src/ui_writer.rs", + "type": "module_import", + "evidence": "use crate::ui_writer::UiWriter;" + }, + { + "from": "file:crates/g3-core/src/tools/webdriver.rs", + "to": "file:crates/g3-core/src/webdriver_session.rs", + "type": "module_import", + "evidence": "use crate::webdriver_session::WebDriverSession;" + }, + { + "from": "file:crates/g3-core/src/tools/webdriver.rs", + "to": "crate:g3-config", + "type": "file_to_crate", + "evidence": "use g3_config::WebDriverBrowser;" + }, + { + "from": "file:crates/g3-core/src/tools/webdriver.rs", + "to": "crate:g3-config", + "type": "file_to_crate", + "evidence": "use g3_config::WebDriverBrowser;" + }, + { + "from": "file:crates/g3-core/src/webdriver_session.rs", + "to": "crate:g3-computer-control", + "type": "file_to_crate", + "evidence": "use g3_computer_control::{ChromeDriver, SafariDriver, WebDriverController, WebElement};" + }, + { + "from": "file:crates/g3-planner/src/lib.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::{CompletionRequest, LLMProvider, Message, MessageRole};" + }, + { + "from": "file:crates/g3-planner/src/llm.rs", + "to": "crate:g3-config", + "type": "file_to_crate", + "evidence": "use g3_config::Config;" + }, + { + "from": "file:crates/g3-planner/src/llm.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::project::Project;" + }, + { + "from": "file:crates/g3-planner/src/llm.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::Agent;" + }, + { + "from": "file:crates/g3-planner/src/llm.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::error_handling::{classify_error, ErrorType};" + }, + { + "from": "file:crates/g3-planner/src/llm.rs", + "to": "crate:g3-providers", + "type": "file_to_crate", + "evidence": "use g3_providers::{CompletionRequest, LLMProvider, Message, MessageRole};" + }, + { + "from": "file:crates/g3-planner/src/llm.rs", + "to": "file:crates/g3-planner/src/prompts.rs", + "type": "module_import", + "evidence": "use crate::prompts;" + }, + { + "from": "file:crates/g3-planner/src/planner.rs", + "to": "file:crates/g3-planner/src/git.rs", + "type": "module_import", + "evidence": "use crate::git;" + }, + { + "from": "file:crates/g3-planner/src/planner.rs", + "to": "file:crates/g3-planner/src/history.rs", + "type": "module_import", + "evidence": "use crate::history;" + }, + { + "from": "file:crates/g3-planner/src/planner.rs", + "to": "file:crates/g3-planner/src/llm.rs", + "type": "module_import", + "evidence": "use crate::llm;" + }, + { + "from": "file:crates/g3-planner/src/planner.rs", + "to": "file:crates/g3-planner/src/state.rs", + "type": "module_import", + "evidence": "use crate::state::{" + }, + { + "from": "file:crates/g3-planner/src/planner.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::project::Project;" + }, + { + "from": "file:crates/g3-planner/src/planner.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::retry::{execute_with_retry, RetryConfig, RetryResult};" + }, + { + "from": "file:crates/g3-planner/src/planner.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::feedback_extraction::{extract_coach_feedback, FeedbackExtractionConfig};" + }, + { + "from": "file:crates/g3-planner/src/planner.rs", + "to": "crate:g3-core", + "type": "file_to_crate", + "evidence": "use g3_core::Agent;" + }, + { + "from": "file:crates/g3-providers/src/databricks.rs", + "to": "file:crates/g3-providers/src/streaming.rs", + "type": "module_import", + "evidence": "use crate::streaming::{decode_utf8_streaming, is_incomplete_json_error, make_final_chunk};" + }, + { + "from": "file:crates/studio/src/git.rs", + "to": "file:crates/studio/src/session.rs", + "type": "module_import", + "evidence": "use crate::session::Session;" + } + ] } \ No newline at end of file diff --git a/analysis/deps/graph.summary.md b/analysis/deps/graph.summary.md index 1143e96..1adec56 100644 --- a/analysis/deps/graph.summary.md +++ b/analysis/deps/graph.summary.md @@ -2,92 +2,85 @@ ## Overview -| Metric | Count | +| Metric | Value | |--------|-------| -| Workspace crates | 10 | -| Crate-level edges | 17 | -| Source files (non-test) | 95 | -| File-level edges | 123 | -| Cross-crate imports | 43 | -| Strongly connected components | 0 | +| Total nodes | 108 | +| Total edges | 186 | +| Crate nodes | 9 | +| File nodes | 99 | +| Crate-level edges | 14 | +| File-level edges | 172 | -## Crate-Level Structure +## Crate Structure -### Crates by Type - -| Crate | Type | Files | -|-------|------|-------| -| g3 | bin (root) | 1 | -| g3-cli | lib | 16 | -| g3-core | lib | 38 | -| g3-providers | lib | 7 | -| g3-config | lib | 2 | -| g3-execution | lib | 1 | -| g3-computer-control | lib | 16 | -| g3-planner | lib | 8 | -| g3-ensembles | lib | 4 | -| studio | bin | 3 | - -### Fan-In (Most Depended Upon) - -| Crate | Dependents | -|-------|------------| -| g3-config | 4 | -| g3-providers | 4 | -| g3-core | 3 | -| g3-computer-control | 2 | -| g3-cli | 1 | -| g3-ensembles | 1 | -| g3-execution | 1 | -| g3-planner | 1 | - -### Fan-Out (Most Dependencies) - -| Crate | Dependencies | -|-------|-------------| -| g3-cli | 6 | -| g3-core | 4 | -| g3-planner | 3 | -| g3 | 2 | -| g3-ensembles | 2 | - -## File-Level Structure - -### Top Fan-Out Files (Most Outgoing Edges) - -| File | Edges | Description | -|------|-------|-------------| -| crates/g3-core/src/lib.rs | 29 | Core library root | -| crates/g3-cli/src/lib.rs | 17 | CLI library root | -| crates/g3-core/src/tools/mod.rs | 9 | Tools module root | -| crates/g3-planner/src/lib.rs | 8 | Planner library root | -| crates/g3-providers/src/lib.rs | 6 | Providers library root | -| crates/g3-computer-control/src/lib.rs | 5 | Computer control root | -| crates/g3-planner/src/llm.rs | 5 | LLM integration | - -### Top Fan-In (Most Imported) - -| Target | Imports | -|--------|--------| -| g3-core (crate) | 21 | -| g3-providers (crate) | 11 | -| g3-config (crate) | 9 | -| g3-computer-control (crate) | 2 | +| Crate | Path | Direct Dependencies | +|-------|------|---------------------| +| g3 | `.` | g3-cli, g3-providers | +| g3-cli | `crates/g3-cli` | g3-core, g3-config, g3-planner, g3-computer-control, g3-providers | +| g3-core | `crates/g3-core` | g3-providers, g3-config, g3-execution, g3-computer-control | +| g3-providers | `crates/g3-providers` | (none) | +| g3-config | `crates/g3-config` | (none) | +| g3-execution | `crates/g3-execution` | (none) | +| g3-planner | `crates/g3-planner` | g3-providers, g3-core, g3-config | +| g3-computer-control | `crates/g3-computer-control` | (none) | +| studio | `crates/studio` | (none) | ## Entrypoints -| File | Type | -|------|------| -| src/main.rs | Binary entrypoint (g3) | -| crates/studio/src/main.rs | Binary entrypoint (studio) | -| crates/g3-cli/src/lib.rs | Library root | -| crates/g3-core/src/lib.rs | Library root | +| Type | Location | Evidence | +|------|----------|----------| +| Binary | `crates/g3-cli/src/lib.rs` | `run()` function, CLI dispatch | +| Binary | `crates/studio/src/main.rs` | `main()` function | +| Library | `crates/g3-core/src/lib.rs` | `Agent` struct, core API | + +## Top Fan-In Nodes (Most Depended Upon) + +| Node | Fan-In | Type | +|------|--------|------| +| crate:g3-core | 35 | crate | +| crate:g3-providers | 19 | crate | +| file:crates/g3-core/src/ui_writer.rs | 15 | file | +| crate:g3-config | 13 | crate | +| file:crates/g3-cli/src/g3_status.rs | 10 | file | +| file:crates/g3-cli/src/simple_output.rs | 8 | file | +| file:crates/g3-core/src/context_window.rs | 6 | file | +| file:crates/g3-cli/src/template.rs | 6 | file | +| file:crates/g3-core/src/paths.rs | 5 | file | +| crate:g3-computer-control | 4 | crate | + +## Top Fan-Out Nodes (Most Dependencies) + +| Node | Fan-Out | Type | +|------|---------|------| +| file:crates/g3-cli/src/agent_mode.rs | 13 | file | +| file:crates/g3-core/src/lib.rs | 13 | file | +| file:crates/g3-cli/src/commands.rs | 12 | file | +| file:crates/g3-cli/src/interactive.rs | 12 | file | +| file:crates/g3-cli/src/accumulative.rs | 11 | file | +| file:crates/g3-planner/src/planner.rs | 8 | file | +| file:crates/g3-cli/src/autonomous.rs | 8 | file | +| file:crates/g3-core/src/tools/acd.rs | 7 | file | +| file:crates/g3-planner/src/llm.rs | 6 | file | +| file:crates/g3-cli/src/utils.rs | 5 | file | + +## File Counts by Crate + +| Crate | Source Files | +|-------|-------------| +| g3-cli | 23 | +| g3-core | 42 | +| g3-providers | 9 | +| g3-config | 2 | +| g3-execution | 1 | +| g3-planner | 8 | +| g3-computer-control | 11 | +| studio | 3 | ## Extraction Limitations -- Only `use` and `mod` statements at line start are parsed -- Conditional compilation (`#[cfg(...)]`) not evaluated -- Macro-generated imports not detected -- Re-exports through `pub use` not fully traced -- Test modules (`mod tests`) excluded from graph -- Test files (`*_test.rs`, `tests/`) excluded from graph +1. **Static analysis only**: Dynamic dispatch and trait objects not traced +2. **Use statement parsing**: Only `use g3_*` and `use crate::` patterns captured +3. **Conditional compilation**: `#[cfg(...)]` blocks not evaluated +4. **Re-exports**: `pub use` chains not fully resolved +5. **Test files excluded**: Files in `/tests/` directories not included +6. **Examples excluded**: Files in `/examples/` directories not included diff --git a/analysis/deps/hotspots.md b/analysis/deps/hotspots.md index 6cb1ba6..ab65dd2 100644 --- a/analysis/deps/hotspots.md +++ b/analysis/deps/hotspots.md @@ -1,112 +1,69 @@ # Coupling Hotspots -## Method +## High Fan-In Files (Most Depended Upon) -Hotspots identified by: -1. Fan-in > 2× average (high incoming dependencies) -2. Fan-out > 2× average (high outgoing dependencies) -3. Cross-group edge concentration +Files with disproportionately high incoming dependencies. -## Metrics +| File | Fan-In | Crate | Role | +|------|--------|-------|------| +| ui_writer.rs | 15 | g3-core | UI abstraction trait | +| g3_status.rs | 10 | g3-cli | Status message formatting | +| simple_output.rs | 8 | g3-cli | Output helper | +| context_window.rs | 6 | g3-core | Token/context management | +| template.rs | 6 | g3-cli | Template processing | +| paths.rs | 5 | g3-core | Path utilities | -### Crate Level +### Evidence: ui_writer.rs (fan-in: 15) -| Metric | Value | -|--------|-------| -| Average fan-in | 2.0 | -| Average fan-out | 1.7 | -| Threshold (2×) | 4.0 / 3.4 | +Depended on by: +- g3-cli: accumulative.rs, agent_mode.rs, autonomous.rs, commands.rs, interactive.rs, task_execution.rs, ui_writer_impl.rs, utils.rs +- g3-core: compaction.rs, feedback_extraction.rs, lib.rs, retry.rs, tool_dispatch.rs, tools/*.rs -### File Level +### Evidence: g3_status.rs (fan-in: 10) -| Metric | Value | -|--------|-------| -| Total edges | 123 | -| Total files | 95 | -| Average fan-out | 1.3 | -| Threshold (2×) | 2.6 | +Depended on by: +- commands.rs, interactive.rs, simple_output.rs, task_execution.rs, and others in g3-cli -## Crate-Level Hotspots +## High Fan-Out Files (Most Dependencies) -### High Fan-In (Most Depended Upon) +Files with disproportionately high outgoing dependencies. -| Crate | Fan-In | Status | -|-------|--------|--------| -| g3-config | 4 | **HOTSPOT** (2× avg) | -| g3-providers | 4 | **HOTSPOT** (2× avg) | -| g3-core | 3 | Near threshold | +| File | Fan-Out | Crate | Role | +|------|---------|-------|------| +| agent_mode.rs | 13 | g3-cli | Agent mode entry point | +| lib.rs | 13 | g3-core | Core library root | +| commands.rs | 12 | g3-cli | Command handlers | +| interactive.rs | 12 | g3-cli | Interactive REPL | +| accumulative.rs | 11 | g3-cli | Accumulative mode | +| planner.rs | 8 | g3-planner | Planning orchestration | -**Evidence for g3-config:** -- Depended on by: g3-cli, g3-core, g3-planner, g3-ensembles -- Contains: Configuration types, loading logic +### Evidence: agent_mode.rs (fan-out: 13) -**Evidence for g3-providers:** -- Depended on by: g3, g3-cli, g3-core, g3-planner -- Contains: LLM provider trait, message types, streaming +Depends on: +- g3-core: Agent, ui_writer::UiWriter +- Internal: project_files, display, language_prompts, simple_output, embedded_agents, ui_writer_impl, interactive, template -### High Fan-Out (Most Dependencies) +### Evidence: g3-core/lib.rs (fan-out: 13) -| Crate | Fan-Out | Status | -|-------|---------|--------| -| g3-cli | 6 | **HOTSPOT** (3.5× avg) | -| g3-core | 4 | **HOTSPOT** (2.4× avg) | -| g3-planner | 3 | Near threshold | +Depends on: +- External crates: g3-config, g3-providers +- Internal modules: ui_writer, context_window, paths, compaction, streaming, tools, etc. -**Evidence for g3-cli:** -- Depends on: g3-core, g3-config, g3-planner, g3-computer-control, g3-providers, g3-ensembles -- Role: Top-level integration point +## Cross-Crate Coupling -**Evidence for g3-core:** -- Depends on: g3-providers, g3-config, g3-execution, g3-computer-control -- Role: Central engine with multiple infrastructure dependencies - -## File-Level Hotspots - -### High Fan-Out Files - -| File | Fan-Out | Threshold | Status | -|------|---------|-----------|--------| -| crates/g3-core/src/lib.rs | 29 | 2.6 | **HOTSPOT** (22× avg) | -| crates/g3-cli/src/lib.rs | 17 | 2.6 | **HOTSPOT** (13× avg) | -| crates/g3-core/src/tools/mod.rs | 9 | 2.6 | **HOTSPOT** (7× avg) | -| crates/g3-planner/src/lib.rs | 8 | 2.6 | **HOTSPOT** (6× avg) | -| crates/g3-providers/src/lib.rs | 6 | 2.6 | **HOTSPOT** (4.6× avg) | -| crates/g3-computer-control/src/lib.rs | 5 | 2.6 | **HOTSPOT** (3.8× avg) | -| crates/g3-planner/src/llm.rs | 5 | 2.6 | **HOTSPOT** (3.8× avg) | - -**Note:** High fan-out in `lib.rs` files is expected (module re-exports). The `tools/mod.rs` and `llm.rs` hotspots are more significant as they represent actual coupling. - -### Cross-Crate Import Concentration - -| Source File | Cross-Crate Imports | -|-------------|--------------------| -| crates/g3-cli/src/lib.rs | 5 (g3-core, g3-config, g3-providers, g3-planner, g3-ensembles) | -| crates/g3-planner/src/llm.rs | 4 (g3-config, g3-core, g3-providers) | -| crates/g3-cli/src/autonomous.rs | 2 (g3-core) | -| crates/g3-cli/src/task_execution.rs | 2 (g3-core) | +| Source Crate | Target Crate | Edge Count | +|--------------|--------------|------------| +| g3-cli | g3-core | 35 | +| g3-core | g3-providers | 10 | +| g3-core | g3-config | 5 | +| g3-planner | g3-core | 4 | +| g3-planner | g3-providers | 3 | +| g3-core | g3-computer-control | 2 | ## Observations -1. **g3-core/src/lib.rs** has extreme fan-out (29 edges) due to declaring 22+ modules -2. **g3-config** and **g3-providers** are foundational crates with high fan-in -3. **g3-cli** is the integration hub, pulling together all subsystems -4. **tools/mod.rs** aggregates 9 tool modules - natural aggregation point -5. **g3-planner/src/llm.rs** has notable cross-crate coupling (imports from 3 other crates) - -## Cross-Group Edges - -Total cross-crate imports: 43 - -| From Crate | To Crate | Count | -|------------|----------|-------| -| g3-cli | g3-core | 21 | -| g3-cli | g3-config | 4 | -| g3-cli | g3-providers | 2 | -| g3-planner | g3-core | 5 | -| g3-planner | g3-providers | 4 | -| g3-planner | g3-config | 2 | -| g3-core | g3-providers | 8 | -| g3-core | g3-config | 3 | -| g3-core | g3-computer-control | 2 | -| g3-ensembles | g3-core | 1 | -| g3-ensembles | g3-config | 1 | +1. **ui_writer.rs** is a central abstraction point; changes here affect 15+ files +2. **g3-cli** files have high fan-out due to orchestration responsibilities +3. **g3-core/lib.rs** is the primary API surface with expected high coupling +4. **g3_status.rs** and **simple_output.rs** form a UI utility cluster in g3-cli +5. **tools/*.rs** files consistently depend on ui_writer and ToolCall types diff --git a/analysis/deps/layers.observed.md b/analysis/deps/layers.observed.md index e89e339..627a696 100644 --- a/analysis/deps/layers.observed.md +++ b/analysis/deps/layers.observed.md @@ -1,172 +1,80 @@ # Observed Layering -## Derivation Method +## Crate-Level Layers -Layers derived mechanically from: -1. Crate dependency direction in Cargo.toml -2. Path-based module grouping -3. Import directionality analysis - -## Crate Hierarchy +Based on dependency direction, the following layers are observed: ``` -┌─────────────────────────────────────────────────────────────┐ -│ Layer 0: Binaries │ -│ g3 (main entry) │ -│ studio (standalone tool) │ -└─────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────┐ -│ Layer 1: Application │ -│ g3-cli (CLI interface, 16 files) │ -└─────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────┐ -│ Layer 2: Orchestration │ -│ g3-planner (planning logic, 8 files) │ -│ g3-ensembles (multi-agent, 4 files) │ -└─────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────┐ -│ Layer 3: Core Engine │ -│ g3-core (agent engine, 38 files) │ -└─────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────┐ -│ Layer 4: Infrastructure │ -│ g3-providers (LLM providers, 7 files) │ -│ g3-config (configuration, 2 files) │ -│ g3-execution (code execution, 1 file) │ -│ g3-computer-control (desktop automation, 16 files) │ -└─────────────────────────────────────────────────────────────┘ +Layer 0 (Leaf crates - no internal dependencies): + ├── g3-config + ├── g3-execution + ├── g3-providers + ├── g3-computer-control + └── studio + +Layer 1 (Depends on Layer 0): + └── g3-core + └── depends on: g3-providers, g3-config, g3-execution, g3-computer-control + +Layer 2 (Depends on Layer 0 and 1): + ├── g3-cli + │ └── depends on: g3-core, g3-config, g3-planner, g3-computer-control, g3-providers + └── g3-planner + └── depends on: g3-providers, g3-core, g3-config + +Layer 3 (Application root): + └── g3 + └── depends on: g3-cli, g3-providers ``` -## Intra-Crate Module Structure +## Layer Metrics -### g3-core (38 files) +| Layer | Crates | Description | +|-------|--------|-------------| +| 0 | 5 | Foundation crates with no internal deps | +| 1 | 1 | Core engine | +| 2 | 2 | High-level orchestration | +| 3 | 1 | Application entry point | -``` -lib.rs -├── acd.rs # Aggressive Context Dehydration -├── background_process.rs # Background process management -├── code_search/ # Tree-sitter code search -│ ├── mod.rs -│ └── searcher.rs -├── compaction.rs # Context compaction -├── context_window.rs # Context window management -├── error_handling.rs # Error classification -├── feedback_extraction.rs # Coach feedback extraction -├── paths.rs # Path utilities -├── project.rs # Project abstraction -├── prompts.rs # System prompts -├── provider_config.rs # Provider configuration -├── provider_registration.rs # Provider registration -├── retry.rs # Retry logic -├── session.rs # Session management -├── session_continuation.rs # Session continuation -├── streaming.rs # Streaming utilities -├── streaming_parser.rs # Tool call parser -├── task_result.rs # Task result types -├── tool_definitions.rs # Tool definitions -├── tool_dispatch.rs # Tool routing -├── tools/ # Tool implementations -│ ├── mod.rs -│ ├── acd.rs -│ ├── executor.rs -│ ├── file_ops.rs -│ ├── memory.rs -│ ├── misc.rs -│ ├── research.rs -│ ├── shell.rs -│ ├── todo.rs -│ └── webdriver.rs -├── ui_writer.rs # UI abstraction -├── utils.rs # General utilities -└── webdriver_session.rs # WebDriver session -``` +## Observed Groupings by Path -### g3-cli (16 files) +### g3-core/src/tools/ +Tool implementations grouped under `tools/` submodule: +- executor.rs (tool context and execution) +- acd.rs, file_ops.rs, memory.rs, misc.rs, research.rs, shell.rs, todo.rs, webdriver.rs -``` -lib.rs -├── accumulative.rs # Accumulative mode -├── agent_mode.rs # Agent mode -├── autonomous.rs # Autonomous mode -├── cli_args.rs # CLI argument parsing -├── coach_feedback.rs # Coach feedback -├── filter_json.rs # JSON filtering -├── interactive.rs # Interactive mode -├── metrics.rs # Metrics/timing -├── project_files.rs # Project file loading -├── simple_output.rs # Simple output helper -├── streaming_markdown.rs # Markdown formatting -├── task_execution.rs # Task execution -├── theme.rs # UI theming -├── ui_writer_impl.rs # UiWriter implementation -└── utils.rs # CLI utilities -``` +### g3-core/src/code_search/ +Code search functionality: +- mod.rs (API types) +- searcher.rs (tree-sitter implementation) -### g3-computer-control (16 files) +### g3-computer-control/src/platform/ +Platform-specific implementations: +- macos.rs, linux.rs, windows.rs (conditional compilation) -``` -lib.rs -├── macax/ # macOS Accessibility -│ ├── mod.rs -│ └── controller.rs -├── ocr/ # OCR engines -│ ├── mod.rs -│ ├── tesseract.rs -│ └── vision.rs -├── platform/ # Platform implementations -│ ├── mod.rs -│ ├── linux.rs -│ ├── macos.rs -│ └── windows.rs -├── types.rs # Shared types -└── webdriver/ # WebDriver implementations - ├── mod.rs - ├── chrome.rs - ├── diagnostics.rs - └── safari.rs -``` +### g3-computer-control/src/webdriver/ +Browser automation: +- safari.rs, chrome.rs, diagnostics.rs -### g3-providers (7 files) +### g3-providers/src/ +LLM provider implementations: +- anthropic.rs, openai.rs, gemini.rs, databricks.rs, embedded.rs +- oauth.rs (authentication) +- mock.rs (testing) -``` -lib.rs -├── anthropic.rs # Anthropic Claude -├── databricks.rs # Databricks -├── embedded.rs # Local llama.cpp -├── oauth.rs # OAuth flow -├── openai.rs # OpenAI-compatible -└── streaming.rs # Streaming utilities -``` +## Directionality -### g3-planner (8 files) - -``` -lib.rs -├── code_explore.rs # Code exploration -├── git.rs # Git operations -├── history.rs # History management -├── llm.rs # LLM integration -├── planner.rs # Planning logic -├── prompts.rs # Planner prompts -└── state.rs # State management -``` - -## Layer Violations - -**None detected.** - -All dependencies flow downward through the layer hierarchy. No upward dependencies exist. +| From | To | Direction | Violations | +|------|----|-----------|------------| +| g3 | g3-cli | down | none | +| g3-cli | g3-core | down | none | +| g3-cli | g3-planner | lateral | none | +| g3-core | g3-providers | down | none | +| g3-core | g3-config | down | none | +| g3-planner | g3-core | lateral | none | ## Uncertainty -- Layer assignment is based on dependency direction, not semantic intent -- `studio` is isolated (no internal crate dependencies) - layer assignment is nominal -- Some crates at Layer 4 could arguably be split further (e.g., `g3-computer-control` is large) +- **studio**: Isolated crate with no detected internal dependencies; may have runtime integration not captured +- **g3-execution**: Minimal crate (1 file); purpose unclear from static analysis alone +- **Lateral dependencies**: g3-cli ↔ g3-planner relationship suggests potential for extraction or consolidation diff --git a/analysis/deps/limitations.md b/analysis/deps/limitations.md index 2198854..8df2c0c 100644 --- a/analysis/deps/limitations.md +++ b/analysis/deps/limitations.md @@ -1,103 +1,67 @@ # Analysis Limitations -## Extraction Method +## What Was Observed -Dependencies extracted via: -1. Cargo.toml parsing for crate-level dependencies -2. Regex-based `use` and `mod` statement extraction from source files +| Category | Method | Coverage | +|----------|--------|----------| +| Crate dependencies | Cargo.toml parsing | Complete | +| Module structure | `mod` declarations in lib.rs/main.rs | Complete | +| File imports | `use g3_*` and `use crate::` patterns | Partial | +| Submodule structure | mod.rs file inspection | Complete | -## Known Limitations +## What Could Not Be Observed -### 1. Conditional Compilation Not Evaluated +### 1. Implicit Dependencies -```rust -#[cfg(target_os = "macos")] -use core_graphics::window::*; -``` +- **Trait implementations**: A file implementing a trait from another module creates a dependency not captured by `use` statements +- **Type aliases**: Types re-exported through `pub use` chains +- **Derive macros**: Dependencies introduced by `#[derive(...)]` -Platform-specific imports in `g3-computer-control` are included unconditionally. The actual dependency graph varies by target platform. +### 2. Dynamic Patterns -**Affected files:** -- `crates/g3-computer-control/src/platform/macos.rs` -- `crates/g3-computer-control/src/platform/linux.rs` -- `crates/g3-computer-control/src/platform/windows.rs` +- **Trait objects**: `dyn Trait` usage creates runtime dependencies +- **Generic bounds**: `T: SomeTrait` constraints +- **Associated types**: Dependencies through associated type resolution -### 2. Macro-Generated Imports Not Detected +### 3. Conditional Compilation -Imports generated by procedural macros (e.g., `#[derive(...)]`, `#[async_trait]`) are not captured. These may introduce implicit dependencies. +- **Platform-specific code**: `#[cfg(target_os = "...")]` blocks not evaluated +- **Feature flags**: `#[cfg(feature = "...")]` dependencies not traced +- **Test-only code**: `#[cfg(test)]` modules excluded -**Common macros in codebase:** -- `serde::Serialize`, `serde::Deserialize` -- `async_trait::async_trait` -- `clap::Parser` +### 4. Build System -### 3. Re-Exports Not Fully Traced +- **build.rs**: Build script dependencies not analyzed +- **Procedural macros**: Macro crate dependencies not traced +- **Workspace-level features**: Feature unification effects not modeled -```rust -pub use some_module::SomeType; -``` +### 5. Excluded Files -Re-exports create transitive dependencies that are not fully traced. A file importing `SomeType` from a re-exporting module has an indirect dependency on the original module. +| Category | Count | Reason | +|----------|-------|--------| +| Test files (`/tests/`) | ~40 | Out of scope | +| Example files (`/examples/`) | ~10 | Out of scope | +| Worktree copies | ~100 | Duplicates | -### 4. Glob Imports Partially Resolved +## What Was Inferred -```rust -use crate::types::*; -``` - -Glob imports are recorded but individual items are not enumerated. The actual coupling may be higher or lower than represented. - -### 5. Test Code Excluded - -Files matching these patterns are excluded: -- `*_test.rs` -- `tests/*.rs` -- `mod tests { ... }` blocks - -Test dependencies are not represented in the graph. - -### 6. Build Scripts Not Analyzed - -`build.rs` files are not included. Build-time dependencies (e.g., code generation) are not captured. - -**Affected:** -- `crates/g3-computer-control/build.rs` - -### 7. External Crate Dependencies Not Graphed - -Only workspace-internal dependencies are represented. External crates (tokio, serde, etc.) are not included in the graph. - -### 8. Inline Module Definitions - -```rust -mod foo { - // inline definition -} -``` - -Inline module definitions without corresponding files are detected but may not resolve to file edges. - -### 9. Path Aliases Not Resolved - -```rust -use crate::foo as bar; -``` - -Aliased imports are recorded with original path, but alias usage elsewhere is not correlated. +| Inference | Basis | Confidence | +|-----------|-------|------------| +| Layer assignment | Topological sort of crate deps | High | +| Fan-in/fan-out metrics | Edge counting | High | +| Module-to-file mapping | Naming convention (mod.rs, *.rs) | High | +| Entrypoints | lib.rs/main.rs presence | High | ## What May Invalidate Conclusions -1. **Feature flags**: Cargo features may enable/disable entire modules -2. **Workspace changes**: Adding/removing crates changes the graph structure -3. **Refactoring**: Moving code between modules changes edges without changing functionality -4. **Dynamic dispatch**: Trait objects create runtime dependencies not visible statically +1. **Hidden re-exports**: If `g3-core/lib.rs` re-exports types from submodules, actual coupling may be higher +2. **Macro-generated code**: Macros like `#[derive(Serialize)]` add implicit serde dependency +3. **Runtime plugin loading**: If any crate loads code dynamically, static analysis misses it +4. **Workspace member changes**: Adding/removing crates from workspace invalidates crate-level graph -## Confidence Assessment +## Recommendations for Improved Analysis -| Aspect | Confidence | -|--------|------------| -| Crate-level dependencies | High (from Cargo.toml) | -| Module tree structure | High (from mod declarations) | -| Cross-crate imports | Medium (regex-based) | -| Intra-module coupling | Low (not analyzed) | -| Runtime dependencies | Not captured | +1. Use `cargo metadata` for authoritative crate graph +2. Use `cargo tree` for transitive dependency analysis +3. Use `rust-analyzer` for semantic import resolution +4. Parse AST for type references beyond `use` statements diff --git a/analysis/deps/sccs.md b/analysis/deps/sccs.md index 4e1a1f3..165b3bf 100644 --- a/analysis/deps/sccs.md +++ b/analysis/deps/sccs.md @@ -1,44 +1,27 @@ -# Strongly Connected Components Analysis +# Strongly Connected Components (Cycles) -## Method +## Summary -Tarjan's algorithm applied to file-level dependency graph. +| Metric | Value | +|--------|-------| +| Non-trivial SCCs | 0 | +| Total nodes in cycles | 0 | -Edge types considered: -- `mod_declaration`: Parent module declares child module -- `cross_crate_import`: File imports from another crate +## Analysis -## Results +No strongly connected components with more than one node were detected in the dependency graph. -**No non-trivial SCCs detected.** +This indicates the codebase has a **directed acyclic graph (DAG)** structure at both the crate and file level for the dependencies that were extracted. -The file-level dependency graph is acyclic. All `mod` declarations form a strict tree structure within each crate, and cross-crate imports follow the crate dependency DAG. +## Methodology -## Crate-Level Cycle Analysis +- Tarjan's algorithm applied to all 108 nodes and 186 edges +- Only SCCs with 2+ nodes reported (trivial single-node SCCs excluded) +- Analysis covers `use` statement imports only -The crate dependency graph was also analyzed: +## Caveats -``` -g3 → g3-cli → g3-core → g3-providers - → g3-config - → g3-execution - → g3-computer-control - → g3-planner → g3-core - → g3-providers - → g3-config - → g3-ensembles → g3-core - → g3-config -``` - -**No cycles detected at crate level.** - -The workspace forms a directed acyclic graph (DAG) with: -- Leaf crates: `g3-providers`, `g3-config`, `g3-execution`, `g3-computer-control`, `studio` -- Mid-tier crates: `g3-core`, `g3-planner`, `g3-ensembles` -- Top-tier crates: `g3-cli`, `g3` - -## Implications - -- No circular dependencies exist -- Build order is deterministic -- Crates can be compiled in parallel respecting the DAG +1. **Trait implementations**: Mutual trait dependencies not captured by `use` statements +2. **Type references**: Types referenced without explicit `use` not detected +3. **Macro expansions**: Dependencies introduced by macros not traced +4. **Build-time dependencies**: `build.rs` dependencies not included