You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
mulit-agent/mulit_agent/tests/test_agent_service_skills.py

76 lines
2.7 KiB

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") == ""