from pydantic import BaseModel, Field class CuratorConfig(BaseModel): """Configuration for the background skill curator.""" # 默认关闭:curator 仅在用户显式开启时才运行(配合 SkillEvolutionConfig.enabled # 总开关,二者均为安全默认 False —— 未显式 opt-in 则整套技能进化不动作)。 enabled: bool = Field(default=False, description="Whether the curator runs automatically.") interval_hours: int = Field(default=168, description="Hours between curator runs (default: 7 days).") stale_after_days: int = Field(default=30, description="Days of inactivity before a skill is marked stale.") archive_after_days: int = Field(default=90, description="Days of inactivity before a stale skill is archived.") # LLM 评审整体超时:agent.invoke 内部可能多轮调 LLM,模型层的单次 request_timeout # 兜不住整体;超过此秒数则中止本次评审,curator 正常收尾并释放运行锁。 review_timeout_seconds: int = Field(default=600, description="Overall timeout (seconds) for the LLM review pass.") # curator LLM 评审使用的模型名(对应 config.yaml models[].name);为空则用主模型。 model_name: str | None = Field(default=None, description="Model name for the curator LLM review pass. Defaults to the primary chat model.") class SkillEvolutionConfig(BaseModel): """Configuration for agent-managed skill evolution.""" enabled: bool = Field( default=False, description="Whether the agent can create and modify skills under skills/custom.", ) curator: CuratorConfig = Field( default_factory=CuratorConfig, description="Configuration for the background skill curator.", )