import uuid from datetime import datetime from typing import Literal from pydantic import BaseModel, ConfigDict, Field ExecutionState = Literal["manual", "queued", "scheduled", "launching", "paused", "completed", "cancelled"] LaunchMode = Literal["manual", "queued", "scheduled", "immediate"] ConcurrencyMode = Literal["sequential", "parallel"] LaunchRequestStatus = Literal["requested", "accepted", "completed", "cancelled"] class ExecutionIntentUpdate(BaseModel): execution_state: ExecutionState | None = None launch_mode: LaunchMode | None = None concurrency_mode: ConcurrencyMode | None = None queue_rank: int | None = None execution_group: str | None = None scheduled_for: datetime | None = None class ExecutionIntentRead(BaseModel): workstream_id: uuid.UUID execution_state: ExecutionState launch_mode: LaunchMode concurrency_mode: ConcurrencyMode queue_rank: int | None = None execution_group: str | None = None scheduled_for: datetime | None = None class WorkplanQueueItem(BaseModel): workstream_id: uuid.UUID slug: str title: str status: str repo_id: uuid.UUID | None = None planning_priority: str | None = None planning_order: int | None = None execution_state: ExecutionState launch_mode: LaunchMode concurrency_mode: ConcurrencyMode queue_rank: int | None = None execution_group: str | None = None scheduled_for: datetime | None = None eligible: bool blocked_by_workstream_ids: list[uuid.UUID] = Field(default_factory=list) blocked_by_task_ids: list[uuid.UUID] = Field(default_factory=list) sort_key: list[str | int] = Field(default_factory=list) class LaunchRequestCreate(BaseModel): workstream_id: uuid.UUID requested_by: str = "dashboard" requested_actor: str | None = None launch_mode: LaunchMode = "queued" concurrency_mode: ConcurrencyMode = "sequential" priority: str | None = None repo_id: uuid.UUID | None = None branch_preference: str | None = None immediate_pickup: bool = False notes: str | None = None request_metadata: dict = Field(default_factory=dict) class LaunchRequestRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: uuid.UUID workstream_id: uuid.UUID requested_by: str requested_actor: str | None = None launch_mode: LaunchMode concurrency_mode: ConcurrencyMode priority: str | None = None repo_id: uuid.UUID | None = None branch_preference: str | None = None immediate_pickup: bool status: LaunchRequestStatus notes: str | None = None request_metadata: dict = Field(default_factory=dict) created_at: datetime updated_at: datetime class ExecutionSemantics(BaseModel): execution_states: dict[str, str] launch_modes: dict[str, str] concurrency_modes: dict[str, str] state_hub_responsibility: list[str] activity_core_responsibility: list[str]