Spaces:
Running
Running
| """Per-agent settings-file locators for e2e assertions. | |
| These paths mirror the logic in ``headroom.cli.init`` so e2e tests can | |
| verify that the right file was written without importing private init | |
| helpers. | |
| """ | |
| from __future__ import annotations | |
| from pathlib import Path | |
| from typing import Literal | |
| Agent = Literal["claude", "codex", "copilot", "openclaw"] | |
| Scope = Literal["user", "local"] | |
| def agent_settings_path(agent: Agent, *, scope: Scope, home: Path, project: Path) -> Path: | |
| """Return the file that ``headroom init`` should have written for ``agent``. | |
| ``home`` is the test's simulated HOME directory and ``project`` is the cwd | |
| used when invoking ``headroom init``. For global (``-g``) invocations only | |
| ``home`` matters; for local invocations only ``project`` matters. | |
| """ | |
| home = Path(home) | |
| project = Path(project) | |
| if agent == "claude": | |
| if scope == "user": | |
| return home / ".claude" / "settings.json" | |
| return project / ".claude" / "settings.local.json" | |
| if agent == "codex": | |
| if scope == "user": | |
| return home / ".codex" / "config.toml" | |
| return project / ".codex" / "config.toml" | |
| if agent == "copilot": | |
| # Copilot init requires -g; no local scope. | |
| return home / ".copilot" / "config.json" | |
| if agent == "openclaw": | |
| # OpenClaw init is delegated to `headroom wrap openclaw`; it writes | |
| # the openclaw json under $HOME. | |
| return home / ".openclaw" / "openclaw.json" | |
| raise ValueError(f"Unknown agent: {agent!r}") | |