from sqlalchemy import Integer, String from sqlalchemy.dialects.sqlite import JSON from sqlalchemy.orm import Mapped, mapped_column from core_db import AuditMixin, Base, TenantMixin, VersionMixin from core_shared import JSONValue class ToolVersion(TenantMixin, AuditMixin, VersionMixin, Base): __tablename__ = "tool_version" tool_id: Mapped[str] = mapped_column(String(36), index=True) version_no: Mapped[int] = mapped_column(Integer) input_schema_json: Mapped[dict[str, JSONValue] | None] = mapped_column(JSON, nullable=True) output_schema_json: Mapped[dict[str, JSONValue] | None] = mapped_column(JSON, nullable=True) invoke_config_json: Mapped[dict[str, JSONValue] | None] = mapped_column(JSON, nullable=True) timeout_ms: Mapped[int | None] = mapped_column(Integer, nullable=True) retry_policy_json: Mapped[dict[str, JSONValue] | None] = mapped_column(JSON, nullable=True)