@@ -6,6 +6,7 @@ import { Provider } from "../provider/provider"
66import { Log } from "../util/log"
77import type { Skill } from "../skill"
88import type { Fingerprint } from "./fingerprint"
9+ import { Tracer } from "./observability/tracing"
910
1011const log = Log . create ( { service : "skill-selector" } )
1112
@@ -26,6 +27,7 @@ export interface SkillSelectorDeps {
2627 resolveModel : ( ) => Promise < LanguageModelV2 | undefined >
2728 generate : ( params : {
2829 model : LanguageModelV2
30+ mode ?: "json" | "tool"
2931 temperature : number
3032 schema : z . ZodType
3133 messages : Array < { role : "system" | "user" ; content : string } >
@@ -58,12 +60,21 @@ export async function selectSkillsWithLLM(
5860 fingerprint : Fingerprint . Result | undefined ,
5961 deps ?: SkillSelectorDeps ,
6062) : Promise < Skill . Info [ ] > {
63+ const startTime = Date . now ( )
64+
6165 // Return cached result if cwd hasn't changed (0ms)
6266 const cwd = fingerprint ?. cwd
6367 if ( cachedResult && cwd === cachedCwd ) {
6468 log . info ( "returning cached skill selection" , {
6569 count : cachedResult . length ,
6670 } )
71+ Tracer . active ?. logSpan ( {
72+ name : "skill-selection" ,
73+ startTime,
74+ endTime : Date . now ( ) ,
75+ input : { fingerprint : fingerprint ?. tags , source : "cache" } ,
76+ output : { count : cachedResult . length , skills : cachedResult . map ( ( s ) => s . name ) } ,
77+ } )
6778 return cachedResult
6879 }
6980
@@ -95,6 +106,7 @@ export async function selectSkillsWithLLM(
95106
96107 const params = {
97108 model,
109+ mode : "json" as const ,
98110 temperature : 0 ,
99111 schema : z . object ( { selected : z . array ( z . string ( ) ) } ) ,
100112 messages : [
@@ -147,11 +159,26 @@ export async function selectSkillsWithLLM(
147159 count : matched . length ,
148160 names : matched . map ( ( s ) => s . name ) ,
149161 } )
162+ Tracer . active ?. logSpan ( {
163+ name : "skill-selection" ,
164+ startTime,
165+ endTime : Date . now ( ) ,
166+ input : { fingerprint : fingerprint ?. tags , totalSkills : skills . length , source : "llm" } ,
167+ output : { count : matched . length , skills : matched . map ( ( s ) => s . name ) } ,
168+ } )
150169 return cache ( matched )
151170 } catch ( e ) {
152171 log . info ( "skill selection failed, returning all skills" , {
153172 error : e instanceof Error ? e . message : String ( e ) ,
154173 } )
174+ Tracer . active ?. logSpan ( {
175+ name : "skill-selection" ,
176+ startTime,
177+ endTime : Date . now ( ) ,
178+ status : "error" ,
179+ input : { fingerprint : fingerprint ?. tags , source : "fallback" } ,
180+ output : { count : skills . length , error : e instanceof Error ? e . message : String ( e ) } ,
181+ } )
155182 return cache ( skills )
156183 }
157184}
0 commit comments