feat(mycodex): 对齐 resume options,支持 -r/--resume/--continue/--last/--all

- 新增 _translate_codex_extra,将 -r/--resume 映射为 codex resume

- --continue 映射为 codex continue,--last/--all 映射为 resume --last/--all

- 更新 help 文案与 README 用法示例

- 补充 5 个 codex resume option 单元测试,50 tests passed
This commit is contained in:
Zhengshou Lai
2026-07-07 09:05:09 +08:00
parent 10530479d0
commit c07b132f6d
4 changed files with 72 additions and 7 deletions
+38
View File
@@ -301,6 +301,44 @@ class TestCodexPassthrough:
assert cmd == ["/usr/bin/codex", "continue"]
class TestCodexResumeOptions:
"""Map myagents-style resume flags to codex resume subcommand."""
def _invoke(self, args: list[str], tmp_path: Path) -> list[str]:
runner = CliRunner()
with (
patch("myagents.launcher.shutil.which", return_value="/usr/bin/codex"),
patch("myagents.launcher.subprocess.run") as mock_run,
):
mock_run.return_value = MagicMock(returncode=0)
result = runner.invoke(
cli, ["codex", "--cwd", str(tmp_path), *args]
)
assert result.exit_code == 0, result.output
mock_run.assert_called_once()
return mock_run.call_args[0][0]
def test_r_flag_maps_to_resume(self, tmp_path: Path) -> None:
cmd = self._invoke(["-r", "abc123"], tmp_path)
assert cmd == ["/usr/bin/codex", "resume", "abc123"]
def test_resume_flag_maps_to_resume(self, tmp_path: Path) -> None:
cmd = self._invoke(["--resume", "abc123"], tmp_path)
assert cmd == ["/usr/bin/codex", "resume", "abc123"]
def test_continue_flag_maps_to_continue(self, tmp_path: Path) -> None:
cmd = self._invoke(["--continue"], tmp_path)
assert cmd == ["/usr/bin/codex", "continue"]
def test_last_flag_maps_to_resume_last(self, tmp_path: Path) -> None:
cmd = self._invoke(["--last"], tmp_path)
assert cmd == ["/usr/bin/codex", "resume", "--last"]
def test_all_flag_maps_to_resume_all(self, tmp_path: Path) -> None:
cmd = self._invoke(["--all"], tmp_path)
assert cmd == ["/usr/bin/codex", "resume", "--all"]
class TestCodexListSessions:
"""``myagents codex --list`` reports resumable sessions."""
+2 -3
View File
@@ -102,7 +102,6 @@ class TestMycodexEntrypoint:
patch("myagents.launcher.subprocess.run") as mock_run,
):
mock_run.return_value = MagicMock(returncode=0)
result = runner.invoke(codex_cli, ["--cwd", str(tmp_path), "resume", "abc123"])
result = runner.invoke(codex_cli, ["--cwd", str(tmp_path), "-r", "abc123"])
assert result.exit_code == 0
assert "resume" in mock_run.call_args[0][0]
assert "abc123" in mock_run.call_args[0][0]
assert mock_run.call_args[0][0] == ["/usr/bin/codex", "resume", "abc123"]