from __future__ import annotations from typing import Any from pydantic import BaseModel, Field class ParsedIntent(BaseModel): action_type: str | None = None app_code: str | None = None env: str | None = None version: str | None = None class CreateTaskRequest(BaseModel): input_text: str channel: str session_id: str tenant_id: str context: dict[str, Any] = Field(default_factory=dict) class CreateTaskData(BaseModel): task_id: str parsed_intent: ParsedIntent missing_slots: list[str] risk_level: str task_status: str next_action: str class ConfirmTaskRequest(BaseModel): confirmed: bool comment: str | None = None class CancelTaskRequest(BaseModel): reason: str | None = None class ConfirmTaskData(BaseModel): task_id: str task_status: str approval_status: str approval_id: str | None = None software_a_task_id: str | None = None software_a_task_status: str | None = None class ToolCallItem(BaseModel): tool_name: str success: bool class VerificationResult(BaseModel): process_ok: bool | None = None port_ok: bool | None = None http_ok: bool | None = None log_error_count: int | None = None class TaskDetailData(BaseModel): task_id: str task_status: str approval_status: str risk_level: str intent: ParsedIntent software_a_task_id: str | None = None software_a_task_status: str | None = None tool_calls: list[ToolCallItem] verification_result: VerificationResult | None = None summary: str | None = None class TaskBasic(BaseModel): task_id: str task_status: str approval_status: str risk_level: str created_at: str updated_at: str confirmed_at: str | None = None class ApprovalTraceItem(BaseModel): approval_id: str approval_status: str risk_level: str approvers: list[str] reason: str | None = None created_at: str updated_at: str class ToolTraceItem(BaseModel): tool_call_id: str request_id: str | None = None operator_user_id: str | None = None operator_user_name: str | None = None tool_name: str success: bool duration_ms: int | None = None started_at: str | None = None finished_at: str | None = None request_payload: dict[str, Any] response_payload: dict[str, Any] class VerificationTraceItem(BaseModel): step_id: str edge_id: str tool_name: str step_status: str success: bool | None = None message: str | None = None params: dict[str, Any] result_data: dict[str, Any] evidence: dict[str, Any] started_at: str | None = None finished_at: str | None = None class AuditTraceItem(BaseModel): audit_id: str request_id: str | None = None action: str result: str operator_user_id: str | None = None operator_user_name: str | None = None target: str | None = None detail: dict[str, Any] timestamp: str class TaskReportData(BaseModel): task_basic: TaskBasic intent_snapshot: ParsedIntent approval_trace: list[ApprovalTraceItem] tool_trace: list[ToolTraceItem] verification_trace: list[VerificationTraceItem] result_summary: str | None = None audit_trace: list[AuditTraceItem]