Polish skill sync controls
This commit is contained in:
+29
-2
@@ -633,6 +633,27 @@ class AgentState:
|
||||
if key.startswith(account_prefix):
|
||||
self._agents.pop(key, None)
|
||||
|
||||
def set_all_skills_enabled(
|
||||
self,
|
||||
account_id: str | None,
|
||||
enabled: bool,
|
||||
) -> None:
|
||||
with self._lock:
|
||||
config = self._config_for(account_id)
|
||||
configurable_skill_names = {
|
||||
skill.name.lower()
|
||||
for skill in get_bundled_skills(config.cwd)
|
||||
if skill.user_invocable
|
||||
and skill.name.lower() not in ALWAYS_ENABLED_HIDDEN_SKILL_NAMES
|
||||
}
|
||||
disabled = self._load_disabled_skill_names(account_id)
|
||||
if enabled:
|
||||
disabled.difference_update(configurable_skill_names)
|
||||
else:
|
||||
disabled.update(configurable_skill_names)
|
||||
self._save_disabled_skill_names(account_id, disabled)
|
||||
self._clear_agents_for_account(account_id)
|
||||
|
||||
def _clear_agents_for_account(self, account_id: str | None) -> None:
|
||||
account_prefix = f'{self._account_key(account_id)}:'
|
||||
for key in list(self._agents):
|
||||
@@ -856,8 +877,9 @@ class ModelListRequest(BaseModel):
|
||||
|
||||
|
||||
class SkillPreferenceUpdate(BaseModel):
|
||||
skill: str = Field(min_length=1)
|
||||
skill: str | None = None
|
||||
enabled: bool
|
||||
apply_all: bool = False
|
||||
account_id: str | None = None
|
||||
|
||||
|
||||
@@ -942,7 +964,12 @@ def create_app(state: AgentState) -> FastAPI:
|
||||
@app.patch('/api/skills')
|
||||
async def update_skill_preference(payload: SkillPreferenceUpdate) -> list[dict[str, Any]]:
|
||||
try:
|
||||
state.set_skill_enabled(payload.account_id, payload.skill, payload.enabled)
|
||||
if payload.apply_all:
|
||||
state.set_all_skills_enabled(payload.account_id, payload.enabled)
|
||||
elif payload.skill:
|
||||
state.set_skill_enabled(payload.account_id, payload.skill, payload.enabled)
|
||||
else:
|
||||
raise ValueError('skill must be provided unless apply_all is true')
|
||||
except ValueError as exc:
|
||||
raise HTTPException(status_code=400, detail=str(exc))
|
||||
return await list_skills(payload.account_id)
|
||||
|
||||
Reference in New Issue
Block a user