@@ -11,6 +11,11 @@ const accountManagerState = vi.hoisted(() => ({
1111 setAccountEnabledCalls : [ ] as Array < { index : number ; enabled : boolean } > ,
1212} ) ) ;
1313
14+ const recoveryState = vi . hoisted ( ( ) => ( {
15+ forceRecoverable : false ,
16+ isRecoverableErrorCalls : 0 ,
17+ } ) ) ;
18+
1419function createMockAccount (
1520 overrides : Partial < Record < string , unknown > > = { } ,
1621) : Record < string , unknown > {
@@ -272,6 +277,19 @@ vi.mock("../lib/storage.js", () => ({
272277 importAccounts : async ( ) => ( { imported : 0 , total : 0 } ) ,
273278} ) ) ;
274279
280+ vi . mock ( "../lib/recovery.js" , ( ) => ( {
281+ createSessionRecoveryHook : ( ) => null ,
282+ isRecoverableError : ( ) => {
283+ recoveryState . isRecoverableErrorCalls += 1 ;
284+ return recoveryState . forceRecoverable ;
285+ } ,
286+ detectErrorType : ( ) => "tool_use_failed" ,
287+ getRecoveryToastContent : ( ) => ( {
288+ title : "Recoverable error" ,
289+ message : "retry" ,
290+ } ) ,
291+ } ) ) ;
292+
275293vi . mock ( "../lib/auto-update-checker.js" , ( ) => ( {
276294 checkAndNotify : async ( ) => { } ,
277295 checkForUpdates : async ( ) => ( { hasUpdate : false , currentVersion : "4.5.0" , latestVersion : null , updateCommand : "" } ) ,
@@ -293,6 +311,8 @@ describe("OpenAIAuthPlugin rate-limit retry", () => {
293311
294312 beforeEach ( ( ) => {
295313 resetAccountManagerState ( ) ;
314+ recoveryState . forceRecoverable = false ;
315+ recoveryState . isRecoverableErrorCalls = 0 ;
296316 vi . resetModules ( ) ;
297317
298318 for ( const key of envKeys ) originalEnv [ key ] = process . env [ key ] ;
@@ -532,6 +552,7 @@ describe("OpenAIAuthPlugin rate-limit retry", () => {
532552 expect ( accountManagerState . disableCurrentWorkspaceCalls ) . toBe ( 0 ) ;
533553 expect ( accountManagerState . rotateToNextWorkspaceCalls ) . toBe ( 0 ) ;
534554 expect ( accountManagerState . setAccountEnabledCalls ) . toEqual ( [ ] ) ;
555+ expect ( recoveryState . isRecoverableErrorCalls ) . toBe ( 0 ) ;
535556 } ) ;
536557
537558 it ( "retries with a fallback account after a workspace-less account gets a workspace-disabled response" , async ( ) => {
0 commit comments