From 9a27a80d658e657419e93b08911b5d686846f297 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Wed, 25 Feb 2026 19:16:41 -0500 Subject: [PATCH] feat(mma): Implement Context Amnesia bridge via subprocess --- scripts/mma_exec.py | 16 +++++++++++++--- tests/test_mma_exec.py | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/scripts/mma_exec.py b/scripts/mma_exec.py index a226721..d1ece92 100644 --- a/scripts/mma_exec.py +++ b/scripts/mma_exec.py @@ -1,4 +1,5 @@ import argparse +import subprocess def get_role_documents(role: str) -> list[str]: if role == 'tier1': @@ -9,6 +10,15 @@ def get_role_documents(role: str) -> list[str]: return ['conductor/workflow.md'] return [] +def execute_agent(role: str, prompt: str, docs: list[str]) -> str: + command_text = f"Activate the mma-{role} skill. {prompt}" + for doc in docs: + command_text += f" @{doc}" + + cmd = ["gemini", command_text] + process = subprocess.run(cmd, capture_output=True, text=True) + return process.stdout + def create_parser(): parser = argparse.ArgumentParser(description="MMA Execution Script") parser.add_argument( @@ -27,11 +37,11 @@ def create_parser(): def main(): parser = create_parser() args = parser.parse_args() - print(f"Role: {args.role}") - print(f"Prompt: {args.prompt}") docs = get_role_documents(args.role) - print(f"Selected Documents: {docs}") + print(f"Executing role: {args.role} with docs: {docs}") + result = execute_agent(args.role, args.prompt, docs) + print(result) if __name__ == "__main__": main() \ No newline at end of file diff --git a/tests/test_mma_exec.py b/tests/test_mma_exec.py index cf3f5e1..15e1ae1 100644 --- a/tests/test_mma_exec.py +++ b/tests/test_mma_exec.py @@ -1,5 +1,6 @@ import pytest -from scripts.mma_exec import create_parser, get_role_documents +from unittest.mock import patch, MagicMock +from scripts.mma_exec import create_parser, get_role_documents, execute_agent def test_parser_role_choices(): """Test that the parser accepts valid roles and the prompt argument.""" @@ -36,4 +37,35 @@ def test_get_role_documents(): assert get_role_documents('tier1') == ['conductor/product.md', 'conductor/product-guidelines.md'] assert get_role_documents('tier2') == ['conductor/tech-stack.md', 'conductor/workflow.md'] assert get_role_documents('tier3') == ['conductor/workflow.md'] - assert get_role_documents('tier4') == [] \ No newline at end of file + assert get_role_documents('tier4') == [] + +def test_execute_agent(): + """ + Test that execute_agent calls subprocess.run with the correct gemini CLI arguments + for context amnesia. + """ + role = "tier3" + prompt = "Write a unit test." + docs = ["file1.py", "docs/spec.md"] + + expected_gemini_arg = "Activate the mma-tier3 skill. Write a unit test. @file1.py @docs/spec.md" + mock_stdout = "Mocked AI Response" + + with patch("subprocess.run") as mock_run: + mock_process = MagicMock() + mock_process.stdout = mock_stdout + mock_process.returncode = 0 + mock_run.return_value = mock_process + + result = execute_agent(role, prompt, docs) + + mock_run.assert_called_once() + args, kwargs = mock_run.call_args + cmd_list = args[0] + + assert cmd_list[0] == "gemini" + assert cmd_list[1] == expected_gemini_arg + assert kwargs.get("capture_output") is True + assert kwargs.get("text") is True + + assert result == mock_stdout \ No newline at end of file