Enhance README and message handler to support GitHub repository URLs. Updated installation instructions for skills to include GitHub URLs and improved error handling for skill source resolution in the codebase.

This commit is contained in:
Mimikko-zeus
2026-03-03 12:45:19 +08:00
parent 0def2deb9b
commit e39e201455
4 changed files with 306 additions and 27 deletions

View File

@@ -0,0 +1,76 @@
import asyncio
import io
from pathlib import Path
import zipfile
from src.ai.skills.base import SkillsManager
def _build_codex_skill_zip_bytes(markdown_text: str, root_name: str = "Humanizer-zh-main") -> bytes:
buffer = io.BytesIO()
with zipfile.ZipFile(buffer, "w", zipfile.ZIP_DEFLATED) as zf:
zf.writestr(f"{root_name}/SKILL.md", markdown_text)
return buffer.getvalue()
def test_resolve_network_source_supports_github_git_url(tmp_path: Path):
manager = SkillsManager(tmp_path / "skills")
url, hint_key, subpath = manager._resolve_network_source(
"https://github.com/op7418/Humanizer-zh.git"
)
assert url == "https://codeload.github.com/op7418/Humanizer-zh/zip/refs/heads/main"
assert hint_key == "humanizer_zh"
assert subpath is None
def test_install_skill_from_local_skill_markdown_source(tmp_path: Path):
source_dir = tmp_path / "Humanizer-zh-main"
source_dir.mkdir(parents=True, exist_ok=True)
(source_dir / "SKILL.md").write_text(
"# Humanizer-zh\n\nUse natural and human-like Chinese tone.\n",
encoding="utf-8",
)
manager = SkillsManager(tmp_path / "skills")
ok, installed_key = manager.install_skill_from_source(str(source_dir), skill_name="humanizer_zh")
assert ok
assert installed_key == "humanizer_zh"
installed_dir = tmp_path / "skills" / "humanizer_zh"
assert (installed_dir / "skill.json").exists()
assert (installed_dir / "main.py").exists()
assert (installed_dir / "SKILL.md").exists()
assert asyncio.run(manager.load_skill("humanizer_zh"))
tools = manager.get_all_tools()
assert "humanizer_zh.read_skill_doc" in tools
text = asyncio.run(tools["humanizer_zh.read_skill_doc"]())
assert "Humanizer-zh" in text
def test_install_skill_from_github_git_url_uses_repo_zip_and_markdown_adapter(
tmp_path: Path, monkeypatch
):
manager = SkillsManager(tmp_path / "skills")
zip_bytes = _build_codex_skill_zip_bytes(
"# Humanizer-zh\n\nUse natural and human-like Chinese tone.\n"
)
captured_urls = []
def fake_download(url: str, output_zip: Path):
captured_urls.append(url)
output_zip.write_bytes(zip_bytes)
monkeypatch.setattr(manager, "_download_zip", fake_download)
ok, installed_key = manager.install_skill_from_source(
"https://github.com/op7418/Humanizer-zh.git"
)
assert ok
assert installed_key == "humanizer_zh"
assert captured_urls == [
"https://codeload.github.com/op7418/Humanizer-zh/zip/refs/heads/main"
]
assert (tmp_path / "skills" / "humanizer_zh" / "SKILL.md").exists()