fix: prevent error event from overriding completed status in controller
Add finished guard so that once a task reaches completed/error terminal state, subsequent events don't flip the status back. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
6876ec569b
commit
2a150dcff5
|
|
@ -63,12 +63,14 @@ export class AgentController {
|
||||||
});
|
});
|
||||||
|
|
||||||
let eventCount = 0;
|
let eventCount = 0;
|
||||||
|
let finished = false;
|
||||||
for await (const event of stream) {
|
for await (const event of stream) {
|
||||||
eventCount++;
|
eventCount++;
|
||||||
this.logger.log(`[Task ${task.id}] Event #${eventCount}: type=${event.type}${event.type === 'text' ? ` len=${(event as any).content?.length}` : ''}`);
|
this.logger.log(`[Task ${task.id}] Event #${eventCount}: type=${event.type}${event.type === 'text' ? ` len=${(event as any).content?.length}` : ''}${event.type === 'error' ? ` msg=${(event as any).message}` : ''}`);
|
||||||
this.gateway.emitStreamEvent(session.id, event);
|
this.gateway.emitStreamEvent(session.id, event);
|
||||||
|
|
||||||
if (event.type === 'completed') {
|
if (event.type === 'completed' && !finished) {
|
||||||
|
finished = true;
|
||||||
task.status = TaskStatus.COMPLETED;
|
task.status = TaskStatus.COMPLETED;
|
||||||
task.result = event.summary;
|
task.result = event.summary;
|
||||||
task.tokensUsed = event.tokensUsed;
|
task.tokensUsed = event.tokensUsed;
|
||||||
|
|
@ -80,7 +82,8 @@ export class AgentController {
|
||||||
await this.sessionRepository.save(session);
|
await this.sessionRepository.save(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.type === 'error') {
|
if (event.type === 'error' && !finished) {
|
||||||
|
finished = true;
|
||||||
task.status = TaskStatus.FAILED;
|
task.status = TaskStatus.FAILED;
|
||||||
task.result = event.message;
|
task.result = event.message;
|
||||||
task.completedAt = new Date();
|
task.completedAt = new Date();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue