"""Testpaket (macht `-t .` und `python3 -I` möglich).

Prozessweiter Schutz (nach dem Vorfall vom 24.10.2026): Während der Tests
darf kein echtes Modell-CLI starten. subprocess.Popen verweigert jedes
Programm, dessen Name oder aufgelöster Pfad codex/codex.js/claude ist,
BEVOR ein Prozess entsteht.
"""
import os
import subprocess

_REAL_POPEN = subprocess.Popen
_FORBIDDEN_NAMES = frozenset({"codex", "codex.js", "claude"})


class ModelCliGuardError(RuntimeError):
    pass


def _program(args) -> str:
    if isinstance(args, (list, tuple)):
        return str(args[0]) if args else ""
    return str(args).split()[0] if str(args).split() else ""


class _GuardedPopen(_REAL_POPEN):
    def __init__(self, args, *pargs, **kwargs):
        program = _program(args)
        names = {os.path.basename(program), os.path.basename(os.path.realpath(program))}
        if names & _FORBIDDEN_NAMES or "/@openai/codex/" in os.path.realpath(program):
            raise ModelCliGuardError(f"TEST_GUARD: refusing to start {program!r}")
        super().__init__(args, *pargs, **kwargs)


subprocess.Popen = _GuardedPopen
