"""Mounted AI Runtime 核心运行时对象。""" from __future__ import annotations from typing import Any, Optional from sqlalchemy import BigInteger, Boolean, Float, ForeignKey, Integer, Text, TIMESTAMP, UniqueConstraint, VARCHAR from sqlalchemy.orm import Mapped, mapped_column from .base import Base from .types import JSONB class MountedTopicWorkspace(Base): __tablename__ = "mounted_topic_workspaces" __table_args__ = ( UniqueConstraint( "tenant_id", "source_system", "topic_key", name="uq_mounted_topic_workspace_source_topic", ), ) id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) topic_key: Mapped[str] = mapped_column(VARCHAR(128), nullable=False, index=True) source_system: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, index=True) channel_ref: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True) conversation_scope_key: Mapped[Optional[str]] = mapped_column(VARCHAR(160), nullable=True, index=True) thread_key: Mapped[Optional[str]] = mapped_column(VARCHAR(255), nullable=True, index=True) root_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True) mode: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="chat", index=True) status: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="active", index=True) plan_status: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="idle", index=True) facts_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) goals_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) constraints_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) options_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) open_questions: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) pending_actions: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) bound_entities: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) readiness_score: Mapped[Optional[float]] = mapped_column(Float, nullable=True, default=0.0) last_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True) last_triggered_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True) metadata_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) class MountedDraftWorkspace(Base): __tablename__ = "mounted_draft_workspaces" __table_args__ = ( UniqueConstraint( "tenant_id", "topic_workspace_id", name="uq_mounted_draft_workspace_topic", ), ) id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) topic_workspace_id: Mapped[int] = mapped_column( Integer, ForeignKey("mounted_topic_workspaces.id", ondelete="CASCADE"), nullable=False, index=True, ) state: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="collecting", index=True) draft_version: Mapped[int] = mapped_column(Integer, nullable=False, default=0) requirement_card: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) draft_payload: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) required_confirmations: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) last_ready_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True) active_work_item_id: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True) latest_source_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True) latest_reply_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True) confirm_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True) class MountedConversationRun(Base): __tablename__ = "mounted_conversation_runs" __table_args__ = ( UniqueConstraint("tenant_id", "trace_id", name="uq_mounted_conversation_run_trace"), ) id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) trace_id: Mapped[str] = mapped_column(VARCHAR(64), nullable=False, index=True) topic_workspace_id: Mapped[Optional[int]] = mapped_column( Integer, ForeignKey("mounted_topic_workspaces.id", ondelete="SET NULL"), nullable=True, index=True, ) source_system: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, index=True) source_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True) mode_before: Mapped[Optional[str]] = mapped_column(VARCHAR(24), nullable=True, index=True) mode_after: Mapped[Optional[str]] = mapped_column(VARCHAR(24), nullable=True, index=True) active_agent: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True, index=True) status: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="queued", index=True) trigger_reason: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True) context_layers_hit: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) tool_calls: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) final_reply: Mapped[Optional[str]] = mapped_column(Text, nullable=True) execution_outcome: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) error_text: Mapped[Optional[str]] = mapped_column(Text, nullable=True) started_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True) completed_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True) class MountedAgentTrace(Base): __tablename__ = "mounted_agent_traces" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) conversation_run_id: Mapped[int] = mapped_column( Integer, ForeignKey("mounted_conversation_runs.id", ondelete="CASCADE"), nullable=False, index=True, ) agent_name: Mapped[str] = mapped_column(VARCHAR(64), nullable=False, index=True) status: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="completed", index=True) latency_ms: Mapped[Optional[int]] = mapped_column(Integer, nullable=True) input_summary: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) output_summary: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) tool_trace: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) failure_reason: Mapped[Optional[str]] = mapped_column(Text, nullable=True) class MountedSourceActivation(Base): __tablename__ = "mounted_source_activations" __table_args__ = ( UniqueConstraint( "tenant_id", "source_system", "scope_type", "scope_ref", name="uq_mounted_source_activation_scope", ), ) id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) source_system: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, index=True) scope_type: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="tenant", index=True) scope_ref: Mapped[str] = mapped_column(VARCHAR(128), nullable=False, index=True) status: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="active", index=True) cutover_mode: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="shadow", index=True) auto_reply_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False) metadata_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) notes: Mapped[Optional[str]] = mapped_column(Text, nullable=True) last_seen_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True) class MountedToolCapabilityPolicy(Base): __tablename__ = "mounted_tool_capability_policies" __table_args__ = ( UniqueConstraint( "tenant_id", "tool_name", name="uq_mounted_tool_capability_policy_tool", ), ) id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) tool_name: Mapped[str] = mapped_column(VARCHAR(128), nullable=False, index=True) risk_level: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="medium", index=True) confirm_required: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True) auto_execute_allowed: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False) is_active: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True, index=True) source_scope: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) tenant_scope: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) policy_metadata: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) notes: Mapped[Optional[str]] = mapped_column(Text, nullable=True) __all__ = [ "MountedAgentTrace", "MountedConversationRun", "MountedDraftWorkspace", "MountedSourceActivation", "MountedToolCapabilityPolicy", "MountedTopicWorkspace", ]