-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathruntime-coordinator.ts
More file actions
69 lines (56 loc) · 1.75 KB
/
runtime-coordinator.ts
File metadata and controls
69 lines (56 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import type { HeadlessDispatchMonitor } from "./headless-monitor.js";
/** Centralizes overlay, monitor, widget, and completion-suppression state for the extension runtime. */
export class InteractiveShellCoordinator {
private overlayOpen = false;
private headlessMonitors = new Map<string, HeadlessDispatchMonitor>();
private bgWidgetCleanup: (() => void) | null = null;
private agentHandledCompletion = new Set<string>();
isOverlayOpen(): boolean {
return this.overlayOpen;
}
beginOverlay(): boolean {
if (this.overlayOpen) return false;
this.overlayOpen = true;
return true;
}
endOverlay(): void {
this.overlayOpen = false;
}
markAgentHandledCompletion(sessionId: string): void {
this.agentHandledCompletion.add(sessionId);
}
consumeAgentHandledCompletion(sessionId: string): boolean {
const had = this.agentHandledCompletion.has(sessionId);
this.agentHandledCompletion.delete(sessionId);
return had;
}
setMonitor(id: string, monitor: HeadlessDispatchMonitor): void {
this.headlessMonitors.set(id, monitor);
}
getMonitor(id: string): HeadlessDispatchMonitor | undefined {
return this.headlessMonitors.get(id);
}
deleteMonitor(id: string): void {
this.headlessMonitors.delete(id);
}
disposeMonitor(id: string): void {
const monitor = this.headlessMonitors.get(id);
if (!monitor) return;
monitor.dispose();
this.headlessMonitors.delete(id);
}
disposeAllMonitors(): void {
for (const monitor of this.headlessMonitors.values()) {
monitor.dispose();
}
this.headlessMonitors.clear();
}
replaceBackgroundWidgetCleanup(cleanup: (() => void) | null): void {
this.bgWidgetCleanup?.();
this.bgWidgetCleanup = cleanup;
}
clearBackgroundWidget(): void {
this.bgWidgetCleanup?.();
this.bgWidgetCleanup = null;
}
}