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.
76 lines
2.7 KiB
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") == ""
|
|
|