Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
- AgentConfig.labels ARRAY(String) field - Auto-assign matches task labels ↔ agent labels (not capabilities) - labels in AgentConfigOut, auth.ok, config.updated
145 lines
3.0 KiB
Python
145 lines
3.0 KiB
Python
"""Shared Pydantic schemas — single source of truth for all API responses."""
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class MemberBrief(BaseModel):
|
|
"""Compact member reference for nested objects (author, assignee, reviewer, uploader)."""
|
|
id: str
|
|
slug: str
|
|
name: str
|
|
|
|
|
|
class AttachmentOut(BaseModel):
|
|
id: str
|
|
filename: str
|
|
mime_type: str | None = None
|
|
size: int
|
|
|
|
|
|
class StepOut(BaseModel):
|
|
id: str
|
|
task_id: str
|
|
title: str
|
|
done: bool
|
|
position: int
|
|
created_at: str
|
|
|
|
|
|
class TaskOut(BaseModel):
|
|
id: str
|
|
project_id: str
|
|
parent_id: str | None = None
|
|
number: int
|
|
key: str
|
|
title: str
|
|
description: str | None = None
|
|
type: str
|
|
status: str
|
|
priority: str
|
|
labels: list[str] = []
|
|
assignee_id: str | None = None
|
|
assignee: MemberBrief | None = None
|
|
reviewer_id: str | None = None
|
|
reviewer: MemberBrief | None = None
|
|
watcher_ids: list[str] = []
|
|
depends_on: list[str] = []
|
|
position: int
|
|
time_spent: int
|
|
steps: list[StepOut] = []
|
|
subtasks: list["SubtaskBrief"] = []
|
|
parent_key: str | None = None
|
|
parent_title: str | None = None
|
|
created_at: str
|
|
updated_at: str
|
|
|
|
|
|
class SubtaskBrief(BaseModel):
|
|
id: str
|
|
key: str
|
|
title: str
|
|
status: str
|
|
assignee: MemberBrief | None = None
|
|
|
|
|
|
class MessageOut(BaseModel):
|
|
id: str
|
|
chat_id: str | None = None
|
|
task_id: str | None = None
|
|
parent_id: str | None = None
|
|
author_type: str
|
|
author_id: str | None = None
|
|
author: MemberBrief | None = None
|
|
content: str
|
|
thinking: str | None = None
|
|
tool_log: list[dict] | None = None
|
|
mentions: list[MemberBrief] = []
|
|
actor: MemberBrief | None = None
|
|
voice_url: str | None = None
|
|
attachments: list[AttachmentOut] = []
|
|
created_at: str
|
|
|
|
|
|
class AgentConfigOut(BaseModel):
|
|
capabilities: list[str] = []
|
|
labels: list[str] = []
|
|
chat_listen: str
|
|
task_listen: str
|
|
prompt: str | None = None
|
|
model: str | None = None
|
|
|
|
|
|
class MemberOut(BaseModel):
|
|
id: str
|
|
name: str
|
|
slug: str
|
|
type: str
|
|
role: str
|
|
status: str
|
|
avatar_url: str | None = None
|
|
is_active: bool = True
|
|
agent_config: AgentConfigOut | None = None
|
|
token: str | None = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class ProjectOut(BaseModel):
|
|
id: str
|
|
name: str
|
|
slug: str
|
|
description: str | None = None
|
|
repo_urls: list[str] = []
|
|
status: str
|
|
task_counter: int
|
|
chat_id: str | None = None
|
|
auto_assign: bool = False
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class UploadOut(BaseModel):
|
|
"""Response from file upload endpoint."""
|
|
file_id: str
|
|
filename: str
|
|
mime_type: str | None = None
|
|
size: int
|
|
storage_name: str
|
|
|
|
|
|
class OkResponse(BaseModel):
|
|
ok: bool = True
|
|
|
|
|
|
class ProjectFileOut(BaseModel):
|
|
id: str
|
|
filename: str
|
|
description: str | None = None
|
|
mime_type: str | None = None
|
|
size: int
|
|
uploaded_by: MemberBrief | None = None
|
|
created_at: str
|
|
updated_at: str
|