- 新增 app_metadata 模型、仓储与服务 - 将默认 edge 验证步骤改为由 app_metadata 驱动生成 - 新增 chat_session / chat_message 会话层模型与 chat service - 新增 demo chat API,支持会话创建、消息发送、任务确认 - 新增最小 Web Demo 页面,形成聊天式演示入口 - 增强任务报告,补充 audit_summary 与更细粒度 task_metrics - 增强 edge-agent 执行器:tcp_probe、日志时间范围过滤、进程指标与更灵活健康检查 - 更新 README 与当前进度总结,MVP 进度推进到约 94%
210 lines
5.3 KiB
Python
210 lines
5.3 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 AuditSummary(BaseModel):
|
|
audit_event_count: int = 0
|
|
failure_count: int = 0
|
|
pending_count: int = 0
|
|
cancelled_count: int = 0
|
|
reported_count: int = 0
|
|
action_types: list[str] = Field(default_factory=list)
|
|
operator_user_names: list[str] = Field(default_factory=list)
|
|
result_counts: dict[str, int] = Field(default_factory=dict)
|
|
|
|
|
|
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
|
|
software_a_duration_ms_total: int = 0
|
|
tool_call_duration_ms_total: int = 0
|
|
verification_duration_ms_total: int = 0
|
|
verification_queue_wait_duration_ms_total: int = 0
|
|
verification_end_to_end_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
|
|
audit_failure_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
|
|
audit_summary: AuditSummary
|
|
result_summary: str | None = None
|
|
result_summary_detail: ResultSummaryDetail | None = None
|
|
audit_trace: list[AuditTraceItem]
|