@@ -3,6 +3,10 @@ import { skill } from '@sim/db/schema'
33import { createLogger } from '@sim/logger'
44import { and , eq , inArray } from 'drizzle-orm'
55import type { SkillInput } from '@/executor/handlers/agent/types'
6+ import {
7+ getBuiltinSkillById ,
8+ getBuiltinSkillByName ,
9+ } from '@/lib/workflows/skills/builtin-skills'
610
711const logger = createLogger ( 'SkillsResolver' )
812
@@ -29,18 +33,29 @@ export async function resolveSkillMetadata(
2933) : Promise < SkillMetadata [ ] > {
3034 if ( ! skillInputs . length || ! workspaceId ) return [ ]
3135
32- const skillIds = skillInputs . map ( ( s ) => s . skillId )
36+ const metadata : SkillMetadata [ ] = [ ]
37+ const dbSkillIds : string [ ] = [ ]
38+ for ( const input of skillInputs ) {
39+ const builtin = getBuiltinSkillById ( input . skillId )
40+ if ( builtin ) {
41+ metadata . push ( { name : builtin . name , description : builtin . description } )
42+ } else {
43+ dbSkillIds . push ( input . skillId )
44+ }
45+ }
46+
47+ if ( dbSkillIds . length === 0 ) return metadata
3348
3449 try {
3550 const rows = await db
3651 . select ( { name : skill . name , description : skill . description } )
3752 . from ( skill )
38- . where ( and ( eq ( skill . workspaceId , workspaceId ) , inArray ( skill . id , skillIds ) ) )
53+ . where ( and ( eq ( skill . workspaceId , workspaceId ) , inArray ( skill . id , dbSkillIds ) ) )
3954
40- return rows
55+ return [ ... metadata , ... rows ]
4156 } catch ( error ) {
42- logger . error ( 'Failed to resolve skill metadata' , { error, skillIds , workspaceId } )
43- return [ ]
57+ logger . error ( 'Failed to resolve skill metadata' , { error, dbSkillIds , workspaceId } )
58+ return metadata
4459 }
4560}
4661
@@ -54,6 +69,9 @@ export async function resolveSkillContent(
5469) : Promise < string | null > {
5570 if ( ! skillName || ! workspaceId ) return null
5671
72+ const builtin = getBuiltinSkillByName ( skillName )
73+ if ( builtin ) return builtin . content
74+
5775 try {
5876 const rows = await db
5977 . select ( { content : skill . content , name : skill . name } )
@@ -79,6 +97,9 @@ export async function resolveSkillContentById(
7997) : Promise < { name : string ; content : string } | null > {
8098 if ( ! skillId || ! workspaceId ) return null
8199
100+ const builtin = getBuiltinSkillById ( skillId )
101+ if ( builtin ) return { name : builtin . name , content : builtin . content }
102+
82103 try {
83104 const rows = await db
84105 . select ( { content : skill . content , name : skill . name } )
0 commit comments