@cotal-ai/cli 0.11.6 → 0.13.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 (91) 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 +174 -28
  11. package/dist/commands/clean.js.map +1 -1
  12. package/dist/commands/down-manifest.d.ts.map +1 -1
  13. package/dist/commands/down-manifest.js +83 -16
  14. package/dist/commands/down-manifest.js.map +1 -1
  15. package/dist/commands/down.d.ts +5 -0
  16. package/dist/commands/down.d.ts.map +1 -1
  17. package/dist/commands/down.js +367 -5
  18. package/dist/commands/down.js.map +1 -1
  19. package/dist/commands/join.d.ts.map +1 -1
  20. package/dist/commands/join.js +46 -1
  21. package/dist/commands/join.js.map +1 -1
  22. package/dist/commands/mint.d.ts.map +1 -1
  23. package/dist/commands/mint.js +19 -5
  24. package/dist/commands/mint.js.map +1 -1
  25. package/dist/commands/spawn.d.ts +4 -0
  26. package/dist/commands/spawn.d.ts.map +1 -1
  27. package/dist/commands/spawn.js +81 -42
  28. package/dist/commands/spawn.js.map +1 -1
  29. package/dist/commands/status.d.ts.map +1 -1
  30. package/dist/commands/status.js +3 -2
  31. package/dist/commands/status.js.map +1 -1
  32. package/dist/commands/up.d.ts +12 -0
  33. package/dist/commands/up.d.ts.map +1 -1
  34. package/dist/commands/up.js +1149 -193
  35. package/dist/commands/up.js.map +1 -1
  36. package/dist/commands/use.d.ts +3 -3
  37. package/dist/commands/use.d.ts.map +1 -1
  38. package/dist/commands/use.js +3 -3
  39. package/dist/commands/use.js.map +1 -1
  40. package/dist/console/app.js +1 -1
  41. package/dist/console/app.js.map +1 -1
  42. package/dist/console/ui/NeedsYou.js +1 -1
  43. package/dist/console/ui/NeedsYou.js.map +1 -1
  44. package/dist/console/ui/Tiles.d.ts +6 -3
  45. package/dist/console/ui/Tiles.d.ts.map +1 -1
  46. package/dist/console/ui/Tiles.js +6 -3
  47. package/dist/console/ui/Tiles.js.map +1 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +21 -5
  50. package/dist/index.js.map +1 -1
  51. package/dist/lib/auth-proc.d.ts +21 -0
  52. package/dist/lib/auth-proc.d.ts.map +1 -1
  53. package/dist/lib/auth-proc.js +89 -15
  54. package/dist/lib/auth-proc.js.map +1 -1
  55. package/dist/lib/backup-artifact.d.ts +50 -0
  56. package/dist/lib/backup-artifact.d.ts.map +1 -0
  57. package/dist/lib/backup-artifact.js +290 -0
  58. package/dist/lib/backup-artifact.js.map +1 -0
  59. package/dist/lib/delivery-proc.d.ts +7 -2
  60. package/dist/lib/delivery-proc.d.ts.map +1 -1
  61. package/dist/lib/delivery-proc.js +29 -19
  62. package/dist/lib/delivery-proc.js.map +1 -1
  63. package/dist/lib/endpoint-cut.d.ts +5 -0
  64. package/dist/lib/endpoint-cut.d.ts.map +1 -0
  65. package/dist/lib/endpoint-cut.js +53 -0
  66. package/dist/lib/endpoint-cut.js.map +1 -0
  67. package/dist/lib/isolated-broker.d.ts +70 -0
  68. package/dist/lib/isolated-broker.d.ts.map +1 -0
  69. package/dist/lib/isolated-broker.js +436 -0
  70. package/dist/lib/isolated-broker.js.map +1 -0
  71. package/dist/lib/maintenance-files.d.ts +10 -0
  72. package/dist/lib/maintenance-files.d.ts.map +1 -0
  73. package/dist/lib/maintenance-files.js +60 -0
  74. package/dist/lib/maintenance-files.js.map +1 -0
  75. package/dist/lib/manager-proc.d.ts +4 -0
  76. package/dist/lib/manager-proc.d.ts.map +1 -1
  77. package/dist/lib/manager-proc.js +2 -0
  78. package/dist/lib/manager-proc.js.map +1 -1
  79. package/dist/lib/manifest/ledger.d.ts +4 -2
  80. package/dist/lib/manifest/ledger.d.ts.map +1 -1
  81. package/dist/lib/manifest/ledger.js +8 -10
  82. package/dist/lib/manifest/ledger.js.map +1 -1
  83. package/dist/lib/restore.d.ts +52 -0
  84. package/dist/lib/restore.d.ts.map +1 -0
  85. package/dist/lib/restore.js +801 -0
  86. package/dist/lib/restore.js.map +1 -0
  87. package/dist/view/mesh-view.d.ts +6 -1
  88. package/dist/view/mesh-view.d.ts.map +1 -1
  89. package/dist/view/mesh-view.js +8 -3
  90. package/dist/view/mesh-view.js.map +1 -1
  91. package/package.json +7 -4
@@ -0,0 +1,436 @@
1
+ import { spawn } from "node:child_process";
2
+ import { randomBytes, randomUUID } from "node:crypto";
3
+ import { 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, hardenPrivate, 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
+ // This tree holds the store clone, quarantine, sanitized snapshots, and the broker `.conf`
29
+ // (plaintext maintenance creds). `hardenPrivate` reasserts 0700 on POSIX and sets an
30
+ // inheritable owner-only NTFS ACL on win32 — where both the create mode AND the getuid
31
+ // ownership check above are no-ops — so children born here inherit the private ACL. Fails closed.
32
+ hardenPrivate(current, "dir");
33
+ }
34
+ const canonical = realpathSync.native(current);
35
+ if (canonical !== current)
36
+ throw new Error(`maintenance attempt directory is not canonical: ${current}`);
37
+ const stat = lstatSync(canonical, { bigint: true });
38
+ return { path: canonical, identity: { dev: stat.dev, ino: stat.ino } };
39
+ }
40
+ function assertDirectoryIdentity(path, identity) {
41
+ const current = lstatSync(path, { bigint: true });
42
+ if (!current.isDirectory() || current.isSymbolicLink() || current.dev !== identity.dev || current.ino !== identity.ino)
43
+ throw new Error(`maintenance attempt directory identity changed: ${path}`);
44
+ }
45
+ /** With the maintenance journal at `ready` and no live claim, nothing may legitimately live in the
46
+ * private attempts directory: every entry is residue of a dead attempt (staging, clones, broker
47
+ * run files) and is removed before new maintenance work begins. Strict — a failed removal aborts
48
+ * the caller rather than proceeding over unowned residue. */
49
+ export function sweepAttemptResidue(root) {
50
+ const attempts = ensurePrivateAttemptsDir(root);
51
+ for (const name of readdirSync(attempts.path)) {
52
+ const child = join(attempts.path, name);
53
+ const stat = lstatSync(child);
54
+ if (stat.isDirectory() && !stat.isSymbolicLink())
55
+ rmSync(child, { recursive: true });
56
+ else
57
+ rmSync(child);
58
+ }
59
+ }
60
+ function freePort() {
61
+ return new Promise((resolvePort, reject) => {
62
+ const server = createServer();
63
+ server.unref();
64
+ server.once("error", reject);
65
+ server.listen(0, LOOPBACK, () => {
66
+ const address = server.address();
67
+ const port = typeof address === "object" && address ? address.port : undefined;
68
+ server.close((error) => error ? reject(error) : port ? resolvePort(port) : reject(new Error("could not allocate isolated broker port")));
69
+ });
70
+ });
71
+ }
72
+ function alive(pid) {
73
+ try {
74
+ process.kill(pid, 0);
75
+ return true;
76
+ }
77
+ catch (error) {
78
+ return error.code === "EPERM";
79
+ }
80
+ }
81
+ function owner(child, id) {
82
+ if (!child.pid)
83
+ throw new Error(`${id} process has no pid`);
84
+ return { pid: child.pid, host: hostname(), startedAt: new Date().toISOString(), id };
85
+ }
86
+ function copyTree(source, destination) {
87
+ const sourceStat = lstatSync(source);
88
+ if (!sourceStat.isDirectory() || sourceStat.isSymbolicLink())
89
+ throw new Error(`backup source store is not a real directory: ${source}`);
90
+ mkdirSync(destination, { mode: 0o700 });
91
+ hardenPrivate(destination, "dir"); // clone subtree is store bytes — private on win32 too
92
+ for (const name of readdirSync(source)) {
93
+ const from = join(source, name);
94
+ const to = join(destination, name);
95
+ const stat = lstatSync(from);
96
+ if (stat.isSymbolicLink())
97
+ throw new Error(`backup source store contains a symlink: ${from}`);
98
+ if (stat.isDirectory())
99
+ copyTree(from, to);
100
+ else if (stat.isFile())
101
+ copyFileSync(from, to, constants.COPYFILE_FICLONE);
102
+ else
103
+ throw new Error(`backup source store contains a non-regular entry: ${from}`);
104
+ }
105
+ }
106
+ export function createAttemptClone(root, sourceStore, attemptId) {
107
+ const attempts = ensurePrivateAttemptsDir(root);
108
+ const path = join(attempts.path, `${attemptId}-clone`);
109
+ try {
110
+ mkdirSync(path, { mode: 0o700 });
111
+ }
112
+ catch (error) {
113
+ if (error.code === "EEXIST")
114
+ throw new Error(`backup attempt clone already exists: ${path}`);
115
+ throw error;
116
+ }
117
+ hardenPrivate(path, "dir"); // clone root holds the full store copy — private on win32 too
118
+ const stat = lstatSync(path, { bigint: true });
119
+ const identity = { dev: stat.dev, ino: stat.ino };
120
+ try {
121
+ for (const name of readdirSync(sourceStore)) {
122
+ const from = join(sourceStore, name);
123
+ const to = join(path, name);
124
+ const entry = lstatSync(from);
125
+ if (entry.isSymbolicLink())
126
+ throw new Error(`backup source store contains a symlink: ${from}`);
127
+ if (entry.isDirectory())
128
+ copyTree(from, to);
129
+ else if (entry.isFile())
130
+ copyFileSync(from, to, constants.COPYFILE_FICLONE);
131
+ else
132
+ throw new Error(`backup source store contains a non-regular entry: ${from}`);
133
+ }
134
+ }
135
+ catch (error) {
136
+ assertDirectoryIdentity(attempts.path, attempts.identity);
137
+ const current = lstatSync(path, { bigint: true });
138
+ if (!current.isDirectory() || current.isSymbolicLink() || current.dev !== identity.dev || current.ino !== identity.ino)
139
+ throw new Error(`backup attempt clone identity changed during construction: ${path}`);
140
+ rmSync(path, { recursive: true });
141
+ throw error;
142
+ }
143
+ return {
144
+ path,
145
+ identity,
146
+ cleanup() {
147
+ // Strict: removal failures must surface so the caller retains its claim over this residue.
148
+ assertDirectoryIdentity(attempts.path, attempts.identity);
149
+ let current;
150
+ try {
151
+ current = lstatSync(path, { bigint: true });
152
+ }
153
+ catch (error) {
154
+ if (error.code === "ENOENT")
155
+ return;
156
+ throw error;
157
+ }
158
+ if (!current.isDirectory() || current.isSymbolicLink() ||
159
+ current.dev !== identity.dev || current.ino !== identity.ino)
160
+ return;
161
+ rmSync(path, { recursive: true });
162
+ },
163
+ };
164
+ }
165
+ export async function connectIsolatedBroker(broker, login) {
166
+ return connect({
167
+ servers: broker.server,
168
+ user: login.user,
169
+ pass: login.pass,
170
+ inboxPrefix: `_INBOX_${login.connId}`,
171
+ maxReconnectAttempts: 0,
172
+ });
173
+ }
174
+ function exactStreamName(name) {
175
+ if (!/^[A-Za-z0-9_-]+$/.test(name))
176
+ throw new Error(`invalid maintenance stream name ${JSON.stringify(name)}`);
177
+ return name;
178
+ }
179
+ function loginPermissions(space, connId, operation) {
180
+ if (operation.profile === "backup")
181
+ return backupProfilePermissions(space, connId, operation.scope);
182
+ if (operation.profile === "restore")
183
+ return restoreProfilePermissions(space, connId, operation.scope);
184
+ const streams = [...new Set(operation.streams.map(exactStreamName))];
185
+ if (!streams.length)
186
+ throw new Error("infrastructure maintenance login requires at least one stream");
187
+ return {
188
+ // STREAM.NAMES carries no body-read or mutation authority; it feeds the exact post-restore
189
+ // inventory assertion before commit intent.
190
+ pub: { allow: ["$JS.API.INFO", "$JS.API.STREAM.NAMES", ...streams.flatMap((stream) => [`$JS.API.STREAM.CREATE.${stream}`, `$JS.API.STREAM.INFO.${stream}`])] },
191
+ sub: { allow: [`_INBOX_${connId}.>`] },
192
+ };
193
+ }
194
+ function maintenanceLogin(space, requested) {
195
+ const connId = `U${randomBytes(28).toString("hex").toUpperCase()}`;
196
+ const scope = typeof requested === "function" ? requested(connId) : requested;
197
+ return {
198
+ connId,
199
+ scope,
200
+ user: `maintenance_${randomBytes(16).toString("hex")}`,
201
+ pass: randomBytes(32).toString("hex"),
202
+ permissions: loginPermissions(space, connId, scope),
203
+ };
204
+ }
205
+ function configPermissions(value) {
206
+ const permissions = value;
207
+ return {
208
+ ...(permissions.pub ? { publish: permissions.pub } : {}),
209
+ ...(permissions.sub ? { subscribe: permissions.sub } : {}),
210
+ ...(permissions.resp ? {
211
+ allow_responses: {
212
+ max: permissions.resp.max,
213
+ expires: `${(permissions.resp.ttl ?? 0) / 1_000_000_000}s`,
214
+ },
215
+ } : {}),
216
+ };
217
+ }
218
+ /** Open-mode stores keep their streams in the global account, so open mode scopes USERS inside the
219
+ * top-level authorization block instead of a named account; authority is identical either way. */
220
+ function authenticatedConfig(account, port, storeDir, logins) {
221
+ const users = logins.map((login) => ({
222
+ user: login.user,
223
+ password: login.pass,
224
+ permissions: configPermissions(login.permissions),
225
+ }));
226
+ return `${JSON.stringify({
227
+ host: LOOPBACK,
228
+ port,
229
+ max_control_line: 65536,
230
+ jetstream: { store_dir: storeDir },
231
+ ...(account === undefined
232
+ ? { authorization: { users } }
233
+ : { accounts: { [account]: { jetstream: true, users } } }),
234
+ }, null, 2)}\n`;
235
+ }
236
+ function removeOwnedFileStrict(file) {
237
+ let stat;
238
+ try {
239
+ stat = lstatSync(file.path, { bigint: true });
240
+ }
241
+ catch (error) {
242
+ if (error.code === "ENOENT")
243
+ return;
244
+ throw error;
245
+ }
246
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.dev.toString() !== file.dev || stat.ino.toString() !== file.ino)
247
+ return;
248
+ rmSync(file.path);
249
+ }
250
+ const delay = (ms) => new Promise((resolveWait) => setTimeout(resolveWait, ms));
251
+ export async function startIsolatedBroker(options) {
252
+ const port = await freePort();
253
+ const server = `nats://${LOOPBACK}:${port}`;
254
+ const { bin } = await resolveNatsServer();
255
+ const attempts = ensurePrivateAttemptsDir(options.root);
256
+ const runDir = attempts.path;
257
+ // Every mode gets the same single-principal, exact-subject permission matrix. Open mode differs
258
+ // only in its account label; it is never a full-authority token broker.
259
+ if (options.mode !== "open") {
260
+ if (!options.auth)
261
+ throw new Error(`${options.mode} isolated broker requires existing SpaceAuth`);
262
+ if (options.auth.space !== options.space)
263
+ throw new Error(`isolated broker trust material belongs to space ${JSON.stringify(options.auth.space)}, not ${JSON.stringify(options.space)}`);
264
+ }
265
+ const account = options.mode === "open" ? undefined : options.auth.account.pub;
266
+ const logins = [
267
+ maintenanceLogin(options.space, options.initialScope),
268
+ ];
269
+ const prefix = `${options.attemptId ?? options.label}-${randomUUID()}`;
270
+ const configPath = join(runDir, `${prefix}.conf`);
271
+ const logPath = join(runDir, `${prefix}.log`);
272
+ const pidsPath = join(runDir, `${prefix}.pids`);
273
+ writeFileSync(configPath, authenticatedConfig(account, port, options.storeDir, logins), { flag: "wx", mode: 0o600 });
274
+ writeFileSync(logPath, "", { flag: "wx", mode: 0o600 });
275
+ writeFileSync(pidsPath, "", { flag: "wx", mode: 0o600 });
276
+ // The `.conf` embeds the plaintext maintenance login. `wx` above keeps the exclusive create
277
+ // (never write over a pre-planted file); harden the win32 ACL after, where mode 0o600 is a no-op.
278
+ // The attempts dir is already hardened inheritable, but harden the secret file explicitly too.
279
+ hardenPrivate(configPath, "file");
280
+ const fileIdentity = (path) => {
281
+ const stat = lstatSync(path, { bigint: true });
282
+ return { path, dev: stat.dev.toString(), ino: stat.ino.toString() };
283
+ };
284
+ const runFiles = [fileIdentity(configPath), fileIdentity(logPath), fileIdentity(pidsPath)];
285
+ let logOffset = 0;
286
+ const readLogTail = () => {
287
+ try {
288
+ const content = readFileSync(logPath, "utf8");
289
+ const tail = content.slice(logOffset);
290
+ logOffset = content.length;
291
+ return tail;
292
+ }
293
+ catch {
294
+ return "";
295
+ }
296
+ };
297
+ const stopByPid = async (pid, gracefulMs) => {
298
+ if (alive(pid)) {
299
+ try {
300
+ process.kill(pid, "SIGTERM");
301
+ }
302
+ catch { /* raced to exit */ }
303
+ }
304
+ const graceful = Date.now() + gracefulMs;
305
+ while (alive(pid) && Date.now() < graceful)
306
+ await delay(100);
307
+ if (alive(pid)) {
308
+ try {
309
+ process.kill(pid, "SIGKILL");
310
+ }
311
+ catch { /* raced to exit */ }
312
+ }
313
+ const hard = Date.now() + 3_000;
314
+ while (alive(pid) && Date.now() < hard)
315
+ await delay(100);
316
+ if (alive(pid))
317
+ throw new Error(`process ${pid} did not exit`);
318
+ };
319
+ // The watchdog OWNS the broker as its child: after this single spawn there is no instant at
320
+ // which a broker can run unwatched — coordinator death or the deadline kills it via the parent
321
+ // check, and the broker pid reaches us only through the watchdog's durable handshake file.
322
+ const watchdogScript = [
323
+ "const [bin,config,log,parent,deadline,pids]=process.argv.slice(1);",
324
+ "const fs=require('node:fs');",
325
+ "const {spawn}=require('node:child_process');",
326
+ "const fd=fs.openSync(log,'a');",
327
+ "const broker=spawn(bin,['-c',config],{stdio:['ignore','ignore',fd]});",
328
+ "fs.writeFileSync(pids,JSON.stringify({broker:broker.pid,watchdog:process.pid}));",
329
+ "const alive=p=>{try{process.kill(p,0);return true}catch{return false}};",
330
+ "const stop=()=>{try{process.kill(broker.pid,'SIGTERM')}catch{};setTimeout(()=>{if(alive(broker.pid))try{process.kill(broker.pid,'SIGKILL')}catch{}},3000).unref();};",
331
+ "const tick=()=>{if(!alive(Number(parent))||Date.now()>=Number(deadline))stop();};",
332
+ "broker.on('exit',()=>process.exit(0));",
333
+ "setInterval(tick,250);tick();",
334
+ ].join("");
335
+ const watchdog = spawn(process.execPath, ["-e", watchdogScript, bin, configPath, logPath, String(process.pid), String(options.deadline.getTime()), pidsPath], { detached: true, stdio: "ignore" });
336
+ watchdog.unref();
337
+ const watchdogOwner = owner(watchdog, `${options.label}-watchdog-${randomUUID()}`);
338
+ let brokerOwner;
339
+ try {
340
+ const handshakeDeadline = Date.now() + BOOT_TIMEOUT_MS;
341
+ while (!brokerOwner) {
342
+ const raw = readFileSync(pidsPath, "utf8");
343
+ if (raw) {
344
+ let pids;
345
+ try {
346
+ pids = JSON.parse(raw);
347
+ }
348
+ catch { /* handshake still being written */ }
349
+ if (pids) {
350
+ if (!Number.isInteger(pids.broker) || pids.broker <= 0)
351
+ throw new Error(`${options.label} watchdog reported an invalid broker pid`);
352
+ brokerOwner = { pid: pids.broker, host: hostname(), startedAt: new Date().toISOString(), id: `${options.label}-broker-${randomUUID()}` };
353
+ break;
354
+ }
355
+ }
356
+ if (!alive(watchdogOwner.pid))
357
+ throw new Error(`${options.label} watchdog exited before spawning the broker: ${readLogTail().trim()}`);
358
+ if (Date.now() >= handshakeDeadline)
359
+ throw new Error(`${options.label} watchdog did not report a broker pid`);
360
+ await delay(50);
361
+ }
362
+ while (Date.now() < Math.min(options.deadline.getTime(), Date.now() + BOOT_TIMEOUT_MS)) {
363
+ if (!alive(brokerOwner.pid))
364
+ throw new Error(`${options.label} bootstrap broker exited during startup: ${readLogTail().trim()}`);
365
+ if (await isReachable(server))
366
+ return {
367
+ server,
368
+ initialLogin: logins[0],
369
+ brokerOwner,
370
+ watchdogOwner,
371
+ runFiles,
372
+ async addLogin(scope) {
373
+ const login = maintenanceLogin(options.space, scope);
374
+ // Every reload retires the preceding phase. The listener accepts one maintenance principal,
375
+ // not the union of every authority used earlier in the attempt.
376
+ logins.splice(0, logins.length, login);
377
+ writeFileSync(configPath, authenticatedConfig(account, port, options.storeDir, logins), { mode: 0o600 });
378
+ readLogTail();
379
+ try {
380
+ process.kill(brokerOwner.pid, "SIGHUP");
381
+ }
382
+ catch {
383
+ throw new Error(`${options.label} broker is not running for its maintenance-login reload`);
384
+ }
385
+ await delay(100);
386
+ const reloadDiagnostics = readLogTail();
387
+ if (/Failed to reload server configuration/.test(reloadDiagnostics))
388
+ throw new Error(`${options.label} broker rejected its maintenance-login reload: ${reloadDiagnostics.trim()}`);
389
+ if (!/Reloaded server configuration/.test(reloadDiagnostics))
390
+ throw new Error(`${options.label} broker did not confirm its maintenance-login reload`);
391
+ return login;
392
+ },
393
+ async stop() {
394
+ await stopByPid(brokerOwner.pid, 8_000);
395
+ await stopByPid(watchdogOwner.pid, 3_000);
396
+ assertDirectoryIdentity(attempts.path, attempts.identity);
397
+ // Strict: a failed removal surfaces so the caller keeps its claim instead of orphaning.
398
+ for (const file of runFiles)
399
+ removeOwnedFileStrict(file);
400
+ },
401
+ };
402
+ await delay(100);
403
+ }
404
+ throw new Error(`${options.label} bootstrap broker did not become reachable: ${readLogTail().trim()}`);
405
+ }
406
+ catch (error) {
407
+ const shutdownFailures = [];
408
+ if (brokerOwner)
409
+ try {
410
+ await stopByPid(brokerOwner.pid, 3_000);
411
+ }
412
+ catch (cause) {
413
+ shutdownFailures.push(cause instanceof Error ? cause : new Error(String(cause)));
414
+ }
415
+ try {
416
+ await stopByPid(watchdogOwner.pid, 3_000);
417
+ }
418
+ catch (cause) {
419
+ shutdownFailures.push(cause instanceof Error ? cause : new Error(String(cause)));
420
+ }
421
+ if (!shutdownFailures.length) {
422
+ assertDirectoryIdentity(attempts.path, attempts.identity);
423
+ try {
424
+ for (const file of runFiles)
425
+ removeOwnedFileStrict(file);
426
+ }
427
+ catch (cause) {
428
+ shutdownFailures.push(cause instanceof Error ? cause : new Error(String(cause)));
429
+ }
430
+ }
431
+ if (shutdownFailures.length)
432
+ throw new Error(`${error instanceof Error ? error.message : String(error)}; bootstrap process exit could not be proven: ${shutdownFailures.map((failure) => failure.message).join("; ")}`);
433
+ throw error;
434
+ }
435
+ }
436
+ //# sourceMappingURL=isolated-broker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolated-broker.js","sourceRoot":"","sources":["../../src/lib/isolated-broker.ts"],"names":[],"mappings":"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"}
@@ -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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"}
@@ -74,8 +74,10 @@ export declare function findLedgerByRun(root: string, runId: string): {
74
74
  ledger: MeshLedger;
75
75
  };
76
76
  /** Derive an owned agent's cred path under the known auth root — `<root>/.cotal/auth/creds/<name>.creds`
77
- * — from the SPAWNED name, rejecting any name that escapes the creds dir. The ledger never stores a
78
- * cred path; teardown derives it here and the caller deletes it no-follow ({@link unlinkFileNoFollow}). */
77
+ * — from the SPAWNED name. The ledger never stores a cred path; teardown derives it here through
78
+ * the workspace's single filename source for the kind (`agentSecretFilePaths`, whose guarded
79
+ * segment refuses any name that could escape the creds dir), so teardown can never derive a
80
+ * DIFFERENT path than provisioning wrote. */
79
81
  export declare function ownedCredPath(root: string, spawnedName: string): string;
80
82
  export {};
81
83
  //# sourceMappingURL=ledger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../../src/lib/manifest/ledger.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAOhD,QAAA,MAAM,iBAAiB;;;;;kBAWrB,CAAC;AAEH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;kBAgBhB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;sCAEsC;AACtC,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,GAAG,UAAU,CAYb;AAED;;6FAE6F;AAC7F,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;0EAE0E;AAC1E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAcrG;AAED;;;8CAG8C;AAC9C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAmCnD;AAED;;6BAE6B;AAC7B,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC,CAwBrF;AAED;sGACsG;AACtG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAOzG;AAED;gCACgC;AAChC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAUjG;AAED;;4GAE4G;AAC5G,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAMvE"}
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../../src/lib/manifest/ledger.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAOhD,QAAA,MAAM,iBAAiB;;;;;kBAWrB,CAAC;AAEH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;kBAgBhB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;sCAEsC;AACtC,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,GAAG,UAAU,CAYb;AAED;;6FAE6F;AAC7F,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;0EAE0E;AAC1E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAcrG;AAED;;;8CAG8C;AAC9C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAmCnD;AAED;;6BAE6B;AAC7B,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC,CAwBrF;AAED;sGACsG;AACtG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAOzG;AAED;gCACgC;AAChC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAUjG;AAED;;;;8CAI8C;AAC9C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAGvE"}