@@ -4,6 +4,7 @@ import { z } from 'zod'
44import { AuditAction , AuditResourceType , recordAudit } from '@/lib/audit/log'
55import { checkSessionOrInternalAuth } from '@/lib/auth/hybrid'
66import { generateRequestId } from '@/lib/core/utils/request'
7+ import { captureServerEvent } from '@/lib/posthog/server'
78import { deleteSkill , listSkills , upsertSkills } from '@/lib/workflows/skills/operations'
89import { getUserEntityPermissions } from '@/lib/workspaces/permissions/utils'
910
@@ -23,6 +24,7 @@ const SkillSchema = z.object({
2324 } )
2425 ) ,
2526 workspaceId : z . string ( ) . optional ( ) ,
27+ source : z . enum ( [ 'settings' , 'tool_input' ] ) . optional ( ) ,
2628} )
2729
2830/** GET - Fetch all skills for a workspace */
@@ -75,7 +77,7 @@ export async function POST(req: NextRequest) {
7577 const body = await req . json ( )
7678
7779 try {
78- const { skills, workspaceId } = SkillSchema . parse ( body )
80+ const { skills, workspaceId, source } = SkillSchema . parse ( body )
7981
8082 if ( ! workspaceId ) {
8183 logger . warn ( `[${ requestId } ] Missing workspaceId in request body` )
@@ -107,6 +109,12 @@ export async function POST(req: NextRequest) {
107109 resourceName : skill . name ,
108110 description : `Created/updated skill "${ skill . name } "` ,
109111 } )
112+ captureServerEvent (
113+ userId ,
114+ 'skill_created' ,
115+ { skill_id : skill . id , skill_name : skill . name , workspace_id : workspaceId , source } ,
116+ { groups : { workspace : workspaceId } }
117+ )
110118 }
111119
112120 return NextResponse . json ( { success : true , data : resultSkills } )
@@ -137,6 +145,9 @@ export async function DELETE(request: NextRequest) {
137145 const searchParams = request . nextUrl . searchParams
138146 const skillId = searchParams . get ( 'id' )
139147 const workspaceId = searchParams . get ( 'workspaceId' )
148+ const sourceParam = searchParams . get ( 'source' )
149+ const source =
150+ sourceParam === 'settings' || sourceParam === 'tool_input' ? sourceParam : undefined
140151
141152 try {
142153 const authResult = await checkSessionOrInternalAuth ( request , { requireWorkflowId : false } )
@@ -180,6 +191,13 @@ export async function DELETE(request: NextRequest) {
180191 description : `Deleted skill` ,
181192 } )
182193
194+ captureServerEvent (
195+ userId ,
196+ 'skill_deleted' ,
197+ { skill_id : skillId , workspace_id : workspaceId , source } ,
198+ { groups : { workspace : workspaceId } }
199+ )
200+
183201 logger . info ( `[${ requestId } ] Deleted skill: ${ skillId } ` )
184202 return NextResponse . json ( { success : true } )
185203 } catch ( error ) {
0 commit comments