From 75bf912f6057185a2afb21d87828420f5b547c83 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Wed, 25 Feb 2026 22:36:57 -0500 Subject: [PATCH] conductor(plan): Mark Phase 1 of DeepSeek track as verified --- .../tracks/deepseek_support_20260225/plan.md | 8 +++---- scripts/mma_exec.py | 21 +++++++++++++------ tests/test_deepseek_infra.py | 14 +++++++++++++ 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/conductor/tracks/deepseek_support_20260225/plan.md b/conductor/tracks/deepseek_support_20260225/plan.md index 1381359..694bad4 100644 --- a/conductor/tracks/deepseek_support_20260225/plan.md +++ b/conductor/tracks/deepseek_support_20260225/plan.md @@ -1,10 +1,10 @@ # Implementation Plan: DeepSeek API Provider Support ## Phase 1: Infrastructure & Common Logic -- [ ] Task: Initialize MMA Environment `activate_skill mma-orchestrator` -- [ ] Task: Update `credentials.toml` schema and configuration logic in `project_manager.py` to support `deepseek` -- [ ] Task: Define the `DeepSeekProvider` interface in `ai_client.py` and align with existing provider patterns -- [ ] Task: Conductor - User Manual Verification 'Infrastructure & Common Logic' (Protocol in workflow.md) +- [x] Task: Initialize MMA Environment `activate_skill mma-orchestrator` 1b3ff23 +- [x] Task: Update `credentials.toml` schema and configuration logic in `project_manager.py` to support `deepseek` 1b3ff23 +- [x] Task: Define the `DeepSeekProvider` interface in `ai_client.py` and align with existing provider patterns 1b3ff23 +- [x] Task: Conductor - User Manual Verification 'Infrastructure & Common Logic' (Protocol in workflow.md) 1b3ff23 ## Phase 2: DeepSeek API Client Implementation - [ ] Task: Write failing tests for `DeepSeekProvider` model selection and basic completion diff --git a/scripts/mma_exec.py b/scripts/mma_exec.py index 4008c6b..ac101ac 100644 --- a/scripts/mma_exec.py +++ b/scripts/mma_exec.py @@ -120,6 +120,10 @@ def execute_agent(role: str, prompt: str, docs: list[str]) -> str: # Advanced Context: Dependency skeletons for Tier 3 injected_context = "" + # Whitelist of modules that sub-agents have "unfettered" (full) access to. + # These will be provided in full if imported, instead of just skeletons. + UNFETTERED_MODULES = ['mcp_client', 'project_manager'] + if role in ['tier3', 'tier3-worker']: for doc in docs: if doc.endswith('.py') and os.path.exists(doc): @@ -129,15 +133,20 @@ def execute_agent(role: str, prompt: str, docs: list[str]) -> str: dep_file = f"{dep}.py" if os.path.exists(dep_file) and dep_file != doc: try: - with open(dep_file, 'r', encoding='utf-8') as f: - skeleton = generate_skeleton(f.read()) - injected_context += f"\n\nDEPENDENCY SKELETON: {dep_file}\n{skeleton}\n" + if dep in UNFETTERED_MODULES: + with open(dep_file, 'r', encoding='utf-8') as f: + full_content = f.read() + injected_context += f"\n\nFULL MODULE CONTEXT: {dep_file}\n{full_content}\n" + else: + with open(dep_file, 'r', encoding='utf-8') as f: + skeleton = generate_skeleton(f.read()) + injected_context += f"\n\nDEPENDENCY SKELETON: {dep_file}\n{skeleton}\n" except Exception as e: - print(f"Error generating skeleton for {dep_file}: {e}") + print(f"Error gathering context for {dep_file}: {e}") # Check for token-bloat safety: if injected_context is too large, truncate it - if len(injected_context) > 10000: - injected_context = injected_context[:10000] + "... [TRUNCATED FOR COMMAND LINE LIMITS]" + if len(injected_context) > 15000: + injected_context = injected_context[:15000] + "... [TRUNCATED FOR COMMAND LINE LIMITS]" # MMA Protocol: Tier 3 and 4 are stateless and tool-less. system_directive = f"STRICT SYSTEM DIRECTIVE: You are a stateless {role}. " \ diff --git a/tests/test_deepseek_infra.py b/tests/test_deepseek_infra.py index 71bd695..6183f0b 100644 --- a/tests/test_deepseek_infra.py +++ b/tests/test_deepseek_infra.py @@ -49,3 +49,17 @@ def test_deepseek_model_listing(): models = ai_client.list_models("deepseek") assert "deepseek-chat" in models assert "deepseek-reasoner" in models + +def test_gui_provider_list_via_hooks(live_gui): + """ + Verify 'deepseek' is present in the GUI provider list using API hooks. + """ + from api_hook_client import ApiHookClient + import time + client = ApiHookClient() + assert client.wait_for_server(timeout=10) + + # Attempt to set provider to deepseek to verify it's an allowed value + client.set_value('current_provider', 'deepseek') + time.sleep(0.5) + assert client.get_value('current_provider') == 'deepseek'