77 getEnabledAgentProviders ,
88 getOpenCodeModels ,
99 getCodexModels ,
10+ getKiloModels ,
1011 isAgentEnabled ,
1112 getGitHubInfoForUser ,
1213 setChannelAgentProvider ,
@@ -112,6 +113,7 @@ function buildSettingsModal(params: {
112113 enabledProviders : AgentProvider [ ] ;
113114 opencodeModels : string [ ] ;
114115 codexModels : string [ ] ;
116+ kiloModels : string [ ] ;
115117 selectedProvider ?: AgentProvider ;
116118 selectedModel ?: string | null ;
117119 workingDirectory ?: string | null ;
@@ -123,6 +125,7 @@ function buildSettingsModal(params: {
123125 enabledProviders,
124126 opencodeModels,
125127 codexModels,
128+ kiloModels,
126129 selectedProvider = "opencode" ,
127130 selectedModel,
128131 workingDirectory,
@@ -137,7 +140,9 @@ function buildSettingsModal(params: {
137140 ? opencodeModels
138141 : selectedProvider === "codex"
139142 ? codexModels
140- : null ;
143+ : selectedProvider === "kilo"
144+ ? kiloModels
145+ : null ;
141146 const modelOptions = providerModels && selectedProvider === "opencode"
142147 ? ( opencodeModels . length > 0
143148 ? opencodeModels . map ( ( model ) => ( {
@@ -153,6 +158,13 @@ function buildSettingsModal(params: {
153158 value : model ,
154159 } ) ) ,
155160 ]
161+ : providerModels && selectedProvider === "kilo"
162+ ? ( kiloModels . length > 0
163+ ? kiloModels . map ( ( model ) => ( {
164+ text : { type : "plain_text" as const , text : model } ,
165+ value : model ,
166+ } ) )
167+ : [ { text : { type : "plain_text" as const , text : "No models configured" } , value : "__none__" } ] )
156168 : [ ] ;
157169
158170 const availableModels = selectedProvider === "codex"
@@ -161,11 +173,17 @@ function buildSettingsModal(params: {
161173 const matchedSelectedModel = findMatchingModel ( availableModels , selectedModel ) ;
162174 const initialModel = matchedSelectedModel
163175 ? matchedSelectedModel
164- : ( selectedProvider === "codex" ? "__default__" : ( opencodeModels [ 0 ] ?? "__none__" ) ) ;
176+ : ( selectedProvider === "codex"
177+ ? "__default__"
178+ : selectedProvider === "kilo"
179+ ? ( kiloModels [ 0 ] ?? "__none__" )
180+ : ( opencodeModels [ 0 ] ?? "__none__" ) ) ;
165181 const introText = selectedProvider === "opencode"
166182 ? "Configure agent, model (OpenCode), working directory, and base branch for this channel."
167183 : selectedProvider === "codex"
168184 ? "Configure agent, optional Codex model, working directory, and base branch for this channel."
185+ : selectedProvider === "kilo"
186+ ? "Configure agent, model (Kilo), working directory, and base branch for this channel."
169187 : "Configure agent, working directory, and base branch for this channel." ;
170188
171189 const blocks : any [ ] = [
@@ -420,6 +438,7 @@ export function setupInteractiveHandlers(): void {
420438 enabledProviders,
421439 opencodeModels : getOpenCodeModels ( ) ,
422440 codexModels : getCodexModels ( ) ,
441+ kiloModels : getKiloModels ( ) ,
423442 selectedProvider : toSelectableProvider ( getChannelAgentProvider ( channelId ) ) ,
424443 selectedModel : getChannelModel ( channelId ) ,
425444 workingDirectory : resolveChannelCwd ( channelId ) . workingDirectory ,
@@ -547,6 +566,7 @@ export function setupInteractiveHandlers(): void {
547566 enabledProviders : getSelectableProviders ( ) ,
548567 opencodeModels : getOpenCodeModels ( ) ,
549568 codexModels : getCodexModels ( ) ,
569+ kiloModels : getKiloModels ( ) ,
550570 selectedProvider,
551571 selectedModel,
552572 workingDirectory,
@@ -591,6 +611,14 @@ export function setupInteractiveHandlers(): void {
591611 if ( selectedModel && selectedModel !== "__default__" && ! findMatchingModel ( models , selectedModel ) ) {
592612 errors [ MODEL_BLOCK ] = "Model not available in local Codex model list." ;
593613 }
614+ } else if ( selectedProvider === "kilo" ) {
615+ if ( ! selectedModel || selectedModel === "__none__" ) {
616+ errors [ MODEL_BLOCK ] = "Select a model." ;
617+ }
618+ const models = getKiloModels ( ) ;
619+ if ( selectedModel && ! findMatchingModel ( models , selectedModel ) ) {
620+ errors [ MODEL_BLOCK ] = "Model not available in local Kilo model list." ;
621+ }
594622 }
595623
596624 if ( Object . keys ( errors ) . length > 0 ) {
@@ -614,7 +642,11 @@ export function setupInteractiveHandlers(): void {
614642 setChannelModel ( channelId , "" ) ;
615643 }
616644 }
617- if ( selectedProvider === "claudecode" || selectedProvider === "kimi" || selectedProvider === "kiro" || selectedProvider === "kilo" || selectedProvider === "qwen" ) {
645+ if ( selectedProvider === "kilo" && selectedModel && selectedModel !== "__none__" ) {
646+ const normalizedSelectedModel = findMatchingModel ( getKiloModels ( ) , selectedModel ) ?? selectedModel ;
647+ setChannelModel ( channelId , normalizedSelectedModel ) ;
648+ }
649+ if ( selectedProvider === "claudecode" || selectedProvider === "kimi" || selectedProvider === "kiro" || selectedProvider === "qwen" ) {
618650 setChannelModel ( channelId , "" ) ;
619651 }
620652
0 commit comments