@cotal-ai/cli 0.11.5 → 0.12.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.
Files changed (65) hide show
  1. package/dist/commands/backup.d.ts +13 -0
  2. package/dist/commands/backup.d.ts.map +1 -0
  3. package/dist/commands/backup.js +443 -0
  4. package/dist/commands/backup.js.map +1 -0
  5. package/dist/commands/channels.d.ts +10 -0
  6. package/dist/commands/channels.d.ts.map +1 -1
  7. package/dist/commands/channels.js.map +1 -1
  8. package/dist/commands/clean.d.ts +12 -2
  9. package/dist/commands/clean.d.ts.map +1 -1
  10. package/dist/commands/clean.js +161 -28
  11. package/dist/commands/clean.js.map +1 -1
  12. package/dist/commands/down.d.ts +5 -0
  13. package/dist/commands/down.d.ts.map +1 -1
  14. package/dist/commands/down.js +323 -5
  15. package/dist/commands/down.js.map +1 -1
  16. package/dist/commands/ext.d.ts.map +1 -1
  17. package/dist/commands/ext.js +10 -55
  18. package/dist/commands/ext.js.map +1 -1
  19. package/dist/commands/spawn.d.ts +4 -0
  20. package/dist/commands/spawn.d.ts.map +1 -1
  21. package/dist/commands/spawn.js +43 -23
  22. package/dist/commands/spawn.js.map +1 -1
  23. package/dist/commands/status.d.ts.map +1 -1
  24. package/dist/commands/status.js +3 -2
  25. package/dist/commands/status.js.map +1 -1
  26. package/dist/commands/up.d.ts +12 -0
  27. package/dist/commands/up.d.ts.map +1 -1
  28. package/dist/commands/up.js +1149 -193
  29. package/dist/commands/up.js.map +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +19 -4
  32. package/dist/index.js.map +1 -1
  33. package/dist/lib/backup-artifact.d.ts +50 -0
  34. package/dist/lib/backup-artifact.d.ts.map +1 -0
  35. package/dist/lib/backup-artifact.js +290 -0
  36. package/dist/lib/backup-artifact.js.map +1 -0
  37. package/dist/lib/delivery-proc.d.ts +7 -2
  38. package/dist/lib/delivery-proc.d.ts.map +1 -1
  39. package/dist/lib/delivery-proc.js +29 -19
  40. package/dist/lib/delivery-proc.js.map +1 -1
  41. package/dist/lib/endpoint-cut.d.ts +5 -0
  42. package/dist/lib/endpoint-cut.d.ts.map +1 -0
  43. package/dist/lib/endpoint-cut.js +53 -0
  44. package/dist/lib/endpoint-cut.js.map +1 -0
  45. package/dist/lib/ext-mutation.d.ts +1 -1
  46. package/dist/lib/ext-mutation.js +1 -1
  47. package/dist/lib/isolated-broker.d.ts +70 -0
  48. package/dist/lib/isolated-broker.d.ts.map +1 -0
  49. package/dist/lib/isolated-broker.js +427 -0
  50. package/dist/lib/isolated-broker.js.map +1 -0
  51. package/dist/lib/maintenance-files.d.ts +10 -0
  52. package/dist/lib/maintenance-files.d.ts.map +1 -0
  53. package/dist/lib/maintenance-files.js +60 -0
  54. package/dist/lib/maintenance-files.js.map +1 -0
  55. package/dist/lib/manager-proc.d.ts +4 -0
  56. package/dist/lib/manager-proc.d.ts.map +1 -1
  57. package/dist/lib/manager-proc.js +2 -0
  58. package/dist/lib/manager-proc.js.map +1 -1
  59. package/dist/lib/restore.d.ts +52 -0
  60. package/dist/lib/restore.d.ts.map +1 -0
  61. package/dist/lib/restore.js +797 -0
  62. package/dist/lib/restore.js.map +1 -0
  63. package/dist/seed/paths.d.ts +1 -1
  64. package/dist/seed/paths.js +1 -1
  65. package/package.json +7 -4
@@ -0,0 +1,427 @@
1
+ import { spawn } from "node:child_process";
2
+ import { randomBytes, randomUUID } from "node:crypto";
3
+ import { chmodSync, constants, copyFileSync, lstatSync, mkdirSync, realpathSync, readdirSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
4
+ import { hostname } from "node:os";
5
+ import { dirname, join, resolve } from "node:path";
6
+ import { createServer } from "node:net";
7
+ import { connect } from "@nats-io/transport-node";
8
+ import { backupProfilePermissions, isReachable, restoreProfilePermissions, } from "@cotal-ai/core";
9
+ import { resolveNatsServer } from "./nats-bin.js";
10
+ const LOOPBACK = "127.0.0.1";
11
+ const BOOT_TIMEOUT_MS = 15_000;
12
+ export function ensurePrivateAttemptsDir(root) {
13
+ let current = resolve(root);
14
+ for (const name of [".cotal", "maintenance", "attempts"]) {
15
+ current = join(current, name);
16
+ try {
17
+ mkdirSync(current, { mode: 0o700 });
18
+ }
19
+ catch (error) {
20
+ if (error.code !== "EEXIST")
21
+ throw error;
22
+ }
23
+ const stat = lstatSync(current, { bigint: true });
24
+ if (!stat.isDirectory() || stat.isSymbolicLink())
25
+ throw new Error(`maintenance path is not a real directory: ${current}`);
26
+ if (process.getuid && stat.uid !== BigInt(process.getuid()))
27
+ throw new Error(`maintenance path is not owned by the current user: ${current}`);
28
+ chmodSync(current, 0o700);
29
+ }
30
+ const canonical = realpathSync.native(current);
31
+ if (canonical !== current)
32
+ throw new Error(`maintenance attempt directory is not canonical: ${current}`);
33
+ const stat = lstatSync(canonical, { bigint: true });
34
+ return { path: canonical, identity: { dev: stat.dev, ino: stat.ino } };
35
+ }
36
+ function assertDirectoryIdentity(path, identity) {
37
+ const current = lstatSync(path, { bigint: true });
38
+ if (!current.isDirectory() || current.isSymbolicLink() || current.dev !== identity.dev || current.ino !== identity.ino)
39
+ throw new Error(`maintenance attempt directory identity changed: ${path}`);
40
+ }
41
+ /** With the maintenance journal at `ready` and no live claim, nothing may legitimately live in the
42
+ * private attempts directory: every entry is residue of a dead attempt (staging, clones, broker
43
+ * run files) and is removed before new maintenance work begins. Strict — a failed removal aborts
44
+ * the caller rather than proceeding over unowned residue. */
45
+ export function sweepAttemptResidue(root) {
46
+ const attempts = ensurePrivateAttemptsDir(root);
47
+ for (const name of readdirSync(attempts.path)) {
48
+ const child = join(attempts.path, name);
49
+ const stat = lstatSync(child);
50
+ if (stat.isDirectory() && !stat.isSymbolicLink())
51
+ rmSync(child, { recursive: true });
52
+ else
53
+ rmSync(child);
54
+ }
55
+ }
56
+ function freePort() {
57
+ return new Promise((resolvePort, reject) => {
58
+ const server = createServer();
59
+ server.unref();
60
+ server.once("error", reject);
61
+ server.listen(0, LOOPBACK, () => {
62
+ const address = server.address();
63
+ const port = typeof address === "object" && address ? address.port : undefined;
64
+ server.close((error) => error ? reject(error) : port ? resolvePort(port) : reject(new Error("could not allocate isolated broker port")));
65
+ });
66
+ });
67
+ }
68
+ function alive(pid) {
69
+ try {
70
+ process.kill(pid, 0);
71
+ return true;
72
+ }
73
+ catch (error) {
74
+ return error.code === "EPERM";
75
+ }
76
+ }
77
+ function owner(child, id) {
78
+ if (!child.pid)
79
+ throw new Error(`${id} process has no pid`);
80
+ return { pid: child.pid, host: hostname(), startedAt: new Date().toISOString(), id };
81
+ }
82
+ function copyTree(source, destination) {
83
+ const sourceStat = lstatSync(source);
84
+ if (!sourceStat.isDirectory() || sourceStat.isSymbolicLink())
85
+ throw new Error(`backup source store is not a real directory: ${source}`);
86
+ mkdirSync(destination, { mode: 0o700 });
87
+ chmodSync(destination, 0o700);
88
+ for (const name of readdirSync(source)) {
89
+ const from = join(source, name);
90
+ const to = join(destination, name);
91
+ const stat = lstatSync(from);
92
+ if (stat.isSymbolicLink())
93
+ throw new Error(`backup source store contains a symlink: ${from}`);
94
+ if (stat.isDirectory())
95
+ copyTree(from, to);
96
+ else if (stat.isFile())
97
+ copyFileSync(from, to, constants.COPYFILE_FICLONE);
98
+ else
99
+ throw new Error(`backup source store contains a non-regular entry: ${from}`);
100
+ }
101
+ }
102
+ export function createAttemptClone(root, sourceStore, attemptId) {
103
+ const attempts = ensurePrivateAttemptsDir(root);
104
+ const path = join(attempts.path, `${attemptId}-clone`);
105
+ try {
106
+ mkdirSync(path, { mode: 0o700 });
107
+ }
108
+ catch (error) {
109
+ if (error.code === "EEXIST")
110
+ throw new Error(`backup attempt clone already exists: ${path}`);
111
+ throw error;
112
+ }
113
+ const stat = lstatSync(path, { bigint: true });
114
+ const identity = { dev: stat.dev, ino: stat.ino };
115
+ try {
116
+ for (const name of readdirSync(sourceStore)) {
117
+ const from = join(sourceStore, name);
118
+ const to = join(path, name);
119
+ const entry = lstatSync(from);
120
+ if (entry.isSymbolicLink())
121
+ throw new Error(`backup source store contains a symlink: ${from}`);
122
+ if (entry.isDirectory())
123
+ copyTree(from, to);
124
+ else if (entry.isFile())
125
+ copyFileSync(from, to, constants.COPYFILE_FICLONE);
126
+ else
127
+ throw new Error(`backup source store contains a non-regular entry: ${from}`);
128
+ }
129
+ }
130
+ catch (error) {
131
+ assertDirectoryIdentity(attempts.path, attempts.identity);
132
+ const current = lstatSync(path, { bigint: true });
133
+ if (!current.isDirectory() || current.isSymbolicLink() || current.dev !== identity.dev || current.ino !== identity.ino)
134
+ throw new Error(`backup attempt clone identity changed during construction: ${path}`);
135
+ rmSync(path, { recursive: true });
136
+ throw error;
137
+ }
138
+ return {
139
+ path,
140
+ identity,
141
+ cleanup() {
142
+ // Strict: removal failures must surface so the caller retains its claim over this residue.
143
+ assertDirectoryIdentity(attempts.path, attempts.identity);
144
+ let current;
145
+ try {
146
+ current = lstatSync(path, { bigint: true });
147
+ }
148
+ catch (error) {
149
+ if (error.code === "ENOENT")
150
+ return;
151
+ throw error;
152
+ }
153
+ if (!current.isDirectory() || current.isSymbolicLink() ||
154
+ current.dev !== identity.dev || current.ino !== identity.ino)
155
+ return;
156
+ rmSync(path, { recursive: true });
157
+ },
158
+ };
159
+ }
160
+ export async function connectIsolatedBroker(broker, login) {
161
+ return connect({
162
+ servers: broker.server,
163
+ user: login.user,
164
+ pass: login.pass,
165
+ inboxPrefix: `_INBOX_${login.connId}`,
166
+ maxReconnectAttempts: 0,
167
+ });
168
+ }
169
+ function exactStreamName(name) {
170
+ if (!/^[A-Za-z0-9_-]+$/.test(name))
171
+ throw new Error(`invalid maintenance stream name ${JSON.stringify(name)}`);
172
+ return name;
173
+ }
174
+ function loginPermissions(space, connId, operation) {
175
+ if (operation.profile === "backup")
176
+ return backupProfilePermissions(space, connId, operation.scope);
177
+ if (operation.profile === "restore")
178
+ return restoreProfilePermissions(space, connId, operation.scope);
179
+ const streams = [...new Set(operation.streams.map(exactStreamName))];
180
+ if (!streams.length)
181
+ throw new Error("infrastructure maintenance login requires at least one stream");
182
+ return {
183
+ // STREAM.NAMES carries no body-read or mutation authority; it feeds the exact post-restore
184
+ // inventory assertion before commit intent.
185
+ pub: { allow: ["$JS.API.INFO", "$JS.API.STREAM.NAMES", ...streams.flatMap((stream) => [`$JS.API.STREAM.CREATE.${stream}`, `$JS.API.STREAM.INFO.${stream}`])] },
186
+ sub: { allow: [`_INBOX_${connId}.>`] },
187
+ };
188
+ }
189
+ function maintenanceLogin(space, requested) {
190
+ const connId = `U${randomBytes(28).toString("hex").toUpperCase()}`;
191
+ const scope = typeof requested === "function" ? requested(connId) : requested;
192
+ return {
193
+ connId,
194
+ scope,
195
+ user: `maintenance_${randomBytes(16).toString("hex")}`,
196
+ pass: randomBytes(32).toString("hex"),
197
+ permissions: loginPermissions(space, connId, scope),
198
+ };
199
+ }
200
+ function configPermissions(value) {
201
+ const permissions = value;
202
+ return {
203
+ ...(permissions.pub ? { publish: permissions.pub } : {}),
204
+ ...(permissions.sub ? { subscribe: permissions.sub } : {}),
205
+ ...(permissions.resp ? {
206
+ allow_responses: {
207
+ max: permissions.resp.max,
208
+ expires: `${(permissions.resp.ttl ?? 0) / 1_000_000_000}s`,
209
+ },
210
+ } : {}),
211
+ };
212
+ }
213
+ /** Open-mode stores keep their streams in the global account, so open mode scopes USERS inside the
214
+ * top-level authorization block instead of a named account; authority is identical either way. */
215
+ function authenticatedConfig(account, port, storeDir, logins) {
216
+ const users = logins.map((login) => ({
217
+ user: login.user,
218
+ password: login.pass,
219
+ permissions: configPermissions(login.permissions),
220
+ }));
221
+ return `${JSON.stringify({
222
+ host: LOOPBACK,
223
+ port,
224
+ max_control_line: 65536,
225
+ jetstream: { store_dir: storeDir },
226
+ ...(account === undefined
227
+ ? { authorization: { users } }
228
+ : { accounts: { [account]: { jetstream: true, users } } }),
229
+ }, null, 2)}\n`;
230
+ }
231
+ function removeOwnedFileStrict(file) {
232
+ let stat;
233
+ try {
234
+ stat = lstatSync(file.path, { bigint: true });
235
+ }
236
+ catch (error) {
237
+ if (error.code === "ENOENT")
238
+ return;
239
+ throw error;
240
+ }
241
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.dev.toString() !== file.dev || stat.ino.toString() !== file.ino)
242
+ return;
243
+ rmSync(file.path);
244
+ }
245
+ const delay = (ms) => new Promise((resolveWait) => setTimeout(resolveWait, ms));
246
+ export async function startIsolatedBroker(options) {
247
+ const port = await freePort();
248
+ const server = `nats://${LOOPBACK}:${port}`;
249
+ const { bin } = await resolveNatsServer();
250
+ const attempts = ensurePrivateAttemptsDir(options.root);
251
+ const runDir = attempts.path;
252
+ // Every mode gets the same single-principal, exact-subject permission matrix. Open mode differs
253
+ // only in its account label; it is never a full-authority token broker.
254
+ if (options.mode !== "open") {
255
+ if (!options.auth)
256
+ throw new Error(`${options.mode} isolated broker requires existing SpaceAuth`);
257
+ if (options.auth.space !== options.space)
258
+ throw new Error(`isolated broker trust material belongs to space ${JSON.stringify(options.auth.space)}, not ${JSON.stringify(options.space)}`);
259
+ }
260
+ const account = options.mode === "open" ? undefined : options.auth.account.pub;
261
+ const logins = [
262
+ maintenanceLogin(options.space, options.initialScope),
263
+ ];
264
+ const prefix = `${options.attemptId ?? options.label}-${randomUUID()}`;
265
+ const configPath = join(runDir, `${prefix}.conf`);
266
+ const logPath = join(runDir, `${prefix}.log`);
267
+ const pidsPath = join(runDir, `${prefix}.pids`);
268
+ writeFileSync(configPath, authenticatedConfig(account, port, options.storeDir, logins), { flag: "wx", mode: 0o600 });
269
+ writeFileSync(logPath, "", { flag: "wx", mode: 0o600 });
270
+ writeFileSync(pidsPath, "", { flag: "wx", mode: 0o600 });
271
+ const fileIdentity = (path) => {
272
+ const stat = lstatSync(path, { bigint: true });
273
+ return { path, dev: stat.dev.toString(), ino: stat.ino.toString() };
274
+ };
275
+ const runFiles = [fileIdentity(configPath), fileIdentity(logPath), fileIdentity(pidsPath)];
276
+ let logOffset = 0;
277
+ const readLogTail = () => {
278
+ try {
279
+ const content = readFileSync(logPath, "utf8");
280
+ const tail = content.slice(logOffset);
281
+ logOffset = content.length;
282
+ return tail;
283
+ }
284
+ catch {
285
+ return "";
286
+ }
287
+ };
288
+ const stopByPid = async (pid, gracefulMs) => {
289
+ if (alive(pid)) {
290
+ try {
291
+ process.kill(pid, "SIGTERM");
292
+ }
293
+ catch { /* raced to exit */ }
294
+ }
295
+ const graceful = Date.now() + gracefulMs;
296
+ while (alive(pid) && Date.now() < graceful)
297
+ await delay(100);
298
+ if (alive(pid)) {
299
+ try {
300
+ process.kill(pid, "SIGKILL");
301
+ }
302
+ catch { /* raced to exit */ }
303
+ }
304
+ const hard = Date.now() + 3_000;
305
+ while (alive(pid) && Date.now() < hard)
306
+ await delay(100);
307
+ if (alive(pid))
308
+ throw new Error(`process ${pid} did not exit`);
309
+ };
310
+ // The watchdog OWNS the broker as its child: after this single spawn there is no instant at
311
+ // which a broker can run unwatched — coordinator death or the deadline kills it via the parent
312
+ // check, and the broker pid reaches us only through the watchdog's durable handshake file.
313
+ const watchdogScript = [
314
+ "const [bin,config,log,parent,deadline,pids]=process.argv.slice(1);",
315
+ "const fs=require('node:fs');",
316
+ "const {spawn}=require('node:child_process');",
317
+ "const fd=fs.openSync(log,'a');",
318
+ "const broker=spawn(bin,['-c',config],{stdio:['ignore','ignore',fd]});",
319
+ "fs.writeFileSync(pids,JSON.stringify({broker:broker.pid,watchdog:process.pid}));",
320
+ "const alive=p=>{try{process.kill(p,0);return true}catch{return false}};",
321
+ "const stop=()=>{try{process.kill(broker.pid,'SIGTERM')}catch{};setTimeout(()=>{if(alive(broker.pid))try{process.kill(broker.pid,'SIGKILL')}catch{}},3000).unref();};",
322
+ "const tick=()=>{if(!alive(Number(parent))||Date.now()>=Number(deadline))stop();};",
323
+ "broker.on('exit',()=>process.exit(0));",
324
+ "setInterval(tick,250);tick();",
325
+ ].join("");
326
+ const watchdog = spawn(process.execPath, ["-e", watchdogScript, bin, configPath, logPath, String(process.pid), String(options.deadline.getTime()), pidsPath], { detached: true, stdio: "ignore" });
327
+ watchdog.unref();
328
+ const watchdogOwner = owner(watchdog, `${options.label}-watchdog-${randomUUID()}`);
329
+ let brokerOwner;
330
+ try {
331
+ const handshakeDeadline = Date.now() + BOOT_TIMEOUT_MS;
332
+ while (!brokerOwner) {
333
+ const raw = readFileSync(pidsPath, "utf8");
334
+ if (raw) {
335
+ let pids;
336
+ try {
337
+ pids = JSON.parse(raw);
338
+ }
339
+ catch { /* handshake still being written */ }
340
+ if (pids) {
341
+ if (!Number.isInteger(pids.broker) || pids.broker <= 0)
342
+ throw new Error(`${options.label} watchdog reported an invalid broker pid`);
343
+ brokerOwner = { pid: pids.broker, host: hostname(), startedAt: new Date().toISOString(), id: `${options.label}-broker-${randomUUID()}` };
344
+ break;
345
+ }
346
+ }
347
+ if (!alive(watchdogOwner.pid))
348
+ throw new Error(`${options.label} watchdog exited before spawning the broker: ${readLogTail().trim()}`);
349
+ if (Date.now() >= handshakeDeadline)
350
+ throw new Error(`${options.label} watchdog did not report a broker pid`);
351
+ await delay(50);
352
+ }
353
+ while (Date.now() < Math.min(options.deadline.getTime(), Date.now() + BOOT_TIMEOUT_MS)) {
354
+ if (!alive(brokerOwner.pid))
355
+ throw new Error(`${options.label} bootstrap broker exited during startup: ${readLogTail().trim()}`);
356
+ if (await isReachable(server))
357
+ return {
358
+ server,
359
+ initialLogin: logins[0],
360
+ brokerOwner,
361
+ watchdogOwner,
362
+ runFiles,
363
+ async addLogin(scope) {
364
+ const login = maintenanceLogin(options.space, scope);
365
+ // Every reload retires the preceding phase. The listener accepts one maintenance principal,
366
+ // not the union of every authority used earlier in the attempt.
367
+ logins.splice(0, logins.length, login);
368
+ writeFileSync(configPath, authenticatedConfig(account, port, options.storeDir, logins), { mode: 0o600 });
369
+ readLogTail();
370
+ try {
371
+ process.kill(brokerOwner.pid, "SIGHUP");
372
+ }
373
+ catch {
374
+ throw new Error(`${options.label} broker is not running for its maintenance-login reload`);
375
+ }
376
+ await delay(100);
377
+ const reloadDiagnostics = readLogTail();
378
+ if (/Failed to reload server configuration/.test(reloadDiagnostics))
379
+ throw new Error(`${options.label} broker rejected its maintenance-login reload: ${reloadDiagnostics.trim()}`);
380
+ if (!/Reloaded server configuration/.test(reloadDiagnostics))
381
+ throw new Error(`${options.label} broker did not confirm its maintenance-login reload`);
382
+ return login;
383
+ },
384
+ async stop() {
385
+ await stopByPid(brokerOwner.pid, 8_000);
386
+ await stopByPid(watchdogOwner.pid, 3_000);
387
+ assertDirectoryIdentity(attempts.path, attempts.identity);
388
+ // Strict: a failed removal surfaces so the caller keeps its claim instead of orphaning.
389
+ for (const file of runFiles)
390
+ removeOwnedFileStrict(file);
391
+ },
392
+ };
393
+ await delay(100);
394
+ }
395
+ throw new Error(`${options.label} bootstrap broker did not become reachable: ${readLogTail().trim()}`);
396
+ }
397
+ catch (error) {
398
+ const shutdownFailures = [];
399
+ if (brokerOwner)
400
+ try {
401
+ await stopByPid(brokerOwner.pid, 3_000);
402
+ }
403
+ catch (cause) {
404
+ shutdownFailures.push(cause instanceof Error ? cause : new Error(String(cause)));
405
+ }
406
+ try {
407
+ await stopByPid(watchdogOwner.pid, 3_000);
408
+ }
409
+ catch (cause) {
410
+ shutdownFailures.push(cause instanceof Error ? cause : new Error(String(cause)));
411
+ }
412
+ if (!shutdownFailures.length) {
413
+ assertDirectoryIdentity(attempts.path, attempts.identity);
414
+ try {
415
+ for (const file of runFiles)
416
+ removeOwnedFileStrict(file);
417
+ }
418
+ catch (cause) {
419
+ shutdownFailures.push(cause instanceof Error ? cause : new Error(String(cause)));
420
+ }
421
+ }
422
+ if (shutdownFailures.length)
423
+ throw new Error(`${error instanceof Error ? error.message : String(error)}; bootstrap process exit could not be proven: ${shutdownFailures.map((failure) => failure.message).join("; ")}`);
424
+ throw error;
425
+ }
426
+ }
427
+ //# sourceMappingURL=isolated-broker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolated-broker.js","sourceRoot":"","sources":["../../src/lib/isolated-broker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,SAAS,EACT,SAAS,EACT,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,OAAO,EAAuB,MAAM,yBAAyB,CAAC;AACvE,OAAO,EACL,wBAAwB,EACxB,WAAW,EACX,yBAAyB,GAI1B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,QAAQ,GAAG,WAAW,CAAC;AAC7B,MAAM,eAAe,GAAG,MAAM,CAAC;AAO/B,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,IAAI,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC;QACzD,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,SAAS,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;QACtE,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,OAAO,EAAE,CAAC,CAAC;QAC1H,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,OAAO,EAAE,CAAC,CAAC;QAC9I,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,SAAS,KAAK,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,OAAO,EAAE,CAAC,CAAC;IACzG,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY,EAAE,QAAsC;IACnF,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,cAAc,EAAE,IAAI,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG;QACpH,MAAM,IAAI,KAAK,CAAC,mDAAmD,IAAI,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED;;;8DAG8D;AAC9D,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAAE,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;;YAChF,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;YAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/E,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;QAC3I,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,KAAK,CAAC,GAAW;IACxB,IAAI,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,OAAQ,KAA+B,CAAC,IAAI,KAAK,OAAO,CAAC;IAAC,CAAC;AACxH,CAAC;AAED,SAAS,KAAK,CAAC,KAAmB,EAAE,EAAU;IAC5C,IAAI,CAAC,KAAK,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;IAC5D,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC;AACvF,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,WAAmB;IACnD,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,cAAc,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,MAAM,EAAE,CAAC,CAAC;IACxI,SAAS,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,EAAE,CAAC,CAAC;QAC9F,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;aACtC,IAAI,IAAI,CAAC,MAAM,EAAE;YAAE,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;;YACtE,MAAM,IAAI,KAAK,CAAC,qDAAqD,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAQD,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,WAAmB,EAAE,SAAiB;IACrF,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,SAAS,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;QACxH,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IAClD,IAAI,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACrC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,KAAK,CAAC,cAAc,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,EAAE,CAAC,CAAC;YAC/F,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;iBACvC,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;;gBACvE,MAAM,IAAI,KAAK,CAAC,qDAAqD,IAAI,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uBAAuB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,cAAc,EAAE,IAAI,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG;YACpH,MAAM,IAAI,KAAK,CAAC,8DAA8D,IAAI,EAAE,CAAC,CAAC;QACxF,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,MAAM,KAAK,CAAC;IACd,CAAC;IACD,OAAO;QACL,IAAI;QACJ,QAAQ;QACR,OAAO;YACL,2FAA2F;YAC3F,uBAAuB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC1D,IAAI,OAAO,CAAC;YACZ,IAAI,CAAC;gBACH,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO;gBAC/D,MAAM,KAAK,CAAC;YACd,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,cAAc,EAAE;gBAClD,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG;gBAAE,OAAO;YACzE,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC;AA+BD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAsC,EACtC,KAA+B;IAE/B,OAAO,OAAO,CAAC;QACb,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;QACrC,oBAAoB,EAAE,CAAC;KACxB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/G,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa,EAAE,MAAc,EAAE,SAAmC;IAC1F,IAAI,SAAS,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACpG,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACtG,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACtG,OAAO;QACL,2FAA2F;QAC3F,4CAA4C;QAC5C,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,cAAc,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,yBAAyB,MAAM,EAAE,EAAE,uBAAuB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;QAC9J,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,UAAU,MAAM,IAAI,CAAC,EAAE;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAa,EACb,SAAoF;IAEpF,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,OAAO;QACL,MAAM;QACN,KAAK;QACL,IAAI,EAAE,eAAe,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACtD,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrC,WAAW,EAAE,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA8B;IACvD,MAAM,WAAW,GAAG,KAInB,CAAC;IACF,OAAO;QACL,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;YACrB,eAAe,EAAE;gBACf,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG;gBACzB,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,aAAa,GAAG;aAC3D;SACF,CAAC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED;mGACmG;AACnG,SAAS,mBAAmB,CAC1B,OAA2B,EAC3B,IAAY,EACZ,QAAgB,EAChB,MAAwF;IAExF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,IAAI;QACpB,WAAW,EAAE,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC;KAClD,CAAC,CAAC,CAAC;IACJ,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QACvB,IAAI,EAAE,QAAQ;QACd,IAAI;QACJ,gBAAgB,EAAE,KAAK;QACvB,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;QAClC,GAAG,CAAC,OAAO,KAAK,SAAS;YACvB,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE;YAC9B,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;KAC7D,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAqB;IAClD,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC/D,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,GAAG;QAAE,OAAO;IAC5H,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;AAExF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAWzC;IACC,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,UAAU,QAAQ,IAAI,IAAI,EAAE,CAAC;IAC5C,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC7B,gGAAgG;IAChG,wEAAwE;IACxE,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,8CAA8C,CAAC,CAAC;QAClG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;YACtC,MAAM,IAAI,KAAK,CAAC,mDAAmD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnJ,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAK,CAAC,OAAO,CAAC,GAAG,CAAC;IAChF,MAAM,MAAM,GAA+E;QACzF,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC;KACtD,CAAC;IACF,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,IAAI,UAAU,EAAE,EAAE,CAAC;IACvE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,CAAC;IAChD,aAAa,CAAC,UAAU,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrH,aAAa,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,aAAa,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,CAAC,IAAY,EAAmB,EAAE;QACrD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;IACtE,CAAC,CAAC;IACF,MAAM,QAAQ,GAA+B,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvH,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,WAAW,GAAG,GAAW,EAAE;QAC/B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACtC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,EAAE,GAAW,EAAE,UAAkB,EAAiB,EAAE;QACzE,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAAC,CAAC;QACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;QACzC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;YAAE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAAC,CAAC;QACvF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAChC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;YAAE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,KAAK,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC;IACjE,CAAC,CAAC;IACF,4FAA4F;IAC5F,+FAA+F;IAC/F,2FAA2F;IAC3F,MAAM,cAAc,GAAG;QACrB,oEAAoE;QACpE,8BAA8B;QAC9B,8CAA8C;QAC9C,gCAAgC;QAChC,uEAAuE;QACvE,kFAAkF;QAClF,yEAAyE;QACzE,sKAAsK;QACtK,mFAAmF;QACnF,wCAAwC;QACxC,+BAA+B;KAChC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,QAAQ,GAAG,KAAK,CACpB,OAAO,CAAC,QAAQ,EAChB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,CAAC,EACnH,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CACpC,CAAC;IACF,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,aAAa,UAAU,EAAE,EAAE,CAAC,CAAC;IACnF,IAAI,WAAqC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC;QACvD,OAAO,CAAC,WAAW,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC3C,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,IAAqC,CAAC;gBAC1C,IAAI,CAAC;oBAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,mCAAmC,CAAC,CAAC;gBACpG,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAO,IAAI,CAAC;wBACrD,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,0CAA0C,CAAC,CAAC;oBAC9E,WAAW,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,MAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,WAAW,UAAU,EAAE,EAAE,EAAE,CAAC;oBAC1I,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,gDAAgD,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1G,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,iBAAiB;gBACjC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,uCAAuC,CAAC,CAAC;YAC3E,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC;YACvF,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,4CAA4C,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACtG,IAAI,MAAM,WAAW,CAAC,MAAM,CAAC;gBAAE,OAAO;oBACpC,MAAM;oBACN,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;oBACvB,WAAW;oBACX,aAAa;oBACb,QAAQ;oBACR,KAAK,CAAC,QAAQ,CAAC,KAAK;wBAClB,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBACrD,4FAA4F;wBAC5F,gEAAgE;wBAChE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;wBACvC,aAAa,CAAC,UAAU,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;wBACzG,WAAW,EAAE,CAAC;wBACd,IAAI,CAAC;4BACH,OAAO,CAAC,IAAI,CAAC,WAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;wBAC3C,CAAC;wBAAC,MAAM,CAAC;4BACP,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,yDAAyD,CAAC,CAAC;wBAC7F,CAAC;wBACD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;wBACjB,MAAM,iBAAiB,GAAG,WAAW,EAAE,CAAC;wBACxC,IAAI,uCAAuC,CAAC,IAAI,CAAC,iBAAiB,CAAC;4BACjE,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,kDAAkD,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBAChH,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,iBAAiB,CAAC;4BAC1D,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,sDAAsD,CAAC,CAAC;wBAC1F,OAAO,KAAK,CAAC;oBACf,CAAC;oBACD,KAAK,CAAC,IAAI;wBACR,MAAM,SAAS,CAAC,WAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;wBACzC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;wBAC1C,uBAAuB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBAC1D,wFAAwF;wBACxF,KAAK,MAAM,IAAI,IAAI,QAAQ;4BAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;oBAC3D,CAAC;iBACF,CAAC;YACF,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,+CAA+C,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,gBAAgB,GAAY,EAAE,CAAC;QACrC,IAAI,WAAW;YAAE,IAAI,CAAC;gBAAC,MAAM,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAAC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAC/E,gBAAgB,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnF,CAAC;QACD,IAAI,CAAC;YAAC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChE,gBAAgB,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAC7B,uBAAuB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC1D,IAAI,CAAC;gBACH,KAAK,MAAM,IAAI,IAAI,QAAQ;oBAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,gBAAgB,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QACD,IAAI,gBAAgB,CAAC,MAAM;YACzB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7L,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type MaintenanceAuthMode } from "@cotal-ai/workspace";
2
+ export interface AuthorityFingerprint {
3
+ mode: MaintenanceAuthMode;
4
+ account: string;
5
+ scheme: string;
6
+ authoritySha256: string;
7
+ }
8
+ /** Full artifacts bind to existing local trust without copying any secret into the artifact. */
9
+ export declare function authorityFingerprint(root: string, space: string, mode: MaintenanceAuthMode): Promise<AuthorityFingerprint>;
10
+ //# sourceMappingURL=maintenance-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance-files.d.ts","sourceRoot":"","sources":["../../src/lib/maintenance-files.ts"],"names":[],"mappings":"AAOA,OAAO,EAAkE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/H,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;CACzB;AA8BD,gGAAgG;AAChG,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuBhI"}
@@ -0,0 +1,60 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync, lstatSync, } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { resolveAuthProvider, validateSpaceAuth } from "@cotal-ai/core";
5
+ import { authDir, loadSpaceAuth, userAuthStateDir, workspaceSecretStore } from "@cotal-ai/workspace";
6
+ function sha256(value) {
7
+ return createHash("sha256").update(value).digest("hex");
8
+ }
9
+ function rootChainCommitment(root, space) {
10
+ const path = join(authDir(root), "auth.json");
11
+ if (!existsSync(path))
12
+ throw new Error(`restore requires existing trust material: ${path}`);
13
+ const stat = lstatSync(path);
14
+ if (!stat.isFile() || stat.isSymbolicLink())
15
+ throw new Error(`authority input is not a regular file: ${path}`);
16
+ const auth = validateSpaceAuth(loadSpaceAuth(authDir(root)), space);
17
+ // Commit only to validated public trust-chain material. Seeds remain outside the artifact while
18
+ // every signed operator/system/data root and active data signer participates in drift detection.
19
+ return {
20
+ account: auth.account.pub,
21
+ sha256: sha256(JSON.stringify({
22
+ version: "cotal-space-auth-root/v1",
23
+ space: auth.space,
24
+ operatorJwt: auth.operator.jwt,
25
+ account: {
26
+ pub: auth.account.pub,
27
+ jwt: auth.account.jwt,
28
+ signingPub: auth.account.signingPub,
29
+ },
30
+ system: { pub: auth.sys.pub, jwt: auth.sys.jwt },
31
+ })),
32
+ };
33
+ }
34
+ /** Full artifacts bind to existing local trust without copying any secret into the artifact. */
35
+ export async function authorityFingerprint(root, space, mode) {
36
+ if (mode === "open")
37
+ return {
38
+ mode,
39
+ account: "$G",
40
+ scheme: "cotal-open-store/v1:sha256",
41
+ authoritySha256: sha256(`open\0${space}`),
42
+ };
43
+ const rootChain = rootChainCommitment(root, space);
44
+ if (mode === "user") {
45
+ const provider = await resolveAuthProvider().trustFingerprint({ store: workspaceSecretStore(root), dir: userAuthStateDir(root, space), space });
46
+ return {
47
+ mode,
48
+ account: rootChain.account,
49
+ scheme: `cotal-user-authority/v2:${provider.scheme}`,
50
+ authoritySha256: sha256(JSON.stringify({ rootChainSha256: rootChain.sha256, provider })),
51
+ };
52
+ }
53
+ return {
54
+ mode,
55
+ account: rootChain.account,
56
+ scheme: "cotal-static-authority/v2:sha256",
57
+ authoritySha256: rootChain.sha256,
58
+ };
59
+ }
60
+ //# sourceMappingURL=maintenance-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance-files.js","sourceRoot":"","sources":["../../src/lib/maintenance-files.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,8 @@ export declare function startManagerDetached(o?: {
17
17
  spawn?: string[];
18
18
  launch?: string;
19
19
  runtime?: string;
20
+ resumeAttempt?: string;
21
+ resumeCommitToken?: string;
20
22
  }): number;
21
23
  /** Make the control plane available: reuse a manager already running for this folder, else start
22
24
  * one detached. Best-effort — callers treat it as non-fatal. A caller that needs THE manager to
@@ -28,6 +30,8 @@ export declare function ensureManager(o?: {
28
30
  spawn?: string[];
29
31
  runtime?: string;
30
32
  launch?: string;
33
+ resumeAttempt?: string;
34
+ resumeCommitToken?: string;
31
35
  }): {
32
36
  running: boolean;
33
37
  };
@@ -1 +1 @@
1
- {"version":3,"file":"manager-proc.d.ts","sourceRoot":"","sources":["../../src/lib/manager-proc.ts"],"names":[],"mappings":"AAwBA,6FAA6F;AAC7F,wBAAgB,SAAS,IAAI,OAAO,CAKnC;AAED;;;;2CAI2C;AAC3C,wBAAgB,wBAAwB,IAAI,OAAO,CAOlD;AAED;;;;0FAI0F;AAC1F,wBAAgB,oBAAoB,CAClC,CAAC,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/F,MAAM,CAyBR;AAED;;;mBAGmB;AACnB,wBAAgB,aAAa,CAC3B,CAAC,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/F;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAItB;AAED;wGACwG;AACxG,wBAAgB,WAAW,IAAI,IAAI,CAalC"}
1
+ {"version":3,"file":"manager-proc.d.ts","sourceRoot":"","sources":["../../src/lib/manager-proc.ts"],"names":[],"mappings":"AAwBA,6FAA6F;AAC7F,wBAAgB,SAAS,IAAI,OAAO,CAKnC;AAED;;;;2CAI2C;AAC3C,wBAAgB,wBAAwB,IAAI,OAAO,CAOlD;AAED;;;;0FAI0F;AAC1F,wBAAgB,oBAAoB,CAClC,CAAC,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAO,GACnJ,MAAM,CA2BR;AAED;;;mBAGmB;AACnB,wBAAgB,aAAa,CAC3B,CAAC,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAO,GACnJ;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAItB;AAED;wGACwG;AACxG,wBAAgB,WAAW,IAAI,IAAI,CAalC"}
@@ -61,6 +61,8 @@ export function startManagerDetached(o = {}) {
61
61
  ...(o.spawn?.length ? ["--spawn", o.spawn.join(",")] : []),
62
62
  // A resolved mesh-manifest launch spec (cotal up -f): the manager materializes + boots each agent.
63
63
  ...(o.launch ? ["--launch", o.launch] : []),
64
+ ...(o.resumeAttempt ? ["--resume-attempt", o.resumeAttempt] : []),
65
+ ...(o.resumeCommitToken ? ["--resume-commit-token", o.resumeCommitToken] : []),
64
66
  ];
65
67
  // This is an INTERNAL child re-exec: the `up`/`spawn` that reached here already ran the first-run
66
68
  // connector seed, so the manager skips it on boot (a direct `cotal supervise` still seeds).
@@ -1 +1 @@
1
- {"version":3,"file":"manager-proc.js","sourceRoot":"","sources":["../../src/lib/manager-proc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager-proc.js","sourceRoot":"","sources":["../../src/lib/manager-proc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { type CommitIntentRecord, type JsonValue, type ManagerCommitEvidence, type ManagerFinalizeEvidence, type MaintenanceReadyRecord, type ProcessOwner, type RestoreActiveRecord, type RestoreDegradedRecord, type RestoreListenerProof, type RestoreManagerCommittedRecord } from "@cotal-ai/workspace";
2
+ export interface RestoreFlags {
3
+ restore: string;
4
+ "restore-only"?: string;
5
+ "accept-missing-source"?: boolean;
6
+ "store-dir"?: string;
7
+ space?: string;
8
+ server?: string;
9
+ host?: string;
10
+ runtime?: string;
11
+ detach?: boolean;
12
+ open?: boolean;
13
+ "user-auth"?: boolean;
14
+ idp?: string;
15
+ }
16
+ export interface PreparedRestore {
17
+ root: string;
18
+ attemptId: string;
19
+ targetPath: string;
20
+ space: string;
21
+ mode: MaintenanceReadyRecord["mode"];
22
+ server: string;
23
+ host: string;
24
+ runtime: string;
25
+ detached: boolean;
26
+ selection: "full" | "registry";
27
+ inventory: JsonValue;
28
+ serverName: string;
29
+ serverNonce: string;
30
+ /** True only when reconstructed from durable commit/repair state after coordinator loss. */
31
+ reentry: boolean;
32
+ journalState: "commit-intent" | "manager-committed" | "active" | "degraded";
33
+ managerCommit?: ManagerCommitEvidence;
34
+ listenerProof?: RestoreListenerProof;
35
+ cleanupStage(): void;
36
+ }
37
+ type RecoverableRestoreRecord = CommitIntentRecord | RestoreManagerCommittedRecord | RestoreActiveRecord | RestoreDegradedRecord;
38
+ export declare function rehydratePreparedRestore(root: string, journal: RecoverableRestoreRecord): PreparedRestore;
39
+ export declare function bindPreparedRestoreListener(prepared: PreparedRestore, processOwner: ProcessOwner): RestoreListenerProof;
40
+ export declare function replacePreparedDeadRestoreListener(prepared: PreparedRestore): void;
41
+ export declare function isManagerCommittedRestore(journal: RestoreActiveRecord): boolean;
42
+ export declare function isManagerCommitResult(value: unknown, attemptId: string): value is ManagerCommitEvidence;
43
+ export declare function isManagerFinalizeResult(value: unknown, attemptId: string): value is {
44
+ attemptId: string;
45
+ state: "active";
46
+ };
47
+ export declare function prepareRestore(root: string, flags: RestoreFlags): Promise<PreparedRestore>;
48
+ export declare function markPreparedRestoreActive(prepared: PreparedRestore, managerResult: ManagerFinalizeEvidence): void;
49
+ export declare function recordPreparedRestoreManagerCommit(prepared: PreparedRestore, evidence: ManagerCommitEvidence): void;
50
+ export declare function markPreparedRestoreDegraded(root: string, attemptId: string, reason: string): void;
51
+ export {};
52
+ //# sourceMappingURL=restore.d.ts.map