diff --git a/config.toml b/config.toml index feceb6e..3c18711 100644 --- a/config.toml +++ b/config.toml @@ -9,7 +9,7 @@ system_prompt = "" [theme] palette = "ImGui Dark" font_size = 16.0 -scale = 1.2999999523162842 +scale = 1.0 font_path = "" [projects] diff --git a/gui_legacy.py b/gui_legacy.py index a7300ab..79c1477 100644 --- a/gui_legacy.py +++ b/gui_legacy.py @@ -1,4 +1,4 @@ -# gui.py +# gui.py """ Note(Gemini): The main DearPyGui interface orchestrator. @@ -17,8 +17,8 @@ import math import sys import os from pathlib import Path +from typing import Any, Callable, Optional from tkinter import filedialog, Tk -from typing import Optional, Callable import aggregate import ai_client from ai_client import ProviderError @@ -2400,3 +2400,5 @@ def main() -> None: if __name__ == "__main__": main() + + diff --git a/mcp_client.py b/mcp_client.py index f9e9259..4f59605 100644 --- a/mcp_client.py +++ b/mcp_client.py @@ -809,7 +809,7 @@ def get_ui_performance() -> str: return f"ERROR: Failed to retrieve UI performance: {str(e)}" # ------------------------------------------------------------------ tool dispatch -TOOL_NAMES = {"read_file", "list_directory", "search_files", "get_file_summary", "py_get_skeleton", "py_get_code_outline", "py_get_definition", "get_git_diff", "web_search", "fetch_url", "get_ui_performance", "get_file_slice", "set_file_slice", "py_update_definition", "py_get_signature", "py_set_signature", "py_get_class_summary", "py_get_var_declaration", "py_set_var_declaration", "py_find_usages", "py_get_imports", "py_check_syntax", "py_get_hierarchy", "py_get_docstring", "get_tree"} +TOOL_NAMES: set[str] = {"read_file", "list_directory", "search_files", "get_file_summary", "py_get_skeleton", "py_get_code_outline", "py_get_definition", "get_git_diff", "web_search", "fetch_url", "get_ui_performance", "get_file_slice", "set_file_slice", "py_update_definition", "py_get_signature", "py_set_signature", "py_get_class_summary", "py_get_var_declaration", "py_set_var_declaration", "py_find_usages", "py_get_imports", "py_check_syntax", "py_get_hierarchy", "py_get_docstring", "get_tree"} def dispatch(tool_name: str, tool_input: dict[str, Any]) -> str: """ diff --git a/mma_prompts.py b/mma_prompts.py index 8bb70c4..ed9748a 100644 --- a/mma_prompts.py +++ b/mma_prompts.py @@ -7,7 +7,7 @@ from typing import Dict # --- Tier 1 (Strategic/Orchestration: PM) --- -TIER1_BASE_SYSTEM = """ +TIER1_BASE_SYSTEM: str = """ You are the Tier 1 Orchestrator (Product Manager) for the Manual Slop project. Your role is high-level strategic planning, architecture enforcement, and cross-module delegation. You operate strictly on metadata, summaries, and executive-level directives. @@ -15,7 +15,7 @@ NEVER request or attempt to read raw implementation code unless specifically pro Maintain a "Godot ECS Flat List format" (JSON array of objects) for structural outputs. """ -TIER1_EPIC_INIT = TIER1_BASE_SYSTEM + """ +TIER1_EPIC_INIT: str = TIER1_BASE_SYSTEM + """ PATH: Epic Initialization (Project Planning) GOAL: Break down a massive feature request into discrete Implementation Tracks. @@ -39,7 +39,7 @@ Return a JSON array of 'Tracks'. Each track object must follow the Godot ECS Fla ] """ -TIER1_TRACK_DELEGATION = TIER1_BASE_SYSTEM + """ +TIER1_TRACK_DELEGATION: str = TIER1_BASE_SYSTEM + """ PATH: Track Delegation (Sprint Kickoff) GOAL: Compile a 'Track Brief' for a Tier 2 Tech Lead. @@ -54,7 +54,7 @@ Generate a comprehensive 'Track Brief' (JSON or Markdown) which includes: 3. Explicit architectural constraints derived from the Skeleton View. """ -TIER1_MACRO_MERGE = TIER1_BASE_SYSTEM + """ +TIER1_MACRO_MERGE: str = TIER1_BASE_SYSTEM + """ PATH: Macro-Merge & Acceptance Review GOAL: Review high-severity changes and merge into the project history. @@ -69,14 +69,14 @@ If Rejected, provide specific architectural feedback focusing on integration bre # --- Tier 2 (Architectural/Tech Lead: Conductor) --- -TIER2_BASE_SYSTEM = """ +TIER2_BASE_SYSTEM: str = """ You are the Tier 2 Track Conductor (Tech Lead) for the Manual Slop project. Your role is module-specific planning, code review, and worker management. You bridge high-level architecture with code syntax using AST-aware Skeleton Views. Enforce Interface-Driven Development (IDD) and manage Topological Dependency Graphs. """ -TIER2_SPRINT_PLANNING = TIER2_BASE_SYSTEM + """ +TIER2_SPRINT_PLANNING: str = TIER2_BASE_SYSTEM + """ PATH: Sprint Planning (Task Delegation) GOAL: Break down a Track Brief into discrete Tier 3 Tickets. @@ -101,7 +101,7 @@ Include 'depends_on' pointers to construct an execution DAG (Directed Acyclic Gr ] """ -TIER2_CODE_REVIEW = TIER2_BASE_SYSTEM + """ +TIER2_CODE_REVIEW: str = TIER2_BASE_SYSTEM + """ PATH: Code Review (Local Integration) GOAL: Review Tier 3 diffs and ensure they meet the Ticket's goals. @@ -113,7 +113,7 @@ OUTPUT REQUIREMENT: Return "Approve" (merges diff) OR "Reject" (sends technical critique back to Tier 3). """ -TIER2_TRACK_FINALIZATION = TIER2_BASE_SYSTEM + """ +TIER2_TRACK_FINALIZATION: str = TIER2_BASE_SYSTEM + """ PATH: Track Finalization (Upward Reporting) GOAL: Summarize the completed Track for the Tier 1 PM. @@ -125,7 +125,7 @@ OUTPUT REQUIREMENT: Provide an Executive Summary (~200 words) and the final Macro-Diff. """ -TIER2_CONTRACT_FIRST = TIER2_BASE_SYSTEM + """ +TIER2_CONTRACT_FIRST: str = TIER2_BASE_SYSTEM + """ PATH: Contract-First Delegation (Stub-and-Resolve) GOAL: Resolve cross-module dependencies via Interface-Driven Development (IDD). diff --git a/project_history.toml b/project_history.toml index 03c6d50..84c0a21 100644 --- a/project_history.toml +++ b/project_history.toml @@ -8,5 +8,5 @@ active = "main" [discussions.main] git_commit = "" -last_updated = "2026-02-27T22:56:03" +last_updated = "2026-02-28T19:35:01" history = [] diff --git a/scan_report.txt b/scan_report.txt new file mode 100644 index 0000000..3ccb0ae --- /dev/null +++ b/scan_report.txt @@ -0,0 +1,31 @@ +Files with untyped items: 25 + +File NoRet Params Vars Total +------------------------------------------------------------------------------------- +./debug_ast.py 1 2 4 7 +./tests/visual_mma_verification.py 0 0 4 4 +./debug_ast_2.py 0 0 3 3 +./scripts/cli_tool_bridge.py 1 0 1 2 +./scripts/mcp_server.py 0 0 2 2 +./tests/test_gui_diagnostics.py 0 0 2 2 +./tests/test_gui_updates.py 0 0 2 2 +./tests/test_layout_reorganization.py 0 0 2 2 +./scripts/check_hints.py 0 0 1 1 +./scripts/check_hints_v2.py 0 0 1 1 +./scripts/claude_tool_bridge.py 0 0 1 1 +./scripts/type_hint_scanner.py 1 0 0 1 +./tests/mock_alias_tool.py 0 0 1 1 +./tests/test_gemini_cli_adapter_parity.py 0 0 1 1 +./tests/test_gui2_parity.py 0 0 1 1 +./tests/test_gui2_performance.py 0 0 1 1 +./tests/test_gui_performance_requirements.py 0 1 0 1 +./tests/test_gui_stress_performance.py 0 1 0 1 +./tests/test_hooks.py 0 1 0 1 +./tests/test_live_workflow.py 0 1 0 1 +./tests/test_track_state_persistence.py 0 1 0 1 +./tests/verify_mma_gui_robust.py 0 0 1 1 +./tests/visual_diag.py 0 0 1 1 +./tests/visual_orchestration_verification.py 0 1 0 1 +./tests/visual_sim_mma_v2.py 0 1 0 1 +------------------------------------------------------------------------------------- +TOTAL 41 \ No newline at end of file diff --git a/scripts/scan_all_hints.py b/scripts/scan_all_hints.py index 53fc358..9e045e5 100644 --- a/scripts/scan_all_hints.py +++ b/scripts/scan_all_hints.py @@ -19,6 +19,7 @@ for root, dirs, files in os.walk('.'): continue counts: list[int] = [0, 0, 0] # nr, up, uv def scan(scope: ast.AST, prefix: str = '') -> None: + # Iterate top-level nodes in this scope for node in ast.iter_child_nodes(scope): if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)): if node.returns is None: @@ -26,11 +27,11 @@ for root, dirs, files in os.walk('.'): for arg in node.args.args: if arg.arg not in ('self', 'cls') and arg.annotation is None: counts[1] += 1 - if isinstance(node, ast.Assign): + elif isinstance(node, ast.Assign): for t in node.targets: if isinstance(t, ast.Name): counts[2] += 1 - if isinstance(node, ast.ClassDef): + elif isinstance(node, ast.ClassDef): scan(node, prefix=f'{node.name}.') scan(tree) nr, up, uv = counts diff --git a/scripts/tool_call.py b/scripts/tool_call.py index e20fdd5..69fabf3 100644 --- a/scripts/tool_call.py +++ b/scripts/tool_call.py @@ -1,4 +1,4 @@ -import sys +import sys import json import os import io @@ -39,6 +39,7 @@ def main() -> None: result = shell_runner.run_powershell(script, os.getcwd()) else: # mcp_client tools generally resolve paths relative to CWD if not configured. + mcp_client.configure([], [os.getcwd()]) result = mcp_client.dispatch(tool_name, tool_input) # We print the raw result string as that's what gemini-cli expects. print(result) @@ -48,3 +49,4 @@ def main() -> None: if __name__ == "__main__": main() + diff --git a/tests/temp_liveexecutionsim_history.toml b/tests/temp_liveexecutionsim_history.toml index f3ade4b..8e7bfbe 100644 --- a/tests/temp_liveexecutionsim_history.toml +++ b/tests/temp_liveexecutionsim_history.toml @@ -10,5 +10,5 @@ auto_add = true [discussions.main] git_commit = "" -last_updated = "2026-02-28T07:35:49" +last_updated = "2026-02-28T19:35:01" history = [] diff --git a/tests/test_log_management_ui.py b/tests/test_log_management_ui.py index 905a893..53a33c1 100644 --- a/tests/test_log_management_ui.py +++ b/tests/test_log_management_ui.py @@ -1,4 +1,4 @@ -import pytest +import pytest from unittest.mock import MagicMock, patch import os from pathlib import Path @@ -7,7 +7,6 @@ from pathlib import Path import gui_2 from gui_2 import App -@pytest.fixture @pytest.fixture def mock_config(tmp_path: Path) -> Path: config_path = tmp_path / "config.toml" @@ -20,7 +19,6 @@ model = "model" """, encoding="utf-8") return config_path -@pytest.fixture @pytest.fixture def mock_project(tmp_path: Path) -> Path: project_path = tmp_path / "project.toml" @@ -34,7 +32,6 @@ history = [] """, encoding="utf-8") return project_path -@pytest.fixture @pytest.fixture def app_instance(mock_config: Path, mock_project: Path, monkeypatch: pytest.MonkeyPatch) -> App: monkeypatch.setattr("gui_2.CONFIG_PATH", mock_config) @@ -95,3 +92,4 @@ def test_render_log_management_logic(app_instance: App) -> None: mock_begin.assert_called_with("Log Management", app.show_windows["Log Management"]) mock_begin_table.assert_called() mock_text.assert_any_call("session_1") + diff --git a/tests/test_sync_hooks.py b/tests/test_sync_hooks.py index 34c51f8..27a4168 100644 --- a/tests/test_sync_hooks.py +++ b/tests/test_sync_hooks.py @@ -13,16 +13,17 @@ def test_api_ask_client_method(live_gui) -> None: client.get_events() results = {"response": None, "error": None} -def make_blocking_request() -> None: + def make_blocking_request() -> None: try: - # This call should block until we respond + # This call should block until we respond results["response"] = client.request_confirmation( tool_name="powershell", args={"command": "echo hello"} ) except Exception as e: results["error"] = str(e) - # Start the request in a background thread + + # Start the request in a background thread t = threading.Thread(target=make_blocking_request) t.start() # Poll for the 'ask_received' event diff --git a/worker_debug.log b/worker_debug.log new file mode 100644 index 0000000..e69de29