@cotal-ai/cli 0.10.1 → 0.11.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 (133) hide show
  1. package/dist/command.d.ts.map +1 -1
  2. package/dist/command.js +11 -3
  3. package/dist/command.js.map +1 -1
  4. package/dist/commands/agents.d.ts.map +1 -1
  5. package/dist/commands/agents.js +30 -13
  6. package/dist/commands/agents.js.map +1 -1
  7. package/dist/commands/channels.d.ts.map +1 -1
  8. package/dist/commands/channels.js +16 -6
  9. package/dist/commands/channels.js.map +1 -1
  10. package/dist/commands/completion.js +5 -5
  11. package/dist/commands/console.d.ts +1 -1
  12. package/dist/commands/console.d.ts.map +1 -1
  13. package/dist/commands/console.js +17 -11
  14. package/dist/commands/console.js.map +1 -1
  15. package/dist/commands/doctor.d.ts +14 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +171 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/down-manifest.js +15 -15
  20. package/dist/commands/down.d.ts.map +1 -1
  21. package/dist/commands/down.js +4 -1
  22. package/dist/commands/down.js.map +1 -1
  23. package/dist/commands/ext.js +11 -11
  24. package/dist/commands/feedback.js +2 -2
  25. package/dist/commands/history.d.ts.map +1 -1
  26. package/dist/commands/history.js +7 -3
  27. package/dist/commands/history.js.map +1 -1
  28. package/dist/commands/join.d.ts.map +1 -1
  29. package/dist/commands/join.js +14 -7
  30. package/dist/commands/join.js.map +1 -1
  31. package/dist/commands/meshes.js +2 -2
  32. package/dist/commands/mint.d.ts.map +1 -1
  33. package/dist/commands/mint.js +16 -5
  34. package/dist/commands/mint.js.map +1 -1
  35. package/dist/commands/models.js +1 -1
  36. package/dist/commands/models.js.map +1 -1
  37. package/dist/commands/personas.js +4 -4
  38. package/dist/commands/send.js +1 -1
  39. package/dist/commands/setup.js +25 -25
  40. package/dist/commands/setup.js.map +1 -1
  41. package/dist/commands/spawn-manifest.d.ts.map +1 -1
  42. package/dist/commands/spawn-manifest.js +47 -25
  43. package/dist/commands/spawn-manifest.js.map +1 -1
  44. package/dist/commands/spawn.d.ts +6 -0
  45. package/dist/commands/spawn.d.ts.map +1 -1
  46. package/dist/commands/spawn.js +257 -46
  47. package/dist/commands/spawn.js.map +1 -1
  48. package/dist/commands/status.d.ts.map +1 -1
  49. package/dist/commands/status.js +71 -6
  50. package/dist/commands/status.js.map +1 -1
  51. package/dist/commands/topology.js +2 -2
  52. package/dist/commands/up.d.ts +5 -0
  53. package/dist/commands/up.d.ts.map +1 -1
  54. package/dist/commands/up.js +269 -48
  55. package/dist/commands/up.js.map +1 -1
  56. package/dist/commands/use.js +1 -1
  57. package/dist/console/commands.js +2 -2
  58. package/dist/console/mesh.js +1 -1
  59. package/dist/console/mesh.js.map +1 -1
  60. package/dist/console/root.d.ts +15 -3
  61. package/dist/console/root.d.ts.map +1 -1
  62. package/dist/console/root.js +12 -7
  63. package/dist/console/root.js.map +1 -1
  64. package/dist/console/ui/Confirm.js +1 -1
  65. package/dist/console/ui/Confirm.js.map +1 -1
  66. package/dist/console/ui/Feed.js +1 -1
  67. package/dist/console/ui/Feed.js.map +1 -1
  68. package/dist/console/ui/Help.js +2 -2
  69. package/dist/console/ui/Help.js.map +1 -1
  70. package/dist/console/ui/NeedsYou.js +1 -1
  71. package/dist/console/ui/NeedsYou.js.map +1 -1
  72. package/dist/console/ui/SpacePicker.js +1 -1
  73. package/dist/console/ui/SpacePicker.js.map +1 -1
  74. package/dist/console/ui/Tiles.js +1 -1
  75. package/dist/console/ui/topo/Map.js +1 -1
  76. package/dist/console/ui/topo/Map.js.map +1 -1
  77. package/dist/console/ui/topo/Matrix.js +2 -2
  78. package/dist/console/ui/topo/Matrix.js.map +1 -1
  79. package/dist/console/ui/topo/Sequence.js +1 -1
  80. package/dist/console/ui/topo/Sequence.js.map +1 -1
  81. package/dist/ext-loader.js +8 -8
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +29 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/lib/attach-client.js +1 -1
  86. package/dist/lib/auth-proc.d.ts +19 -0
  87. package/dist/lib/auth-proc.d.ts.map +1 -0
  88. package/dist/lib/auth-proc.js +81 -0
  89. package/dist/lib/auth-proc.js.map +1 -0
  90. package/dist/lib/connect.d.ts +1 -1
  91. package/dist/lib/connect.d.ts.map +1 -1
  92. package/dist/lib/connect.js +2 -2
  93. package/dist/lib/connect.js.map +1 -1
  94. package/dist/lib/control.d.ts +14 -6
  95. package/dist/lib/control.d.ts.map +1 -1
  96. package/dist/lib/control.js +23 -11
  97. package/dist/lib/control.js.map +1 -1
  98. package/dist/lib/delivery-proc.js +2 -2
  99. package/dist/lib/manifest/apply.d.ts +3 -2
  100. package/dist/lib/manifest/apply.d.ts.map +1 -1
  101. package/dist/lib/manifest/apply.js +7 -2
  102. package/dist/lib/manifest/apply.js.map +1 -1
  103. package/dist/lib/manifest/ledger.js +4 -4
  104. package/dist/lib/manifest/live.d.ts +23 -9
  105. package/dist/lib/manifest/live.d.ts.map +1 -1
  106. package/dist/lib/manifest/live.js +22 -12
  107. package/dist/lib/manifest/live.js.map +1 -1
  108. package/dist/lib/manifest/model.d.ts +4 -1
  109. package/dist/lib/manifest/model.d.ts.map +1 -1
  110. package/dist/lib/manifest/prepare.d.ts +2 -0
  111. package/dist/lib/manifest/prepare.d.ts.map +1 -1
  112. package/dist/lib/manifest/prepare.js +5 -2
  113. package/dist/lib/manifest/prepare.js.map +1 -1
  114. package/dist/lib/manifest/render.d.ts.map +1 -1
  115. package/dist/lib/manifest/render.js +14 -13
  116. package/dist/lib/manifest/render.js.map +1 -1
  117. package/dist/lib/manifest/resolve.js +19 -6
  118. package/dist/lib/manifest/resolve.js.map +1 -1
  119. package/dist/lib/manifest/schema.d.ts +4 -1
  120. package/dist/lib/manifest/schema.d.ts.map +1 -1
  121. package/dist/lib/manifest/schema.js +10 -2
  122. package/dist/lib/manifest/schema.js.map +1 -1
  123. package/dist/lib/setup-log.js +1 -1
  124. package/dist/lib/status.d.ts +1 -1
  125. package/dist/lib/status.js +1 -1
  126. package/dist/lib/transient.d.ts +8 -10
  127. package/dist/lib/transient.d.ts.map +1 -1
  128. package/dist/lib/transient.js +11 -11
  129. package/dist/lib/transient.js.map +1 -1
  130. package/dist/render.js +2 -2
  131. package/dist/ui.js +1 -1
  132. package/dist/ui.js.map +1 -1
  133. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAuD7F,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B;;;oCAGgC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;uFAEuF;AACvF,wBAAsB,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDxG"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAuD7F,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B;;;oCAGgC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;uFAEuF;AACvF,wBAAsB,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DxG"}
package/dist/command.js CHANGED
@@ -21,7 +21,7 @@ function help(commands) {
21
21
  };
22
22
  const ordered = [...groups.entries()].sort(([a], [b]) => rank(a) - rank(b));
23
23
  const pad = Math.max(...visible.map((c) => c.name.length));
24
- let out = `${c.bold("cotal")} lateral agent coordination over NATS\n`;
24
+ let out = `${c.bold("cotal")} - lateral agent coordination over NATS\n`;
25
25
  for (const [group, cmds] of ordered) {
26
26
  out += `\n${c.bold(group)}\n`;
27
27
  for (const cmd of cmds)
@@ -32,7 +32,7 @@ function help(commands) {
32
32
  /** Full help for one command, generated from its declared specs: summary, usage line, and a
33
33
  * flag table (short, long, metavar, description). */
34
34
  function commandHelp(cmd) {
35
- console.log(`${c.bold(`cotal ${cmd.name}`)} ${cmd.summary}`);
35
+ console.log(`${c.bold(`cotal ${cmd.name}`)} - ${cmd.summary}`);
36
36
  console.log(c.dim(`usage: ${commandUsage(cmd)}`));
37
37
  const flags = cmd.flags ?? [];
38
38
  if (!flags.length)
@@ -107,7 +107,15 @@ export async function runCli(registry, argv, opts = {}) {
107
107
  commandHelp(cmd);
108
108
  process.exit(1);
109
109
  }
110
- throw e;
110
+ // Every other command failure (a broker permission denial, a missing --creds file, a failed
111
+ // connect) is presented as ONE clean line, never a raw Node stack trace: the CLI's fail-loud
112
+ // contract is "denied, not absent", not a crash. The full stack stays available under
113
+ // COTAL_DEBUG for diagnosis.
114
+ const msg = e instanceof Error ? e.message : String(e);
115
+ console.error(c.red(`✗ ${msg}`));
116
+ if (process.env.COTAL_DEBUG && e instanceof Error && e.stack)
117
+ console.error(c.dim(e.stack));
118
+ process.exit(1);
111
119
  }
112
120
  }
113
121
  //# sourceMappingURL=command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,gBAAgB,EAAkC,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAiBvH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;EAAwG,CAAC;AAC/H,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;EAA0D,CAAC;AAC/E,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;EAA6G,CAAC;AAEtI,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAQrE;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAc1D;AAED,wBAAsB,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCxD;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAe5D"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,gBAAgB,EAAkC,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAiB3I,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;EAAwG,CAAC;AAC/H,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;EAA0D,CAAC;AAC/E,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;EAA6G,CAAC;AAEtI,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAQrE;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB1D;AAED,wBAAsB,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CxD;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB5D"}
@@ -1,4 +1,4 @@
1
- import { CONTROL_ADMIN } from "@cotal-ai/core";
1
+ import { CONTROL_ADMIN, CONTROL_PRIVILEGED } from "@cotal-ai/core";
2
2
  import { loadMeshes, targetFlags } from "@cotal-ai/workspace";
3
3
  import { c } from "../ui.js";
4
4
  import { askManager, failIfNotOk, resolveControlTarget } from "../lib/control.js";
@@ -32,19 +32,27 @@ export async function stop(args) {
32
32
  console.error(c.red("--name is required"));
33
33
  process.exit(1);
34
34
  }
35
- // Operator stop is a cross-agent (admin) op — the CLI operator isn't the agent's spawner, so the
36
- // privileged subject would reject it; the admin tier reaches any agent. The scoped
37
- // `control-caller-admin` cred holds ONLY `ctl.<admin>.<id>` (that IS the cross-agent authority —
38
- // the manager doesn't re-check the caller), so it reaches this op and nothing else.
35
+ // STATIC mesh: operator stop is a cross-agent op — the admin tier with the scoped
36
+ // `control-caller-admin` cred (holding ONLY the admin-subject publish; that cred IS the
37
+ // cross-agent authority, the manager honors any named target on it).
38
+ // USER mesh: ONE deterministic path — the op rides the operator's own bearer on the SPAWN
39
+ // (privileged) tier, and the MANAGER authorizes: agents under your own owner pass with scope
40
+ // "spawn" (owner-domain), another owner's agent needs "admin" on your ledger row. No
41
+ // client-side try-admin-then-privileged fallback; sending on ctl.admin would die at the
42
+ // broker for every spawn-scoped operator before the manager could decide anything.
39
43
  const t = await resolveControlTarget(v, "control-caller-admin");
40
- const reply = await askManager(t.space, t.server, "stop", { name: v.name }, t.creds, CONTROL_ADMIN);
44
+ const tier = t.auth.bearer ? CONTROL_PRIVILEGED : CONTROL_ADMIN;
45
+ const reply = await askManager(t.space, t.server, "stop", { name: v.name }, t.auth, tier);
41
46
  failIfNotOk(reply);
42
- console.log(c.dim(`✓ stopped ${v.name}`));
47
+ // User mesh: a stop IS a grant revoke (rows are runtime grants — a non-running agent holds no
48
+ // standing mint secret); a respawn re-grants automatically. Say so, so the operator's
49
+ // restart-vs-revoke model is visible at the command, not inferred from docs.
50
+ console.log(c.dim(`✓ stopped ${v.name}${t.auth.bearer ? " - its actor grant is revoked; a respawn re-grants automatically" : ""}`));
43
51
  }
44
52
  export async function ps(args) {
45
53
  const v = args.values;
46
54
  const t = await resolveControlTarget(v, "control-caller-privileged");
47
- const reply = await askManager(t.space, t.server, "ps", undefined, t.creds);
55
+ const reply = await askManager(t.space, t.server, "ps", undefined, t.auth);
48
56
  failIfNotOk(reply);
49
57
  const rows = reply.data ?? [];
50
58
  if (!rows.length) {
@@ -61,7 +69,14 @@ export async function ps(args) {
61
69
  : r.mesh === "waiting"
62
70
  ? c.yellow("waiting")
63
71
  : c.cyan(r.mesh);
64
- console.log(`${c.bold(r.name)}${r.role ? c.dim("/" + r.role) : ""} ${c.dim(r.agent + " · " + r.mode)} ${status}`);
72
+ // Confirmed failure is red; ambiguity/warning states (unknown/stale) are yellow the operator
73
+ // triages "definitely broken" before "might be".
74
+ const authColor = r.authHealth === "auth-renewal-failed" ? c.red : c.yellow;
75
+ console.log(`${c.bold(r.name)}${r.role ? c.dim("/" + r.role) : ""} ${c.dim(r.agent + " · " + r.mode)} ${status}${r.authHealth ? " " + authColor(r.authHealth) : ""}`);
76
+ // The detached agent's ONLY operator window into a failing bearer refresh: the provider
77
+ // command's operator-exact sentence, verbatim (it already names the repair).
78
+ if (r.authHealth && r.authReason)
79
+ console.log(authColor(` ${r.authReason}`));
65
80
  }
66
81
  }
67
82
  export async function attach(args) {
@@ -70,13 +85,15 @@ export async function attach(args) {
70
85
  console.error(c.red("--name is required"));
71
86
  process.exit(1);
72
87
  }
73
- // Operator attach is a cross-agent (admin) op same reasoning as stop (the operator isn't the
74
- // spawner; admin reaches any agent). Scoped `control-caller-admin`: ctl.<admin> only.
88
+ // Same tier routing as stop: static mesh admin tier on the scoped `control-caller-admin`
89
+ // cred; user mesh the operator's own bearer on the SPAWN tier, with the manager deciding
90
+ // (own owner-domain passes with "spawn", cross-owner needs ledger "admin").
75
91
  const t = await resolveControlTarget(v, "control-caller-admin");
76
- const reply = await askManager(t.space, t.server, "attach", { name: v.name }, t.creds, CONTROL_ADMIN);
92
+ const tier = t.auth.bearer ? CONTROL_PRIVILEGED : CONTROL_ADMIN;
93
+ const reply = await askManager(t.space, t.server, "attach", { name: v.name }, t.auth, tier);
77
94
  failIfNotOk(reply);
78
95
  const { ws } = reply.data;
79
- console.error(c.dim(`attached to ${v.name} ${detachKey().label} to detach`));
96
+ console.error(c.dim(`attached to ${v.name} - ${detachKey().label} to detach`));
80
97
  await attachClient(ws);
81
98
  console.error(c.dim(`\ndetached from ${v.name}`));
82
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/commands/channels.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAIxB;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD9D"}
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/commands/channels.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAIxB;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D9D"}
@@ -1,5 +1,5 @@
1
1
  import { seedChannelRegistry, readChannelRegistry, effectiveReplay, } from "@cotal-ai/core";
2
- import { connectOrExit } from "../lib/connect.js";
2
+ import { connectOrExit, userViewAuthOrExit } from "../lib/connect.js";
3
3
  import { c } from "../ui.js";
4
4
  /**
5
5
  * `cotal channels` — inspect and mutate the per-space channel registry (replay policy,
@@ -27,11 +27,21 @@ export async function channels(args) {
27
27
  // `list` is read-only → the scoped `operator` cred (channel-registry read, no stream-admin).
28
28
  // `set`/`default` WRITE the registry → the narrow `channel-writer` cred ($KV.<channelBucket>.> +
29
29
  // read-before-write; no stream data, no other bucket, no chat/DM).
30
+ // USER MODE: `list` rides the caller's OWN agent-view bearer (the registry is world-readable
31
+ // in-space); writes ride a one-shot "channel-writer" VIEW bearer, exchange-gated on ledger
32
+ // scope "admin" (the refusal names the exact re-grant).
30
33
  const profile = sub === "list" ? "operator" : "channel-writer";
31
- const { server, space, creds } = await connectOrExit(values, profile); // creds undefined ⇒ open mode
34
+ const conn = await connectOrExit(values, profile); // creds undefined ⇒ open mode
35
+ const user = conn.bearer && sub !== "list" ? await userViewAuthOrExit(conn, "channel-writer") : undefined;
36
+ const { server, space, creds } = conn;
37
+ const auth = user
38
+ ? { bearer: user.bearer, sentinelCreds: user.sentinelCreds }
39
+ : conn.bearer
40
+ ? { bearer: conn.bearer, sentinelCreds: conn.sentinelCreds }
41
+ : { creds };
32
42
  switch (sub) {
33
43
  case "list": {
34
- printRegistry(await readChannelRegistry({ servers: server, space, creds }));
44
+ printRegistry(await readChannelRegistry({ servers: server, space, ...auth }));
35
45
  return;
36
46
  }
37
47
  case "set": {
@@ -48,10 +58,10 @@ export async function channels(args) {
48
58
  if (values.instructions !== undefined)
49
59
  cfg.instructions = values.instructions;
50
60
  if (!Object.keys(cfg).length) {
51
- console.error(c.red("nothing to set pass --replay/--no-replay, --window, --desc, or --instructions"));
61
+ console.error(c.red("nothing to set - pass --replay/--no-replay, --window, --desc, or --instructions"));
52
62
  process.exit(1);
53
63
  }
54
- await seedChannelRegistry({ servers: server, space, creds, file: { channels: { [name]: cfg } } });
64
+ await seedChannelRegistry({ servers: server, space, ...auth, file: { channels: { [name]: cfg } } });
55
65
  console.log(c.green(`✓ set #${name} in "${space}"`));
56
66
  return;
57
67
  }
@@ -65,7 +75,7 @@ export async function channels(args) {
65
75
  console.error(c.red("usage: cotal channels default [--replay|--no-replay] [--window <dur>]"));
66
76
  process.exit(1);
67
77
  }
68
- await seedChannelRegistry({ servers: server, space, creds, file: { defaults } });
78
+ await seedChannelRegistry({ servers: server, space, ...auth, file: { defaults } });
69
79
  console.log(c.green(`✓ set space defaults in "${space}"`));
70
80
  return;
71
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/commands/channels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/commands/channels.ts"],"names":[],"mappings":"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"}
@@ -83,10 +83,10 @@ async function emitCommandCompletion(cmd, argv) {
83
83
  }
84
84
  }
85
85
  const SCRIPTS = {
86
- bash: lines("# cotal bash completion forwards each <TAB> to `cotal __complete` (dynamic).", "_cotal_complete() {", ' local cur out line', ' cur="${COMP_WORDS[COMP_CWORD]}"', ' local -a args=("${COMP_WORDS[@]:1:COMP_CWORD}")', ' out="$(cotal __complete "${args[@]}" 2>/dev/null)" || return', " local -a values=()", " while IFS= read -r line; do", ' [ -z "$line" ] && continue', ' case "$line" in', " :nospace) compopt -o nospace 2>/dev/null ;;", " :*) ;;", ` *) values+=("\${line%%$'\\t'*}") ;;`, " esac", ' done <<< "$out"', ' COMPREPLY=($(compgen -W "${values[*]}" -- "$cur"))', "}", "complete -F _cotal_complete cotal"),
87
- zsh: lines("#compdef cotal", "# cotal zsh completion forwards each <TAB> to `cotal __complete` (dynamic).", "_cotal() {", " local -a args; args=(\"${(@)words[2,CURRENT]}\")", ' local out line val desc', ' out="$(cotal __complete "${args[@]}" 2>/dev/null)"', " local -a descs", " while IFS= read -r line; do", ' [[ -z "$line" || "$line" == :* ]] && continue', ` val="\${line%%$'\\t'*}"; desc="\${line#*$'\\t'}"`, ' if [[ "$desc" != "$line" ]]; then descs+=("$val:$desc"); else descs+=("$val"); fi', ' done <<< "$out"', " (( ${#descs} )) && _describe -t cotal cotal descs", "}", "compdef _cotal cotal"),
88
- fish: lines("# cotal fish completion forwards each <TAB> to `cotal __complete` (dynamic).", "function __cotal_complete", " set -l tokens (commandline -opc) (commandline -ct)", " cotal __complete $tokens[2..-1] 2>/dev/null | string match -rv '^:'", "end", "complete -c cotal -f -a '(__cotal_complete)'"),
89
- powershell: lines("# cotal PowerShell completion forwards each <TAB> to `cotal __complete` (dynamic).", "Register-ArgumentCompleter -Native -CommandName cotal -ScriptBlock {", " param($wordToComplete, $commandAst, $cursorPosition)", ' $elements = @($commandAst.CommandElements | Select-Object -Skip 1 | ForEach-Object { "$_" })', " if (-not $wordToComplete) { $elements += '' }", " $out = & cotal __complete @elements 2>$null", " foreach ($line in $out) {", " if ([string]::IsNullOrEmpty($line) -or $line.StartsWith(':')) { continue }", ' $parts = $line -split "`t", 2', " $val = $parts[0]", ' if ($val -notlike "$wordToComplete*") { continue }', " $desc = if ($parts.Length -gt 1) { $parts[1] } else { $val }", " [System.Management.Automation.CompletionResult]::new($val, $val, 'ParameterValue', $desc)", " }", "}"),
86
+ bash: lines("# cotal bash completion - forwards each <TAB> to `cotal __complete` (dynamic).", "_cotal_complete() {", ' local cur out line', ' cur="${COMP_WORDS[COMP_CWORD]}"', ' local -a args=("${COMP_WORDS[@]:1:COMP_CWORD}")', ' out="$(cotal __complete "${args[@]}" 2>/dev/null)" || return', " local -a values=()", " while IFS= read -r line; do", ' [ -z "$line" ] && continue', ' case "$line" in', " :nospace) compopt -o nospace 2>/dev/null ;;", " :*) ;;", ` *) values+=("\${line%%$'\\t'*}") ;;`, " esac", ' done <<< "$out"', ' COMPREPLY=($(compgen -W "${values[*]}" -- "$cur"))', "}", "complete -F _cotal_complete cotal"),
87
+ zsh: lines("#compdef cotal", "# cotal zsh completion - forwards each <TAB> to `cotal __complete` (dynamic).", "_cotal() {", " local -a args; args=(\"${(@)words[2,CURRENT]}\")", ' local out line val desc', ' out="$(cotal __complete "${args[@]}" 2>/dev/null)"', " local -a descs", " while IFS= read -r line; do", ' [[ -z "$line" || "$line" == :* ]] && continue', ` val="\${line%%$'\\t'*}"; desc="\${line#*$'\\t'}"`, ' if [[ "$desc" != "$line" ]]; then descs+=("$val:$desc"); else descs+=("$val"); fi', ' done <<< "$out"', " (( ${#descs} )) && _describe -t cotal cotal descs", "}", "compdef _cotal cotal"),
88
+ fish: lines("# cotal fish completion - forwards each <TAB> to `cotal __complete` (dynamic).", "function __cotal_complete", " set -l tokens (commandline -opc) (commandline -ct)", " cotal __complete $tokens[2..-1] 2>/dev/null | string match -rv '^:'", "end", "complete -c cotal -f -a '(__cotal_complete)'"),
89
+ powershell: lines("# cotal PowerShell completion - forwards each <TAB> to `cotal __complete` (dynamic).", "Register-ArgumentCompleter -Native -CommandName cotal -ScriptBlock {", " param($wordToComplete, $commandAst, $cursorPosition)", ' $elements = @($commandAst.CommandElements | Select-Object -Skip 1 | ForEach-Object { "$_" })', " if (-not $wordToComplete) { $elements += '' }", " $out = & cotal __complete @elements 2>$null", " foreach ($line in $out) {", " if ([string]::IsNullOrEmpty($line) -or $line.StartsWith(':')) { continue }", ' $parts = $line -split "`t", 2', " $val = $parts[0]", ' if ($val -notlike "$wordToComplete*") { continue }', " $desc = if ($parts.Length -gt 1) { $parts[1] } else { $val }", " [System.Management.Automation.CompletionResult]::new($val, $val, 'ParameterValue', $desc)", " }", "}"),
90
90
  };
91
91
  export async function completion(args) {
92
92
  const argv = args.positionals;
@@ -110,7 +110,7 @@ export async function completion(args) {
110
110
  function install(shell) {
111
111
  const sh = shell ?? basename(process.env.SHELL ?? "");
112
112
  if (!SCRIPTS[sh]) {
113
- console.error(c.red(`can't install for "${sh || "unknown shell"}" pass one of: bash, zsh, fish`));
113
+ console.error(c.red(`can't install for "${sh || "unknown shell"}" - pass one of: bash, zsh, fish`));
114
114
  process.exit(1);
115
115
  }
116
116
  if (sh === "fish") {
@@ -3,7 +3,7 @@ import { type ParsedArgs } from "@cotal-ai/core";
3
3
  * `cotal console` — the live protocol view. A real terminal gets the lazygit-style Ink TUI; a pipe
4
4
  * or `--plain` gets the passive line stream. With no `--space` on an open mesh it opens an admin
5
5
  * overview of every space first (pick one to drill in, `b` to come back); `--space X` goes straight
6
- * in. Renders over a read-only observer whose lifecycle `useMesh` owns. See docs/protocol-view.md.
6
+ * in. Renders over a read-only observer whose lifecycle `useMesh` owns. See docs/mesh-view.md.
7
7
  */
8
8
  export declare function console_(args: ParsedArgs): Promise<void>;
9
9
  //# sourceMappingURL=console.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/commands/console.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAM/D;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiE9D"}
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/commands/console.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK/D;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwE9D"}
@@ -3,15 +3,14 @@ import { userInfo } from "node:os";
3
3
  import { createElement } from "react";
4
4
  import { render } from "ink";
5
5
  import { chatWildcard } from "@cotal-ai/core";
6
- import { connectOrExit } from "../lib/connect.js";
7
- import { c } from "../ui.js";
6
+ import { connectOrExit, userViewAuthOrExit } from "../lib/connect.js";
8
7
  import { runLog } from "../render.js";
9
8
  import { Root, makeObserver } from "../console/root.js";
10
9
  /**
11
10
  * `cotal console` — the live protocol view. A real terminal gets the lazygit-style Ink TUI; a pipe
12
11
  * or `--plain` gets the passive line stream. With no `--space` on an open mesh it opens an admin
13
12
  * overview of every space first (pick one to drill in, `b` to come back); `--space X` goes straight
14
- * in. Renders over a read-only observer whose lifecycle `useMesh` owns. See docs/protocol-view.md.
13
+ * in. Renders over a read-only observer whose lifecycle `useMesh` owns. See docs/mesh-view.md.
15
14
  */
16
15
  export async function console_(args) {
17
16
  const values = args.values;
@@ -19,12 +18,19 @@ export async function console_(args) {
19
18
  // Auth mode self-mints an admin god-view cred (the console shows DMs/anycast, which the narrower
20
19
  // `observer` profile denies → NATS Authorization Violation); an authed server hosts exactly one
21
20
  // space, so we enter it directly. Open mode connects bare; with no --space, the TTY shows the
22
- // space overview. An explicit --creds wins.
23
- const { server, space: resolvedSpace, creds, auth } = await connectOrExit(values, "admin");
24
- // Auth pins its one space; open mode keeps --space (undefined → the overview picker).
25
- const space = auth ? resolvedSpace : values.space;
21
+ // space overview. An explicit --creds wins. USER MODE rides an exchange-gated "admin" VIEW
22
+ // bearer (ledger scope "admin") with a bearer source, same standing shape as `cotal web`.
23
+ const conn = await connectOrExit(values, "admin");
24
+ const user = conn.bearer ? await userViewAuthOrExit(conn, "admin") : undefined;
25
+ const { server, space: resolvedSpace, creds, auth } = conn;
26
+ // Auth/user mode pins its one space; open mode keeps --space (undefined → the overview picker).
27
+ const space = auth || user ? resolvedSpace : values.space;
28
+ const observerAuth = user
29
+ ? { user: { source: user.source, sentinelCreds: user.sentinelCreds, owner: user.owner, actor: user.actor } }
30
+ : { creds };
26
31
  // Operator identity for sent messages (still off the roster). Open mode or an explicit --creds can
27
- // write; the self-minted observer cred (auth default) is read-only, so the palette/`D` are inert.
32
+ // write; the self-minted observer cred (auth default) and the user-mode admin view are read-only,
33
+ // so the palette/`D` are inert there.
28
34
  const operator = (() => {
29
35
  try {
30
36
  return userInfo().username || "operator";
@@ -33,12 +39,12 @@ export async function console_(args) {
33
39
  return "operator";
34
40
  }
35
41
  })();
36
- const canWrite = !creds || !!values.creds;
42
+ const canWrite = user ? false : !creds || !!values.creds;
37
43
  // No TTY (piped/headless) or --plain → the passive line stream; Ink needs a real terminal, and a
38
44
  // stream can't host the picker, so it falls back to the RESOLVED mesh's space (not the cwd's).
39
45
  if (values.plain || process.stdout.isTTY !== true) {
40
46
  const s = space ?? resolvedSpace;
41
- await runLog(makeObserver(s, server, creds, operator), s, creds ? chatWildcard(s) : undefined);
47
+ await runLog(makeObserver(s, server, observerAuth, operator), s, creds || user ? chatWildcard(s) : undefined);
42
48
  return;
43
49
  }
44
50
  // Full-screen takeover + mouse-wheel scroll: the alternate screen gives a clean app-like
@@ -70,7 +76,7 @@ export async function console_(args) {
70
76
  restore();
71
77
  process.exit(0);
72
78
  });
73
- const { waitUntilExit } = render(createElement(Root, { server, creds, space, canWrite, name: operator }), {
79
+ const { waitUntilExit } = render(createElement(Root, { server, auth: observerAuth, space, canWrite, name: operator }), {
74
80
  exitOnCtrlC: true,
75
81
  maxFps: 30,
76
82
  incrementalRendering: true,
@@ -1 +1 @@
1
- {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/commands/console.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/commands/console.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type ParsedArgs } from "@cotal-ai/core";
2
+ export declare const doctorFlags: readonly [{
3
+ readonly name: "fix";
4
+ readonly type: "boolean";
5
+ readonly description: "execute the safe repairs (re-sign the manager-remintable daemon creds; needs the local signer)";
6
+ }];
7
+ /** `cotal doctor auth` — the ONE stale-credential repair surface (D5 slice 6). Read-only diagnosis
8
+ * of every managed credential file in this folder against the credential-lifetime matrix, rendered
9
+ * as healthy / near-expiry (yellow) / expired / unreadable (red) with the LAST-RENEWAL timestamp
10
+ * for manager-reminted creds — ending in either `healthy` or the exact next command (exit 1).
11
+ * `--fix` executes the one safe local repair (re-sign the class-2 daemon files for their existing
12
+ * nkeys); $SYS and agent creds are never auto-fixed — their repairs are printed, not guessed. */
13
+ export declare function doctor(args: ParsedArgs): Promise<void>;
14
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAaxB,eAAO,MAAM,WAAW;;;;EAEd,CAAC;AAaX;;;;;kGAKkG;AAClG,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD5D"}
@@ -0,0 +1,171 @@
1
+ import { existsSync, readFileSync, readdirSync } from "node:fs";
2
+ import { basename, join } from "node:path";
3
+ import { credentialLifetime, inspectCredHealth, } from "@cotal-ai/core";
4
+ import { authDir, findCotalRoot, loadSpaceAuth, readRenewalRecord, remintDaemonCreds, userAuthStateDir, writeRenewalRecord, } from "@cotal-ai/workspace";
5
+ import { displayCmd } from "../lib/self-exec.js";
6
+ import { c } from "../ui.js";
7
+ export const doctorFlags = [
8
+ { name: "fix", type: "boolean", description: "execute the safe repairs (re-sign the manager-remintable daemon creds; needs the local signer)" },
9
+ ];
10
+ /** `cotal doctor auth` — the ONE stale-credential repair surface (D5 slice 6). Read-only diagnosis
11
+ * of every managed credential file in this folder against the credential-lifetime matrix, rendered
12
+ * as healthy / near-expiry (yellow) / expired / unreadable (red) with the LAST-RENEWAL timestamp
13
+ * for manager-reminted creds — ending in either `healthy` or the exact next command (exit 1).
14
+ * `--fix` executes the one safe local repair (re-sign the class-2 daemon files for their existing
15
+ * nkeys); $SYS and agent creds are never auto-fixed — their repairs are printed, not guessed. */
16
+ export async function doctor(args) {
17
+ const sub = args.positionals[0];
18
+ if (sub !== "auth") {
19
+ console.error(`usage: ${displayCmd()} doctor auth [--fix] - credential-health diagnosis + repair for this folder's mesh`);
20
+ process.exitCode = 1;
21
+ return;
22
+ }
23
+ const values = args.values;
24
+ const root = findCotalRoot(process.cwd());
25
+ const auth = loadSpaceAuth(authDir(root));
26
+ console.log(c.bold("cotal doctor auth"));
27
+ console.log(` root ${root}`);
28
+ if (!auth) {
29
+ // An open mesh has no minted credentials at all — nothing to diagnose is a healthy answer,
30
+ // not a silent one.
31
+ console.log(c.green("\nauth: healthy - open mesh (no credential material in this folder)"));
32
+ return;
33
+ }
34
+ const userMode = existsSync(userAuthStateDir(root, auth.space));
35
+ console.log(` space ${auth.space}${userMode ? " · user-auth" : ""} · signer ${c.green("present")} (${join(authDir(root), "auth.json")})`);
36
+ let reports = inventory(root);
37
+ let problems = reports.filter((r) => r.problem);
38
+ // --fix: the one safe local repair — re-sign the remintable daemon files (same nkeys), exactly
39
+ // what the manager's renewal pass does, and record the pass so the audit trail stays honest
40
+ // (adoption is the DAEMON's explicit reload, which only the running manager requests — a doctor
41
+ // fix without a live manager is adopted by the daemon's 75% re-read backstop). Then re-diagnose:
42
+ // the doctor reports what IS, never what it hopes the fix did.
43
+ if (values.fix && problems.some((r) => isRemintable(r.kind))) {
44
+ console.log(c.dim("\n--fix: re-signing the remintable daemon creds…"));
45
+ const results = await remintDaemonCreds(root);
46
+ writeRenewalRecord(root, { ts: new Date().toISOString(), owner: "doctor --fix", results });
47
+ for (const r of results.filter((x) => !x.ok && !x.skipped))
48
+ console.error(c.red(` ✗ ${r.file}: ${r.error}`));
49
+ reports = inventory(root);
50
+ problems = reports.filter((r) => r.problem);
51
+ }
52
+ render("Daemon creds (manager-reminted - class 2)", reports.filter((r) => isRemintable(r.kind)));
53
+ renderRenewalRecord(root);
54
+ render("$SYS creds (rotation-renewed - never remintable from disk)", reports.filter((r) => r.kind === "membership-observer" || r.kind === "connection-evictor"));
55
+ render("Agent creds (static, pre-flip)", reports.filter((r) => r.kind === "agent"));
56
+ if (!problems.length) {
57
+ console.log(c.green("\nauth: healthy"));
58
+ return;
59
+ }
60
+ console.log(c.red(`\nauth: ${problems.length} problem${problems.length === 1 ? "" : "s"}`));
61
+ for (const p of problems)
62
+ console.log(` ${c.red("✗")} ${p.label}: ${p.problem}\n next: ${p.repair}`);
63
+ process.exitCode = 1;
64
+ }
65
+ function isRemintable(kind) {
66
+ return kind === "delivery" || kind === "membership-rw";
67
+ }
68
+ /** Inspect every managed credential file for this folder. Missing files are noted (with how they
69
+ * get provisioned) but only EXISTING-but-bad material is a problem — process presence is `cotal
70
+ * status`'s job; this surface owns credential health. */
71
+ function inventory(root) {
72
+ const cotal = (f) => join(root, ".cotal", f);
73
+ const fixed = [
74
+ { label: "delivery.creds", kind: "delivery", path: cotal("delivery.creds") },
75
+ { label: "membership-rw.creds", kind: "membership-rw", path: cotal("membership-rw.creds") },
76
+ { label: "membership-observer.creds", kind: "membership-observer", path: cotal("membership-observer.creds") },
77
+ { label: "connection-evictor.creds", kind: "connection-evictor", path: cotal("connection-evictor.creds") },
78
+ ];
79
+ const reports = fixed.map((f) => report(f.label, f.kind, f.path));
80
+ const agentDir = join(authDir(root), "creds");
81
+ if (existsSync(agentDir)) {
82
+ for (const f of readdirSync(agentDir).filter((f) => f.endsWith(".creds") && !f.endsWith(".sentinel.creds")).sort()) {
83
+ reports.push(report(basename(f), "agent", join(agentDir, f)));
84
+ }
85
+ }
86
+ return reports;
87
+ }
88
+ function report(label, kind, path) {
89
+ if (!existsSync(path))
90
+ return { label, kind, path };
91
+ const health = inspectCredHealth(readFileSync(path, "utf8"));
92
+ const r = { label, kind, path, health };
93
+ const policy = credentialLifetime(kind);
94
+ const standing = policy.class === "standing-renewable" || policy.class === "rotation-renewed";
95
+ const repair = isRemintable(kind)
96
+ ? `${displayCmd()} doctor auth --fix (or start the mesh's manager - it is the renewal owner and re-signs + reloads these every half-TTL)`
97
+ : kind === "agent"
98
+ ? `respawn the agent (\`${displayCmd()} spawn\`) - its old cred is dead by design`
99
+ : `system-account rotation: \`${displayCmd()} down\` then a fresh \`${displayCmd()} up\` regenerates the $SYS material`;
100
+ switch (health.state) {
101
+ case "unreadable":
102
+ r.problem = `unreadable credential file (${health.error})`;
103
+ r.repair = repair;
104
+ break;
105
+ case "expired":
106
+ r.problem = "EXPIRED - the broker denies this credential";
107
+ r.repair = repair;
108
+ break;
109
+ case "near-expiry":
110
+ if (standing) {
111
+ r.problem = `past its renewal point (renewal owner: ${policy.renewalOwner}) - expires ${at(health.exp)}`;
112
+ r.repair = repair;
113
+ }
114
+ break;
115
+ case "unbounded":
116
+ if (standing) {
117
+ r.problem = "unbounded standing credential (minted before the renewal slice) - a copied cred never dies";
118
+ r.repair = repair;
119
+ }
120
+ break;
121
+ }
122
+ return r;
123
+ }
124
+ function render(title, reports) {
125
+ console.log(`\n ${c.bold(title)}`);
126
+ if (!reports.length) {
127
+ console.log(c.dim(" none"));
128
+ return;
129
+ }
130
+ for (const r of reports) {
131
+ if (!r.health) {
132
+ console.log(` ${c.dim("−")} ${r.label} ${c.dim(`not provisioned here (written by \`${displayCmd()} up\`)`)}`);
133
+ continue;
134
+ }
135
+ const h = r.health;
136
+ const lastRenewal = h.iat ? c.dim(` · last renewal ${at(h.iat)}`) : "";
137
+ const expiry = h.exp ? c.dim(` · expires ${at(h.exp)}`) : "";
138
+ const badge = h.state === "healthy" ? c.green("● healthy")
139
+ : h.state === "near-expiry" ? c.yellow("◐ near-expiry")
140
+ : h.state === "unbounded" ? (r.problem ? c.red("∞ unbounded") : c.dim("∞ static (dies at the flip)"))
141
+ : c.red(`✗ ${h.state}`);
142
+ console.log(` ${badge} ${r.label}${lastRenewal}${expiry}`);
143
+ }
144
+ }
145
+ /** Render the renewal owner's audit record (written by the manager's pass / doctor --fix): when the
146
+ * last pass ran, who ran it, and whether the daemon EXPLICITLY adopted — the "file re-signed" vs
147
+ * "daemon adopted" distinction the D5 panel required. Absence is informational (a mesh started
148
+ * before the renewal owner existed, or an open mesh). */
149
+ function renderRenewalRecord(root) {
150
+ const rec = readRenewalRecord(root);
151
+ if (!rec) {
152
+ console.log(c.dim(" no renewal record yet (written by the manager's renewal pass)"));
153
+ return;
154
+ }
155
+ const resigned = rec.results.filter((r) => r.ok).map((r) => r.file);
156
+ const failed = rec.results.filter((r) => !r.ok && !r.skipped);
157
+ const adoption = rec.adoption === undefined
158
+ ? resigned.length
159
+ ? c.yellow("daemon adoption not requested by this pass - daemons adopt via the 75% re-read backstop or the manager's next renewal pass")
160
+ : c.dim("adoption: n/a (nothing re-signed)")
161
+ : rec.adoption.ok
162
+ ? c.green("daemon adopted ✓")
163
+ : c.yellow(`daemon adoption pending - ${rec.adoption.error ?? "unknown"}`);
164
+ console.log(` ${c.dim(`last renewal pass ${rec.ts} by ${rec.owner}`)} - re-signed [${resigned.join(", ") || "none"}] · ${adoption}`);
165
+ for (const f of failed)
166
+ console.log(` ${c.red("✗")} last pass failed on ${f.file}: ${f.error}`);
167
+ }
168
+ function at(sec) {
169
+ return sec ? new Date(sec * 1000).toISOString() : "?";
170
+ }
171
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}