Skip to content

Commit 4ff4c5f

Browse files
committed
fix(skills): remove deleted skills from sandbox cache
keep sandbox skill cache in sync when deleting a skill from disk. this prevents stale entries in the UI when no sandbox session is active to refresh runtime cache
1 parent 73e665b commit 4ff4c5f

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

astrbot/core/skills/skill_manager.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,10 +290,34 @@ def set_skill_active(self, name: str, active: bool) -> None:
290290
config["skills"][name] = {"active": bool(active)}
291291
self._save_config(config)
292292

293+
def _remove_skill_from_sandbox_cache(self, name: str) -> None:
294+
cache = self._load_sandbox_skills_cache()
295+
skills = cache.get("skills", [])
296+
if not isinstance(skills, list):
297+
return
298+
299+
filtered = [
300+
item
301+
for item in skills
302+
if not (
303+
isinstance(item, dict)
304+
and str(item.get("name", "")).strip() == name
305+
)
306+
]
307+
308+
if len(filtered) != len(skills):
309+
cache["skills"] = filtered
310+
self._save_sandbox_skills_cache(cache)
311+
293312
def delete_skill(self, name: str) -> None:
294313
skill_dir = Path(self.skills_root) / name
295314
if skill_dir.exists():
296315
shutil.rmtree(skill_dir)
316+
317+
# Ensure UI consistency even when there is no active sandbox session
318+
# to refresh cache from runtime side.
319+
self._remove_skill_from_sandbox_cache(name)
320+
297321
config = self._load_config()
298322
if name in config.get("skills", {}):
299323
config["skills"].pop(name, None)

0 commit comments

Comments
 (0)