from mulit_agent_app.application.agent_service import AgentService from mulit_agent_app.config import AgentConfig from mulit_agent_app.infrastructure.database import AgentDatabase class _Session: def __init__(self) -> None: self.acks: list[tuple[str, str, str]] = [] def send_skill_ack(self, skill_id: str, status: str, error: str = "") -> None: self.acks.append((skill_id, status, error)) class _Executor: def __init__(self) -> None: self.prefix = "" def set_instruction_prefix(self, value: str) -> None: self.prefix = value def test_chinese_skill_name_installs_and_empty_snapshot_removes_it(tmp_path): config = AgentConfig(tmp_path, tmp_path / "settings.json", tmp_path / "agent.sqlite3", tmp_path / "agent.log") service = AgentService.__new__(AgentService) service._config = config service._database = AgentDatabase(config.database_path) service._database.initialize() service.session = _Session() service.task_executor = _Executor() content = "# 图生图工具\n\n仅用于测试。" skill_id = "a" * 32 service.apply_skill_snapshot( { "skills": [ { "id": skill_id, "name": "图生图工具", "version": "0.3.2", "content": content, # 校验值只供协议兼容;Agent 必须接受控制端内容并覆盖本地文件。 "checksum": "outdated-checksum", } ] } ) assert (config.data_dir / "skills" / skill_id / "SKILL.md").read_text(encoding="utf-8") == content assert service._database.get_meta(f"skill.{skill_id}.name") == "图生图工具" assert service.session.acks == [(skill_id, "applied", "")] # 人工本地改动不是错误;下一份控制端快照应直接覆盖它。 target = config.data_dir / "skills" / skill_id / "SKILL.md" target.write_text("# 本地临时修改", encoding="utf-8") replacement = "# 总控下发版本\n\n应覆盖本地内容。" service.apply_skill_snapshot( { "skills": [ { "id": skill_id, "name": "图生图工具", "version": "0.3.3", "content": replacement, "checksum": "another-outdated-checksum", } ] } ) assert target.read_text(encoding="utf-8") == replacement assert service.session.acks[-1] == (skill_id, "applied", "") service.apply_skill_snapshot({"skills": []}) assert not (config.data_dir / "skills" / skill_id).exists() assert service._database.get_meta(f"skill.{skill_id}.name") == ""