@@ -65,11 +65,14 @@ export const createLLMEventPublisher = (events: EventV2.Interface, input: Input)
6565 > ( )
6666 const timestamp = DateTime . now
6767 let assistantMessageID : SessionMessage . ID | undefined
68+ let assistantActive = false
69+ let assistantFailed = false
6870 let providerFailed = false
6971
7072 const startAssistant = Effect . fnUntraced ( function * ( ) {
7173 if ( assistantMessageID !== undefined ) return assistantMessageID
7274 assistantMessageID = SessionMessage . ID . create ( )
75+ assistantActive = true
7376 yield * events . publish ( SessionEvent . Step . Started , {
7477 ...input ,
7578 assistantMessageID,
@@ -190,6 +193,20 @@ export const createLLMEventPublisher = (events: EventV2.Interface, input: Input)
190193 yield * flushFragments ( )
191194 } )
192195
196+ const failAssistant = Effect . fnUntraced ( function * ( message : string ) {
197+ if ( assistantFailed ) return
198+ yield * flush ( )
199+ const assistantMessageID = yield * startAssistant ( )
200+ assistantActive = false
201+ assistantFailed = true
202+ yield * events . publish ( SessionEvent . Step . Failed , {
203+ sessionID : input . sessionID ,
204+ timestamp : yield * timestamp ,
205+ assistantMessageID,
206+ error : { type : "unknown" , message } ,
207+ } )
208+ } )
209+
193210 const failUnsettledTools = Effect . fn ( "SessionRunner.failUnsettledTools" ) ( function * (
194211 message : string ,
195212 hostedOnly = false ,
@@ -375,6 +392,7 @@ export const createLLMEventPublisher = (events: EventV2.Interface, input: Input)
375392 }
376393 case "step-finish" :
377394 yield * flush ( )
395+ assistantActive = false
378396 yield * events . publish ( SessionEvent . Step . Ended , {
379397 sessionID : input . sessionID ,
380398 timestamp : yield * timestamp ,
@@ -388,24 +406,19 @@ export const createLLMEventPublisher = (events: EventV2.Interface, input: Input)
388406 return
389407 case "provider-error" :
390408 providerFailed = true
391- yield * flush ( )
392- yield * events . publish ( SessionEvent . Step . Failed , {
393- sessionID : input . sessionID ,
394- timestamp : yield * timestamp ,
395- assistantMessageID : yield * startAssistant ( ) ,
396- error : { type : "unknown" , message : event . message } ,
397- } )
409+ yield * failAssistant ( event . message )
398410 return
399411 }
400412 } )
401413
402414 return {
403415 publish,
404416 flush,
417+ failAssistant,
405418 failUnsettledTools,
419+ hasActiveAssistant : ( ) => assistantActive ,
406420 hasAssistantStarted : ( ) => assistantMessageID !== undefined ,
407421 hasProviderError : ( ) => providerFailed ,
408- startAssistant,
409422 assistantMessageID : assistantMessageIDForTool ,
410423 }
411424}
0 commit comments