@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
@@ -1,12 +1,18 @@
1
1
  import { closeSync, existsSync, openSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import {} from "@cotal-ai/core";
4
- import { localProcessPath, removeMeshesByRoot, } from "@cotal-ai/workspace";
4
+ import { abortMaintenanceCut, acquireMaintenanceLock, beginMaintenanceCut, clearPreservationCommitIntent, clearPreservationPrepareIntent, completeMaintenanceCut, loadMeshes, localProcessPath, readMaintenanceJournal, readMaintenanceResumeDocument, readPreservationCommitIntent, readPreservationPrepareIntent, readStoreIdentity, recordPreservationManagerCommit, releaseMaintenanceLock, removeMeshesByRoot, sameStoreIdentity, writePreservationCommitIntent, writePreservationPrepareIntent, MAINTENANCE_RESUME_DOCUMENT_VERSION, writeMaintenanceResumeDocument, } from "@cotal-ai/workspace";
5
+ import { jetstreamManager } from "@nats-io/jetstream";
6
+ import { connect } from "@nats-io/transport-node";
7
+ import { CONTROL_ADMIN, DEV_OWNER, isReachable, LEASE_TTL_MS, MANAGER_LEASE_KEY, MANAGER_LEASE_TTL_MS, deliveryBucket, managerBucket, presenceBucket, parsePrincipalKey, principalKey, standaloneConnectOpts, } from "@cotal-ai/core";
5
8
  import { extensionNames, localProcessSurface } from "../ext-loader.js";
6
9
  import { c } from "../ui.js";
7
10
  import { cotalRoot } from "../lib/paths.js";
8
11
  import { resolveSpace } from "../lib/status.js";
9
12
  import { downManifest } from "./down-manifest.js";
13
+ import { askManager, resolveControlTarget } from "../lib/control.js";
14
+ import { connectOrExit, userViewAuthOrExit } from "../lib/connect.js";
15
+ import { waitForEndpointUnreachable } from "../lib/endpoint-cut.js";
10
16
  /** Complete selective component names without importing installed packages. */
11
17
  export function downComplete(argv) {
12
18
  if (argv.some((word) => word === "-f" || word === "--file" || word === "--run"))
@@ -24,6 +30,14 @@ export function downComplete(argv) {
24
30
  export async function down(args) {
25
31
  const values = args.values;
26
32
  const requested = [...new Set(args.positionals)];
33
+ if (values["preserve-state"]) {
34
+ if (requested.length || values.file || values.run || values["dry-run"])
35
+ throw new Error("--preserve-state is bare-whole-stack only and cannot be combined with components, --file, --run, or --dry-run");
36
+ await preserveStateDown(values["store-dir"]);
37
+ return;
38
+ }
39
+ if (values["store-dir"])
40
+ throw new Error("--store-dir is only valid with down --preserve-state");
27
41
  if ((values.file || values.run) && requested.length) {
28
42
  throw new Error("component names cannot be combined with --file or --run");
29
43
  }
@@ -67,7 +81,7 @@ export async function down(args) {
67
81
  continue;
68
82
  }
69
83
  try {
70
- await stop(component, context);
84
+ await stopLocalProcess(component, context);
71
85
  }
72
86
  catch (e) {
73
87
  allStopped = false;
@@ -109,10 +123,10 @@ export const isAlive = (pid) => {
109
123
  return e.code === "EPERM";
110
124
  }
111
125
  };
112
- function processRecorded(component, context) {
126
+ export function processRecorded(component, context) {
113
127
  return existsSync(localProcessPath(component.pidFile, context)) || (component.artifacts ?? []).map((artifact) => localProcessPath(artifact, context)).some(existsSync);
114
128
  }
115
- function processAlive(component, context) {
129
+ export function processAlive(component, context) {
116
130
  const pidPath = localProcessPath(component.pidFile, context);
117
131
  if (!existsSync(pidPath))
118
132
  return false;
@@ -120,7 +134,7 @@ function processAlive(component, context) {
120
134
  return pid !== undefined && isAlive(pid);
121
135
  }
122
136
  /** Stop one recorded process and await its actual exit before the next dependency is stopped. */
123
- async function stop(component, context) {
137
+ export async function stopLocalProcess(component, context) {
124
138
  const pidPath = localProcessPath(component.pidFile, context);
125
139
  const found = processRecorded(component, context);
126
140
  if (!existsSync(pidPath))
@@ -207,6 +221,354 @@ async function stop(component, context) {
207
221
  rmSync(marker, { force: true });
208
222
  }
209
223
  }
224
+ /** The principal keys of every retained agent in a preservation inventory — the dot-form ids that
225
+ * appear in the presence roster, so a caller can tell which retained agents are still live. */
226
+ function retainedPrincipalKeys(inventory) {
227
+ const agents = (inventory.agents ?? []);
228
+ return new Set(agents.map((agent) => {
229
+ if (agent.identity?.mode === "user" && agent.identity.owner && agent.identity.actor)
230
+ return principalKey(agent.identity.owner, agent.identity.actor).key;
231
+ if (agent.identity?.id)
232
+ return principalKey(DEV_OWNER, agent.identity.id).key;
233
+ return undefined;
234
+ }).filter((id) => Boolean(id)));
235
+ }
236
+ async function preserveStateDown(storeOverride) {
237
+ const root = cotalRoot();
238
+ const matching = loadMeshes().filter((mesh) => mesh.root === root);
239
+ if (matching.length !== 1)
240
+ throw new Error(`down --preserve-state requires exactly one recorded mesh for this root; found ${matching.length}`);
241
+ const mesh = matching[0];
242
+ const storeDir = storeOverride ? resolveStore(storeOverride) : join(root, ".cotal", "nats");
243
+ const lock = acquireMaintenanceLock(root);
244
+ try {
245
+ const all = localProcessSurface();
246
+ const context = { root, space: mesh.space };
247
+ const existing = readMaintenanceJournal(root);
248
+ if (existing && existing.state !== "cut-intent" && existing.state !== "cut-committed" && existing.state !== "ready")
249
+ throw new Error(`cannot preserve while maintenance state is ${existing.state}`);
250
+ if (existing && (existing.space !== mesh.space || existing.mode !== mesh.mode ||
251
+ !sameStoreIdentity(existing.source, readStoreIdentity(storeDir)) || existing.cut.launch.server !== mesh.server))
252
+ throw new Error(`preservation retry ${existing.cut.attemptId} does not match the current mesh launch`);
253
+ if (existing?.state === "ready") {
254
+ await waitForEndpointUnreachable(mesh.server);
255
+ console.log(c.dim(`state for "${mesh.space}" is already preserved and offline`));
256
+ return;
257
+ }
258
+ let attemptId;
259
+ let resume;
260
+ // Set when recovery force-commits a cut whose manager died AFTER stopping children (commit-intent
261
+ // present): the shared commit block below is then skipped — the cut is already committed.
262
+ let managerCommitJournaled = false;
263
+ if (existing?.state === "cut-intent" || existing?.state === "cut-committed") {
264
+ attemptId = existing.cut.attemptId;
265
+ resume = existing.resume;
266
+ if (existing.state === "cut-intent") {
267
+ // A cut-intent retry must not depend on volatile manager memory: re-prepare the SAME
268
+ // attempt (idempotent on the fenced manager, a fresh fence on a restarted one) and prove
269
+ // the re-prepared inventory is byte-identical to the journaled resume document.
270
+ const manager = all.find((component) => component.name === "manager");
271
+ if (!manager)
272
+ throw new Error("local process registry has no manager descriptor");
273
+ if (!processAlive(manager, context)) {
274
+ const committing = readPreservationCommitIntent(root);
275
+ if (!committing || committing.attemptId !== attemptId) {
276
+ // No commit intent recorded: the child-stopping RPC was never invoked, so nothing was
277
+ // stopped with suppression. Safe to abandon instead of wedging.
278
+ abortMaintenanceCut(lock);
279
+ clearPreservationPrepareIntent(lock);
280
+ throw new Error(`preservation attempt ${attemptId} lost its manager before commit; the cut intent was aborted - heal the stack with \`cotal up\` if needed, then rerun \`cotal down --preserve-state\``);
281
+ }
282
+ // Commit intent is durable: the manager was asked to stop its children and may already have
283
+ // done so. Deleting the cut here would lose the retained inventory (this was the bug). While
284
+ // the broker outlives the manager in this window, confirm no retained principal is still live
285
+ // before finishing forward; if the broker is already gone we cannot check, but preserving the
286
+ // cut still beats deleting it. Then journal cut-committed and finish WITHOUT the dead manager.
287
+ if (await isReachable(mesh.server)) {
288
+ const retained = retainedPrincipalKeys(readMaintenanceResumeDocument(root, existing.resume).inventory);
289
+ if (retained.size) {
290
+ const stillLive = (await readPresenceWithoutConsumer(mesh.space, mesh.server))
291
+ .roster.filter((presence) => retained.has(presence.card.id)).map((presence) => presence.card.id);
292
+ if (stillLive.length)
293
+ throw new Error(`preservation attempt ${attemptId} lost its manager mid-commit and ${stillLive.length} retained principal(s) are still live (${stillLive.join(", ")}); the cut intent is PRESERVED for inspection - stop them, then rerun \`cotal down --preserve-state\``);
294
+ }
295
+ }
296
+ recordPreservationManagerCommit(lock, { operation: "commitPreservation", attemptId, state: "preserved" });
297
+ clearPreservationCommitIntent(lock);
298
+ clearPreservationPrepareIntent(lock);
299
+ managerCommitJournaled = true;
300
+ }
301
+ if (!managerCommitJournaled) {
302
+ const retryTarget = await resolveControlTarget({ space: mesh.space, server: mesh.server }, "control-caller-admin");
303
+ // Plane-3 fence precedes the re-prepared inventory, exactly as on the fresh path.
304
+ const retryDelivery = all.find((component) => component.name === "delivery");
305
+ if (retryDelivery && processAlive(retryDelivery, context))
306
+ await stopLocalProcess(retryDelivery, context);
307
+ const reprepared = await askManager(retryTarget.space, retryTarget.server, "preparePreservation", { attemptId }, retryTarget.auth, CONTROL_ADMIN, 60_000);
308
+ const replan = reprepared.ok ? reprepared.data : undefined;
309
+ if (!replan?.inventory || (replan.failures?.length ?? 0) !== 0 || (replan.state !== "prepared" && replan.state !== "preserved"))
310
+ throw new Error(reprepared.error ?? "manager could not re-prepare the recorded preservation attempt");
311
+ try {
312
+ writeMaintenanceResumeDocument(lock, {
313
+ version: MAINTENANCE_RESUME_DOCUMENT_VERSION,
314
+ inventory: replan.inventory,
315
+ launch: { attemptId, space: mesh.space, server: mesh.server, storeDir, mode: mesh.mode },
316
+ });
317
+ }
318
+ catch (cause) {
319
+ // A restarted manager prepared a DIFFERENT inventory: the journaled cut no longer
320
+ // matches reality. Release its fence and abandon the stale intent; a rerun cuts fresh.
321
+ try {
322
+ await askManager(retryTarget.space, retryTarget.server, "abortPreservation", { attemptId }, retryTarget.auth, CONTROL_ADMIN, 30_000);
323
+ }
324
+ catch { /* best effort - the fence dies with the manager */ }
325
+ abortMaintenanceCut(lock);
326
+ clearPreservationPrepareIntent(lock);
327
+ throw new Error(`preservation attempt ${attemptId} no longer matches its manager's inventory (${cause.message}); the stale cut intent was aborted - rerun \`cotal down --preserve-state\``);
328
+ }
329
+ }
330
+ }
331
+ }
332
+ else {
333
+ // The attempt binding is durable BEFORE the manager is fenced: a crash between manager
334
+ // preparation and the cut-intent journal retries with the exact attempt the manager holds.
335
+ const intent = readPreservationPrepareIntent(root);
336
+ if (intent) {
337
+ if (intent.space !== mesh.space || intent.mode !== mesh.mode || intent.server !== mesh.server || intent.storeDir !== storeDir)
338
+ throw new Error(`preservation prepare intent ${intent.attemptId} does not match the current mesh launch; inspect .cotal/maintenance before retrying`);
339
+ attemptId = intent.attemptId;
340
+ }
341
+ else {
342
+ attemptId = `preserve-${Date.now()}-${process.pid}`;
343
+ writePreservationPrepareIntent(lock, {
344
+ attemptId, space: mesh.space, mode: mesh.mode, server: mesh.server, storeDir,
345
+ });
346
+ }
347
+ const target = await resolveControlTarget({ space: mesh.space, server: mesh.server }, "control-caller-admin");
348
+ // Fence Plane 3 BEFORE any inventory work: with the delivery daemon stopped, no durable
349
+ // join/leave can mutate MEMBERS at or after the moment the inventory is taken.
350
+ const delivery = all.find((component) => component.name === "delivery");
351
+ if (delivery && processAlive(delivery, context))
352
+ await stopLocalProcess(delivery, context);
353
+ const prepared = await askManager(target.space, target.server, "preparePreservation", { attemptId }, target.auth, CONTROL_ADMIN, 60_000);
354
+ if (!prepared.ok)
355
+ throw new Error(prepared.error ?? "manager preservation prepare failed");
356
+ const plan = prepared.data;
357
+ if (!plan?.inventory || (plan.failures?.length ?? 0) !== 0 || (plan.state !== "prepared" && plan.state !== "preserved"))
358
+ throw new Error("manager returned an invalid or incomplete preservation plan");
359
+ const retainedPrincipals = retainedPrincipalKeys(plan.inventory);
360
+ let observed = await readPresenceWithoutConsumer(mesh.space, mesh.server);
361
+ retainedPrincipals.add(observed.managerId);
362
+ let unmanaged = observed.roster.filter((presence) => !retainedPrincipals.has(presence.card.id));
363
+ if (unmanaged.length) {
364
+ await sleep(11_000); // Let stopped predecessor presence and manager leases expire before refusing.
365
+ observed = await readPresenceWithoutConsumer(mesh.space, mesh.server);
366
+ retainedPrincipals.add(observed.managerId);
367
+ unmanaged = observed.roster.filter((presence) => !retainedPrincipals.has(presence.card.id));
368
+ }
369
+ if (unmanaged.length)
370
+ throw new Error(`cannot preserve while unmanaged endpoints are live: ${unmanaged.map((presence) => `${presence.card.name} (${presence.card.id})`).join(", ")} (manager lease holder: ${observed.managerId})`);
371
+ resume = writeMaintenanceResumeDocument(lock, {
372
+ version: MAINTENANCE_RESUME_DOCUMENT_VERSION,
373
+ inventory: plan.inventory,
374
+ launch: {
375
+ attemptId,
376
+ space: mesh.space,
377
+ server: mesh.server,
378
+ storeDir,
379
+ mode: mesh.mode,
380
+ },
381
+ });
382
+ beginMaintenanceCut(lock, {
383
+ attemptId,
384
+ space: mesh.space,
385
+ mode: mesh.mode,
386
+ sourcePath: storeDir,
387
+ resume,
388
+ launch: { server: mesh.server, storeDir },
389
+ });
390
+ clearPreservationPrepareIntent(lock);
391
+ }
392
+ // Stop the children through the manager, then journal cut-committed. A commit-intent marker is
393
+ // written FIRST (the stop RPC is about to execute) and cleared once cut-committed is durable, so a
394
+ // crash in the gap leaves proof the stop may already have run — recovery finishes forward instead
395
+ // of deleting the cut. `managerCommitJournaled` means a dead-manager recovery already committed above.
396
+ if (existing?.state !== "cut-committed" && !managerCommitJournaled) {
397
+ const manager = all.find((component) => component.name === "manager");
398
+ if (!manager)
399
+ throw new Error("local process registry has no manager descriptor");
400
+ if (!processAlive(manager, context))
401
+ throw new Error("cannot complete preservation because the attempt-bound manager is not alive to prove every retained child stopped; recovery must preserve the cut-intent journal for inspection");
402
+ // Fault window: cut-intent journaled but the child-stopping RPC not yet invoked (no commit
403
+ // intent). A crash here is genuinely pre-commit — recovery MUST still abort, not finish forward.
404
+ if (process.env.COTAL_SMOKE_EXIT_AFTER_CUT_INTENT_BEFORE_COMMIT === "1")
405
+ process.exit(93);
406
+ writePreservationCommitIntent(lock, { attemptId });
407
+ const target = await resolveControlTarget({ space: mesh.space, server: mesh.server }, "control-caller-admin");
408
+ const commit = await askManager(target.space, target.server, "commitPreservation", { attemptId }, target.auth, CONTROL_ADMIN, 120_000);
409
+ if (!commit.ok)
410
+ throw new Error(commit.error ?? "manager preservation commit was incomplete");
411
+ const result = commit.data;
412
+ if (result?.state !== "preserved" || (result.failures?.length ?? 0) !== 0)
413
+ throw new Error("manager could not prove every retained child stopped");
414
+ // Fault window: the manager has COMMITTED (children stopped, preservation irreversible) but the
415
+ // coordinator has not yet journaled cut-committed. A crash here leaves the journal at cut-intent
416
+ // WITH the commit-intent marker set — the exact window recovery must not treat as pre-commit.
417
+ if (process.env.COTAL_SMOKE_EXIT_AFTER_MANAGER_STOP_BEFORE_JOURNAL === "1")
418
+ process.exit(92);
419
+ recordPreservationManagerCommit(lock, { operation: "commitPreservation", attemptId, state: "preserved" });
420
+ clearPreservationCommitIntent(lock);
421
+ if (process.env.COTAL_SMOKE_EXIT_AFTER_PRESERVATION_MANAGER_COMMIT === "1")
422
+ process.exit(90);
423
+ }
424
+ const rank = (component) => {
425
+ if (component.name === "delivery")
426
+ return 20;
427
+ if (component.name === "manager")
428
+ return 30;
429
+ if (component.name === "auth")
430
+ return 40;
431
+ if (component.stopLast)
432
+ return 100;
433
+ return 10;
434
+ };
435
+ const ranked = [...all].sort((a, b) => rank(a) - rank(b) || (a.order ?? 50) - (b.order ?? 50));
436
+ // The quiescence proof runs BETWEEN two stop phases. Everything it proves dead — the
437
+ // lease-holding daemons, delivery and manager — stops before it. The user-auth service holds no
438
+ // lease, so the proof does not cover it, and on a USER mesh the proof's own broker connect
439
+ // exchanges through that service: stop it first and the cut can no longer prove itself, ending
440
+ // at cut-committed with the broker still up. It stops after the proof, still before the broker.
441
+ const afterQuiescence = (component) => component.stopLast || component.name === "auth";
442
+ for (const component of ranked.filter((component) => !afterQuiescence(component)))
443
+ await stopLocalProcess(component, context);
444
+ // Wire-truth quiescence while the broker still answers: every control-plane daemon must be
445
+ // provably lease-dead, not merely pidfile-absent, before the broker stops and ready publishes.
446
+ // An already-unreachable broker is itself the proof - nothing can mutate broker-resident state
447
+ // through a dead endpoint, and the final unreachable check below re-verifies it.
448
+ if (await isReachable(mesh.server))
449
+ await assertControlPlaneQuiesced(mesh.space, mesh.server);
450
+ // rank() keeps auth (40) ahead of the broker (stopLast, 100) within this phase.
451
+ for (const component of ranked.filter(afterQuiescence))
452
+ await stopLocalProcess(component, context);
453
+ const stillRunning = all.filter((component) => processAlive(component, context));
454
+ if (stillRunning.length)
455
+ throw new Error(`preservation cut is partial; still running: ${stillRunning.map((component) => component.name).join(", ")}`);
456
+ await waitForEndpointUnreachable(mesh.server);
457
+ completeMaintenanceCut(lock, {
458
+ attemptId,
459
+ observedAt: new Date().toISOString(),
460
+ managerCommit: { operation: "commitPreservation", attemptId, state: "preserved" },
461
+ stopped: { manager: true, broker: true, localProcesses: true },
462
+ listener: { endpoint: mesh.server, unreachable: true },
463
+ });
464
+ console.log(c.green(`✓ preserved state for "${mesh.space}"`));
465
+ console.log(c.dim(` source: ${storeDir}`));
466
+ console.log(c.dim(` resume inventory: ${join(root, ".cotal", "maintenance", "v1", resume.file)}`));
467
+ console.log(c.dim(" stack remains stopped; create a backup or deliberately resume with `cotal up`"));
468
+ }
469
+ finally {
470
+ releaseMaintenanceLock(lock);
471
+ }
472
+ }
473
+ function resolveStore(path) {
474
+ const resolved = path.startsWith("/") ? path : join(process.cwd(), path);
475
+ return resolved;
476
+ }
477
+ /** Direct Get one KV subject's last value without creating any consumer. `allowEmpty` treats a
478
+ * DEL/PURGE tombstone as absence instead of an error. */
479
+ async function directKvValue(nc, stream, subject, allowEmpty = false) {
480
+ const response = await nc.request(`$JS.API.STREAM.MSG.GET.${stream}`, JSON.stringify({ last_by_subj: subject }), { timeout: 5_000 });
481
+ const body = JSON.parse(new TextDecoder().decode(response.data));
482
+ if (body.error)
483
+ throw new Error(`maintenance inventory read failed: ${body.error.description ?? "JetStream error"}`);
484
+ if (!body.message?.data) {
485
+ const headers = body.message?.hdrs ? Buffer.from(body.message.hdrs, "base64").toString("utf8") : "";
486
+ if (allowEmpty && /^KV-Operation:\s*(?:DEL|PURGE)\s*$/im.test(headers))
487
+ return undefined;
488
+ throw new Error(`maintenance inventory is missing ${subject}`);
489
+ }
490
+ return JSON.parse(Buffer.from(body.message.data, "base64").toString("utf8"));
491
+ }
492
+ /** Wire-truth control-plane quiescence: a live manager/delivery daemon renews its lease
493
+ * continuously, so the cut publishes `ready` only once BOTH lease buckets hold no live value —
494
+ * a dead daemon's lease expires by TTL, a pidless live one keeps renewing and is refused here.
495
+ * Pidfiles are hints; leases are proof. */
496
+ async function assertControlPlaneQuiesced(space, server) {
497
+ const resolved = await connectOrExit({ space, server }, "deployer");
498
+ const user = resolved.bearer ? await userViewAuthOrExit(resolved, "deployer") : undefined;
499
+ const nc = await connect({
500
+ servers: server,
501
+ ...standaloneConnectOpts(user ?? { creds: resolved.creds }),
502
+ maxReconnectAttempts: 0,
503
+ });
504
+ try {
505
+ const jsm = await jetstreamManager(nc);
506
+ const liveKeys = async (bucket) => {
507
+ let subjects;
508
+ try {
509
+ const info = await jsm.streams.info(`KV_${bucket}`, { subjects_filter: `$KV.${bucket}.>` });
510
+ subjects = Object.keys(info.state.subjects ?? {});
511
+ }
512
+ catch (error) {
513
+ if (/stream not found/i.test(error.message))
514
+ return [];
515
+ throw error;
516
+ }
517
+ const live = [];
518
+ for (const subject of subjects) {
519
+ if (await directKvValue(nc, `KV_${bucket}`, subject, true) !== undefined)
520
+ live.push(subject);
521
+ }
522
+ return live;
523
+ };
524
+ const deadline = Date.now() + Math.max(LEASE_TTL_MS, MANAGER_LEASE_TTL_MS) + 5_000;
525
+ for (;;) {
526
+ const deliveryLive = await liveKeys(deliveryBucket(space));
527
+ const managerLive = await liveKeys(managerBucket(space));
528
+ if (deliveryLive.length === 0 && managerLive.length === 0)
529
+ return;
530
+ if (Date.now() >= deadline)
531
+ throw new Error(`control-plane leases are still live past their TTL (delivery: ${deliveryLive.length}, manager: ${managerLive.length}); a pidless daemon may still be running - the cut refuses to publish ready`);
532
+ await sleep(500);
533
+ }
534
+ }
535
+ finally {
536
+ await nc.drain().catch(() => { });
537
+ }
538
+ }
539
+ /** Read current KV subjects by Direct Get so the cut check leaves no ephemeral/native consumer. */
540
+ async function readPresenceWithoutConsumer(space, server) {
541
+ const resolved = await connectOrExit({ space, server }, "deployer");
542
+ const user = resolved.bearer ? await userViewAuthOrExit(resolved, "deployer") : undefined;
543
+ const nc = await connect({
544
+ servers: server,
545
+ ...standaloneConnectOpts(user ?? { creds: resolved.creds }),
546
+ maxReconnectAttempts: 0,
547
+ });
548
+ try {
549
+ const directValue = async (stream, subject, allowEmpty = false) => directKvValue(nc, stream, subject, allowEmpty);
550
+ const bucket = presenceBucket(space);
551
+ const stream = `KV_${bucket}`;
552
+ const info = await (await jetstreamManager(nc)).streams.info(stream, { subjects_filter: `$KV.${bucket}.>` });
553
+ const roster = [];
554
+ for (const subject of Object.keys(info.state.subjects ?? {})) {
555
+ const presence = await directValue(stream, subject, true);
556
+ if (!presence)
557
+ continue; // A positively identified KV tombstone has no value bytes.
558
+ if (!presence.card?.id)
559
+ throw new Error(`presence record ${subject} is malformed`);
560
+ roster.push(presence);
561
+ }
562
+ const leaseBucket = managerBucket(space);
563
+ const lease = await directValue(`KV_${leaseBucket}`, `$KV.${leaseBucket}.${MANAGER_LEASE_KEY}`);
564
+ if (!lease?.holder)
565
+ throw new Error("manager lease has no authoritative holder principal");
566
+ return { roster, managerId: parsePrincipalKey(lease.holder) ? lease.holder : principalKey(DEV_OWNER, lease.holder).key };
567
+ }
568
+ finally {
569
+ await nc.drain().catch(() => { });
570
+ }
571
+ }
210
572
  /** Compatibility inventory for `clean`; lifecycle commands use the registered descriptors above. */
211
573
  export function pidfileTargets(space) {
212
574
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"down.js","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"down.js","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"AAGA,OAAO,EAaL,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AA4BxB,wBAAsB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA+Q1D"}
1
+ {"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"AAGA,OAAO,EAeL,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AA4BxB,wBAAsB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA+T1D"}
@@ -1,7 +1,7 @@
1
1
  import { userInfo } from "node:os";
2
2
  import { readFileSync } from "node:fs";
3
3
  import * as readline from "node:readline";
4
- import { CotalEndpoint, parseJoinLink, resolvePeer, AmbiguousPeerError, DEFAULT_SERVER, mintCreds, newIdentity, provisionAgent, } from "@cotal-ai/core";
4
+ import { CotalEndpoint, parseJoinLink, resolvePeer, AmbiguousPeerError, DEFAULT_SERVER, mintCreds, mintLifecycleUid, assertLifecycleToken, newIdentity, provisionAgent, } from "@cotal-ai/core";
5
5
  import { resolveSpace } from "../lib/status.js";
6
6
  import { reachableOrExit, refuseStaticCredsForKnownUserAuthOrExit, resolveTargetOrExit, preflightOrExit } from "../lib/connect.js";
7
7
  import { c, statusBadge } from "../ui.js";
@@ -36,6 +36,42 @@ export async function join(args) {
36
36
  creds: values.creds ? readFileSync(values.creds, "utf8") : undefined,
37
37
  tls: values.tls ?? link?.tls ?? false,
38
38
  };
39
+ // The join session's lifecycle UID (SPEC 13.1). The pairing input (--lifecycle-uid /
40
+ // COTAL_LIFECYCLE_UID) is scoped STRICTLY to an explicit --creds join: that credential's durable
41
+ // grants name exact lifecycle-keyed resources, so the uid minted alongside it is the only one the
42
+ // broker will bind, and it is REQUIRED (never invented). Every OTHER path leaves it undefined so
43
+ // the endpoint self-mints a fresh per-session identity at construction: an open/token/link/bare
44
+ // join must NOT inherit an ambient shell's COTAL_LIFECYCLE_UID (that would reuse another
45
+ // incarnation's uid). Auth-mode self-provision (below) mints its own.
46
+ const flagUid = values["lifecycle-uid"];
47
+ const envUid = process.env.COTAL_LIFECYCLE_UID?.trim() || undefined;
48
+ // An EXPLICIT --lifecycle-uid without --creds is a misuse (refuse loudly). An AMBIENT
49
+ // COTAL_LIFECYCLE_UID without --creds is just a shell leaking a spawned agent's env - silently
50
+ // IGNORE it (an open/token/link/bare join never inherits another incarnation's uid; it
51
+ // self-mints). Only WITH --creds is either read, as the launcher's pairing.
52
+ if (flagUid !== undefined && !values.creds) {
53
+ console.error(c.red(`✗ --lifecycle-uid applies only to an explicit `) +
54
+ c.bold("--creds") +
55
+ c.red(` join - an open/token/link/bare join self-mints a fresh per-session lifecycle. Drop the flag, or pass --creds.`));
56
+ process.exit(1);
57
+ }
58
+ let lifecycleUid = values.creds ? (flagUid ?? envUid) : undefined;
59
+ if (lifecycleUid !== undefined) {
60
+ try {
61
+ assertLifecycleToken(lifecycleUid);
62
+ }
63
+ catch (e) {
64
+ console.error(c.red(`✗ ${e.message}`));
65
+ process.exit(1);
66
+ }
67
+ }
68
+ if (values.creds && lifecycleUid === undefined) {
69
+ console.error(c.red(`✗ --creds is lifecycle-paired (SPEC 13.1): pass `) +
70
+ c.bold("--lifecycle-uid <uid>") +
71
+ c.red(` (or set COTAL_LIFECYCLE_UID) with the uid minted alongside this credential at provision time. `) +
72
+ c.red(`The credential's durable grants name exact lifecycle-keyed resources; a made-up uid would name durables it cannot bind.`));
73
+ process.exit(1);
74
+ }
39
75
  let space;
40
76
  let server;
41
77
  // An explicit connection (a join link, --token, or --creds) is taken at face value — that's the
@@ -71,6 +107,11 @@ export async function join(args) {
71
107
  await preflightOrExit(target); // one sentence if the mesh is down / won't auth, + stale-prune
72
108
  if (target.auth) {
73
109
  const identity = newIdentity();
110
+ // One lifecycle per join session (SPEC 13.1): the provisioned dm/dlv footprint, the minted
111
+ // grants, and the endpoint's binds all carry this uid; the session's exit orphans only its own
112
+ // lifecycle-keyed names (self-retired by the open-mode inactive threshold on the broker side).
113
+ // A launcher-supplied uid (flag/env, resolved above) wins; the session mints only when bare.
114
+ lifecycleUid ??= mintLifecycleUid();
74
115
  const prov = new CotalEndpoint({
75
116
  space,
76
117
  servers: server,
@@ -95,6 +136,7 @@ export async function join(args) {
95
136
  allowPublish: [channel],
96
137
  role: values.role,
97
138
  durableMembership: false,
139
+ lifecycleUid,
98
140
  });
99
141
  await prov.stop();
100
142
  }
@@ -111,6 +153,9 @@ export async function join(args) {
111
153
  space,
112
154
  servers: server,
113
155
  ...auth,
156
+ // Absent for a bare open/token join: the endpoint self-mints its per-session lifecycle at
157
+ // construction. Set for auth joins: self-provisioned above, or --creds-paired (never invented).
158
+ lifecycleUid,
114
159
  channels: [channel],
115
160
  card: {
116
161
  name,