"""IPC-Nachrichten-Umschlag (PLAN.md §6.2).""" from __future__ import annotations import time import uuid from enum import StrEnum from pydantic import BaseModel, Field PROTOCOL_VERSION = 1 class MessageType(StrEnum): COMMAND = "command" EVENT = "event" SNAPSHOT = "snapshot" ACK = "ack" ERROR = "error" TELEMETRY = "telemetry" HEARTBEAT = "heartbeat" class Envelope(BaseModel): """Jede IPC-Nachricht besitzt mindestens diese Felder (§6.2).""" protocol_version: int = PROTOCOL_VERSION message_id: str = Field(default_factory=lambda: str(uuid.uuid4())) type: MessageType revision: int = 0 monotonic_timestamp_ns: int = Field(default_factory=lambda: time.monotonic_ns()) payload: dict = Field(default_factory=dict) def model_post_init(self, _ctx: object) -> None: if self.protocol_version != PROTOCOL_VERSION: raise ValueError( f"protocol_version {self.protocol_version} != {PROTOCOL_VERSION}" )