fix(task-logs): invalidate sources before change events
This commit is contained in:
parent
b584fa0403
commit
511ea75c4f
2 changed files with 29 additions and 4 deletions
|
|
@ -482,10 +482,6 @@ export class TeamLogSourceTracker {
|
||||||
}
|
}
|
||||||
|
|
||||||
private emitLogSourceChange(teamName: string): void {
|
private emitLogSourceChange(teamName: string): void {
|
||||||
this.emitter?.({
|
|
||||||
type: 'log-source-change',
|
|
||||||
teamName,
|
|
||||||
});
|
|
||||||
for (const listener of this.changeListeners) {
|
for (const listener of this.changeListeners) {
|
||||||
try {
|
try {
|
||||||
listener(teamName);
|
listener(teamName);
|
||||||
|
|
@ -493,6 +489,10 @@ export class TeamLogSourceTracker {
|
||||||
logger.warn(`Log-source listener failed for ${teamName}: ${String(error)}`);
|
logger.warn(`Log-source listener failed for ${teamName}: ${String(error)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this.emitter?.({
|
||||||
|
type: 'log-source-change',
|
||||||
|
teamName,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private async computeSnapshot(context: {
|
private async computeSnapshot(context: {
|
||||||
|
|
|
||||||
|
|
@ -125,6 +125,31 @@ describe('TeamLogSourceTracker', () => {
|
||||||
await tracker.disableTracking('demo', 'tool_activity');
|
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 () => {
|
it('supports stall_monitor as an independent tracking consumer', async () => {
|
||||||
tempDir = await mkdtemp(path.join(tmpdir(), 'team-log-source-tracker-stall-monitor-'));
|
tempDir = await mkdtemp(path.join(tmpdir(), 'team-log-source-tracker-stall-monitor-'));
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue