From 16c0069aa028afef31fa304c6d52887823f298a4 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Fri, 9 Jan 2026 10:11:54 +1300 Subject: [PATCH] fix(pi): create sessions under run base dir (#68) Co-authored-by: banteg <4562643+banteg@users.noreply.github.com> --- src/takopi/runners/pi.py | 5 +++-- tests/test_pi_runner.py | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/takopi/runners/pi.py b/src/takopi/runners/pi.py index a8931f9..714950a 100644 --- a/src/takopi/runners/pi.py +++ b/src/takopi/runners/pi.py @@ -27,7 +27,7 @@ from ..model import ( ) from ..runner import JsonlSubprocessRunner, ResumeTokenMixin, Runner from ..schemas import pi as pi_schema -from ..utils.paths import relativize_command, relativize_path +from ..utils.paths import get_run_base_dir, relativize_command, relativize_path logger = get_logger(__name__) @@ -421,7 +421,8 @@ class PiRunner(ResumeTokenMixin, JsonlSubprocessRunner): ] def _new_session_path(self) -> str: - session_dir = _default_session_dir(Path.cwd()) + cwd = get_run_base_dir() or Path.cwd() + session_dir = _default_session_dir(cwd) session_dir.mkdir(parents=True, exist_ok=True) timestamp = datetime.now(timezone.utc).isoformat() safe_timestamp = timestamp.replace(":", "-").replace(".", "-") diff --git a/tests/test_pi_runner.py b/tests/test_pi_runner.py index 9acc225..8593fe4 100644 --- a/tests/test_pi_runner.py +++ b/tests/test_pi_runner.py @@ -1,4 +1,5 @@ from pathlib import Path +from unittest.mock import patch import anyio import pytest @@ -48,6 +49,7 @@ def test_translate_success_fixture() -> None: assert isinstance(events[0], StartedEvent) started = next(evt for evt in events if isinstance(evt, StartedEvent)) + assert started.meta is None action_events = [evt for evt in events if isinstance(evt, ActionEvent)] assert len(action_events) == 4 @@ -128,3 +130,25 @@ async def test_run_serializes_same_session() -> None: await anyio.sleep(0) gate.set() assert max_in_flight == 1 + + +def test_session_path_prefers_run_base_dir(tmp_path: Path) -> None: + runner = PiRunner( + extra_args=[], + model=None, + provider=None, + ) + project_cwd = Path("/project") + session_root = tmp_path / "sessions" + + with ( + patch("takopi.runners.pi.get_run_base_dir", return_value=project_cwd), + patch( + "takopi.runners.pi._default_session_dir", + return_value=session_root, + ) as default_session_dir, + ): + session_path = runner._new_session_path() + + default_session_dir.assert_called_once_with(project_cwd) + assert str(session_root) in session_path