- 新增 task_report 任务级聚合指标 task_metrics - 补充创建任务幂等与失败路径/冲突测试 - 将后端测试基线提升到 20 passed - 新增 edge-agent 初始化代码、启动脚本与打包脚本 - 新增 http_health_check、check_port、check_process、grep_log 执行器 - 补充 edge-agent 基础测试并提升基线到 10 passed - 同步更新 backend README 与当前进度总结
194 lines
4.8 KiB
Python
194 lines
4.8 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 TaskMetrics(BaseModel):
|
|
total_duration_ms: int | None = None
|
|
confirm_wait_duration_ms: int | None = None
|
|
approval_duration_ms: int | None = None
|
|
execution_duration_ms: int | None = None
|
|
tool_call_duration_ms_total: int = 0
|
|
verification_duration_ms_total: int = 0
|
|
tool_call_count: int = 0
|
|
tool_call_success_count: int = 0
|
|
tool_call_failed_count: int = 0
|
|
verification_step_count: int = 0
|
|
verification_success_count: int = 0
|
|
verification_failed_count: int = 0
|
|
audit_event_count: int = 0
|
|
|
|
|
|
class TaskReportData(BaseModel):
|
|
task_basic: TaskBasic
|
|
intent_snapshot: ParsedIntent
|
|
approval_trace: list[ApprovalTraceItem]
|
|
tool_trace: list[ToolTraceItem]
|
|
verification_trace: list[VerificationTraceItem]
|
|
task_metrics: TaskMetrics
|
|
result_summary: str | None = None
|
|
result_summary_detail: ResultSummaryDetail | None = None
|
|
audit_trace: list[AuditTraceItem]
|