zcode-acp-server 0.60.0 → 0.62.0
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.
- package/README.md +17 -13
- package/dist/code-fingerprint.json +2 -2
- package/dist/config/settings.d.ts +7 -0
- package/dist/config/settings.d.ts.map +1 -1
- package/dist/config/settings.js +15 -0
- package/dist/config/settings.js.map +1 -1
- package/dist/config/user-config.d.ts +7 -0
- package/dist/config/user-config.d.ts.map +1 -1
- package/dist/config/user-config.js +2 -0
- package/dist/config/user-config.js.map +1 -1
- package/dist/goal-loop/driver.d.ts +18 -0
- package/dist/goal-loop/driver.d.ts.map +1 -1
- package/dist/goal-loop/driver.js +100 -1
- package/dist/goal-loop/driver.js.map +1 -1
- package/dist/i18n.d.ts +6 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +8 -0
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -1
- package/dist/quota/resume.d.ts +66 -0
- package/dist/quota/resume.d.ts.map +1 -0
- package/dist/quota/resume.js +217 -0
- package/dist/quota/resume.js.map +1 -0
- package/dist/remote/hub-server.d.ts.map +1 -1
- package/dist/remote/hub-server.js +29 -0
- package/dist/remote/hub-server.js.map +1 -1
- package/dist/remote/system-stats.d.ts +137 -0
- package/dist/remote/system-stats.d.ts.map +1 -0
- package/dist/remote/system-stats.js +335 -0
- package/dist/remote/system-stats.js.map +1 -0
- package/dist/remote/workflow-overview.d.ts +7 -1
- package/dist/remote/workflow-overview.d.ts.map +1 -1
- package/dist/remote/workflow-overview.js +135 -2
- package/dist/remote/workflow-overview.js.map +1 -1
- package/dist/workflow/quota-resume.d.ts +135 -0
- package/dist/workflow/quota-resume.d.ts.map +1 -0
- package/dist/workflow/quota-resume.js +773 -0
- package/dist/workflow/quota-resume.js.map +1 -0
- package/docs/DEVELOPMENT.md +7 -0
- package/docs/REMOTE-CLIENTS.md +40 -5
- package/package.json +1 -1
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Machine-level system stats for the hub's GET /api/system-stats endpoint.
|
|
3
|
+
*
|
|
4
|
+
* Everything is BEST-EFFORT and INDEPENDENTLY degradable: each source runs in
|
|
5
|
+
* its own subprocess (or falls back to a Node builtin) and a failure yields a
|
|
6
|
+
* null field, never an error — the hub can run inside a Seatbelt wrap where
|
|
7
|
+
* `ps`/`pmset` are denied, and a phone checking the machine's health must
|
|
8
|
+
* still get every field that IS readable. Rate fields (CPU %, network B/s,
|
|
9
|
+
* hub CPU %) are sampled from the DELTA between consecutive calls: the hub is
|
|
10
|
+
* resident, so it keeps the last counter snapshot in memory; the first call
|
|
11
|
+
* after boot has no baseline and reports null (clients poll, the second call
|
|
12
|
+
* has real values).
|
|
13
|
+
*/
|
|
14
|
+
import { execFile } from "node:child_process";
|
|
15
|
+
import { statfs } from "node:fs/promises";
|
|
16
|
+
import os from "node:os";
|
|
17
|
+
import process from "node:process";
|
|
18
|
+
import { promisify } from "node:util";
|
|
19
|
+
const execFileAsync = promisify(execFile);
|
|
20
|
+
/** Subprocess budget per command — these are all sub-second tools. */
|
|
21
|
+
const CMD_TIMEOUT_MS = 5_000;
|
|
22
|
+
/** Whole-response TTL: multiple clients polling the same instant must not multiply spawns. */
|
|
23
|
+
const COLLECT_TTL_MS = 1_000;
|
|
24
|
+
/** Minimum delta window before a rate is recomputed (shorter gaps reuse the last value). */
|
|
25
|
+
const RATE_MIN_WINDOW_MS = 500;
|
|
26
|
+
/** Run a probe command; every failure path collapses to null. */
|
|
27
|
+
async function probe(cmd, args) {
|
|
28
|
+
try {
|
|
29
|
+
// promisify(execFile) types stdout as string but hands back a Buffer at
|
|
30
|
+
// runtime (default encoding) — normalize so every parser sees a string.
|
|
31
|
+
const { stdout } = await execFileAsync(cmd, args, { timeout: CMD_TIMEOUT_MS });
|
|
32
|
+
return stdout.toString();
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export function parseVmStatOutput(out) {
|
|
39
|
+
const sizeMatch = out.match(/\(page size of (\d+) bytes\)/);
|
|
40
|
+
if (!sizeMatch)
|
|
41
|
+
return null;
|
|
42
|
+
const pageSizeBytes = Number(sizeMatch[1]);
|
|
43
|
+
const counts = { free: -1, speculative: -1, inactive: -1, purgeable: -1 };
|
|
44
|
+
const re = /^Pages (free|speculative|inactive|purgeable):\s+(\d+)\./gm;
|
|
45
|
+
for (const m of out.matchAll(re)) {
|
|
46
|
+
counts[m[1]] = Number(m[2]);
|
|
47
|
+
}
|
|
48
|
+
if (Object.values(counts).some((n) => n < 0))
|
|
49
|
+
return null;
|
|
50
|
+
return { pageSizeBytes, ...counts };
|
|
51
|
+
}
|
|
52
|
+
export function parseSwapUsage(out) {
|
|
53
|
+
const m = out.match(/total = ([\d.]+)M\s+used = ([\d.]+)M/);
|
|
54
|
+
if (!m)
|
|
55
|
+
return null;
|
|
56
|
+
return { totalBytes: Number(m[1]) * 1024 * 1024, usedBytes: Number(m[2]) * 1024 * 1024 };
|
|
57
|
+
}
|
|
58
|
+
export function parsePmsetBattery(out) {
|
|
59
|
+
const sourceMatch = out.match(/Now drawing from '([^']+)'/);
|
|
60
|
+
const source = sourceMatch?.[1] ?? null;
|
|
61
|
+
const powerSource = source
|
|
62
|
+
? /battery/i.test(source)
|
|
63
|
+
? "battery"
|
|
64
|
+
: /ac/i.test(source)
|
|
65
|
+
? "ac"
|
|
66
|
+
: null
|
|
67
|
+
: null;
|
|
68
|
+
const present = /InternalBattery/.test(out);
|
|
69
|
+
const m = out.match(/(\d+)%;\s*([^;]+?);(?:\s*(\d+):(\d+)\s+remaining|\s*\(no estimate\))?/);
|
|
70
|
+
const h = m?.[3] ? Number(m[3]) : 0;
|
|
71
|
+
const min = m?.[4] ? Number(m[4]) : 0;
|
|
72
|
+
return {
|
|
73
|
+
present,
|
|
74
|
+
percent: m ? Number(m[1]) : null,
|
|
75
|
+
powerSource,
|
|
76
|
+
status: m ? (m[2] ?? "").trim().toLowerCase() : null,
|
|
77
|
+
remainingMin: m?.[3] ? h * 60 + min : null,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export function parsePmsetTherm(out) {
|
|
81
|
+
const m = out.match(/^\s*CPU_Speed_Limit\s*=\s*(\d+)/m);
|
|
82
|
+
return m ? Number(m[1]) : null;
|
|
83
|
+
}
|
|
84
|
+
export function parseSleepAssertions(out) {
|
|
85
|
+
// Both the status table and the owning-process lines are indented in real output.
|
|
86
|
+
const statusMatch = out.match(/^\s*PreventUserIdleSystemSleep\s+(\d+)/m);
|
|
87
|
+
const holders = new Set();
|
|
88
|
+
for (const m of out.matchAll(/^\s*pid \d+\(([^)]+)\):.*PreventUserIdleSystemSleep/gm)) {
|
|
89
|
+
holders.add(m[1]);
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
active: statusMatch ? Number(statusMatch[1]) > 0 : null,
|
|
93
|
+
holders: Array.from(holders),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export function parseNetstatIfaceBytes(out) {
|
|
97
|
+
let sawData = false;
|
|
98
|
+
let rx = 0;
|
|
99
|
+
let tx = 0;
|
|
100
|
+
const seen = new Set();
|
|
101
|
+
for (const line of out.split("\n").slice(1)) {
|
|
102
|
+
const fields = line.trim().split(/\s+/);
|
|
103
|
+
const name = fields[0];
|
|
104
|
+
if (!name || seen.has(name))
|
|
105
|
+
continue; // one row per iface (address-family rows repeat totals)
|
|
106
|
+
seen.add(name);
|
|
107
|
+
if (name === "lo0")
|
|
108
|
+
continue;
|
|
109
|
+
const ifaceRx = Number(fields[6]);
|
|
110
|
+
const ifaceTx = Number(fields[9]);
|
|
111
|
+
if (Number.isFinite(ifaceRx) && Number.isFinite(ifaceTx)) {
|
|
112
|
+
sawData = true;
|
|
113
|
+
rx += ifaceRx;
|
|
114
|
+
tx += ifaceTx;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return sawData ? { rx, tx } : null;
|
|
118
|
+
}
|
|
119
|
+
/** Wi-Fi device name (e.g. "en0") from `networksetup -listallhardwareports`. */
|
|
120
|
+
export function parseWifiDevice(out) {
|
|
121
|
+
const lines = out.split("\n");
|
|
122
|
+
for (let i = 0; i < lines.length - 1; i++) {
|
|
123
|
+
if (/^Hardware Port: Wi-Fi\b/.test(lines[i].trim())) {
|
|
124
|
+
const dev = lines[i + 1].match(/^Device: (\S+)/);
|
|
125
|
+
if (dev)
|
|
126
|
+
return dev[1];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
export function parseAirportNetwork(out) {
|
|
132
|
+
const m = out.match(/^Current Wi-Fi Network: (.+)$/m);
|
|
133
|
+
return m ? m[1].trim() : null;
|
|
134
|
+
}
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
// Collectors.
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
138
|
+
/** Host facts never change while the hub lives — probe them once. */
|
|
139
|
+
let hostCache = null;
|
|
140
|
+
async function collectHost() {
|
|
141
|
+
if (hostCache)
|
|
142
|
+
return hostCache;
|
|
143
|
+
const [swVers, model] = await Promise.all([
|
|
144
|
+
probe("sw_vers", []),
|
|
145
|
+
probe("sysctl", ["-n", "hw.model"]),
|
|
146
|
+
]);
|
|
147
|
+
const versionMatch = swVers?.match(/^ProductVersion:\s*(.+)$/m);
|
|
148
|
+
const buildMatch = swVers?.match(/^BuildVersion:\s*(.+)$/m);
|
|
149
|
+
hostCache = {
|
|
150
|
+
hostname: os.hostname(),
|
|
151
|
+
osVersion: versionMatch
|
|
152
|
+
? versionMatch[1].trim() + (buildMatch ? ` (${buildMatch[1].trim()})` : "")
|
|
153
|
+
: null,
|
|
154
|
+
model: model ? model.trim() : null,
|
|
155
|
+
chip: os.cpus()[0]?.model ?? null,
|
|
156
|
+
};
|
|
157
|
+
return hostCache;
|
|
158
|
+
}
|
|
159
|
+
async function collectVolume(p) {
|
|
160
|
+
try {
|
|
161
|
+
const s = await statfs(p);
|
|
162
|
+
return {
|
|
163
|
+
totalBytes: s.bsize * s.blocks,
|
|
164
|
+
usedBytes: s.bsize * (s.blocks - s.bfree),
|
|
165
|
+
availableBytes: s.bsize * s.bavail,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Delta baselines persist across calls; last-rate values cover sub-window gaps.
|
|
173
|
+
let cpuBaseline = null;
|
|
174
|
+
let hubCpuBaseline = null;
|
|
175
|
+
let netBaseline = null;
|
|
176
|
+
let lastCpuPct = null;
|
|
177
|
+
let lastHubCpuPct = null;
|
|
178
|
+
let lastRxPerS = null;
|
|
179
|
+
let lastTxPerS = null;
|
|
180
|
+
let collectCache = null;
|
|
181
|
+
export function resetSystemStatsStateForTest() {
|
|
182
|
+
hostCache = null;
|
|
183
|
+
cpuBaseline = null;
|
|
184
|
+
hubCpuBaseline = null;
|
|
185
|
+
netBaseline = null;
|
|
186
|
+
lastCpuPct = null;
|
|
187
|
+
lastHubCpuPct = null;
|
|
188
|
+
lastRxPerS = null;
|
|
189
|
+
lastTxPerS = null;
|
|
190
|
+
collectCache = null;
|
|
191
|
+
}
|
|
192
|
+
function sampleCpuTimes() {
|
|
193
|
+
let idle = 0;
|
|
194
|
+
let total = 0;
|
|
195
|
+
for (const cpu of os.cpus()) {
|
|
196
|
+
const t = cpu.times;
|
|
197
|
+
idle += t.idle;
|
|
198
|
+
total += t.user + t.nice + t.sys + t.idle + t.irq;
|
|
199
|
+
}
|
|
200
|
+
return { idle, total };
|
|
201
|
+
}
|
|
202
|
+
async function collectBridges(bridges) {
|
|
203
|
+
const pids = bridges.filter((b) => typeof b.pid === "number").map((b) => b.pid);
|
|
204
|
+
const byPid = new Map();
|
|
205
|
+
if (pids.length > 0) {
|
|
206
|
+
const out = await probe("ps", ["-o", "pid=,%cpu=,rss=", "-p", pids.join(",")]);
|
|
207
|
+
for (const line of out?.split("\n") ?? []) {
|
|
208
|
+
const m = line.trim().match(/^(\d+)\s+([\d.]+)\s+(\d+)$/);
|
|
209
|
+
if (m)
|
|
210
|
+
byPid.set(m[1], { cpuPct: Number(m[2]), rssBytes: Number(m[3]) * 1024 });
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return bridges.map((b) => {
|
|
214
|
+
const ps = b.pid !== null ? byPid.get(String(b.pid)) : undefined;
|
|
215
|
+
return {
|
|
216
|
+
id: b.id,
|
|
217
|
+
workspace: b.workspace,
|
|
218
|
+
pid: b.pid,
|
|
219
|
+
rssBytes: ps?.rssBytes ?? null,
|
|
220
|
+
cpuPct: ps?.cpuPct ?? null,
|
|
221
|
+
};
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
export async function collectSystemStats(bridges, hubMeta) {
|
|
225
|
+
const now = Date.now();
|
|
226
|
+
if (collectCache && now - collectCache.at < COLLECT_TTL_MS)
|
|
227
|
+
return collectCache.stats;
|
|
228
|
+
// CPU %: delta of aggregate cpu times against the previous call's snapshot.
|
|
229
|
+
const cpuTimes = sampleCpuTimes();
|
|
230
|
+
if (cpuBaseline &&
|
|
231
|
+
now - cpuBaseline.at >= RATE_MIN_WINDOW_MS &&
|
|
232
|
+
cpuTimes.total > cpuBaseline.total) {
|
|
233
|
+
const idle = cpuTimes.idle - cpuBaseline.idle;
|
|
234
|
+
const total = cpuTimes.total - cpuBaseline.total;
|
|
235
|
+
lastCpuPct = total > 0 ? Math.round((1 - idle / total) * 1000) / 10 : lastCpuPct;
|
|
236
|
+
}
|
|
237
|
+
cpuBaseline = { at: now, ...cpuTimes };
|
|
238
|
+
// Hub process CPU %: process.cpuUsage delta over wall clock × cores.
|
|
239
|
+
const hubUsage = process.cpuUsage();
|
|
240
|
+
if (hubCpuBaseline && now - hubCpuBaseline.at >= RATE_MIN_WINDOW_MS) {
|
|
241
|
+
const user = hubUsage.user - hubCpuBaseline.user;
|
|
242
|
+
const system = hubUsage.system - hubCpuBaseline.system;
|
|
243
|
+
const elapsedUs = (now - hubCpuBaseline.at) * 1000 * os.cpus().length;
|
|
244
|
+
lastHubCpuPct = elapsedUs > 0 ? Math.round(((user + system) / elapsedUs) * 1000) / 10 : null;
|
|
245
|
+
}
|
|
246
|
+
hubCpuBaseline = { at: now, ...hubUsage };
|
|
247
|
+
const [host, vmStat, swapOut, battOut, thermOut, assertOut, netstatOut, hwPortsOut, rootVol, homeVol, bridgesPs,] = await Promise.all([
|
|
248
|
+
collectHost(),
|
|
249
|
+
probe("vm_stat", []),
|
|
250
|
+
probe("sysctl", ["vm.swapusage"]),
|
|
251
|
+
probe("pmset", ["-g", "batt"]),
|
|
252
|
+
probe("pmset", ["-g", "therm"]),
|
|
253
|
+
probe("pmset", ["-g", "assertions"]),
|
|
254
|
+
probe("netstat", ["-ib"]),
|
|
255
|
+
probe("networksetup", ["-listallhardwareports"]),
|
|
256
|
+
collectVolume("/"),
|
|
257
|
+
collectVolume(os.homedir()),
|
|
258
|
+
collectBridges(bridges),
|
|
259
|
+
]);
|
|
260
|
+
const pages = parseVmStatOutput(vmStat ?? "");
|
|
261
|
+
const availableBytes = pages
|
|
262
|
+
? (pages.free + pages.speculative + pages.inactive + pages.purgeable) * pages.pageSizeBytes
|
|
263
|
+
: os.freemem();
|
|
264
|
+
const swap = swapOut ? parseSwapUsage(swapOut) : null;
|
|
265
|
+
const battery = parsePmsetBattery(battOut ?? "");
|
|
266
|
+
const sleep = parseSleepAssertions(assertOut ?? "");
|
|
267
|
+
// Wi-Fi SSID needs the device name first; both steps fail to null quietly.
|
|
268
|
+
let ssid = null;
|
|
269
|
+
const wifiDevice = hwPortsOut ? parseWifiDevice(hwPortsOut) : null;
|
|
270
|
+
if (wifiDevice) {
|
|
271
|
+
ssid = parseAirportNetwork((await probe("networksetup", ["-getairportnetwork", wifiDevice])) ?? "");
|
|
272
|
+
}
|
|
273
|
+
// Network rate: summed iface counters (minus lo0) deltaed against the last call.
|
|
274
|
+
const netTotals = netstatOut ? parseNetstatIfaceBytes(netstatOut) : null;
|
|
275
|
+
if (netTotals &&
|
|
276
|
+
netBaseline &&
|
|
277
|
+
now - netBaseline.at >= RATE_MIN_WINDOW_MS &&
|
|
278
|
+
netTotals.rx >= netBaseline.rx &&
|
|
279
|
+
netTotals.tx >= netBaseline.tx) {
|
|
280
|
+
const s = (now - netBaseline.at) / 1000;
|
|
281
|
+
lastRxPerS = Math.round((netTotals.rx - netBaseline.rx) / s);
|
|
282
|
+
lastTxPerS = Math.round((netTotals.tx - netBaseline.tx) / s);
|
|
283
|
+
}
|
|
284
|
+
if (netTotals)
|
|
285
|
+
netBaseline = { at: now, ...netTotals };
|
|
286
|
+
const sameVolume = rootVol !== null &&
|
|
287
|
+
homeVol !== null &&
|
|
288
|
+
rootVol.totalBytes === homeVol.totalBytes &&
|
|
289
|
+
rootVol.availableBytes === homeVol.availableBytes;
|
|
290
|
+
const stats = {
|
|
291
|
+
collectedAt: now,
|
|
292
|
+
host,
|
|
293
|
+
uptimeS: os.uptime(),
|
|
294
|
+
cpu: {
|
|
295
|
+
cores: os.cpus().length,
|
|
296
|
+
usagePct: lastCpuPct,
|
|
297
|
+
loadAvg: os.loadavg(),
|
|
298
|
+
},
|
|
299
|
+
memory: {
|
|
300
|
+
totalBytes: os.totalmem(),
|
|
301
|
+
availableBytes,
|
|
302
|
+
usedBytes: os.totalmem() - availableBytes,
|
|
303
|
+
swapTotalBytes: swap?.totalBytes ?? null,
|
|
304
|
+
swapUsedBytes: swap?.usedBytes ?? null,
|
|
305
|
+
},
|
|
306
|
+
storage: { root: rootVol, home: sameVolume ? null : homeVol },
|
|
307
|
+
battery,
|
|
308
|
+
power: {
|
|
309
|
+
preventSleep: sleep.active,
|
|
310
|
+
sleepHolders: sleep.holders,
|
|
311
|
+
cpuSpeedLimitPct: thermOut ? parsePmsetTherm(thermOut) : null,
|
|
312
|
+
},
|
|
313
|
+
network: {
|
|
314
|
+
addresses: Object.values(os.networkInterfaces())
|
|
315
|
+
.flat()
|
|
316
|
+
.filter((n) => n && !n.internal && n.family === "IPv4")
|
|
317
|
+
.map((n) => n.address),
|
|
318
|
+
ssid,
|
|
319
|
+
rxBytesPerS: lastRxPerS,
|
|
320
|
+
txBytesPerS: lastTxPerS,
|
|
321
|
+
},
|
|
322
|
+
processes: {
|
|
323
|
+
hub: { pid: process.pid, rssBytes: process.memoryUsage().rss, cpuPct: lastHubCpuPct },
|
|
324
|
+
bridges: bridgesPs,
|
|
325
|
+
},
|
|
326
|
+
hub: {
|
|
327
|
+
version: hubMeta.version,
|
|
328
|
+
uptimeS: Math.round(process.uptime()),
|
|
329
|
+
instances: hubMeta.instances,
|
|
330
|
+
},
|
|
331
|
+
};
|
|
332
|
+
collectCache = { at: now, stats };
|
|
333
|
+
return stats;
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=system-stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-stats.js","sourceRoot":"","sources":["../../src/remote/system-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,12 @@
|
|
|
18
18
|
* bridge per workspace — but every bridge of that workspace reads the same
|
|
19
19
|
* directory, so ONE representative suffices;
|
|
20
20
|
* - the global saved-workflow directory is machine-wide, so one global group
|
|
21
|
-
* is enough
|
|
21
|
+
* is enough;
|
|
22
|
+
* - and a journal row can LIE about a living run: upstream's orphan
|
|
23
|
+
* reconciliation writes stopped(interrupted) onto runs that are still
|
|
24
|
+
* executing in another process (and the row never flips back mid-run), so
|
|
25
|
+
* rows carrying that signature are cross-checked against the owning
|
|
26
|
+
* process's live read before the overview trusts them (collectLiveOverrides).
|
|
22
27
|
*
|
|
23
28
|
* This module folds all of that server-side (the hub owns the instance map):
|
|
24
29
|
* dedupe instances to one group per workspace, race the pair reads with the
|
|
@@ -42,6 +47,7 @@ export interface OverviewInstance {
|
|
|
42
47
|
sessions: Array<{
|
|
43
48
|
sessionId: string;
|
|
44
49
|
status?: "running" | "idle";
|
|
50
|
+
updatedAt?: number;
|
|
45
51
|
}>;
|
|
46
52
|
}
|
|
47
53
|
/** A journal run row (the bridge's `workflows/runs` shape, passthrough). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-overview.d.ts","sourceRoot":"","sources":["../../src/remote/workflow-overview.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"workflow-overview.d.ts","sourceRoot":"","sources":["../../src/remote/workflow-overview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzF;AAED,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAmRD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,gBAAgB,EAAE,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CA6E3B"}
|
|
@@ -18,7 +18,12 @@
|
|
|
18
18
|
* bridge per workspace — but every bridge of that workspace reads the same
|
|
19
19
|
* directory, so ONE representative suffices;
|
|
20
20
|
* - the global saved-workflow directory is machine-wide, so one global group
|
|
21
|
-
* is enough
|
|
21
|
+
* is enough;
|
|
22
|
+
* - and a journal row can LIE about a living run: upstream's orphan
|
|
23
|
+
* reconciliation writes stopped(interrupted) onto runs that are still
|
|
24
|
+
* executing in another process (and the row never flips back mid-run), so
|
|
25
|
+
* rows carrying that signature are cross-checked against the owning
|
|
26
|
+
* process's live read before the overview trusts them (collectLiveOverrides).
|
|
22
27
|
*
|
|
23
28
|
* This module folds all of that server-side (the hub owns the instance map):
|
|
24
29
|
* dedupe instances to one group per workspace, race the pair reads with the
|
|
@@ -38,6 +43,8 @@ const FETCH_TIMEOUT_MS = 8_000;
|
|
|
38
43
|
const MAX_BODY_BYTES = 2 * 1024 * 1024;
|
|
39
44
|
/** Journal window for the global read (upstream caps the limit at 50). */
|
|
40
45
|
const RUNS_LIMIT = 50;
|
|
46
|
+
/** Live-registry statuses — a run reporting either is flying right now. */
|
|
47
|
+
const LIVE_STATUSES = new Set(["running", "pending"]);
|
|
41
48
|
/** GET one bridge route, parsed as JSON. Rejects on transport/status/parse. */
|
|
42
49
|
function fetchBridgeJson(port, path) {
|
|
43
50
|
return new Promise((resolve, reject) => {
|
|
@@ -139,6 +146,11 @@ function invalidOf(list) {
|
|
|
139
146
|
*/
|
|
140
147
|
function annotateOwners(rows, instances) {
|
|
141
148
|
for (const row of rows) {
|
|
149
|
+
// The live-truth owner (set by applyLiveTruth from the instance whose
|
|
150
|
+
// live registry reported the run) is process evidence, not a heuristic —
|
|
151
|
+
// never overwrite it. The heuristic only fills rows it did not correct.
|
|
152
|
+
if (row.ownerInstanceId)
|
|
153
|
+
continue;
|
|
142
154
|
const acpSid = row.acpSessionId;
|
|
143
155
|
if (typeof acpSid !== "string" || !acpSid)
|
|
144
156
|
continue;
|
|
@@ -161,6 +173,119 @@ function annotateOwners(rows, instances) {
|
|
|
161
173
|
row.ownerInstanceId = best.id;
|
|
162
174
|
}
|
|
163
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Live overrides for journal rows upstream may have wrongly declared dead.
|
|
178
|
+
*
|
|
179
|
+
* Why this exists: upstream's orphan reconciliation (`reconcileOrphanRuns`,
|
|
180
|
+
* bootstrap.app — it runs at every app construction) assumes "no in-flight
|
|
181
|
+
* run in MY process registry ⇒ every non-terminal row of this session is a
|
|
182
|
+
* dead process's leftover" and writes stopped(interrupted) — even when the
|
|
183
|
+
* run is still executing in ANOTHER process. Observed 2026-10-02: a second
|
|
184
|
+
* process constructed the session at 11:44 and wrote the interrupted verdict
|
|
185
|
+
* onto a run that kept dispatching sub-agents until it completed at 14:21;
|
|
186
|
+
* the row never flips back mid-run, so the whole flight window rendered as
|
|
187
|
+
* already-stopped. The owning process's live read
|
|
188
|
+
* (`/settings/workflow-runs?sessionId=` → `v4/conversation/workflowRuns` →
|
|
189
|
+
* `listRunsForSession`) overlays its live registry onto the journal — upstream
|
|
190
|
+
* built it exactly so "this read would not show a run marked dead by a foreign
|
|
191
|
+
* write" — and that overlay is the only trustworthy status here.
|
|
192
|
+
*
|
|
193
|
+
* Trigger = the reconciliation's signature alone (`stopReason:
|
|
194
|
+
* "interrupted"`); no suspicious row → zero probes. Do NOT gate on the
|
|
195
|
+
* instance showing the session as "running": a workflow keeps flying while its
|
|
196
|
+
* parent session sits idle between turns (exactly how the observed run looked
|
|
197
|
+
* for its last two hours), so a running-gated trigger misses the reported
|
|
198
|
+
* case. When suspicious rows exist, probe the sessions the OWNER WORKSPACE's
|
|
199
|
+
* instances list (any status), with each instance's OWN spelling — probing
|
|
200
|
+
* what it reported to the hub keeps this a same-process read. The row's
|
|
201
|
+
* `acpSessionId` is deliberately NOT used as the probe key: alias spellings
|
|
202
|
+
* differ per bridge (one bridge's `sess_…` is another's backend id), and an id
|
|
203
|
+
* a bridge never listed may still resolve through its durable alias store and
|
|
204
|
+
* cold-resume the conversation — materializing a second runtime for a live
|
|
205
|
+
* conversation, which scrambles the shared event log. The probe result joins
|
|
206
|
+
* on runId (a run's stable identity), so one confirmation corrects the row in
|
|
207
|
+
* every group that carries it.
|
|
208
|
+
*/
|
|
209
|
+
async function collectLiveOverrides(instances, rows) {
|
|
210
|
+
const out = new Map();
|
|
211
|
+
const suspicious = rows.filter((r) => r["stopReason"] === "interrupted" &&
|
|
212
|
+
typeof r.runId === "string" &&
|
|
213
|
+
r.runId !== "" &&
|
|
214
|
+
typeof r.cwd === "string" &&
|
|
215
|
+
r.cwd !== "");
|
|
216
|
+
if (suspicious.length === 0)
|
|
217
|
+
return out;
|
|
218
|
+
// The workspace is the ownership evidence: a run's cwd is where its session
|
|
219
|
+
// lives, and the hub already groups instances by that same workspace string.
|
|
220
|
+
const byWorkspace = new Map();
|
|
221
|
+
for (const inst of instances) {
|
|
222
|
+
const list = byWorkspace.get(inst.workspace) ?? [];
|
|
223
|
+
list.push(inst);
|
|
224
|
+
byWorkspace.set(inst.workspace, list);
|
|
225
|
+
}
|
|
226
|
+
for (const list of byWorkspace.values())
|
|
227
|
+
list.sort((a, b) => b.startedAt - a.startedAt);
|
|
228
|
+
/** Hard ceiling on live probes per build (never hit in practice). */
|
|
229
|
+
const MAX_LIVE_PROBES = 24;
|
|
230
|
+
const probes = new Map();
|
|
231
|
+
const probe = (inst, sessionId) => {
|
|
232
|
+
const key = `${inst.id}\u0000${sessionId}`;
|
|
233
|
+
let p = probes.get(key);
|
|
234
|
+
if (!p) {
|
|
235
|
+
if (probes.size >= MAX_LIVE_PROBES)
|
|
236
|
+
return Promise.resolve(undefined);
|
|
237
|
+
p = fetchBridgeJson(inst.port, `/settings/workflow-runs?sessionId=${encodeURIComponent(sessionId)}`).catch(() => undefined);
|
|
238
|
+
probes.set(key, p);
|
|
239
|
+
}
|
|
240
|
+
return p;
|
|
241
|
+
};
|
|
242
|
+
for (const row of suspicious) {
|
|
243
|
+
const runId = row.runId;
|
|
244
|
+
const candidates = byWorkspace.get(row.cwd) ?? [];
|
|
245
|
+
outer: for (const inst of candidates) {
|
|
246
|
+
// Running sessions first (most likely to hold a flying run), then the
|
|
247
|
+
// freshest driving copy — the hub's own dedupe ranks bridges that way.
|
|
248
|
+
const sessions = [...inst.sessions].sort((a, b) => (a.status === "running" ? 0 : 1) - (b.status === "running" ? 0 : 1) ||
|
|
249
|
+
(b.updatedAt ?? 0) - (a.updatedAt ?? 0));
|
|
250
|
+
for (const s of sessions) {
|
|
251
|
+
const body = await probe(inst, s.sessionId);
|
|
252
|
+
if (!body)
|
|
253
|
+
continue; // dead / old bridge — next session or instance
|
|
254
|
+
const runs = Array.isArray(body["runs"]) ? body["runs"] : [];
|
|
255
|
+
const match = runs.find((r) => r.runId === runId);
|
|
256
|
+
if (!match)
|
|
257
|
+
continue; // this process does not know the run
|
|
258
|
+
if (typeof match.status === "string" && LIVE_STATUSES.has(match.status)) {
|
|
259
|
+
out.set(runId, { status: match.status, instanceId: inst.id });
|
|
260
|
+
break outer;
|
|
261
|
+
}
|
|
262
|
+
// Found terminal here — a sibling bridge may still hold the live
|
|
263
|
+
// copy, so keep trying the rest of the workspace's sessions.
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return out;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Apply the live truth to a set of journal rows, in place: a row the live
|
|
271
|
+
* registry reports flying loses the foreign "interrupted" verdict, and a row
|
|
272
|
+
* with no owner gets the instance that actually reported it live (the address
|
|
273
|
+
* for stop/detail from a client attached elsewhere).
|
|
274
|
+
*/
|
|
275
|
+
function applyLiveTruth(rows, liveRuns) {
|
|
276
|
+
for (const row of rows) {
|
|
277
|
+
const runId = typeof row.runId === "string" ? row.runId : "";
|
|
278
|
+
if (!runId)
|
|
279
|
+
continue;
|
|
280
|
+
const live = liveRuns.get(runId);
|
|
281
|
+
if (!live)
|
|
282
|
+
continue;
|
|
283
|
+
row.status = live.status;
|
|
284
|
+
delete row["stopReason"];
|
|
285
|
+
if (!row.ownerInstanceId)
|
|
286
|
+
row.ownerInstanceId = live.instanceId;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
164
289
|
/**
|
|
165
290
|
* Build the machine-level overview from the hub's instance snapshot.
|
|
166
291
|
* Never throws for bridge-side failures — only for structural bugs.
|
|
@@ -182,8 +307,15 @@ export async function buildWorkflowOverview(instances) {
|
|
|
182
307
|
// project (each row carrying `cwd`) — the active-run feed and the global
|
|
183
308
|
// group's badges come from the same answer.
|
|
184
309
|
const global = await pickPair(instances, "global");
|
|
310
|
+
// Cross-check the global rows' reconciliation-signature verdicts against
|
|
311
|
+
// the owner's live read (see collectLiveOverrides); the runId-keyed result
|
|
312
|
+
// feeds every group carrying the same row.
|
|
313
|
+
const liveOverrides = global
|
|
314
|
+
? await collectLiveOverrides(instances, global.pair.runs)
|
|
315
|
+
: new Map();
|
|
185
316
|
let activeRuns = [];
|
|
186
317
|
if (global) {
|
|
318
|
+
applyLiveTruth(global.pair.runs, liveOverrides);
|
|
187
319
|
groups.push({
|
|
188
320
|
instanceId: global.inst.id,
|
|
189
321
|
scope: "global",
|
|
@@ -193,7 +325,7 @@ export async function buildWorkflowOverview(instances) {
|
|
|
193
325
|
lastRuns: lastRunByName(global.pair.runs),
|
|
194
326
|
error: null,
|
|
195
327
|
});
|
|
196
|
-
activeRuns = global.pair.runs.filter((r) => r.status === "
|
|
328
|
+
activeRuns = global.pair.runs.filter((r) => typeof r.status === "string" && LIVE_STATUSES.has(r.status));
|
|
197
329
|
annotateOwners(activeRuns, instances);
|
|
198
330
|
}
|
|
199
331
|
// One project group per workspace, workspace-path order (stable across
|
|
@@ -215,6 +347,7 @@ export async function buildWorkflowOverview(instances) {
|
|
|
215
347
|
error: "no bridge of this workspace answered",
|
|
216
348
|
};
|
|
217
349
|
}
|
|
350
|
+
await applyLiveTruth(picked.pair.runs, liveOverrides);
|
|
218
351
|
return {
|
|
219
352
|
instanceId: picked.inst.id,
|
|
220
353
|
scope: "project",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-overview.js","sourceRoot":"","sources":["../../src/remote/workflow-overview.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workflow-overview.js","sourceRoot":"","sources":["../../src/remote/workflow-overview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,GAAG,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AA0C3C,2EAA2E;AAC3E,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACvC,0EAA0E;AAC1E,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,2EAA2E;AAC3E,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAEtD,+EAA+E;AAC/E,SAAS,eAAe,CAAC,IAAY,EAAE,IAAY;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;YAC5D,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;gBACnC,EAAE,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;gBAC1B,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC;gBACjB,IAAI,IAAI,GAAG,cAAc,EAAE,CAAC;oBAC1B,EAAE,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;oBAC7C,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBAChB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC3E,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC3E,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;wBACpD,OAAO;oBACT,CAAC;oBACD,OAAO,CAAC,MAAiC,CAAC,CAAC;gBAC7C,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,UAAU,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACzF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAOD;;;;GAIG;AACH,KAAK,UAAU,SAAS,CAAC,IAAsB,EAAE,KAAoB;IACnE,MAAM,CAAC,GAAG,UAAU,KAAK,UAAU,UAAU,EAAE,CAAC;IAChD,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,EAAE,CAAC;QACrD,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,2BAA2B,CAAC,EAAE,CAAC;KAC3D,CAAC,CAAC;IACH,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,MAAM,CAAsB,CAAC,CAAC,CAAC,EAAE;KAC5E,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,QAAQ,CACrB,UAA8B,EAC9B,KAAoB;IAEpB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC5B,IAAI,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAqD,EAAE,CAAC,MAAM,IAAI,CAAC,CACtE,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5D,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,qFAAqF;AACrF,SAAS,aAAa,CAAC,IAAsB;IAC3C,MAAM,MAAM,GAAmC,EAAE,CAAC;IAClD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC;IACjF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,IAA6B;IAChD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,WAAW,CAAe,CAAC,CAAC,CAAC,EAAE,CAAC;AAClF,CAAC;AAED,SAAS,SAAS,CAAC,IAA6B;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,SAAS,CAAe,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,IAAsB,EAAE,SAA6B;IAC3E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,sEAAsE;QACtE,yEAAyE;QACzE,wEAAwE;QACxE,IAAI,GAAG,CAAC,eAAe;YAAE,SAAS;QAClC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC;QAChC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM;YAAE,SAAS;QACpD,IAAI,IAAkC,CAAC;QACvC,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC;YAC/D,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;YAC1C,MAAM,MAAM,GACV,IAAI,KAAK,SAAS;gBAClB,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC;gBACzB,CAAC,OAAO,KAAK,WAAW,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/D,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,GAAG,IAAI,CAAC;gBACZ,WAAW,GAAG,OAAO,CAAC;YACxB,CAAC;QACH,CAAC;QACD,IAAI,IAAI;YAAE,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,KAAK,UAAU,oBAAoB,CACjC,SAA6B,EAC7B,IAAsB;IAEtB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkD,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,YAAY,CAAC,KAAK,aAAa;QACjC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;QAC3B,CAAC,CAAC,KAAK,KAAK,EAAE;QACd,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ;QACzB,CAAC,CAAC,GAAG,KAAK,EAAE,CACf,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAExC,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAExF,qEAAqE;IACrE,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwD,CAAC;IAC/E,MAAM,KAAK,GAAG,CAAC,IAAsB,EAAE,SAAiB,EAAE,EAAE;QAC1D,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,IAAI,MAAM,CAAC,IAAI,IAAI,eAAe;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACtE,CAAC,GAAG,eAAe,CACjB,IAAI,CAAC,IAAI,EACT,qCAAqC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CACrE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAe,CAAC;QAClC,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAa,CAAC,IAAI,EAAE,CAAC;QAC5D,KAAK,EAAE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YACrC,sEAAsE;YACtE,uEAAuE;YACvE,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAC1C,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC5C,IAAI,CAAC,IAAI;oBAAE,SAAS,CAAC,+CAA+C;gBACpE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,MAAM,CAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;gBAClD,IAAI,CAAC,KAAK;oBAAE,SAAS,CAAC,qCAAqC;gBAC3D,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxE,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC9D,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,iEAAiE;gBACjE,6DAA6D;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CACrB,IAAsB,EACtB,QAA6D;IAE7D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,eAAe;YAAE,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC;IAClE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAA6B;IAE7B,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAExF,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,wEAAwE;IACxE,yEAAyE;IACzE,yEAAyE;IACzE,4CAA4C;IAC5C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnD,yEAAyE;IACzE,2EAA2E;IAC3E,2CAA2C;IAC3C,MAAM,aAAa,GAAG,MAAM;QAC1B,CAAC,CAAC,MAAM,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACzD,CAAC,CAAC,IAAI,GAAG,EAAkD,CAAC;IAC9D,IAAI,UAAU,GAAqB,EAAE,CAAC;IACtC,IAAI,MAAM,EAAE,CAAC;QACX,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC;YACV,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;YAC1B,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACxC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACpC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACzC,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CACnE,CAAC;QACF,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,uEAAuE;IACvE,2EAA2E;IAC3E,MAAM,UAAU,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAA0B,EAAE;QACzD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,qEAAqE;YACrE,sDAAsD;YACtD,OAAO;gBACL,UAAU,EAAE,UAAU,CAAC,CAAC,CAAE,CAAC,EAAE;gBAC7B,KAAK,EAAE,SAAS;gBAChB,SAAS;gBACT,SAAS,EAAE,EAAE;gBACb,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,sCAAsC;aAC9C,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACtD,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;YAC1B,KAAK,EAAE,SAAS;YAChB,SAAS;YACT,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACxC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACpC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACzC,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAE9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAC1C,CAAC"}
|