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.
152 lines
3.6 KiB
Python
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)
|