from __future__ import annotations from typing import Literal from pydantic import BaseModel, Field ConfirmStatus = Literal["PENDING", "TRUSTED", "SUSPICIOUS", "IGNORED", "NEED_MORE_INFO"] ItemType = Literal["service", "process"] class StatusUpdate(BaseModel): confirm_status: ConfirmStatus user_note: str | None = None class BatchStatusUpdate(BaseModel): ids: list[int] = Field(default_factory=list) confirm_status: ConfirmStatus user_note: str | None = None class AiImportItem(BaseModel): type: ItemType name: str description: str | None = None judgement: Literal["TRUSTED", "SUSPICIOUS", "NEED_MORE_INFO"] risk_level: Literal["LOW", "MEDIUM", "HIGH"] reason: str | None = None suggestion: str | None = None class AiImportRequest(BaseModel): items: list[AiImportItem] class PromptRequest(BaseModel): ids: list[int] | None = None scope: Literal["selected", "pending"] = "pending" class TagCreate(BaseModel): name: str = Field(min_length=1, max_length=80) description: str | None = None is_controllable: bool = True class TagUpdate(BaseModel): name: str = Field(min_length=1, max_length=80) description: str | None = None is_controllable: bool = True class TagAssignRequest(BaseModel): tag_ids: list[int] = Field(default_factory=list) class ProcessStartRequest(BaseModel): command: str = Field(min_length=1) cwd: str | None = None