mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-06 06:52:20 +02:00
fix(cookbook): skip the pid sweep when the host has no procfs
`_cookbook_kill_session` kills the tmux session, then sweeps /proc for
model servers that survived the SIGHUP. The sweep had no guard, so on
macOS and Windows `os.listdir("/proc")` raised FileNotFoundError after
the kill had already succeeded. The function's outer except turned that
into `{"error": "...No such file or directory: '/proc'", "exit_code": 1}`
and skipped the state write that marks the session stopped — the agent
is told a stop failed that actually worked.
Guard the sweep with a procfs check, the way `_scan_running_model_processes`
already does a few hundred lines up. The root and the check now live in
`core/platform_compat`, which is where OS differences belong and which
makes both branches patchable from a test on either kind of host.
Adds a class-level guard test: the third instance of this defect, and two
of the three were found by reading source rather than by a test.
This commit is contained in:
@@ -36,6 +36,19 @@ IS_APPLE_SILICON = (
|
||||
)
|
||||
|
||||
|
||||
# ── procfs ──────────────────────────────────────────────────────────────────
|
||||
# Linux exposes one directory per pid under /proc; macOS and Windows have no
|
||||
# procfs at all. Any code that walks it must skip the walk rather than raise.
|
||||
# Kept as a module attribute so both branches stay testable on either kind of
|
||||
# host.
|
||||
PROC_ROOT = Path("/proc")
|
||||
|
||||
|
||||
def has_procfs() -> bool:
|
||||
"""True when the host exposes a procfs pid tree that can be scanned."""
|
||||
return PROC_ROOT.is_dir()
|
||||
|
||||
|
||||
# ── File permissions ────────────────────────────────────────────────────────
|
||||
def safe_chmod(path, mode: int) -> bool:
|
||||
"""``os.chmod`` that is a harmless no-op on Windows.
|
||||
|
||||
Reference in New Issue
Block a user