Files
JARVIS/backend/app/schemas/agent.py
WIN-JHFT4D3SIVT\caoxiaozhu a7b6b5eb90 feat: add agent visibility APIs and harden runtime verification
Add Day 4 visibility endpoints and response models, strengthen collaboration/task verification behavior, and patch conversation schema startup migration for agent_state compatibility. Extend backend regression coverage for runtime schemas, verifier behavior, visibility APIs, router auth, and legacy conversation list loading.
2026-04-04 00:56:03 +08:00

152 lines
3.6 KiB
Python

from datetime import datetime
from typing import Any
from pydantic import BaseModel, Field
class AgentCreate(BaseModel):
name: str
role: str
description: str | None = None
system_prompt: str
spawn_permission: bool = False
class AgentOut(BaseModel):
id: str
name: str
role: str
description: str | None
is_active: bool
is_default: bool
model_config = {"from_attributes": True}
class AgentMessageOut(BaseModel):
id: str
agent_id: str
conversation_id: str
role: str
content: str
model_config = {"from_attributes": True}
class AgentStats(BaseModel):
agent_id: str
call_count: int
current_task: str | None
status: str # active | idle | disabled
class AgentConfigUpdate(BaseModel):
name: str | None = None
description: str | None = None
system_prompt: str | None = None
enabled: bool | None = None
selected_skill_ids: list[str] | None = None
class AgentConfigOut(BaseModel):
id: str
name: str
role: str
description: str | None
system_prompt: str
enabled: bool
is_active: bool
selected_skill_ids: list[str]
model_config = {"from_attributes": True}
class AgentVisibilityEventOut(BaseModel):
event_id: str
event_type: str
timestamp: datetime
conversation_id: str | None = None
agent_id: str | None = None
sub_commander_id: str | None = None
task_id: str | None = None
parent_task_id: str | None = None
child_task_id: str | None = None
thread_id: str | None = None
message_id: str | None = None
interrupt_id: str | None = None
recovery_id: str | None = None
payload: dict[str, Any] = Field(default_factory=dict)
severity: str = "info"
class AgentVisibilityEventsResponse(BaseModel):
conversation_id: str
total: int
limit: int
offset: int
items: list[AgentVisibilityEventOut]
class AgentVisibilityTaskSummaryOut(BaseModel):
task_id: str
role: str | None = None
owner_agent_id: str | None = None
status: str | None = None
summary: str | None = None
evidence_count: int = 0
class AgentVisibilityTopologyNodeOut(BaseModel):
agent_id: str
role: str | None = None
parent_agent_id: str | None = None
source: str
task_count: int = 0
completed_task_count: int = 0
class AgentVisibilityTopologyOut(BaseModel):
conversation_id: str
root_agent_id: str | None = None
current_agent: str | None = None
nodes: list[AgentVisibilityTopologyNodeOut]
edges: list[dict[str, str]]
tasks: list[AgentVisibilityTaskSummaryOut]
task_hierarchy: dict[str, list[str]] = Field(default_factory=dict)
class AgentVisibilityEvidenceOut(BaseModel):
conversation_id: str
task_id: str
task: dict[str, Any] | None = None
result: dict[str, Any] | None = None
tool_outcomes: list[dict[str, Any]] = Field(default_factory=list)
verifier: dict[str, Any]
class AgentVisibilityThreadMessageOut(BaseModel):
message_id: str
thread_id: str
from_agent_id: str
to_agent_id: str
task_id: str | None = None
reply_to_message_id: str | None = None
message_type: str
content_summary: str
created_at: datetime
payload: dict[str, Any] = Field(default_factory=dict)
class AgentVisibilityThreadOut(BaseModel):
conversation_id: str
thread_id: str
total: int
items: list[AgentVisibilityThreadMessageOut]
class AgentVisibilityVerifierOut(BaseModel):
conversation_id: str
status: str | None = None
summary: str | None = None
evidence: list[dict[str, Any]] = Field(default_factory=list)