core/skills: read the filesystem live, drop the cache and reload

This commit is contained in:
2026-10-09 21:40:38 +08:00
parent 1f04889449
commit e72d2359d7
8 changed files with 29 additions and 63 deletions
+2 -3
View File
@@ -161,7 +161,7 @@ async def test_slash_skills_open_reports_an_unknown_skill(
assert "unknown skill 'nope'" in capsys.readouterr().out
async def test_slash_skills_reload_picks_up_a_new_skill(
async def test_slash_skills_sees_a_skill_added_while_chatting(
tmp_path: Path,
capsys: pytest.CaptureFixture[str],
) -> None:
@@ -172,8 +172,7 @@ async def test_slash_skills_reload_picks_up_a_new_skill(
assert await handle_slash(state, "/skills") is True
assert "skills: 0" in capsys.readouterr().out
_ = _write_skill(root, "added-later")
assert await handle_slash(state, "/skills reload") is True
assert "skills reloaded: 1 visible" in capsys.readouterr().out
# No reload: the next listing reads the filesystem.
assert await handle_slash(state, "/skills") is True
assert "added-later" in capsys.readouterr().out
finally:
+5 -5
View File
@@ -144,21 +144,21 @@ def test_broken_frontmatter_still_yields_a_listable_skill(tmp_path: Path) -> Non
assert any("frontmatter not parsed" in issue for issue in skill.issues)
def test_cache_picks_up_an_edit_and_reload_forces_a_rescan(tmp_path: Path) -> None:
def test_every_lookup_reads_the_filesystem(tmp_path: Path) -> None:
"""No cache: an edit or a skill added outside the chat is simply there."""
root = tmp_path / "skills"
directory = _write_skill(root, "cached", description="Before")
directory = _write_skill(root, "live", description="Before")
store = SkillStore(build_roots(SkillsConfig(discover=["plyngent"]), workspace=tmp_path, user_config_dir=tmp_path))
assert store.skills[0].description == "Before"
_ = (directory / SKILL_FILE).write_text(
"---\nname: cached\ndescription: After\n---\n\nBody.\n",
"---\nname: live\ndescription: After\n---\n\nBody.\n",
encoding="utf-8",
)
assert store.skills[0].description == "After"
_ = _write_skill(root, "added")
store.reload()
assert [s.name for s in store.skills] == ["added", "cached"]
assert [s.name for s in store.skills] == ["added", "live"]
def test_default_write_root_prefers_our_own_directory(tmp_path: Path) -> None: