@@ -876,58 +876,92 @@ export class ClaudeAcpAgent extends BaseAcpAgent {
876876 { sessionId, taskId, taskRunId : meta ?. taskRunId } ,
877877 ) ;
878878
879- try {
880- const result = await withTimeout (
881- q . initializationResult ( ) ,
882- SESSION_VALIDATION_TIMEOUT_MS ,
883- ) ;
884- if ( result . result === "timeout" ) {
885- throw new Error (
886- `Session ${ isResume ? ( forkSession ? "fork" : "resumption" ) : "initialization" } timed out for sessionId=${ sessionId } ` ,
879+ if ( isResume ) {
880+ // Resume must block on initialization to validate the session is still alive.
881+ // For stale sessions this throws (e.g. "No conversation found").
882+ try {
883+ const result = await withTimeout (
884+ q . initializationResult ( ) ,
885+ SESSION_VALIDATION_TIMEOUT_MS ,
887886 ) ;
887+ if ( result . result === "timeout" ) {
888+ throw new Error (
889+ `Session ${ forkSession ? "fork" : "resumption" } timed out for sessionId=${ sessionId } ` ,
890+ ) ;
891+ }
892+ } catch ( err ) {
893+ settingsManager . dispose ( ) ;
894+ if (
895+ err instanceof Error &&
896+ err . message === "Query closed before response received"
897+ ) {
898+ throw RequestError . resourceNotFound ( sessionId ) ;
899+ }
900+ this . logger . error (
901+ forkSession ? "Session fork failed" : "Session resumption failed" ,
902+ {
903+ sessionId,
904+ taskId,
905+ taskRunId : meta ?. taskRunId ,
906+ error : err instanceof Error ? err . message : String ( err ) ,
907+ } ,
908+ ) ;
909+ throw err ;
888910 }
889- } catch ( err ) {
890- settingsManager . dispose ( ) ;
891- if (
892- isResume &&
893- err instanceof Error &&
894- err . message === "Query closed before response received"
895- ) {
896- throw RequestError . resourceNotFound ( sessionId ) ;
897- }
898- this . logger . error (
899- isResume
900- ? forkSession
901- ? "Session fork failed"
902- : "Session resumption failed"
903- : "Session initialization failed" ,
904- {
911+ }
912+
913+ // Kick off SDK initialization for new sessions so it runs concurrently
914+ // with the model config fetch below (the gateway REST call is independent).
915+ const initPromise = ! isResume
916+ ? withTimeout ( q . initializationResult ( ) , SESSION_VALIDATION_TIMEOUT_MS )
917+ : undefined ;
918+
919+ const [ modelOptions ] = await Promise . all ( [
920+ this . getModelConfigOptions (
921+ settingsManager . getSettings ( ) . model || meta ?. model || undefined ,
922+ ) ,
923+ ...( meta ?. taskRunId
924+ ? [
925+ this . client . extNotification ( "_posthog/sdk_session" , {
926+ taskRunId : meta . taskRunId ,
927+ sessionId,
928+ adapter : "claude" ,
929+ } ) ,
930+ ]
931+ : [ ] ) ,
932+ ] ) ;
933+
934+ if ( initPromise ) {
935+ try {
936+ const initResult = await initPromise ;
937+ if ( initResult . result === "timeout" ) {
938+ settingsManager . dispose ( ) ;
939+ throw new Error (
940+ `Session initialization timed out for sessionId=${ sessionId } ` ,
941+ ) ;
942+ }
943+ } catch ( err ) {
944+ settingsManager . dispose ( ) ;
945+ this . logger . error ( "Session initialization failed" , {
905946 sessionId,
906947 taskId,
907948 taskRunId : meta ?. taskRunId ,
908949 error : err instanceof Error ? err . message : String ( err ) ,
909- } ,
910- ) ;
911- throw err ;
912- }
913-
914- if ( meta ?. taskRunId ) {
915- await this . client . extNotification ( "_posthog/sdk_session" , {
916- taskRunId : meta . taskRunId ,
917- sessionId,
918- adapter : "claude" ,
919- } ) ;
950+ } ) ;
951+ throw err ;
952+ }
920953 }
921954
922- // Resolve model: settings model takes priority, then gateway
923955 const settingsModel = settingsManager . getSettings ( ) . model ;
924- const modelOptions = await this . getModelConfigOptions ( ) ;
925- const resolvedModelId = settingsModel || modelOptions . currentModelId ;
956+ const metaModel = meta ?. model ;
957+ const resolvedModelId =
958+ settingsModel || metaModel || modelOptions . currentModelId ;
926959 session . modelId = resolvedModelId ;
927960 session . lastContextWindowSize =
928961 this . getContextWindowForModel ( resolvedModelId ) ;
929962
930963 const resolvedSdkModel = toSdkModelId ( resolvedModelId ) ;
964+
931965 if ( ! isResume && resolvedSdkModel !== DEFAULT_MODEL ) {
932966 await this . session . query . setModel ( resolvedSdkModel ) ;
933967 }
0 commit comments