Absolute path to a workflow run's journal file, ``~/.clawcodex/transcripts/workflows/ .json``. Workflow journals live alongside agent transcripts (the per-user session storage root), not under the project tree, so resume state doesn't become VCS noise. ``run_id`` is sanitized
(run_id: str)
| 84 | |
| 85 | |
| 86 | def get_workflow_run_path(run_id: str) -> str: |
| 87 | """Absolute path to a workflow run's journal file, |
| 88 | ``~/.clawcodex/transcripts/workflows/<run_id>.json``. |
| 89 | |
| 90 | Workflow journals live alongside agent transcripts (the per-user session |
| 91 | storage root), not under the project tree, so resume state doesn't become |
| 92 | VCS noise. ``run_id`` is sanitized like an agent id.""" |
| 93 | safe_id = _sanitize_agent_id(run_id) |
| 94 | root = _transcripts_root() / "workflows" |
| 95 | root.mkdir(parents=True, exist_ok=True) |
| 96 | return str(root / f"{safe_id}.json") |
| 97 | |
| 98 | |
| 99 | def _sanitize_agent_id(agent_id: str) -> str: |