@cotal-ai/cli 0.50.1 → 0.52.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 (179) hide show
  1. package/dist/command.d.ts.map +1 -1
  2. package/dist/command.js +32 -1
  3. package/dist/command.js.map +1 -1
  4. package/dist/commands/agents.d.ts +41 -2
  5. package/dist/commands/agents.d.ts.map +1 -1
  6. package/dist/commands/agents.js +85 -19
  7. package/dist/commands/agents.js.map +1 -1
  8. package/dist/commands/clean.d.ts.map +1 -1
  9. package/dist/commands/clean.js +5 -1
  10. package/dist/commands/clean.js.map +1 -1
  11. package/dist/commands/console.d.ts.map +1 -1
  12. package/dist/commands/console.js +9 -1
  13. package/dist/commands/console.js.map +1 -1
  14. package/dist/commands/doctor.d.ts.map +1 -1
  15. package/dist/commands/doctor.js +13 -8
  16. package/dist/commands/doctor.js.map +1 -1
  17. package/dist/commands/down.d.ts.map +1 -1
  18. package/dist/commands/down.js +151 -7
  19. package/dist/commands/down.js.map +1 -1
  20. package/dist/commands/endpoints.d.ts.map +1 -1
  21. package/dist/commands/endpoints.js +2 -1
  22. package/dist/commands/endpoints.js.map +1 -1
  23. package/dist/commands/join.d.ts.map +1 -1
  24. package/dist/commands/join.js +25 -0
  25. package/dist/commands/join.js.map +1 -1
  26. package/dist/commands/meshes-add.d.ts +2 -54
  27. package/dist/commands/meshes-add.d.ts.map +1 -1
  28. package/dist/commands/meshes-add.js +20 -105
  29. package/dist/commands/meshes-add.js.map +1 -1
  30. package/dist/commands/meshes.d.ts.map +1 -1
  31. package/dist/commands/meshes.js +5 -2
  32. package/dist/commands/meshes.js.map +1 -1
  33. package/dist/commands/service.d.ts +17 -0
  34. package/dist/commands/service.d.ts.map +1 -0
  35. package/dist/commands/service.js +541 -0
  36. package/dist/commands/service.js.map +1 -0
  37. package/dist/commands/setup.d.ts.map +1 -1
  38. package/dist/commands/setup.js +9 -8
  39. package/dist/commands/setup.js.map +1 -1
  40. package/dist/commands/spawn.d.ts +44 -2
  41. package/dist/commands/spawn.d.ts.map +1 -1
  42. package/dist/commands/spawn.js +310 -47
  43. package/dist/commands/spawn.js.map +1 -1
  44. package/dist/commands/status.d.ts.map +1 -1
  45. package/dist/commands/status.js +133 -39
  46. package/dist/commands/status.js.map +1 -1
  47. package/dist/commands/sync.d.ts +50 -0
  48. package/dist/commands/sync.d.ts.map +1 -0
  49. package/dist/commands/sync.js +284 -0
  50. package/dist/commands/sync.js.map +1 -0
  51. package/dist/commands/up.d.ts +7 -0
  52. package/dist/commands/up.d.ts.map +1 -1
  53. package/dist/commands/up.js +174 -23
  54. package/dist/commands/up.js.map +1 -1
  55. package/dist/commands/update.d.ts +12 -0
  56. package/dist/commands/update.d.ts.map +1 -1
  57. package/dist/commands/update.js +83 -9
  58. package/dist/commands/update.js.map +1 -1
  59. package/dist/commands/use.js +1 -1
  60. package/dist/commands/use.js.map +1 -1
  61. package/dist/console/app.d.ts +14 -6
  62. package/dist/console/app.d.ts.map +1 -1
  63. package/dist/console/app.js +308 -40
  64. package/dist/console/app.js.map +1 -1
  65. package/dist/console/commands.d.ts +29 -1
  66. package/dist/console/commands.d.ts.map +1 -1
  67. package/dist/console/commands.js +109 -13
  68. package/dist/console/commands.js.map +1 -1
  69. package/dist/console/control.d.ts +141 -0
  70. package/dist/console/control.d.ts.map +1 -0
  71. package/dist/console/control.js +189 -0
  72. package/dist/console/control.js.map +1 -0
  73. package/dist/console/mesh.d.ts +1 -1
  74. package/dist/console/mesh.d.ts.map +1 -1
  75. package/dist/console/root.d.ts +13 -1
  76. package/dist/console/root.d.ts.map +1 -1
  77. package/dist/console/root.js +25 -5
  78. package/dist/console/root.js.map +1 -1
  79. package/dist/console/ui/CommandPalette.d.ts +2 -1
  80. package/dist/console/ui/CommandPalette.d.ts.map +1 -1
  81. package/dist/console/ui/CommandPalette.js +3 -2
  82. package/dist/console/ui/CommandPalette.js.map +1 -1
  83. package/dist/console/ui/Confirm.d.ts +13 -4
  84. package/dist/console/ui/Confirm.d.ts.map +1 -1
  85. package/dist/console/ui/Confirm.js +13 -5
  86. package/dist/console/ui/Confirm.js.map +1 -1
  87. package/dist/console/ui/Detail.d.ts +8 -1
  88. package/dist/console/ui/Detail.d.ts.map +1 -1
  89. package/dist/console/ui/Detail.js +11 -4
  90. package/dist/console/ui/Detail.js.map +1 -1
  91. package/dist/console/ui/Help.d.ts.map +1 -1
  92. package/dist/console/ui/Help.js +3 -2
  93. package/dist/console/ui/Help.js.map +1 -1
  94. package/dist/console/ui/Roster.d.ts +9 -1
  95. package/dist/console/ui/Roster.d.ts.map +1 -1
  96. package/dist/console/ui/Roster.js +16 -5
  97. package/dist/console/ui/Roster.js.map +1 -1
  98. package/dist/console/ui/Sparkline.d.ts +13 -0
  99. package/dist/console/ui/Sparkline.d.ts.map +1 -0
  100. package/dist/console/ui/Sparkline.js +21 -0
  101. package/dist/console/ui/Sparkline.js.map +1 -0
  102. package/dist/console/ui/StatusBar.d.ts +4 -1
  103. package/dist/console/ui/StatusBar.d.ts.map +1 -1
  104. package/dist/console/ui/StatusBar.js +5 -3
  105. package/dist/console/ui/StatusBar.js.map +1 -1
  106. package/dist/console/ui/Tabs.d.ts +4 -2
  107. package/dist/console/ui/Tabs.d.ts.map +1 -1
  108. package/dist/console/ui/Tabs.js +5 -3
  109. package/dist/console/ui/Tabs.js.map +1 -1
  110. package/dist/console/ui/topo/Map.d.ts.map +1 -1
  111. package/dist/console/ui/topo/Map.js +34 -2
  112. package/dist/console/ui/topo/Map.js.map +1 -1
  113. package/dist/console/ui/topo/Matrix.d.ts.map +1 -1
  114. package/dist/console/ui/topo/Matrix.js +12 -3
  115. package/dist/console/ui/topo/Matrix.js.map +1 -1
  116. package/dist/console/ui/topo/Sequence.js +1 -1
  117. package/dist/console/ui/topo/Sequence.js.map +1 -1
  118. package/dist/console/ui/topo/Topo.d.ts +10 -2
  119. package/dist/console/ui/topo/Topo.d.ts.map +1 -1
  120. package/dist/console/ui/topo/Topo.js +6 -4
  121. package/dist/console/ui/topo/Topo.js.map +1 -1
  122. package/dist/console/ui/topo/model.d.ts +50 -2
  123. package/dist/console/ui/topo/model.d.ts.map +1 -1
  124. package/dist/console/ui/topo/model.js +69 -6
  125. package/dist/console/ui/topo/model.js.map +1 -1
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +27 -0
  128. package/dist/index.js.map +1 -1
  129. package/dist/lib/attach-client.d.ts.map +1 -1
  130. package/dist/lib/attach-client.js +7 -1
  131. package/dist/lib/attach-client.js.map +1 -1
  132. package/dist/lib/delivery-proc.d.ts +10 -2
  133. package/dist/lib/delivery-proc.d.ts.map +1 -1
  134. package/dist/lib/delivery-proc.js +7 -1
  135. package/dist/lib/delivery-proc.js.map +1 -1
  136. package/dist/lib/manifest/apply.d.ts.map +1 -1
  137. package/dist/lib/manifest/apply.js +2 -0
  138. package/dist/lib/manifest/apply.js.map +1 -1
  139. package/dist/lib/manifest/model.d.ts +2 -0
  140. package/dist/lib/manifest/model.d.ts.map +1 -1
  141. package/dist/lib/manifest/prepare.d.ts +2 -0
  142. package/dist/lib/manifest/prepare.d.ts.map +1 -1
  143. package/dist/lib/manifest/prepare.js +1 -0
  144. package/dist/lib/manifest/prepare.js.map +1 -1
  145. package/dist/lib/manifest/resolve.js +1 -0
  146. package/dist/lib/manifest/resolve.js.map +1 -1
  147. package/dist/lib/manifest/schema.d.ts +2 -0
  148. package/dist/lib/manifest/schema.d.ts.map +1 -1
  149. package/dist/lib/manifest/schema.js +2 -0
  150. package/dist/lib/manifest/schema.js.map +1 -1
  151. package/dist/lib/restore.d.ts +3 -0
  152. package/dist/lib/restore.d.ts.map +1 -1
  153. package/dist/lib/restore.js +17 -0
  154. package/dist/lib/restore.js.map +1 -1
  155. package/dist/lib/seat-admission.d.ts +51 -0
  156. package/dist/lib/seat-admission.d.ts.map +1 -0
  157. package/dist/lib/seat-admission.js +81 -0
  158. package/dist/lib/seat-admission.js.map +1 -0
  159. package/dist/lib/seat-capture.d.ts +47 -0
  160. package/dist/lib/seat-capture.d.ts.map +1 -0
  161. package/dist/lib/seat-capture.js +195 -0
  162. package/dist/lib/seat-capture.js.map +1 -0
  163. package/dist/lib/seat-restore.d.ts +39 -0
  164. package/dist/lib/seat-restore.d.ts.map +1 -0
  165. package/dist/lib/seat-restore.js +249 -0
  166. package/dist/lib/seat-restore.js.map +1 -0
  167. package/dist/lib/seat-resume.d.ts +24 -0
  168. package/dist/lib/seat-resume.d.ts.map +1 -0
  169. package/dist/lib/seat-resume.js +127 -0
  170. package/dist/lib/seat-resume.js.map +1 -0
  171. package/dist/view/mesh-view.d.ts +41 -1
  172. package/dist/view/mesh-view.d.ts.map +1 -1
  173. package/dist/view/mesh-view.js +107 -8
  174. package/dist/view/mesh-view.js.map +1 -1
  175. package/package.json +14 -7
  176. package/dist/lib/join-target.d.ts +0 -173
  177. package/dist/lib/join-target.d.ts.map +0 -1
  178. package/dist/lib/join-target.js +0 -335
  179. package/dist/lib/join-target.js.map +0 -1
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Admission plus restore for one preserved cut, as both destination paths run it.
3
+ *
4
+ * `cotal up` from a `ready` journal and `cotal up --restore <dir>` reach a preserved resume by
5
+ * different routes and hand the same retained inventory to the same manager operation. They
6
+ * therefore owe the seats the same thing: section 2.2's gates, the restore of section 6 step 7, and
7
+ * the writer generation, in that order, before a manager launches. Keeping one implementation is
8
+ * what stops the two routes from drifting into one gated path and one ungated one.
9
+ */
10
+ import { createHash } from "node:crypto";
11
+ import { readFileSync } from "node:fs";
12
+ import { seatCheckpointDir } from "@cotal-ai/workspace";
13
+ import { admitSeatCheckpoints } from "./seat-admission.js";
14
+ import { restoreSeatCheckpoints } from "./seat-restore.js";
15
+ import { c } from "../ui.js";
16
+ /** This host's current revision for a seat's launch config, or undefined when the file is gone.
17
+ * A missing profile is not a mismatch: the manager's own relaunch check reports that separately,
18
+ * and inventing a digest here would turn an absent file into a false profile refusal. */
19
+ function digestFileOrUndefined(path) {
20
+ try {
21
+ return createHash("sha256").update(readFileSync(path)).digest("hex");
22
+ }
23
+ catch {
24
+ return undefined;
25
+ }
26
+ }
27
+ /**
28
+ * Run section 2.2's gates over every seat checkpoint the cut wrote, restore the captured bytes,
29
+ * then take custody of each seat.
30
+ *
31
+ * Gate 2 is told which lifecycle uids are live. On these paths that set is empty and the reason is
32
+ * structural rather than an omission: a preserved resume is only reached from a `ready` journal,
33
+ * which `down --preserve-state` publishes after it has proven every recorded process stopped and
34
+ * the exact recorded endpoint unreachable. There is no roster to consult because there is no
35
+ * broker. A destination that resumes against a live space supplies the roster instead.
36
+ *
37
+ * The restore runs inside the admission, after every gate and before any generation is claimed, so
38
+ * a refusal costs nothing: no tree has been promoted, no claim has been made, nothing has started.
39
+ */
40
+ export function admitAndRestoreSeatCheckpoints(root, space, attemptId, values, inventory) {
41
+ // The checkpoints of the CUT this resume is consuming, named by that cut's attempt id. A resume
42
+ // must not admit an older cut's artifacts: they describe a tree and a transcript this inventory
43
+ // is not about to restore.
44
+ const checkpointDir = seatCheckpointDir(root, attemptId);
45
+ // The seats this resume is about to hand the manager. Admission is reconciled against this set,
46
+ // because "no checkpoint" and "no seat" look identical to a reader of the checkpoint directory
47
+ // alone, and only one of them is safe.
48
+ const retainedAgents = (inventory.agents ?? []);
49
+ const retained = new Map(retainedAgents.map((agent) => [agent.name ?? "", agent]));
50
+ const admitted = admitSeatCheckpoints({
51
+ root,
52
+ checkpointDir,
53
+ space,
54
+ // This host's current revision for each seat's launch source, digested from the same file the
55
+ // manager re-digests before it relaunches. Passing it is what makes gate 2's profile half a
56
+ // decision: without it the gate has nothing to compare and the override decides nothing.
57
+ currentProfileConfigSha256: (name) => {
58
+ const source = retained.get(name)?.launch?.source;
59
+ return source ? digestFileOrUndefined(source.configPath) : undefined;
60
+ },
61
+ liveLifecycleUids: new Set(),
62
+ // Reconcile inside the admission, after the gates and BEFORE any generation is claimed. A
63
+ // retained seat with no checkpoint would otherwise resume with no gate run and no custody
64
+ // claimed, and checking after the claims had landed would leave the earlier seats' exclusive
65
+ // creates behind, so the retry over a repaired checkpoint set could never make them again.
66
+ requireCovered: (admittedNames) => {
67
+ const covered = new Set(admittedNames);
68
+ const uncovered = retainedAgents.map((agent) => agent.name ?? "").filter((name) => !covered.has(name));
69
+ if (uncovered.length)
70
+ throw new Error(`preserved resume is refused: retained seat(s) ${uncovered.map((name) => JSON.stringify(name)).join(", ")} have no admitted checkpoint under ${checkpointDir}; a seat cannot resume without passing the admission gates and claiming its writer generation`);
71
+ },
72
+ ...(values["accept-stale-checkpoint"] ? { acceptStale: true } : {}),
73
+ // The restore, between the gates and custody. Every admitted seat's captured bytes land in a
74
+ // staging directory beside its cwd and are promoted only once every seat has staged; a refusal
75
+ // here leaves every live cwd as it was and claims no generation, like a gate failure.
76
+ beforeCustody: (staged) => {
77
+ // THE INCARNATION RECONCILIATION, AND IT RUNS BEFORE THE RESTORE TOUCHES ANYTHING.
78
+ //
79
+ // This compares the checkpoint's recovered `lifecycleUid` against the one the inventory this
80
+ // resume is about to hand the manager carries, and it used to run after the whole admission
81
+ // returned. By then the restore had already moved each live `cwd` aside and promoted another
82
+ // seat's tree over it, and the generation had been claimed under the checkpoint's uid, so the
83
+ // refusal arrived after the two irreversible steps it exists to prevent. A mismatch means the
84
+ // checkpoint describes a different incarnation than the seat being resumed, which is the last
85
+ // moment where refusing is still free.
86
+ for (const seat of staged) {
87
+ const expected = retained.get(seat.checkpoint.name)?.identity?.lifecycleUid ?? "";
88
+ if (expected && expected !== seat.checkpoint.lifecycleUid)
89
+ throw new Error(`seat ${seat.checkpoint.name}: checkpoint records lifecycle ${seat.checkpoint.lifecycleUid}, the retained inventory says ${expected}`);
90
+ }
91
+ restoreSeatCheckpoints({
92
+ root,
93
+ seats: staged.map((seat) => {
94
+ const entry = retained.get(seat.checkpoint.name);
95
+ const cwd = entry?.launch?.cwd;
96
+ if (!cwd)
97
+ throw new Error(`preserved resume is refused: retained seat ${JSON.stringify(seat.checkpoint.name)} records no launch cwd, so its checkpoint has no working tree to restore into`);
98
+ const sessionId = entry?.launch?.sessionId;
99
+ return {
100
+ name: seat.checkpoint.name,
101
+ directory: seat.directory,
102
+ checkpoint: seat.checkpoint,
103
+ cwd,
104
+ ...(sessionId ? { inventorySessionId: sessionId } : {}),
105
+ };
106
+ }),
107
+ onPromoted: (seat) => {
108
+ console.log(c.dim(` restored working tree: ${seat.name} -> ${seat.cwd}${seat.superseded ? ` (previous tree kept at ${seat.superseded})` : ""}`));
109
+ },
110
+ });
111
+ },
112
+ });
113
+ for (const seat of admitted) {
114
+ console.log(c.dim(` admitted checkpoint: ${seat.checkpoint.name} (${seat.checkpoint.session.continuity}) at generation ${seat.generation}`));
115
+ if (seat.staleOverrideAgeMs !== undefined)
116
+ console.log(c.yellow(` stale checkpoint admitted by --accept-stale-checkpoint: ${seat.checkpoint.name} is ${seat.staleOverrideAgeMs}ms past capture, horizon ${seat.checkpoint.recencyHorizonMs}ms`));
117
+ }
118
+ return admitted
119
+ .filter((seat) => seat.staleOverrideAgeMs !== undefined)
120
+ .map((seat) => ({
121
+ name: seat.checkpoint.name,
122
+ capturedAt: seat.checkpoint.capturedAt,
123
+ ageMs: seat.staleOverrideAgeMs,
124
+ horizonMs: seat.checkpoint.recencyHorizonMs,
125
+ }));
126
+ }
127
+ //# sourceMappingURL=seat-resume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seat-resume.js","sourceRoot":"","sources":["../../src/lib/seat-resume.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from "node:events";
2
- import type { CotalEndpoint, EndpointRef, Presence, PresenceStatus } from "@cotal-ai/core";
2
+ import type { CotalEndpoint, EndpointRef, MembershipSnapshot, Presence, PresenceStatus } from "@cotal-ai/core";
3
3
  export type FeedDelivery = "multicast" | "unicast" | "anycast";
4
4
  /** One feed row. A same-sender/same-text unicast burst coalesces into a single entry with a
5
5
  * deterministic id (the first message's) and ts (the earliest), so a history prefill and the
@@ -11,6 +11,7 @@ export interface FeedEntry {
11
11
  delivery: FeedDelivery;
12
12
  channel?: string;
13
13
  toService?: string;
14
+ toIds?: string[];
14
15
  toNames?: string[];
15
16
  count?: number;
16
17
  /** This row arrived on an agent's structured-event channel rather than a chat channel.
@@ -63,16 +64,36 @@ export interface MeshSignals {
63
64
  stalestLiveTs?: number;
64
65
  dms: DmPeer[];
65
66
  }
67
+ /** The broker-authoritative membership feed as THIS viewer last saw it. Two facts, kept apart so a
68
+ * failed read can never be mistaken for an empty feed: `snapshot` is the last successful read;
69
+ * `unreadable` is the reason the most recent read or watch attempt failed (a fact about the
70
+ * viewer, cleared by the next successful read). A feed that does not exist (no delivery daemon:
71
+ * the bucket is absent, or it was never written) is a snapshot with no `asOf` and no members, which
72
+ * renders as traffic-only: a fact about the mesh, and a different one. */
73
+ export interface MembershipView {
74
+ snapshot?: MembershipSnapshot;
75
+ unreadable?: string;
76
+ }
66
77
  export interface MeshSnapshot {
67
78
  agents: Presence[];
68
79
  endpoints: Presence[];
80
+ /** `messages`: the broker's retained count (capped per sender, so it can stop climbing under
81
+ * live traffic). `arrivals`: messages this viewer saw ARRIVE on the live tap since it started,
82
+ * monotonic, dropped with the channel: the honest base for an unread badge. */
69
83
  channels: {
70
84
  channel: string;
71
85
  messages: number;
86
+ arrivals: number;
72
87
  }[];
73
88
  feed: FeedEntry[];
89
+ /** Broker-authoritative channel membership (the delivery daemon's CONNZ view plus the durable
90
+ * registry), as last read; the topology lens overlays it to show silent subscribers. */
91
+ membership: MembershipView;
92
+ /** `msgsPerSec`: the rolling 1 s rate. `activity`: a fixed 15-bucket message-volume series over
93
+ * the last 60 s (one ~4 s bucket each), oldest→newest, raw counts: the status bar's sparkline. */
74
94
  rates: {
75
95
  msgsPerSec: number;
96
+ activity: number[];
76
97
  };
77
98
  status: {
78
99
  connected: boolean;
@@ -103,16 +124,22 @@ export declare class MeshView extends EventEmitter {
103
124
  private roster;
104
125
  private byId;
105
126
  private channelCounts;
127
+ private arrivals;
106
128
  private feed;
107
129
  private seen;
108
130
  private pending;
109
131
  private dmLog;
110
132
  private recentTs;
111
133
  private msgsPerSec;
134
+ private bucketCounts;
135
+ private bucketEpoch;
112
136
  private connected;
113
137
  private error?;
114
138
  private warning?;
115
139
  private dirty;
140
+ private membership;
141
+ private membershipWatch?;
142
+ private membershipTimer?;
116
143
  private readonly window;
117
144
  private readonly tapSubject?;
118
145
  private readonly chatOnly;
@@ -124,6 +151,16 @@ export declare class MeshView extends EventEmitter {
124
151
  constructor(ep: CotalEndpoint, opts?: MeshViewOptions);
125
152
  start(): Promise<void>;
126
153
  stop(): Promise<void>;
154
+ /** Read the broker-authoritative membership feed and follow it. A membership fault is never
155
+ * a connection fault: it lands on `membership.unreadable` (with its reason), not on
156
+ * `status.error`, because the mesh is fine and only this viewer's read of one feed is not. */
157
+ private startMembership;
158
+ private scheduleMembership;
159
+ /** One read of the feed. Three outcomes, kept distinct: a snapshot (readable, whatever it holds),
160
+ * an absent feed (readable in the sense that the mesh has no daemon writing one: an empty
161
+ * snapshot, traffic-only), and a failed read (`unreadable`, reason kept, last snapshot kept so
162
+ * the reason is shown against what was last known rather than against nothing). */
163
+ private loadMembership;
127
164
  snapshot(): MeshSnapshot;
128
165
  nameOf: (id: string) => string;
129
166
  private setRoster;
@@ -148,6 +185,9 @@ export declare class MeshView extends EventEmitter {
148
185
  /** Group raw DMs into per-peer rows; each peer lists its counterparties (conversations).
149
186
  * Only pairs that actually talked — never the n² cross-product. */
150
187
  private rollupDms;
188
+ /** Advance the activity ring to `now`: shift past buckets out the left, fill the gap with zeros,
189
+ * so idle time decays the series. The newest (last) bucket is always the current ~4s window. */
190
+ private roll;
151
191
  /** The single batch point: recompute the rolling rate, then emit one snapshot if dirty. */
152
192
  private flush;
153
193
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-view.d.ts","sourceRoot":"","sources":["../../src/view/mesh-view.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mesh-view.d.ts","sourceRoot":"","sources":["../../src/view/mesh-view.ts"],"names":[],"mappings":"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"}
@@ -15,9 +15,23 @@ const CHANNELS_MS = 2000; // listChannels() refresh
15
15
  const DEFAULT_WINDOW = 300;
16
16
  const HISTORY_LIMIT = 50; // per-channel prefill depth
17
17
  const DM_LOG_CAP = 1000; // raw DMs retained for the roll-up
18
+ const MEMBERSHIP_DEBOUNCE_MS = 150; // coalesce the watch's replay burst into one re-read (the web's 150 ms)
19
+ const BUCKET_MS = 4000; // activity series bucket width
20
+ const BUCKET_COUNT = 15; // activity series length → 15×4s = 60s window
18
21
  function bodyText(msg) {
19
22
  return partsToText(msg.parts);
20
23
  }
24
+ /** Does this error say the membership feed's bucket does not exist (no delivery daemon ever
25
+ * provisioned it)? The JetStream "stream not found" answer, by API code and by message; anything
26
+ * else (a permission refusal, a timeout, a closed connection) is a failed read, not an absent feed. */
27
+ function feedAbsent(e) {
28
+ const err = e;
29
+ if (err?.api_error?.err_code === 10059)
30
+ return true;
31
+ if (err?.code === 404 || err?.code === "404")
32
+ return true;
33
+ return /stream not found/i.test(err?.message ?? "");
34
+ }
21
35
  function sortRoster(r) {
22
36
  // getRoster()/the "roster" event sort by name only — re-apply the status order here.
23
37
  return [...r].sort((a, b) => (STATUS_ORDER[a.status] ?? 9) - (STATUS_ORDER[b.status] ?? 9) ||
@@ -35,16 +49,22 @@ export class MeshView extends EventEmitter {
35
49
  roster = [];
36
50
  byId = new Map();
37
51
  channelCounts = new Map();
52
+ arrivals = new Map();
38
53
  feed = [];
39
54
  seen = new Set(); // feed ids, for prefill ∪ live dedupe-by-id
40
55
  pending = new Map();
41
56
  dmLog = []; // raw unicast for the DM roll-up
42
57
  recentTs = []; // tap arrivals in the last 1s → msgs/s
43
58
  msgsPerSec = 0;
59
+ bucketCounts = new Array(BUCKET_COUNT).fill(0); // 60s volume series, oldest→newest
60
+ bucketEpoch = 0; // floor(now/BUCKET_MS) of the newest (last) bucket; 0 = uninitialized
44
61
  connected = false;
45
62
  error;
46
63
  warning;
47
64
  dirty = true;
65
+ membership = {};
66
+ membershipWatch;
67
+ membershipTimer;
48
68
  window;
49
69
  tapSubject;
50
70
  chatOnly;
@@ -83,6 +103,7 @@ export class MeshView extends EventEmitter {
83
103
  }, this.tapSubject ? { subject: this.tapSubject } : undefined);
84
104
  void this.prefill();
85
105
  void this.refreshChannels();
106
+ void this.startMembership();
86
107
  this.timers.push(setInterval(() => this.flush(), TICK_MS));
87
108
  this.timers.push(setInterval(() => void this.refreshChannels(), CHANNELS_MS));
88
109
  this.timers.push(setInterval(() => (this.dirty = true), 1000)); // refresh ages + decay rate
@@ -98,18 +119,56 @@ export class MeshView extends EventEmitter {
98
119
  this.ep.off("warning", this.onWarning);
99
120
  this.ep.off("roster", this.onRoster);
100
121
  this.ep.off("presence", this.onPresence);
122
+ clearTimeout(this.membershipTimer);
123
+ await this.membershipWatch?.stop().catch(() => undefined);
101
124
  await this.ep.stop();
102
125
  }
126
+ /** Read the broker-authoritative membership feed and follow it. A membership fault is never
127
+ * a connection fault: it lands on `membership.unreadable` (with its reason), not on
128
+ * `status.error`, because the mesh is fine and only this viewer's read of one feed is not. */
129
+ async startMembership() {
130
+ await this.loadMembership();
131
+ try {
132
+ this.membershipWatch = await this.ep.watchMembership(() => this.scheduleMembership());
133
+ }
134
+ catch (e) {
135
+ // A feed that does not exist cannot be watched, and that is the traffic-only fact the read
136
+ // above already recorded; any other failure is this viewer's, named as such.
137
+ if (!feedAbsent(e))
138
+ this.membership = { ...this.membership, unreadable: `watch: ${e.message}` };
139
+ this.dirty = true;
140
+ }
141
+ }
142
+ scheduleMembership() {
143
+ clearTimeout(this.membershipTimer);
144
+ this.membershipTimer = setTimeout(() => void this.loadMembership(), MEMBERSHIP_DEBOUNCE_MS);
145
+ }
146
+ /** One read of the feed. Three outcomes, kept distinct: a snapshot (readable, whatever it holds),
147
+ * an absent feed (readable in the sense that the mesh has no daemon writing one: an empty
148
+ * snapshot, traffic-only), and a failed read (`unreadable`, reason kept, last snapshot kept so
149
+ * the reason is shown against what was last known rather than against nothing). */
150
+ async loadMembership() {
151
+ try {
152
+ this.membership = { snapshot: await this.ep.readMembership() };
153
+ }
154
+ catch (e) {
155
+ this.membership = feedAbsent(e)
156
+ ? { snapshot: { asOf: undefined, members: [] } }
157
+ : { ...this.membership, unreadable: e.message };
158
+ }
159
+ this.dirty = true;
160
+ }
103
161
  snapshot() {
104
162
  const channels = [...this.channelCounts]
105
- .map(([channel, messages]) => ({ channel, messages }))
163
+ .map(([channel, messages]) => ({ channel, messages, arrivals: this.arrivals.get(channel) ?? 0 }))
106
164
  .sort((a, b) => a.channel.localeCompare(b.channel));
107
165
  return {
108
166
  agents: this.roster.filter((p) => p.card.kind === "agent"),
109
167
  endpoints: this.roster.filter((p) => p.card.kind !== "agent"),
110
168
  channels,
111
169
  feed: this.feed.slice(),
112
- rates: { msgsPerSec: this.msgsPerSec },
170
+ membership: { ...this.membership },
171
+ rates: { msgsPerSec: this.msgsPerSec, activity: this.bucketCounts.slice() },
113
172
  status: {
114
173
  connected: this.connected,
115
174
  space: this.ep.space,
@@ -135,7 +194,10 @@ export class MeshView extends EventEmitter {
135
194
  const kind = deliveryOf(subject);
136
195
  if (!kind)
137
196
  return;
138
- this.recentTs.push(Date.now());
197
+ const now = Date.now();
198
+ this.recentTs.push(now);
199
+ this.roll(now);
200
+ this.bucketCounts[BUCKET_COUNT - 1]++; // count into the newest bucket
139
201
  if (msg.from?.id && msg.from.name)
140
202
  this.byId.set(msg.from.id, msg.from.name); // sharpen id→name
141
203
  if (kind === "unicast")
@@ -190,6 +252,7 @@ export class MeshView extends EventEmitter {
190
252
  ts: b.ts,
191
253
  from: b.from,
192
254
  delivery: "unicast",
255
+ toIds: [...b.ids],
193
256
  toNames: b.ids.map((id) => this.nameOf(id)),
194
257
  count: b.ids.length,
195
258
  text: b.body,
@@ -206,8 +269,13 @@ export class MeshView extends EventEmitter {
206
269
  // is not redundant: this one runs on live arrival, so without it an event channel would appear
207
270
  // as a tab the moment a frame landed and then vanish at the next `refreshChannels`, which reads
208
271
  // as a flickering bug rather than as a filter.
209
- if (e.delivery === "multicast" && e.channel && !e.events && !this.channelCounts.has(e.channel))
210
- this.channelCounts.set(e.channel, 1);
272
+ if (e.delivery === "multicast" && e.channel && !e.events) {
273
+ if (!this.channelCounts.has(e.channel))
274
+ this.channelCounts.set(e.channel, 1);
275
+ // Counted on ARRIVAL, not read back from the broker: the retained count is capped per sender
276
+ // and stops climbing under live traffic, so a badge derived from it goes quiet at the cap.
277
+ this.arrivals.set(e.channel, (this.arrivals.get(e.channel) ?? 0) + 1);
278
+ }
211
279
  this.dirty = true;
212
280
  this.emit("entry", e);
213
281
  }
@@ -305,10 +373,17 @@ export class MeshView extends EventEmitter {
305
373
  }
306
374
  // Event channels are not chat tabs: one per agent that has ever run would bury the handful of
307
375
  // channels a human actually talks on. Same classifier as the prefill, so the tab strip and the
308
- // backlog cannot disagree about what a channel is.
376
+ // backlog cannot disagree about what a channel is. The map is REBUILT, not merged: a channel
377
+ // the broker no longer lists (deleted, its history purged and its registry entry gone) leaves
378
+ // the strip on this poll instead of lingering with its last count.
379
+ const next = new Map();
309
380
  for (const { channel, messages } of chans)
310
381
  if (!isEventChannel(channel))
311
- this.channelCounts.set(channel, messages);
382
+ next.set(channel, messages);
383
+ this.channelCounts = next;
384
+ for (const channel of this.arrivals.keys())
385
+ if (!next.has(channel))
386
+ this.arrivals.delete(channel);
312
387
  this.dirty = true;
313
388
  }
314
389
  // ---- derived signals -----------------------------------------------------
@@ -366,11 +441,35 @@ export class MeshView extends EventEmitter {
366
441
  pe.conversations.sort((a, b) => b.lastTs - a.lastTs);
367
442
  return [...peers.values()].sort((a, b) => b.lastTs - a.lastTs);
368
443
  }
444
+ /** Advance the activity ring to `now`: shift past buckets out the left, fill the gap with zeros,
445
+ * so idle time decays the series. The newest (last) bucket is always the current ~4s window. */
446
+ roll(now) {
447
+ const epoch = Math.floor(now / BUCKET_MS);
448
+ if (this.bucketEpoch === 0) {
449
+ this.bucketEpoch = epoch;
450
+ return;
451
+ }
452
+ const advance = epoch - this.bucketEpoch;
453
+ if (advance <= 0)
454
+ return;
455
+ if (advance >= BUCKET_COUNT) {
456
+ this.bucketCounts.fill(0);
457
+ }
458
+ else {
459
+ this.bucketCounts.splice(0, advance);
460
+ while (this.bucketCounts.length < BUCKET_COUNT)
461
+ this.bucketCounts.push(0);
462
+ }
463
+ this.bucketEpoch = epoch;
464
+ this.dirty = true;
465
+ }
369
466
  /** The single batch point: recompute the rolling rate, then emit one snapshot if dirty. */
370
467
  flush() {
371
- const cutoff = Date.now() - 1000;
468
+ const now = Date.now();
469
+ const cutoff = now - 1000;
372
470
  while (this.recentTs.length && this.recentTs[0] < cutoff)
373
471
  this.recentTs.shift();
472
+ this.roll(now); // decay the activity window even when no message arrived
374
473
  if (this.recentTs.length !== this.msgsPerSec) {
375
474
  this.msgsPerSec = this.recentTs.length;
376
475
  this.dirty = true;
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-view.js","sourceRoot":"","sources":["../../src/view/mesh-view.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mesh-view.js","sourceRoot":"","sources":["../../src/view/mesh-view.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cotal-ai/cli",
3
3
  "description": "Cotal mesh CLI: up, join, watch, console, spawn, mint, channels, history, ext.",
4
- "version": "0.50.1",
4
+ "version": "0.52.0",
5
5
  "homepage": "https://cotal.ai",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
@@ -29,8 +29,8 @@
29
29
  "yaml": "^2.9.0",
30
30
  "zod": "^4.4.3",
31
31
  "ws": "^8.21.0",
32
- "@cotal-ai/core": "0.50.1",
33
- "@cotal-ai/workspace": "0.50.1"
32
+ "@cotal-ai/core": "0.52.0",
33
+ "@cotal-ai/workspace": "0.52.0"
34
34
  },
35
35
  "optionalDependencies": {
36
36
  "@eplightning/nats-server-darwin-arm64": "^2.14.0",
@@ -43,8 +43,8 @@
43
43
  "devDependencies": {
44
44
  "@types/react": "^19.0.0",
45
45
  "@types/ws": "^8.18.1",
46
- "@cotal-ai/auth": "0.50.1",
47
- "@cotal-ai/smoke-kit": "0.0.0"
46
+ "@cotal-ai/smoke-kit": "0.0.0",
47
+ "@cotal-ai/auth": "0.52.0"
48
48
  },
49
49
  "files": [
50
50
  "dist",
@@ -55,7 +55,14 @@
55
55
  },
56
56
  "scripts": {
57
57
  "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.smoke.json",
58
- "test": "tsx smoke/manifest.smoke.ts && tsx smoke/backup.smoke.ts",
59
- "build": "tsc -p tsconfig.json"
58
+ "test": "tsx smoke/manifest.smoke.ts && tsx smoke/backup.smoke.ts && tsx smoke/sparkline.smoke.ts && tsx smoke/topo-membership.smoke.ts && tsx smoke/console-status-row.smoke.ts && tsx smoke/console-managed-rows.smoke.ts && tsx smoke/console-render.smoke.tsx",
59
+ "smoke:console-attach": "tsx smoke/console-attach.smoke.ts",
60
+ "smoke:console-gaps": "tsx smoke/console-gaps.smoke.ts",
61
+ "smoke:console-control": "tsx smoke/console-control.smoke.ts",
62
+ "smoke:console-participant": "tsx smoke/console-participant.smoke.ts",
63
+ "build": "tsc -p tsconfig.json",
64
+ "smoke:console-render": "tsx smoke/console-render.smoke.tsx",
65
+ "smoke:console-managed-rows": "tsx smoke/console-managed-rows.smoke.ts",
66
+ "smoke:console-status-row": "tsx smoke/console-status-row.smoke.ts"
60
67
  }
61
68
  }