erosolar-cli 1.7.200 → 1.7.202

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,265 @@
1
+ /**
2
+ * UIUpdateCoordinator
3
+ *
4
+ * Centralized queue for all UI updates (status line, overlays, prompts, streaming heartbeats).
5
+ * - Serializes writes so concurrent streams do not interleave.
6
+ * - Coalesces repeated updates by key (e.g., heartbeat ticks).
7
+ * - Expires stale work when UI mode changes (idle/streaming/tools/etc).
8
+ */
9
+ export class UIUpdateCoordinator {
10
+ currentMode;
11
+ modeEpoch = 0;
12
+ activeScope;
13
+ queue = [];
14
+ coalesced = new Map();
15
+ heartbeats = new Map();
16
+ flushing = false;
17
+ flushScheduled = false;
18
+ constructor(initialMode = 'idle') {
19
+ this.currentMode = initialMode;
20
+ this.activeScope = this.makeScope(initialMode, this.modeEpoch);
21
+ }
22
+ /**
23
+ * Switch UI mode (idle/streaming/tools/etc) and expire stale work tied to the previous scope.
24
+ */
25
+ setMode(mode) {
26
+ if (mode === this.currentMode) {
27
+ return this.activeScope;
28
+ }
29
+ const previousScope = this.activeScope;
30
+ this.currentMode = mode;
31
+ this.modeEpoch += 1;
32
+ this.activeScope = this.makeScope(mode, this.modeEpoch);
33
+ this.invalidateScope(previousScope);
34
+ this.pruneHeartbeats();
35
+ this.scheduleFlush();
36
+ return this.activeScope;
37
+ }
38
+ /**
39
+ * Enqueue a UI update. By default it is tied to the current scope/mode so it is dropped
40
+ * automatically when the UI switches modes.
41
+ */
42
+ enqueue(request) {
43
+ const task = this.buildTask(request);
44
+ if (task.coalesceKey) {
45
+ const existing = this.coalesced.get(task.coalesceKey);
46
+ if (existing) {
47
+ this.removeFromQueue(existing);
48
+ }
49
+ this.coalesced.set(task.coalesceKey, task);
50
+ }
51
+ this.queue.push(task);
52
+ this.scheduleFlush();
53
+ }
54
+ /**
55
+ * Start a repeating UI update (e.g., streaming heartbeat). Automatically stops when
56
+ * the mode changes away from the allowed modes.
57
+ */
58
+ startHeartbeat(id, options) {
59
+ const resolved = {
60
+ lane: options.lane ?? 'heartbeat',
61
+ priority: options.priority ?? 'low',
62
+ coalesceKey: options.coalesceKey ?? `heartbeat:${id}`,
63
+ description: options.description ?? `heartbeat:${id}`,
64
+ mode: options.mode,
65
+ scope: options.scope ?? this.activeScope,
66
+ intervalMs: options.intervalMs,
67
+ run: options.run,
68
+ immediate: options.immediate ?? true,
69
+ };
70
+ this.stopHeartbeat(id);
71
+ const tick = () => {
72
+ if (resolved.mode && !this.isModeAllowed(resolved.mode)) {
73
+ return;
74
+ }
75
+ this.enqueue({
76
+ lane: resolved.lane,
77
+ run: resolved.run,
78
+ description: resolved.description,
79
+ priority: resolved.priority,
80
+ coalesceKey: resolved.coalesceKey,
81
+ mode: resolved.mode,
82
+ scope: resolved.scope,
83
+ });
84
+ };
85
+ if (resolved.immediate) {
86
+ tick();
87
+ }
88
+ const timer = setInterval(tick, resolved.intervalMs);
89
+ this.heartbeats.set(id, { id, options: resolved, tick, timer });
90
+ }
91
+ /**
92
+ * Stop a heartbeat and remove any queued updates for its coalesce key.
93
+ */
94
+ stopHeartbeat(id) {
95
+ const heartbeat = this.heartbeats.get(id);
96
+ if (!heartbeat) {
97
+ return;
98
+ }
99
+ clearInterval(heartbeat.timer);
100
+ this.heartbeats.delete(id);
101
+ const key = heartbeat.options.coalesceKey ?? `heartbeat:${id}`;
102
+ this.removeQueuedByKey(key);
103
+ }
104
+ /**
105
+ * Check if any heartbeat (or a specific one) is active.
106
+ */
107
+ isHeartbeatActive(id) {
108
+ if (typeof id === 'string') {
109
+ return this.heartbeats.has(id);
110
+ }
111
+ return this.heartbeats.size > 0;
112
+ }
113
+ /**
114
+ * Dispose all timers and queued updates.
115
+ */
116
+ dispose() {
117
+ for (const heartbeat of this.heartbeats.values()) {
118
+ clearInterval(heartbeat.timer);
119
+ }
120
+ this.heartbeats.clear();
121
+ this.queue.length = 0;
122
+ this.coalesced.clear();
123
+ this.flushScheduled = false;
124
+ }
125
+ buildTask(request) {
126
+ const allowedModes = request.mode
127
+ ? new Set(Array.isArray(request.mode) ? request.mode : [request.mode])
128
+ : undefined;
129
+ return {
130
+ ...request,
131
+ allowedModes,
132
+ scope: request.scope ?? this.activeScope,
133
+ enqueuedAt: Date.now(),
134
+ priorityValue: this.normalizePriority(request.priority),
135
+ modeEpoch: this.modeEpoch,
136
+ };
137
+ }
138
+ normalizePriority(priority) {
139
+ switch (priority) {
140
+ case 'critical':
141
+ return 0;
142
+ case 'high':
143
+ return 1;
144
+ case 'low':
145
+ return 3;
146
+ case 'normal':
147
+ default:
148
+ return 2;
149
+ }
150
+ }
151
+ scheduleFlush() {
152
+ if (this.flushScheduled) {
153
+ return;
154
+ }
155
+ this.flushScheduled = true;
156
+ queueMicrotask(() => this.flushQueue());
157
+ }
158
+ async flushQueue() {
159
+ if (this.flushing) {
160
+ return;
161
+ }
162
+ this.flushScheduled = false;
163
+ this.flushing = true;
164
+ try {
165
+ this.sortQueue();
166
+ while (this.queue.length > 0) {
167
+ const task = this.queue.shift();
168
+ if (!task) {
169
+ break;
170
+ }
171
+ if (!this.isTaskRunnable(task)) {
172
+ this.cleanupCoalesced(task);
173
+ continue;
174
+ }
175
+ try {
176
+ await task.run();
177
+ }
178
+ catch {
179
+ // UI update failures should never crash the shell
180
+ }
181
+ finally {
182
+ this.cleanupCoalesced(task);
183
+ }
184
+ }
185
+ }
186
+ finally {
187
+ this.flushing = false;
188
+ }
189
+ }
190
+ isTaskRunnable(task) {
191
+ if (task.scope && task.scope !== this.activeScope) {
192
+ return false;
193
+ }
194
+ if (task.allowedModes && !task.allowedModes.has(this.currentMode)) {
195
+ return false;
196
+ }
197
+ return true;
198
+ }
199
+ sortQueue() {
200
+ this.queue.sort((a, b) => {
201
+ if (a.priorityValue !== b.priorityValue) {
202
+ return a.priorityValue - b.priorityValue;
203
+ }
204
+ return a.enqueuedAt - b.enqueuedAt;
205
+ });
206
+ }
207
+ invalidateScope(scope) {
208
+ this.removeQueuedByScope(scope);
209
+ }
210
+ pruneHeartbeats() {
211
+ for (const [id, heartbeat] of this.heartbeats.entries()) {
212
+ if (heartbeat.options.mode && !this.isModeAllowed(heartbeat.options.mode)) {
213
+ this.stopHeartbeat(id);
214
+ }
215
+ }
216
+ }
217
+ isModeAllowed(mode) {
218
+ if (!mode) {
219
+ return true;
220
+ }
221
+ const allowed = Array.isArray(mode) ? mode : [mode];
222
+ return allowed.includes(this.currentMode);
223
+ }
224
+ removeFromQueue(task) {
225
+ const index = this.queue.indexOf(task);
226
+ if (index >= 0) {
227
+ this.queue.splice(index, 1);
228
+ }
229
+ }
230
+ removeQueuedByKey(key) {
231
+ if (this.coalesced.has(key)) {
232
+ this.coalesced.delete(key);
233
+ }
234
+ for (let index = this.queue.length - 1; index >= 0; index -= 1) {
235
+ if (this.queue[index]?.coalesceKey === key) {
236
+ this.queue.splice(index, 1);
237
+ }
238
+ }
239
+ }
240
+ removeQueuedByScope(scope) {
241
+ for (let index = this.queue.length - 1; index >= 0; index -= 1) {
242
+ if (this.queue[index]?.scope === scope) {
243
+ this.queue.splice(index, 1);
244
+ }
245
+ }
246
+ for (const [key, task] of this.coalesced.entries()) {
247
+ if (task.scope === scope) {
248
+ this.coalesced.delete(key);
249
+ }
250
+ }
251
+ }
252
+ cleanupCoalesced(task) {
253
+ if (!task.coalesceKey) {
254
+ return;
255
+ }
256
+ const current = this.coalesced.get(task.coalesceKey);
257
+ if (current === task) {
258
+ this.coalesced.delete(task.coalesceKey);
259
+ }
260
+ }
261
+ makeScope(mode, epoch) {
262
+ return `${mode}:${epoch}`;
263
+ }
264
+ }
265
+ //# sourceMappingURL=UIUpdateCoordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UIUpdateCoordinator.js","sourceRoot":"","sources":["../../../src/ui/orchestration/UIUpdateCoordinator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "erosolar-cli",
3
- "version": "1.7.200",
3
+ "version": "1.7.202",
4
4
  "description": "Unified AI agent framework for the command line - Multi-provider support with schema-driven tools, code intelligence, and transparent reasoning",
5
5
  "main": "dist/bin/erosolar.js",
6
6
  "type": "module",