From a7122f717c830866a31fb1ff89e270234aeea255 Mon Sep 17 00:00:00 2001 From: Ryan Niemes Date: Fri, 20 Mar 2026 23:07:06 -0400 Subject: [PATCH] fix: script runner misidentifies 'codex' in model names as the codex runtime binary (#396) Co-Authored-By: Claude Opus 4.6 --- src/apm_cli/core/script_runner.py | 2 +- tests/unit/test_script_runner.py | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/apm_cli/core/script_runner.py b/src/apm_cli/core/script_runner.py index da8c05e2..3cfb92cf 100644 --- a/src/apm_cli/core/script_runner.py +++ b/src/apm_cli/core/script_runner.py @@ -343,7 +343,7 @@ def _transform_runtime_command( # Handle individual runtime patterns without environment variables # Handle "codex [args] file.prompt.md [more_args]" -> "codex exec [args] [more_args]" - if re.search(r"codex\s+.*" + re.escape(prompt_file), command): + if re.search(r"(^|\s)codex\s+.*" + re.escape(prompt_file), command): match = re.search( r"codex\s+(.*?)(" + re.escape(prompt_file) + r")(.*?)$", command ) diff --git a/tests/unit/test_script_runner.py b/tests/unit/test_script_runner.py index 64913bd1..7c4bb169 100644 --- a/tests/unit/test_script_runner.py +++ b/tests/unit/test_script_runner.py @@ -114,7 +114,15 @@ def test_transform_runtime_command_copilot_removes_p_flag(self): original, "hello-world.prompt.md", self.compiled_content, self.compiled_path ) assert result == "copilot --log-level all" - + + def test_transform_runtime_command_copilot_with_codex_in_model_name(self): + """Test copilot command with --model flag containing 'codex' substring is not misidentified.""" + original = "copilot --allow-all-tools --model gpt-5.3-codex -p hello-world.prompt.md" + result = self.script_runner._transform_runtime_command( + original, "hello-world.prompt.md", self.compiled_content, self.compiled_path + ) + assert result == "copilot --allow-all-tools --model gpt-5.3-codex" + def test_detect_runtime_copilot(self): """Test runtime detection for copilot commands.""" assert self.script_runner._detect_runtime("copilot --log-level all") == "copilot"