@@ -1302,6 +1302,29 @@ const makeClaudeAdapter = Effect.fn("makeClaudeAdapter")(function* (
13021302 } ) ;
13031303 } ) ;
13041304
1305+ const handleClaudeStreamError = (
1306+ context : ClaudeSessionContext ,
1307+ cause : Cause . Cause < ClaudeStreamError > ,
1308+ ) =>
1309+ Option . match ( Cause . findErrorOption ( cause ) , {
1310+ onNone : ( ) =>
1311+ context . turnState
1312+ ? completeTurn ( context , "failed" , "Claude runtime stream failed." )
1313+ : Effect . void ,
1314+ onSome : ( streamError ) =>
1315+ isClaudeStreamInterruptedError ( streamError )
1316+ ? context . turnState
1317+ ? completeTurn ( context , "interrupted" , "Claude runtime interrupted." )
1318+ : Effect . void
1319+ : Effect . gen ( function * ( ) {
1320+ const message = streamError . message ;
1321+ yield * emitRuntimeError ( context , message , Cause . pretty ( cause ) ) ;
1322+ if ( context . turnState ) {
1323+ yield * completeTurn ( context , "failed" , message ) ;
1324+ }
1325+ } ) ,
1326+ } ) ;
1327+
13051328 const completeTurn = Effect . fn ( "completeTurn" ) ( function * (
13061329 context : ClaudeSessionContext ,
13071330 status : ProviderRuntimeTurnStatus ,
@@ -2228,34 +2251,16 @@ const makeClaudeAdapter = Effect.fn("makeClaudeAdapter")(function* (
22282251 return ;
22292252 }
22302253
2231- if ( Exit . isFailure ( exit ) ) {
2232- if ( Cause . hasInterruptsOnly ( exit . cause ) ) {
2233- if ( context . turnState ) {
2234- yield * completeTurn ( context , "interrupted" , "Claude runtime interrupted." ) ;
2235- }
2236- } else {
2237- yield * Option . match ( Cause . findErrorOption ( exit . cause ) , {
2238- onNone : ( ) =>
2239- context . turnState
2240- ? completeTurn ( context , "failed" , "Claude runtime stream failed." )
2241- : Effect . void ,
2242- onSome : ( streamError ) =>
2243- isClaudeStreamInterruptedError ( streamError )
2244- ? context . turnState
2245- ? completeTurn ( context , "interrupted" , "Claude runtime interrupted." )
2246- : Effect . void
2247- : Effect . gen ( function * ( ) {
2248- const message = streamError . message ;
2249- yield * emitRuntimeError ( context , message , Cause . pretty ( exit . cause ) ) ;
2250- if ( context . turnState ) {
2251- yield * completeTurn ( context , "failed" , message ) ;
2252- }
2253- } ) ,
2254- } ) ;
2255- }
2256- } else if ( context . turnState ) {
2257- yield * completeTurn ( context , "interrupted" , "Claude runtime stream ended." ) ;
2258- }
2254+ yield * Exit . match ( exit , {
2255+ onSuccess : ( ) =>
2256+ context . turnState
2257+ ? completeTurn ( context , "interrupted" , "Claude runtime stream ended." )
2258+ : Effect . void ,
2259+ onFailure : ( cause ) =>
2260+ Cause . hasInterruptsOnly ( cause ) && context . turnState
2261+ ? completeTurn ( context , "interrupted" , "Claude runtime interrupted." )
2262+ : handleClaudeStreamError ( context , cause ) ,
2263+ } ) ;
22592264
22602265 yield * stopSessionInternal ( context , {
22612266 emitExitEvent : true ,
0 commit comments