@@ -21,17 +21,19 @@ import (
2121)
2222
2323type App struct {
24- Info opencode.App
25- Version string
26- StatePath string
27- Config * opencode.Config
28- Client * opencode.Client
29- State * config.State
30- Provider * opencode.Provider
31- Model * opencode.Model
32- Session * opencode.Session
33- Messages []opencode.MessageUnion
34- Commands commands.CommandRegistry
24+ Info opencode.App
25+ Version string
26+ StatePath string
27+ Config * opencode.Config
28+ Client * opencode.Client
29+ State * config.State
30+ Provider * opencode.Provider
31+ Model * opencode.Model
32+ Session * opencode.Session
33+ Messages []opencode.MessageUnion
34+ Commands commands.CommandRegistry
35+ InitialModel * string
36+ InitialPrompt * string
3537}
3638
3739type SessionSelectedMsg = * opencode.Session
@@ -58,6 +60,8 @@ func New(
5860 version string ,
5961 appInfo opencode.App ,
6062 httpClient * opencode.Client ,
63+ model * string ,
64+ prompt * string ,
6165) (* App , error ) {
6266 util .RootPath = appInfo .Path .Root
6367 util .CwdPath = appInfo .Path .Cwd
@@ -109,15 +113,17 @@ func New(
109113 slog .Debug ("Loaded config" , "config" , configInfo )
110114
111115 app := & App {
112- Info : appInfo ,
113- Version : version ,
114- StatePath : appStatePath ,
115- Config : configInfo ,
116- State : appState ,
117- Client : httpClient ,
118- Session : & opencode.Session {},
119- Messages : []opencode.MessageUnion {},
120- Commands : commands .LoadFromConfig (configInfo ),
116+ Info : appInfo ,
117+ Version : version ,
118+ StatePath : appStatePath ,
119+ Config : configInfo ,
120+ State : appState ,
121+ Client : httpClient ,
122+ Session : & opencode.Session {},
123+ Messages : []opencode.MessageUnion {},
124+ Commands : commands .LoadFromConfig (configInfo ),
125+ InitialModel : model ,
126+ InitialPrompt : prompt ,
121127 }
122128
123129 return app , nil
@@ -141,65 +147,89 @@ func (a *App) Key(commandName commands.CommandName) string {
141147}
142148
143149func (a * App ) InitializeProvider () tea.Cmd {
144- return func () tea.Msg {
145- providersResponse , err := a .Client .Config .Providers (context .Background ())
146- if err != nil {
147- slog .Error ("Failed to list providers" , "error" , err )
148- // TODO: notify user
149- return nil
150+ providersResponse , err := a .Client .Config .Providers (context .Background ())
151+ if err != nil {
152+ slog .Error ("Failed to list providers" , "error" , err )
153+ // TODO: notify user
154+ return nil
155+ }
156+ providers := providersResponse .Providers
157+ var defaultProvider * opencode.Provider
158+ var defaultModel * opencode.Model
159+
160+ var anthropic * opencode.Provider
161+ for _ , provider := range providers {
162+ if provider .ID == "anthropic" {
163+ anthropic = & provider
150164 }
151- providers := providersResponse .Providers
152- var defaultProvider * opencode.Provider
153- var defaultModel * opencode.Model
165+ }
154166
155- var anthropic * opencode.Provider
156- for _ , provider := range providers {
157- if provider .ID == "anthropic" {
158- anthropic = & provider
159- }
160- }
167+ // default to anthropic if available
168+ if anthropic != nil {
169+ defaultProvider = anthropic
170+ defaultModel = getDefaultModel (providersResponse , * anthropic )
171+ }
161172
162- // default to anthropic if available
163- if anthropic ! = nil {
164- defaultProvider = anthropic
165- defaultModel = getDefaultModel (providersResponse , * anthropic )
173+ for _ , provider := range providers {
174+ if defaultProvider == nil || defaultModel = = nil {
175+ defaultProvider = & provider
176+ defaultModel = getDefaultModel (providersResponse , provider )
166177 }
178+ providers = append (providers , provider )
179+ }
180+ if len (providers ) == 0 {
181+ slog .Error ("No providers configured" )
182+ return nil
183+ }
167184
168- for _ , provider := range providers {
169- if defaultProvider == nil || defaultModel == nil {
170- defaultProvider = & provider
171- defaultModel = getDefaultModel (providersResponse , provider )
185+ var currentProvider * opencode.Provider
186+ var currentModel * opencode.Model
187+ for _ , provider := range providers {
188+ if provider .ID == a .State .Provider {
189+ currentProvider = & provider
190+
191+ for _ , model := range provider .Models {
192+ if model .ID == a .State .Model {
193+ currentModel = & model
194+ }
172195 }
173- providers = append (providers , provider )
174- }
175- if len (providers ) == 0 {
176- slog .Error ("No providers configured" )
177- return nil
178196 }
197+ }
198+ if currentProvider == nil || currentModel == nil {
199+ currentProvider = defaultProvider
200+ currentModel = defaultModel
201+ }
179202
180- var currentProvider * opencode.Provider
181- var currentModel * opencode.Model
203+ var initialProvider * opencode.Provider
204+ var initialModel * opencode.Model
205+ if a .InitialModel != nil && * a .InitialModel != "" {
206+ splits := strings .Split (* a .InitialModel , "/" )
182207 for _ , provider := range providers {
183- if provider .ID == a .State .Provider {
184- currentProvider = & provider
185-
208+ if provider .ID == splits [0 ] {
209+ initialProvider = & provider
186210 for _ , model := range provider .Models {
187- if model .ID == a . State . Model {
188- currentModel = & model
211+ if model .ID == splits [ 1 ] {
212+ initialModel = & model
189213 }
190214 }
191215 }
192216 }
193- if currentProvider == nil || currentModel == nil {
194- currentProvider = defaultProvider
195- currentModel = defaultModel
196- }
217+ }
197218
198- return ModelSelectedMsg {
199- Provider : * currentProvider ,
200- Model : * currentModel ,
201- }
219+ if initialProvider != nil && initialModel != nil {
220+ currentProvider = initialProvider
221+ currentModel = initialModel
222+ }
223+
224+ var cmds []tea.Cmd
225+ cmds = append (cmds , util .CmdHandler (ModelSelectedMsg {
226+ Provider : * currentProvider ,
227+ Model : * currentModel ,
228+ }))
229+ if a .InitialPrompt != nil && * a .InitialPrompt != "" {
230+ cmds = append (cmds , util .CmdHandler (SendMsg {Text : * a .InitialPrompt }))
202231 }
232+ return tea .Sequence (cmds ... )
203233}
204234
205235func getDefaultModel (
0 commit comments