11import * as acp from "@agentclientprotocol/sdk" ;
2- import { RequestError , type SessionId , type SessionModelState , type SessionModeState } from "@agentclientprotocol/sdk" ;
2+ import { RequestError , type SessionId , type SessionModeState } from "@agentclientprotocol/sdk" ;
33import { CodexEventHandler } from "./CodexEventHandler" ;
44import { CodexApprovalHandler } from "./CodexApprovalHandler" ;
55import { CodexElicitationHandler } from "./CodexElicitationHandler" ;
@@ -33,7 +33,16 @@ import {CodexCommands} from "./CodexCommands";
3333import type { QuotaMeta } from "./QuotaMeta" ;
3434import { logger } from "./Logger" ;
3535import { sanitizeMcpServerName } from "./McpServerName" ;
36- import { isExtMethodRequest } from "./AcpExtensions" ;
36+ import {
37+ type LegacyLoadSessionResponse ,
38+ type LegacyNewSessionResponse ,
39+ type LegacyResumeSessionResponse ,
40+ type LegacySessionModelState ,
41+ type LegacySetSessionModelRequest ,
42+ type LegacySetSessionModelResponse ,
43+ isExtMethodRequest ,
44+ LEGACY_SET_SESSION_MODEL_METHOD ,
45+ } from "./AcpExtensions" ;
3746import {
3847 createCommandExecutionUpdate ,
3948 createDynamicToolCallUpdate ,
@@ -189,9 +198,11 @@ export class CodexAcpServer implements acp.Agent {
189198 case "authentication/status" :
190199 return await this . runWithProcessCheck ( ( ) => this . codexAcpClient . getAuthenticationStatus ( ) ) ;
191200 case "authentication/logout" : {
192- await this . unstable_logout ( { } ) ;
201+ await this . logout ( { } ) ;
193202 return { } ;
194203 }
204+ case LEGACY_SET_SESSION_MODEL_METHOD :
205+ return await this . unstable_setSessionModel ( this . parseLegacySetSessionModelParams ( methodRequest . params ) ) ;
195206 }
196207 }
197208
@@ -212,7 +223,7 @@ export class CodexAcpServer implements acp.Agent {
212223 }
213224 }
214225
215- async getOrCreateSession ( request : acp . NewSessionRequest | acp . ResumeSessionRequest ) : Promise < [ SessionId , SessionModelState , SessionModeState ] > {
226+ async getOrCreateSession ( request : acp . NewSessionRequest | acp . ResumeSessionRequest ) : Promise < [ SessionId , LegacySessionModelState , SessionModeState ] > {
216227 try {
217228 return await this . tryCreateSession ( request ) ;
218229 } catch ( e ) {
@@ -292,7 +303,7 @@ export class CodexAcpServer implements acp.Agent {
292303 return generation ;
293304 }
294305
295- async tryCreateSession ( request : acp . NewSessionRequest | acp . ResumeSessionRequest ) : Promise < [ SessionId , SessionModelState , SessionModeState ] > {
306+ async tryCreateSession ( request : acp . NewSessionRequest | acp . ResumeSessionRequest ) : Promise < [ SessionId , LegacySessionModelState , SessionModeState ] > {
296307 const requestedSessionGeneration = "sessionId" in request
297308 ? this . beginSessionOpen ( request . sessionId )
298309 : null ;
@@ -372,7 +383,7 @@ export class CodexAcpServer implements acp.Agent {
372383 }
373384
374385 this . publishAvailableCommandsAsync ( sessionId ) ;
375- const sessionModelState : SessionModelState = this . createModelState ( models , currentModelId ) ;
386+ const sessionModelState : LegacySessionModelState = this . createModelState ( models , currentModelId ) ;
376387 const sessionModeState : SessionModeState = sessionState . agentMode . toSessionModeState ( ) ;
377388
378389 return [ sessionId , sessionModelState , sessionModeState ] ;
@@ -386,7 +397,7 @@ export class CodexAcpServer implements acp.Agent {
386397 return accountResponse . account ;
387398 }
388399
389- async loadSession ( params : acp . LoadSessionRequest ) : Promise < acp . LoadSessionResponse > {
400+ async loadSession ( params : acp . LoadSessionRequest ) : Promise < LegacyLoadSessionResponse > {
390401 logger . log ( "Loading session..." , { sessionId : params . sessionId } ) ;
391402 const {
392403 sessionId,
@@ -409,7 +420,7 @@ export class CodexAcpServer implements acp.Agent {
409420 } ;
410421 }
411422
412- async resumeSession ( params : acp . ResumeSessionRequest ) : Promise < acp . ResumeSessionResponse > {
423+ async resumeSession ( params : acp . ResumeSessionRequest ) : Promise < LegacyResumeSessionResponse > {
413424 logger . log ( "Resuming session..." , { sessionId : params . sessionId } ) ;
414425 const [ sessionId , modelState , modeState ] = await this . getOrCreateSession ( params ) ;
415426
@@ -465,7 +476,7 @@ export class CodexAcpServer implements acp.Agent {
465476 return { } ;
466477 }
467478
468- async unstable_deleteSession ( params : acp . DeleteSessionRequest ) : Promise < acp . DeleteSessionResponse > {
479+ async deleteSession ( params : acp . DeleteSessionRequest ) : Promise < acp . DeleteSessionResponse > {
469480 logger . log ( "Deleting session..." , { sessionId : params . sessionId } ) ;
470481 const sessionId = params . sessionId ;
471482 const shouldCloseLocalSession = this . hasLocalSession ( sessionId ) ;
@@ -502,7 +513,7 @@ export class CodexAcpServer implements acp.Agent {
502513
503514 async newSession (
504515 params : acp . NewSessionRequest ,
505- ) : Promise < acp . NewSessionResponse > {
516+ ) : Promise < LegacyNewSessionResponse > {
506517 logger . log ( "Starting new session..." ) ;
507518 const [ sessionId , modelState , modeState ] = await this . getOrCreateSession ( params ) ;
508519
@@ -533,7 +544,7 @@ export class CodexAcpServer implements acp.Agent {
533544 return { } ;
534545 }
535546
536- async unstable_logout ( _params : acp . LogoutRequest ) : Promise < void > {
547+ async logout ( _params : acp . LogoutRequest ) : Promise < void > {
537548 logger . log ( "Logout request received" ) ;
538549 await this . runWithProcessCheck ( ( ) => this . codexAcpClient . logout ( ) ) ;
539550 logger . log ( "Logout request completed" ) ;
@@ -630,7 +641,7 @@ export class CodexAcpServer implements acp.Agent {
630641 sessionState . currentModelSupportsFast = modelSupportsFast ( model ) ;
631642 }
632643
633- async unstable_setSessionModel ( params : acp . SetSessionModelRequest ) : Promise < acp . SetSessionModelResponse | void > {
644+ async unstable_setSessionModel ( params : LegacySetSessionModelRequest ) : Promise < LegacySetSessionModelResponse > {
634645 logger . log ( "Set session model requested" , {
635646 sessionId : params . sessionId ,
636647 modelId : params . modelId
@@ -661,6 +672,18 @@ export class CodexAcpServer implements acp.Agent {
661672 return { } ;
662673 }
663674
675+ private parseLegacySetSessionModelParams ( params : Record < string , unknown > ) : LegacySetSessionModelRequest {
676+ const sessionId = params [ "sessionId" ] ;
677+ const modelId = params [ "modelId" ] ;
678+ if ( typeof sessionId !== "string" || typeof modelId !== "string" ) {
679+ throw RequestError . invalidParams ( ) ;
680+ }
681+ return {
682+ sessionId : sessionId ,
683+ modelId : modelId ,
684+ } ;
685+ }
686+
664687 private createSessionConfigOptions ( sessionState : SessionState ) : Array < acp . SessionConfigOption > {
665688 const currentModelId = ModelId . fromString ( sessionState . currentModelId ) ;
666689 return [
@@ -703,7 +726,7 @@ export class CodexAcpServer implements acp.Agent {
703726 . join ( "-" ) ;
704727 }
705728
706- private createModelState ( availableModels : Model [ ] , selectedModelId : string ) : SessionModelState {
729+ private createModelState ( availableModels : Model [ ] , selectedModelId : string ) : LegacySessionModelState {
707730 const allowedModels = availableModels
708731 . flatMap ( ( model ) =>
709732 model . supportedReasoningEfforts . map ( ( effort ) => ( {
@@ -722,7 +745,7 @@ export class CodexAcpServer implements acp.Agent {
722745 request : acp . LoadSessionRequest
723746 ) : Promise < {
724747 sessionId : SessionId ;
725- modelState : SessionModelState ;
748+ modelState : LegacySessionModelState ;
726749 modeState : SessionModeState ;
727750 thread : Thread ;
728751 } > {
@@ -797,7 +820,7 @@ export class CodexAcpServer implements acp.Agent {
797820 }
798821
799822 await this . availableCommands . publish ( sessionId ) ;
800- const sessionModelState : SessionModelState = this . createModelState ( models , currentModelId ) ;
823+ const sessionModelState : LegacySessionModelState = this . createModelState ( models , currentModelId ) ;
801824 const sessionModeState : SessionModeState = sessionState . agentMode . toSessionModeState ( ) ;
802825
803826 return {
0 commit comments