redbotu 5021c8c2ea feat: 补齐任务执行指标与结构化结果摘要
- 补齐 tool_call 和 edge 验证链路的 duration_ms 计算与返回
- 任务详情和任务报告新增 result_summary_detail 结构化摘要
- 摘要中补充最终状态、失败原因、software-a 摘要、审批摘要、验证摘要
- 软件A层术语统一为“最小能力实现”
- 同步更新 README、当前进度总结和相关设计文档
- 补充并通过对应自动化测试
2026-04-08 22:35:25 +08:00

177 lines
4.2 KiB
Python

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 ApprovalSummary(BaseModel):
approval_id: str | None = None
approval_status: str | None = None
reason: str | None = None
class SoftwareAResultSummary(BaseModel):
software_a_task_id: str | None = None
task_status: str | None = None
progress_percent: int | None = None
error_detail: str | None = None
started_at: str | None = None
finished_at: str | None = None
class VerificationResultSummary(BaseModel):
step_id: str | None = None
step_status: str | None = None
success: bool | None = None
duration_ms: int | None = None
message: str | None = None
class ResultSummaryDetail(BaseModel):
final_status: str
final_reason: str | None = None
approval: ApprovalSummary | None = None
software_a: SoftwareAResultSummary | None = None
verification: VerificationResultSummary | 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
result_summary_detail: ResultSummaryDetail | 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
duration_ms: int | 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
result_summary_detail: ResultSummaryDetail | None = None
audit_trace: list[AuditTraceItem]