fix(task-logs): invalidate sources before change events

This commit is contained in:
777genius 2026-05-01 17:56:33 +03:00
parent b584fa0403
commit 511ea75c4f
2 changed files with 29 additions and 4 deletions

View file

@ -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: {

View file

@ -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-'));