from core_db import AuditMixin, Base, EntityMixin, VersionMixin from core_shared import JSONValue from sqlalchemy import Boolean, String from sqlalchemy.dialects.sqlite import JSON from sqlalchemy.orm import Mapped, mapped_column class ToolBinding(EntityMixin, AuditMixin, VersionMixin, Base): __tablename__ = "tool_binding" app_id: Mapped[str] = mapped_column(String(36), index=True) tool_version_id: Mapped[str] = mapped_column(String(36)) credential_id: Mapped[str | None] = mapped_column(String(36), nullable=True) binding_scope: Mapped[str] = mapped_column(String(32), default="app") enabled: Mapped[bool] = mapped_column(Boolean, default=True) config_json: Mapped[dict[str, JSONValue] | None] = mapped_column(JSON, nullable=True)