@@ -261,21 +261,14 @@ export class DynamicWorkflowMissionControlComponent implements Component {
261261 this . recordActivity ( member . index , 'Started' ) ;
262262 }
263263
264- private markStartedFromActivity ( member : DynamicWorkflowMember ) : void {
265- if ( member . phase !== 'pending' && member . phase !== 'queued' ) return ;
266- member . phase = 'running' ;
267- member . startedAtMs ??= Date . now ( ) ;
268- delete member . statusDetail ;
269- this . recordActivity ( member . index , 'Started' ) ;
270- }
271264
272265 recordToolCall ( input : {
273266 readonly agentId : string ;
274267 readonly name ?: string ;
275268 } ) : void {
276269 const member = this . findMemberByAgentId ( input . agentId ) ;
277270 if ( member === undefined || isTerminalPhase ( member . phase ) ) return ;
278- this . markStartedFromActivity ( member ) ;
271+ if ( member . phase === 'pending' || member . phase === 'queued' ) this . markStarted ( input . agentId ) ;
279272 const latest = input . name === undefined ? 'Using a tool' : `Using ${ input . name } ` ;
280273 this . setLatest ( member , latest , true ) ;
281274 // Streamed text that follows starts a new line, never continues this label.
@@ -285,7 +278,7 @@ export class DynamicWorkflowMissionControlComponent implements Component {
285278 appendModelDelta ( input : { readonly agentId : string ; readonly delta : string } ) : void {
286279 const member = this . findMemberByAgentId ( input . agentId ) ;
287280 if ( member === undefined || isTerminalPhase ( member . phase ) || input . delta . length === 0 ) return ;
288- this . markStartedFromActivity ( member ) ;
281+ if ( member . phase === 'pending' || member . phase === 'queued' ) this . markStarted ( input . agentId ) ;
289282 const combined = `${ member . carry } ${ input . delta } ` ;
290283 // Only the text after the last newline is still being written. A delta that
291284 // ends exactly at a newline leaves nothing pending, so carrying the closed
@@ -604,15 +597,14 @@ export class DynamicWorkflowMissionControlComponent implements Component {
604597 Math . max ( 0 , nowMs - this . model . startedAtMs ) / DYNAMIC_WORKFLOW_PROGRESS_FRAME_MS ,
605598 ) ;
606599 const showProgress = width >= DYNAMIC_WORKFLOW_RENDERING . memberProgressMinWidth ;
607- const progressColumn = centerToWidth (
608- renderProgressGlyph ( member . phase , frame ) ,
609- DYNAMIC_WORKFLOW_RENDERING . memberProgressWidth ,
610- ) ;
611- const stateColumn = padToWidth ( renderStateLabel ( member . phase ) , STATE_COLUMN_WIDTH ) ;
612- const compactStatus = padToWidth ( renderCompactStatus ( member . phase , frame ) , STATE_COLUMN_WIDTH ) ;
613600 const prefix = showProgress
614- ? `${ id } ${ progressColumn } ${ stateColumn } `
615- : `${ id } ${ compactStatus } ` ;
601+ ? `${ id } ${
602+ centerToWidth (
603+ renderProgressGlyph ( member . phase , frame ) ,
604+ DYNAMIC_WORKFLOW_RENDERING . memberProgressWidth ,
605+ )
606+ } ${ padToWidth ( renderStateLabel ( member . phase ) , STATE_COLUMN_WIDTH ) } `
607+ : `${ id } ${ padToWidth ( renderCompactStatus ( member . phase , frame ) , STATE_COLUMN_WIDTH ) } ` ;
616608 const task = member . item || 'Delegated agent' ;
617609 // The elision is display-only: the dedup below still compares whole items,
618610 // so a streamed line that merely repeats the task is still suppressed.
0 commit comments