44from fastapi import APIRouter , Depends , HTTPException , Request , status
55from open_webui .config import BYPASS_ADMIN_ACCESS_CONTROL
66from open_webui .constants import ERROR_MESSAGES
7+ from open_webui .events import EVENTS , publish_event
78from open_webui .internal .db import get_async_session
89from open_webui .models .access_grants import AccessGrants
910from open_webui .models .config import Config
@@ -190,6 +191,13 @@ async def create_new_skill(
190191 try :
191192 skill = await Skills .insert_new_skill (user .id , form_data , db = db )
192193 if skill :
194+ await publish_event (
195+ request ,
196+ EVENTS .SKILL_CREATED ,
197+ actor = user ,
198+ subject_id = skill .id ,
199+ data = {'name' : skill .name },
200+ )
193201 return skill
194202 else :
195203 raise HTTPException (
@@ -308,6 +316,13 @@ async def update_skill_by_id(
308316 skill = await Skills .update_skill_by_id (id , updated , db = db )
309317
310318 if skill :
319+ await publish_event (
320+ request ,
321+ EVENTS .SKILL_UPDATED ,
322+ actor = user ,
323+ subject_id = skill .id ,
324+ data = {'name' : skill .name },
325+ )
311326 return skill
312327 else :
313328 raise HTTPException (
@@ -371,7 +386,15 @@ async def update_skill_access_by_id(
371386
372387 await AccessGrants .set_access_grants ('skill' , id , form_data .access_grants , db = db )
373388
374- return await Skills .get_skill_by_id (id , db = db )
389+ skill = await Skills .get_skill_by_id (id , db = db )
390+ await publish_event (
391+ request ,
392+ EVENTS .SKILL_UPDATED ,
393+ actor = user ,
394+ subject_id = id ,
395+ data = {'access_updated' : True , 'name' : skill .name if skill else None },
396+ )
397+ return skill
375398
376399
377400############################
@@ -380,7 +403,12 @@ async def update_skill_access_by_id(
380403
381404
382405@router .post ('/id/{id}/toggle' , response_model = Optional [SkillModel ])
383- async def toggle_skill_by_id (id : str , user = Depends (get_verified_user ), db : AsyncSession = Depends (get_async_session )):
406+ async def toggle_skill_by_id (
407+ request : Request ,
408+ id : str ,
409+ user = Depends (get_verified_user ),
410+ db : AsyncSession = Depends (get_async_session ),
411+ ):
384412 skill = await Skills .get_skill_by_id (id , db = db )
385413 if skill :
386414 if (
@@ -397,6 +425,13 @@ async def toggle_skill_by_id(id: str, user=Depends(get_verified_user), db: Async
397425 skill = await Skills .toggle_skill_by_id (id , db = db )
398426
399427 if skill :
428+ await publish_event (
429+ request ,
430+ EVENTS .SKILL_ENABLED if skill .is_active else EVENTS .SKILL_DISABLED ,
431+ actor = user ,
432+ subject_id = skill .id ,
433+ data = {'name' : skill .name },
434+ )
400435 return skill
401436 else :
402437 raise HTTPException (
@@ -451,4 +486,12 @@ async def delete_skill_by_id(
451486 )
452487
453488 result = await Skills .delete_skill_by_id (id , db = db )
489+ if result :
490+ await publish_event (
491+ request ,
492+ EVENTS .SKILL_DELETED ,
493+ actor = user ,
494+ subject_id = id ,
495+ data = {'name' : skill .name },
496+ )
454497 return result
0 commit comments