Files

97 lines
2.5 KiB
Python

from pydantic import BaseModel, Field
from typing import Optional
from datetime import datetime
from uuid import uuid4
class CardPosition(BaseModel):
session_id: str
x: float = 0
y: float = 0
width: float = 420
height: float = 280
class ViewCardPosition(BaseModel):
output_id: str
x: float = 0
y: float = 0
width: float = 480
height: float = 360
class BrowserTab(BaseModel):
id: str
url: str = ""
title: str = ""
favicon: Optional[str] = None
class BrowserCardPosition(BaseModel):
browser_id: str
url: str = ""
tabs: list[BrowserTab] = Field(default_factory=list)
activeTabId: str = ""
x: float = 0
y: float = 0
width: float = 1280
height: float = 800
# Spawning agent session id; frontend auto-removes the browser when this agent reaches a terminal state.
spawned_by: Optional[str] = None
class NotePosition(BaseModel):
note_id: str
x: float = 0
y: float = 0
width: float = 240
height: float = 200
content: str = ""
color: str = "yellow"
class WorkflowCardPosition(BaseModel):
workflow_id: str
x: float = 0
y: float = 0
width: float = 440
height: float = 520
source_session_id: Optional[str] = None
class WorkflowsHubPosition(BaseModel):
x: float = 0
y: float = 0
width: float = 1200
height: float = 640
class DashboardLayout(BaseModel):
cards: dict[str, CardPosition] = Field(default_factory=dict)
view_cards: dict[str, ViewCardPosition] = Field(default_factory=dict)
browser_cards: dict[str, BrowserCardPosition] = Field(default_factory=dict)
workflow_cards: dict[str, WorkflowCardPosition] = Field(default_factory=dict)
workflows_hub: Optional[WorkflowsHubPosition] = None
notes: dict[str, NotePosition] = Field(default_factory=dict)
expanded_session_ids: list[str] = Field(default_factory=list)
class Dashboard(BaseModel):
id: str = Field(default_factory=lambda: uuid4().hex)
name: str = "Untitled Dashboard"
auto_named: bool = False
created_at: datetime = Field(default_factory=datetime.now)
updated_at: datetime = Field(default_factory=datetime.now)
layout: DashboardLayout = Field(default_factory=DashboardLayout)
thumbnail: Optional[str] = None
class DashboardCreate(BaseModel):
name: str = "Untitled Dashboard"
class DashboardUpdate(BaseModel):
name: Optional[str] = None
layout: Optional[DashboardLayout] = None
thumbnail: Optional[str] = None