Files
CASAN/packages/casan-harness/kernel/supervision.py
T

43 lines
1.4 KiB
Python

"""Runtime supervision capability negotiation without pretending support."""
from __future__ import annotations
from dataclasses import asdict, dataclass
from datetime import datetime, timezone
from typing import Any
@dataclass(frozen=True)
class RuntimeCapabilities:
canCancel: bool = False
canPause: bool = False
canResume: bool = False
canRollback: bool = False
canReduceAuthority: bool = False
canQuarantine: bool = False
CAPABILITY_FOR_INTERVENTION = {
"cancel": "canCancel",
"pause": "canPause",
"resume": "canResume",
"roll_back": "canRollback",
"reduce_authority": "canReduceAuthority",
"quarantine": "canQuarantine",
}
def negotiate_intervention(intervention_id: str, intervention: str, requested_by: str, capabilities: RuntimeCapabilities) -> dict[str, Any]:
capability = CAPABILITY_FOR_INTERVENTION.get(intervention)
supported = bool(capability and getattr(capabilities, capability))
return {
"intervention_id": intervention_id,
"type": intervention,
"requested_by": requested_by,
"status": "pending" if supported else "unsupported",
"reason_code": "runtime_intervention_supported_pending_adapter" if supported else "runtime_intervention_unsupported",
"required_capability": capability,
"runtime_capabilities": asdict(capabilities),
"timestamp": datetime.now(timezone.utc).isoformat().replace("+00:00", "Z"),
}