@@ -34,13 +34,9 @@ import type { OpencodeClient, SessionMessageResponse } from "@opencode-ai/sdk/v2
3434export namespace ACP {
3535 const log = Log . create ( { service : "acp-agent" } )
3636
37- export async function init ( { sdk } : { sdk : OpencodeClient } ) {
38- const model = await defaultModel ( { sdk } )
37+ export async function init ( { sdk : _sdk } : { sdk : OpencodeClient } ) {
3938 return {
4039 create : ( connection : AgentSideConnection , fullConfig : ACPConfig ) => {
41- if ( ! fullConfig . defaultModel ) {
42- fullConfig . defaultModel = model
43- }
4440 return new Agent ( connection , fullConfig )
4541 } ,
4642 }
@@ -988,8 +984,10 @@ export namespace ACP {
988984 const configured = config . defaultModel
989985 if ( configured ) return configured
990986
991- const model = await sdk . config
992- . get ( { directory : cwd } , { throwOnError : true } )
987+ const directory = cwd ?? process . cwd ( )
988+
989+ const specified = await sdk . config
990+ . get ( { directory } , { throwOnError : true } )
993991 . then ( ( resp ) => {
994992 const cfg = resp . data
995993 if ( ! cfg || ! cfg . model ) return undefined
@@ -1004,7 +1002,47 @@ export namespace ACP {
10041002 return undefined
10051003 } )
10061004
1007- return model ?? { providerID : "opencode" , modelID : "big-pickle" }
1005+ const providers = await sdk . config
1006+ . providers ( { directory } , { throwOnError : true } )
1007+ . then ( ( x ) => x . data ?. providers ?? [ ] )
1008+ . catch ( ( error ) => {
1009+ log . error ( "failed to list providers for default model" , { error } )
1010+ return [ ]
1011+ } )
1012+
1013+ if ( specified && providers . length ) {
1014+ const provider = providers . find ( ( p ) => p . id === specified . providerID )
1015+ if ( provider && provider . models [ specified . modelID ] ) return specified
1016+ }
1017+
1018+ if ( specified && ! providers . length ) return specified
1019+
1020+ const opencodeProvider = providers . find ( ( p ) => p . id === "opencode" )
1021+ if ( opencodeProvider ) {
1022+ if ( opencodeProvider . models [ "big-pickle" ] ) {
1023+ return { providerID : "opencode" , modelID : "big-pickle" }
1024+ }
1025+ const [ best ] = Provider . sort ( Object . values ( opencodeProvider . models ) )
1026+ if ( best ) {
1027+ return {
1028+ providerID : best . providerID ,
1029+ modelID : best . id ,
1030+ }
1031+ }
1032+ }
1033+
1034+ const models = providers . flatMap ( ( p ) => Object . values ( p . models ) )
1035+ const [ best ] = Provider . sort ( models )
1036+ if ( best ) {
1037+ return {
1038+ providerID : best . providerID ,
1039+ modelID : best . id ,
1040+ }
1041+ }
1042+
1043+ if ( specified ) return specified
1044+
1045+ return { providerID : "opencode" , modelID : "big-pickle" }
10081046 }
10091047
10101048 function parseUri (
0 commit comments