Initial commit: VoIdeaAI - voice-first AI idea assistant

This commit is contained in:
2026-05-13 12:51:42 +03:00
commit 688d043dad
421 changed files with 47915 additions and 0 deletions
+104
View File
@@ -0,0 +1,104 @@
"""Agent models for database storage."""
from datetime import datetime, timezone
from typing import Any
from uuid import UUID, uuid4
from sqlalchemy import DateTime, Enum, Index, String, Text, func
from sqlalchemy.dialects.postgresql import JSONB, UUID as PGUUID
from sqlalchemy.orm import Mapped, mapped_column
from app.core.base import SQLBase, TimestampMixin, UUIDMixin
class AgentState(SQLBase, UUIDMixin, TimestampMixin):
"""Agent state tracking."""
__tablename__ = "agent_states"
agent_id: Mapped[str] = mapped_column(String(50), unique=True, nullable=False)
status: Mapped[str] = mapped_column(String(20), nullable=False, default="idle")
last_run: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
current_task: Mapped[str | None] = mapped_column(Text, nullable=True)
extra: Mapped[dict | None] = mapped_column(JSONB, nullable=True)
__table_args__ = (
Index("ix_agent_states_agent_id", "agent_id"),
)
class AgentReport(SQLBase, UUIDMixin, TimestampMixin):
"""Agent execution reports."""
__tablename__ = "agent_reports"
agent_id: Mapped[str] = mapped_column(String(50), nullable=False, index=True)
status: Mapped[str] = mapped_column(String(20), nullable=False)
message: Mapped[str] = mapped_column(Text, nullable=True)
details: Mapped[dict | None] = mapped_column(JSONB, nullable=True)
duration_ms: Mapped[int] = mapped_column(default=0)
errors: Mapped[list | None] = mapped_column(JSONB, nullable=True)
context: Mapped[dict | None] = mapped_column(JSONB, nullable=True)
success: Mapped[bool] = mapped_column(default=True)
__table_args__ = (
Index("ix_agent_reports_agent_timestamp", "agent_id", "created_at"),
)
class AgentMetric(SQLBase, UUIDMixin):
"""Agent performance metrics."""
__tablename__ = "agent_metrics"
agent_id: Mapped[str] = mapped_column(String(50), nullable=False, index=True)
metric_name: Mapped[str] = mapped_column(String(100), nullable=False)
value: Mapped[float] = mapped_column(default=0.0)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(),
)
__table_args__ = (
Index("ix_agent_metrics_agent_metric", "agent_id", "metric_name"),
)
class BacklogItem(SQLBase, UUIDMixin, TimestampMixin):
"""Backlog items for tracking ideas, tasks, plans."""
__tablename__ = "backlog_items"
item_type: Mapped[str] = mapped_column(String(20), nullable=False)
title: Mapped[str] = mapped_column(String(255), nullable=False)
description: Mapped[str | None] = mapped_column(Text, nullable=True)
priority: Mapped[str] = mapped_column(String(20), nullable=False, default="medium")
status: Mapped[str] = mapped_column(String(20), nullable=False, default="pending")
source: Mapped[str] = mapped_column(String(50), nullable=False)
created_by: Mapped[str] = mapped_column(String(100), nullable=False)
parent_id: Mapped[UUID | None] = mapped_column(PGUUID, nullable=True)
tags: Mapped[list | None] = mapped_column(JSONB, nullable=True)
block_ref: Mapped[str | None] = mapped_column(String(255), nullable=True)
extra: Mapped[dict | None] = mapped_column(JSONB, nullable=True)
__table_args__ = (
Index("ix_backlog_items_type_status", "item_type", "status"),
Index("ix_backlog_items_priority", "priority"),
)
class Observation(SQLBase, UUIDMixin, TimestampMixin):
"""User observations from ObserverAgent."""
__tablename__ = "observations"
observation_type: Mapped[str] = mapped_column(String(50), nullable=False)
user_id: Mapped[str | None] = mapped_column(String(100), nullable=True, index=True)
metric_name: Mapped[str] = mapped_column(String(100), nullable=False)
metric_value: Mapped[float] = mapped_column(default=0.0)
extra: Mapped[dict | None] = mapped_column(JSONB, nullable=True)
session_id: Mapped[str | None] = mapped_column(String(100), nullable=True)
__table_args__ = (
Index("ix_observations_type_user", "observation_type", "user_id"),
)