@@ -30,6 +30,7 @@ import { makeOpenCodeAdapter } from "../Layers/OpenCodeAdapter.ts";
3030import {
3131 checkOpenCodeProviderStatus ,
3232 makePendingOpenCodeProvider ,
33+ openCodeSkillsToServerProviderSkills ,
3334} from "../Layers/OpenCodeProvider.ts" ;
3435import { ProviderEventLoggers } from "../Layers/ProviderEventLoggers.ts" ;
3536import { makeManagedServerProvider } from "../makeManagedServerProvider.ts" ;
@@ -163,6 +164,34 @@ export const OpenCodeDriver: ProviderDriver<OpenCodeSettings, OpenCodeDriverEnv>
163164 Effect . provideService ( OpenCodeServerOwner . OpenCodeServerOwner , serverOwner ) ,
164165 Effect . provideService ( OpenCodeRuntime , openCodeRuntime ) ,
165166 ) ;
167+ const loadSkillsForCwd = ( cwd : string ) =>
168+ effectiveConfig . serverUrl . trim ( ) . length > 0
169+ ? Effect . scoped (
170+ Effect . gen ( function * ( ) {
171+ const server = yield * openCodeRuntime . connectToOpenCodeServer ( {
172+ binaryPath : effectiveConfig . binaryPath ,
173+ directory : cwd ,
174+ serverUrl : effectiveConfig . serverUrl ,
175+ ...( effectiveConfig . serverPassword
176+ ? { serverPassword : effectiveConfig . serverPassword }
177+ : { } ) ,
178+ environment : processEnv ,
179+ } ) ;
180+ const client = openCodeRuntime . createOpenCodeSdkClient ( {
181+ baseUrl : server . url ,
182+ directory : cwd ,
183+ ...( effectiveConfig . serverPassword
184+ ? { serverPassword : effectiveConfig . serverPassword }
185+ : { } ) ,
186+ } ) ;
187+ return yield * openCodeRuntime . loadOpenCodeSkills ( client ) ;
188+ } ) ,
189+ )
190+ : openCodeRuntime . loadSkillsFromCli ( {
191+ binaryPath : effectiveConfig . binaryPath ,
192+ cwd,
193+ environment : processEnv ,
194+ } ) ;
166195
167196 const snapshotSettings = makeProviderSnapshotSettingsSource ( effectiveConfig , serverSettings ) ;
168197 const snapshot = yield * makeManagedServerProvider < ProviderSnapshotSettings < OpenCodeSettings > > (
@@ -204,6 +233,27 @@ export const OpenCodeDriver: ProviderDriver<OpenCodeSettings, OpenCodeDriverEnv>
204233 accentColor,
205234 enabled,
206235 snapshot,
236+ snapshotForCwd : ( cwd ) =>
237+ ! effectiveConfig . enabled
238+ ? snapshot . getSnapshot
239+ : Effect . all ( [
240+ snapshot . getSnapshot ,
241+ loadSkillsForCwd ( cwd ) . pipe ( Effect . timeout ( "20 seconds" ) ) ,
242+ ] ) . pipe (
243+ Effect . map ( ( [ machineSnapshot , skills ] ) => ( {
244+ ...machineSnapshot ,
245+ skills : openCodeSkillsToServerProviderSkills ( skills ) ,
246+ } ) ) ,
247+ Effect . mapError (
248+ ( cause ) =>
249+ new ProviderDriverError ( {
250+ driver : DRIVER_KIND ,
251+ instanceId,
252+ detail : `Failed to probe OpenCode skills for '${ cwd } '` ,
253+ cause,
254+ } ) ,
255+ ) ,
256+ ) ,
207257 adapter,
208258 textGeneration,
209259 } satisfies ProviderInstance ;
0 commit comments