From 511ea75c4f690525b340471b356b71bfd9656318 Mon Sep 17 00:00:00 2001 From: 777genius Date: Fri, 1 May 2026 17:56:33 +0300 Subject: [PATCH] fix(task-logs): invalidate sources before change events --- .../services/team/TeamLogSourceTracker.ts | 8 +++--- .../team/TeamLogSourceTracker.test.ts | 25 +++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/services/team/TeamLogSourceTracker.ts b/src/main/services/team/TeamLogSourceTracker.ts index bee27e61..9e89784c 100644 --- a/src/main/services/team/TeamLogSourceTracker.ts +++ b/src/main/services/team/TeamLogSourceTracker.ts @@ -482,10 +482,6 @@ export class TeamLogSourceTracker { } private emitLogSourceChange(teamName: string): void { - this.emitter?.({ - type: 'log-source-change', - teamName, - }); for (const listener of this.changeListeners) { try { listener(teamName); @@ -493,6 +489,10 @@ export class TeamLogSourceTracker { logger.warn(`Log-source listener failed for ${teamName}: ${String(error)}`); } } + this.emitter?.({ + type: 'log-source-change', + teamName, + }); } private async computeSnapshot(context: { diff --git a/test/main/services/team/TeamLogSourceTracker.test.ts b/test/main/services/team/TeamLogSourceTracker.test.ts index 47d3e2db..6f75b660 100644 --- a/test/main/services/team/TeamLogSourceTracker.test.ts +++ b/test/main/services/team/TeamLogSourceTracker.test.ts @@ -125,6 +125,31 @@ describe('TeamLogSourceTracker', () => { await tracker.disableTracking('demo', 'tool_activity'); }); + it('notifies log-source listeners before forwarding the external team change event', () => { + const logsFinder = { + getLogSourceWatchContext: vi.fn(async () => ({ + projectDir: '/tmp/demo', + sessionIds: [], + })), + } as unknown as TeamMemberLogsFinder; + const tracker = new TeamLogSourceTracker(logsFinder); + const events: string[] = []; + tracker.onLogSourceChange(() => { + events.push('listener'); + }); + tracker.setEmitter(() => { + events.push('emitter'); + }); + + ( + tracker as unknown as { + emitLogSourceChange: (teamName: string) => void; + } + ).emitLogSourceChange('demo'); + + expect(events).toEqual(['listener', 'emitter']); + }); + it('supports stall_monitor as an independent tracking consumer', async () => { tempDir = await mkdtemp(path.join(tmpdir(), 'team-log-source-tracker-stall-monitor-'));