idk why these weren't committed

This commit is contained in:
2026-03-06 12:48:02 -05:00
parent a982e701ed
commit 1fb6ebc4d0
35 changed files with 17 additions and 85 deletions

View File

@@ -1,6 +1,5 @@
from __future__ import annotations from __future__ import annotations
import requests # type: ignore[import-untyped] import requests # type: ignore[import-untyped]
import json
import time import time
from typing import Any from typing import Any
@@ -27,7 +26,7 @@ class ApiHookClient:
if response.status_code == 200: if response.status_code == 200:
return response.json() return response.json()
return None return None
except Exception as e: except Exception:
# Silently ignore connection errors unless we are in a wait loop # Silently ignore connection errors unless we are in a wait loop
return None return None

View File

@@ -1,9 +1,8 @@
import queue
import threading import threading
import time import time
import sys import sys
import os import os
from typing import Any, List, Dict, Optional, Tuple, Callable, Union, cast from typing import Any, List, Dict, Optional, Callable
from pathlib import Path from pathlib import Path
import json import json
import uuid import uuid
@@ -22,8 +21,6 @@ from src import session_logger
from src import project_manager from src import project_manager
from src import performance_monitor from src import performance_monitor
from src import models from src import models
from src.log_registry import LogRegistry
from src.log_pruner import LogPruner
from src.file_cache import ASTParser from src.file_cache import ASTParser
from src import ai_client from src import ai_client
from src import shell_runner from src import shell_runner
@@ -31,10 +28,8 @@ from src import mcp_client
from src import aggregate from src import aggregate
from src import orchestrator_pm from src import orchestrator_pm
from src import conductor_tech_lead from src import conductor_tech_lead
from src import cost_tracker
from src import multi_agent_conductor from src import multi_agent_conductor
from src import theme from src import theme
from src.ai_client import ProviderError
def save_config(config: dict[str, Any]) -> None: def save_config(config: dict[str, Any]) -> None:
with open(models.CONFIG_PATH, "wb") as f: with open(models.CONFIG_PATH, "wb") as f:

View File

@@ -1,41 +1,26 @@
# gui_2.py # gui_2.py
from __future__ import annotations from __future__ import annotations
import tomli_w import tomli_w
import threading
import time import time
import math import math
import json import json
import sys import sys
import os import os
import uuid
import requests # type: ignore[import-untyped]
from pathlib import Path from pathlib import Path
from tkinter import filedialog, Tk from tkinter import filedialog, Tk
from typing import Optional, Callable, Any from typing import Optional, Any
from src import aggregate
from src import ai_client from src import ai_client
from src import cost_tracker from src import cost_tracker
from src import shell_runner
from src import session_logger from src import session_logger
from src import project_manager from src import project_manager
from src import theme_2 as theme from src import theme_2 as theme
import tomllib
from src import events
import numpy as np
from src import api_hooks from src import api_hooks
from src import mcp_client import numpy as np
from src import orchestrator_pm
from src import performance_monitor
from src import log_registry from src import log_registry
from src import log_pruner from src import log_pruner
from src import conductor_tech_lead
from src import multi_agent_conductor
from src import models from src import models
from src import app_controller from src import app_controller
from src import file_cache
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security.api_key import APIKeyHeader
from pydantic import BaseModel from pydantic import BaseModel
from imgui_bundle import imgui, hello_imgui, immapp from imgui_bundle import imgui, hello_imgui, immapp
@@ -171,7 +156,6 @@ class App:
def _test_callback_func_write_to_file(self, data: str) -> None: def _test_callback_func_write_to_file(self, data: str) -> None:
"""A dummy function that a custom_callback would execute for testing.""" """A dummy function that a custom_callback would execute for testing."""
import os
# Ensure the directory exists if running from a different cwd # Ensure the directory exists if running from a different cwd
os.makedirs("tests/artifacts", exist_ok=True) os.makedirs("tests/artifacts", exist_ok=True)
with open("tests/artifacts/temp_callback_output.txt", "w") as f: with open("tests/artifacts/temp_callback_output.txt", "w") as f:

View File

@@ -1,5 +1,4 @@
import pytest import pytest
import asyncio
import subprocess import subprocess
import time import time
import requests import requests

View File

@@ -1,7 +1,6 @@
import os import os
import sys import sys
import unittest import unittest
from unittest.mock import patch, MagicMock
# Ensure project root is in path # Ensure project root is in path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))

View File

@@ -2,12 +2,10 @@ import os
import sys import sys
import unittest import unittest
from unittest.mock import patch, MagicMock from unittest.mock import patch, MagicMock
from pathlib import Path
# Ensure project root is in path # Ensure project root is in path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from src.project_manager import default_project
class TestArchBoundaryPhase2(unittest.TestCase): class TestArchBoundaryPhase2(unittest.TestCase):
def setUp(self) -> None: def setUp(self) -> None:
@@ -15,7 +13,6 @@ class TestArchBoundaryPhase2(unittest.TestCase):
def test_toml_exposes_all_dispatch_tools(self) -> None: def test_toml_exposes_all_dispatch_tools(self) -> None:
"""manual_slop.toml [agent.tools] must list every tool in mcp_client.dispatch().""" """manual_slop.toml [agent.tools] must list every tool in mcp_client.dispatch()."""
from src import mcp_client
from src import models from src import models
# We check the tool names in the source of mcp_client.dispatch # We check the tool names in the source of mcp_client.dispatch
@@ -44,7 +41,6 @@ class TestArchBoundaryPhase2(unittest.TestCase):
def test_mutating_tool_triggers_callback(self) -> None: def test_mutating_tool_triggers_callback(self) -> None:
"""All mutating tools must trigger the pre_tool_callback.""" """All mutating tools must trigger the pre_tool_callback."""
from src import ai_client
from src.app_controller import AppController from src.app_controller import AppController
# Use a real AppController to test its _confirm_and_run # Use a real AppController to test its _confirm_and_run

View File

@@ -1,7 +1,6 @@
import os import os
import sys import sys
import unittest import unittest
from unittest.mock import patch, MagicMock
# Ensure project root is in path # Ensure project root is in path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
@@ -29,7 +28,7 @@ class TestArchBoundaryPhase3(unittest.TestCase):
def test_cascade_blocks_multi_hop(self) -> None: def test_cascade_blocks_multi_hop(self) -> None:
"""Test that blocking cascades through multiple dependencies.""" """Test that blocking cascades through multiple dependencies."""
from src.models import Ticket, Track from src.models import Ticket
from src.dag_engine import TrackDAG, ExecutionEngine from src.dag_engine import TrackDAG, ExecutionEngine
t1 = Ticket(id="T1", description="d1", status="blocked", assigned_to="worker1") t1 = Ticket(id="T1", description="d1", status="blocked", assigned_to="worker1")
@@ -45,7 +44,7 @@ class TestArchBoundaryPhase3(unittest.TestCase):
def test_manual_unblock_restores_todo(self) -> None: def test_manual_unblock_restores_todo(self) -> None:
"""Test that unblocking a task manually works if dependencies are met.""" """Test that unblocking a task manually works if dependencies are met."""
from src.models import Ticket, Track from src.models import Ticket
from src.dag_engine import TrackDAG, ExecutionEngine from src.dag_engine import TrackDAG, ExecutionEngine
t1 = Ticket(id="T1", description="d1", status="completed", assigned_to="worker1") t1 = Ticket(id="T1", description="d1", status="completed", assigned_to="worker1")
@@ -64,7 +63,7 @@ class TestArchBoundaryPhase3(unittest.TestCase):
def test_in_progress_not_blocked(self) -> None: def test_in_progress_not_blocked(self) -> None:
"""Test that in_progress tasks are not blocked automatically (only todo).""" """Test that in_progress tasks are not blocked automatically (only todo)."""
from src.models import Ticket, Track from src.models import Ticket
from src.dag_engine import TrackDAG, ExecutionEngine from src.dag_engine import TrackDAG, ExecutionEngine
t1 = Ticket(id="T1", description="d1", status="blocked", assigned_to="worker1") t1 = Ticket(id="T1", description="d1", status="blocked", assigned_to="worker1")
@@ -79,7 +78,7 @@ class TestArchBoundaryPhase3(unittest.TestCase):
def test_execution_engine_tick_cascades_blocks(self) -> None: def test_execution_engine_tick_cascades_blocks(self) -> None:
"""Test that ExecutionEngine.tick() triggers the cascading blocks.""" """Test that ExecutionEngine.tick() triggers the cascading blocks."""
from src.models import Ticket, Track from src.models import Ticket
from src.dag_engine import TrackDAG, ExecutionEngine from src.dag_engine import TrackDAG, ExecutionEngine
t1 = Ticket(id="T1", description="d1", status="blocked", assigned_to="worker1") t1 = Ticket(id="T1", description="d1", status="blocked", assigned_to="worker1")

View File

@@ -1,4 +1,3 @@
import pytest
from src.file_cache import ASTParser from src.file_cache import ASTParser
def test_ast_parser_initialization() -> None: def test_ast_parser_initialization() -> None:

View File

@@ -1,7 +1,5 @@
import pytest import pytest
from src.log_registry import LogRegistry from src.log_registry import LogRegistry
from src import project_manager
import time
from pathlib import Path from pathlib import Path
from datetime import datetime from datetime import datetime

View File

@@ -1,6 +1,4 @@
import pytest from unittest.mock import patch
from unittest.mock import patch, MagicMock
import time
from src.api_hook_client import ApiHookClient from src.api_hook_client import ApiHookClient
def simulate_conductor_phase_completion(client: ApiHookClient, track_id: str, phase_name: str) -> bool: def simulate_conductor_phase_completion(client: ApiHookClient, track_id: str, phase_name: str) -> bool:

View File

@@ -1,7 +1,5 @@
from unittest.mock import patch, MagicMock from unittest.mock import patch, MagicMock
from src import ai_client from src import ai_client
import json
import pytest
def test_deepseek_model_selection() -> None: def test_deepseek_model_selection() -> None:
""" """

View File

@@ -1,4 +1,3 @@
import pytest
from src.models import Ticket from src.models import Ticket
from src.dag_engine import TrackDAG, ExecutionEngine from src.dag_engine import TrackDAG, ExecutionEngine

View File

@@ -1,5 +1,4 @@
import json import json
import subprocess
from unittest.mock import patch, MagicMock from unittest.mock import patch, MagicMock
from src.gemini_cli_adapter import GeminiCliAdapter from src.gemini_cli_adapter import GeminiCliAdapter

View File

@@ -1,6 +1,5 @@
import unittest import unittest
import json import json
import subprocess
from unittest.mock import patch, MagicMock from unittest.mock import patch, MagicMock
from src.gemini_cli_adapter import GeminiCliAdapter from src.gemini_cli_adapter import GeminiCliAdapter

View File

@@ -1,5 +1,3 @@
import json
import subprocess
from unittest.mock import patch, MagicMock from unittest.mock import patch, MagicMock
from src.gemini_cli_adapter import GeminiCliAdapter from src.gemini_cli_adapter import GeminiCliAdapter
from src import mcp_client from src import mcp_client
@@ -21,7 +19,6 @@ def test_gemini_cli_context_bleed_prevention() -> None:
assert result["text"] == "Model response" assert result["text"] == "Model response"
def test_gemini_cli_parameter_resilience() -> None: def test_gemini_cli_parameter_resilience() -> None:
from src import mcp_client
with patch('src.mcp_client.read_file', return_value="content") as mock_read: with patch('src.mcp_client.read_file', return_value="content") as mock_read:
mcp_client.dispatch("read_file", {"file_path": "aliased.txt"}) mcp_client.dispatch("read_file", {"file_path": "aliased.txt"})
mock_read.assert_called_once_with("aliased.txt") mock_read.assert_called_once_with("aliased.txt")

View File

@@ -1,5 +1,4 @@
import json from unittest.mock import MagicMock
from unittest.mock import patch, MagicMock
from src import ai_client from src import ai_client

View File

@@ -1,4 +1,3 @@
from typing import Any
from unittest.mock import patch, MagicMock from unittest.mock import patch, MagicMock
def test_send_invokes_adapter_send() -> None: def test_send_invokes_adapter_send() -> None:

View File

@@ -1,5 +1,5 @@
import pytest import pytest
from unittest.mock import patch, MagicMock from unittest.mock import patch
from src.gui_2 import App from src.gui_2 import App
from src import ai_client from src import ai_client

View File

@@ -4,7 +4,6 @@ from unittest.mock import MagicMock, patch
from src.models import Ticket, Track from src.models import Ticket, Track
from src import multi_agent_conductor from src import multi_agent_conductor
from src.multi_agent_conductor import ConductorEngine from src.multi_agent_conductor import ConductorEngine
from src import events
from src import ai_client from src import ai_client
@pytest.mark.asyncio @pytest.mark.asyncio

View File

@@ -1,6 +1,4 @@
import pytest import pytest
import requests
import time
import sys import sys
import os import os

View File

@@ -1,7 +1,6 @@
import pytest import pytest
from unittest.mock import patch, ANY from unittest.mock import patch
import time import time
import sys
from src.gui_2 import App from src.gui_2 import App
from src.events import UserRequestEvent from src.events import UserRequestEvent
from src.api_hook_client import ApiHookClient from src.api_hook_client import ApiHookClient

View File

@@ -2,8 +2,7 @@ import pytest
from src.log_pruner import LogPruner from src.log_pruner import LogPruner
from src.log_registry import LogRegistry from src.log_registry import LogRegistry
from pathlib import Path from pathlib import Path
from unittest.mock import MagicMock, patch from unittest.mock import patch
import time
from datetime import datetime, timedelta from datetime import datetime, timedelta
@pytest.fixture @pytest.fixture

View File

@@ -5,10 +5,6 @@ state when logging comms and tools.
""" """
from src import ai_client from src import ai_client
from src import session_logger
from src import project_manager
from unittest.mock import patch, MagicMock
import time
def reset_tier(): def reset_tier():
ai_client.current_tier = None ai_client.current_tier = None

View File

@@ -1,5 +1,5 @@
import pytest import pytest
from unittest.mock import patch, MagicMock from unittest.mock import patch
from typing import Any from typing import Any
from src.gui_2 import App from src.gui_2 import App

View File

@@ -1,4 +1,3 @@
import json
from unittest.mock import patch from unittest.mock import patch
import time import time
from src.gui_2 import App from src.gui_2 import App

View File

@@ -1,4 +1,3 @@
from unittest.mock import patch
from src.gui_2 import App from src.gui_2 import App
def test_cb_ticket_retry(app_instance: App) -> None: def test_cb_ticket_retry(app_instance: App) -> None:

View File

@@ -1,4 +1,3 @@
import os
import sys import sys
import time import time
from pathlib import Path from pathlib import Path

View File

@@ -1,7 +1,5 @@
import pytest import pytest
from unittest.mock import patch from unittest.mock import patch
import json
from typing import Any
from src import orchestrator_pm from src import orchestrator_pm
from src import multi_agent_conductor from src import multi_agent_conductor
from src import conductor_tech_lead from src import conductor_tech_lead

View File

@@ -1,4 +1,3 @@
import pytest
from unittest.mock import MagicMock, patch from unittest.mock import MagicMock, patch
from src.multi_agent_conductor import ConductorEngine, run_worker_lifecycle from src.multi_agent_conductor import ConductorEngine, run_worker_lifecycle
from src.models import Ticket, Track, WorkerContext from src.models import Ticket, Track, WorkerContext

View File

@@ -1,6 +1,6 @@
from typing import Generator from typing import Generator
import pytest import pytest
from unittest.mock import patch, MagicMock from unittest.mock import patch
from src import ai_client from src import ai_client
from src.gui_2 import App from src.gui_2 import App

View File

@@ -3,9 +3,8 @@ from unittest.mock import MagicMock, patch
from src import multi_agent_conductor from src import multi_agent_conductor
from src.models import Ticket, WorkerContext from src.models import Ticket, WorkerContext
from src import events from src import events
import time
import threading import threading
from typing import Generator, Any from typing import Generator
class MockDialog: class MockDialog:
def __init__(self, approved: bool, final_payload: dict | None = None) -> None: def __init__(self, approved: bool, final_payload: dict | None = None) -> None:

View File

@@ -1,5 +1,4 @@
import pytest from unittest.mock import patch
from unittest.mock import patch, MagicMock
from src.api_hook_client import ApiHookClient from src.api_hook_client import ApiHookClient
def test_api_ask_client_method() -> None: def test_api_ask_client_method() -> None:

View File

@@ -1,7 +1,6 @@
from unittest.mock import MagicMock, patch from unittest.mock import MagicMock, patch
from src.shell_runner import run_powershell from src.shell_runner import run_powershell
from src import ai_client from src import ai_client
from typing import Any, Optional, Callable
def test_run_powershell_qa_callback_on_failure(vlogger) -> None: def test_run_powershell_qa_callback_on_failure(vlogger) -> None:
"""Test that qa_callback is called when a powershell command fails (non-zero exit code).""" """Test that qa_callback is called when a powershell command fails (non-zero exit code)."""
@@ -75,7 +74,6 @@ def test_end_to_end_tier4_integration(vlogger) -> None:
def test_ai_client_passes_qa_callback() -> None: def test_ai_client_passes_qa_callback() -> None:
"""Verifies that ai_client.send passes the qa_callback down to the provider function.""" """Verifies that ai_client.send passes the qa_callback down to the provider function."""
from src import ai_client
qa_callback = lambda x: "analysis" qa_callback = lambda x: "analysis"
with patch("src.ai_client._send_gemini") as mock_send: with patch("src.ai_client._send_gemini") as mock_send:
@@ -89,7 +87,6 @@ def test_ai_client_passes_qa_callback() -> None:
def test_gemini_provider_passes_qa_callback_to_run_script() -> None: def test_gemini_provider_passes_qa_callback_to_run_script() -> None:
"""Verifies that _send_gemini passes the qa_callback to _run_script.""" """Verifies that _send_gemini passes the qa_callback to _run_script."""
from src import ai_client
qa_callback = MagicMock() qa_callback = MagicMock()
# Mock the tool loop behavior # Mock the tool loop behavior

View File

@@ -1,9 +1,7 @@
import sys import sys
import os import os
import hashlib
from unittest.mock import patch, MagicMock from unittest.mock import patch, MagicMock
from types import SimpleNamespace from types import SimpleNamespace
from pathlib import Path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))

View File

@@ -2,8 +2,6 @@
from src import ai_client from src import ai_client
from typing import Any from typing import Any
import pytest
from unittest.mock import MagicMock, patch
def test_add_bleed_derived_aliases() -> None: def test_add_bleed_derived_aliases() -> None:
"""_add_bleed_derived must inject 'estimated_prompt_tokens' alias.""" """_add_bleed_derived must inject 'estimated_prompt_tokens' alias."""