from typing import TYPE_CHECKING from core_domain import ( SkillDefinitionContract, SkillInstallationContract, SkillInstallStatus, SkillRunContract, SkillStatus, SkillVersionContract, SkillVersionStatus, ) from core_shared import JSONValue from pydantic import BaseModel, Field if TYPE_CHECKING: from app.db.models import SkillDefinition, SkillInstallation, SkillRun, SkillVersion class SkillCreateRequest(BaseModel): code: str name: str skill_type: str = "template" description: str | None = None owner_user_id: str | None = None metadata_json: dict[str, JSONValue] = Field(default_factory=dict) class SkillStatusUpdateRequest(BaseModel): status: SkillStatus class SkillResponse(SkillDefinitionContract): @classmethod def from_entity(cls, entity: "SkillDefinition") -> "SkillResponse": return cls.model_validate(entity, from_attributes=True) class SkillVersionCreateRequest(BaseModel): skill_id: str status: SkillVersionStatus = "draft" runtime_type: str = "template" entrypoint: str | None = None parameter_schema_json: dict[str, JSONValue] = Field(default_factory=dict) output_schema_json: dict[str, JSONValue] = Field(default_factory=dict) implementation_json: dict[str, JSONValue] = Field(default_factory=dict) class SkillVersionResponse(SkillVersionContract): @classmethod def from_entity(cls, entity: "SkillVersion") -> "SkillVersionResponse": return cls.model_validate(entity, from_attributes=True) class SkillInstallRequest(BaseModel): skill_id: str skill_version_id: str | None = None install_scope: str = "global" scope_id: str config_json: dict[str, JSONValue] = Field(default_factory=dict) installed_by: str | None = None class SkillInstallationStatusUpdateRequest(BaseModel): status: SkillInstallStatus class SkillInstallationResponse(SkillInstallationContract): @classmethod def from_entity(cls, entity: "SkillInstallation") -> "SkillInstallationResponse": return cls.model_validate(entity, from_attributes=True) class SkillRunCreateRequest(BaseModel): skill_id: str skill_version_id: str | None = None installation_id: str | None = None input_json: dict[str, JSONValue] = Field(default_factory=dict) class SkillRunExecuteRequest(BaseModel): worker_key: str | None = None class SkillRunResponse(SkillRunContract): @classmethod def from_entity(cls, entity: "SkillRun") -> "SkillRunResponse": return cls.model_validate(entity, from_attributes=True)