@cotal-ai/cli 0.51.0 → 0.52.1

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 (130) hide show
  1. package/dist/command.d.ts.map +1 -1
  2. package/dist/command.js +8 -0
  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 +67 -18
  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 +37 -36
  19. package/dist/commands/down.js.map +1 -1
  20. package/dist/commands/setup.d.ts +3 -0
  21. package/dist/commands/setup.d.ts.map +1 -1
  22. package/dist/commands/setup.js +20 -11
  23. package/dist/commands/setup.js.map +1 -1
  24. package/dist/commands/spawn.d.ts.map +1 -1
  25. package/dist/commands/spawn.js +18 -2
  26. package/dist/commands/spawn.js.map +1 -1
  27. package/dist/commands/status.d.ts.map +1 -1
  28. package/dist/commands/status.js +131 -35
  29. package/dist/commands/status.js.map +1 -1
  30. package/dist/commands/sync.d.ts +7 -5
  31. package/dist/commands/sync.d.ts.map +1 -1
  32. package/dist/commands/sync.js +22 -23
  33. package/dist/commands/sync.js.map +1 -1
  34. package/dist/commands/up.d.ts +7 -0
  35. package/dist/commands/up.d.ts.map +1 -1
  36. package/dist/commands/up.js +156 -19
  37. package/dist/commands/up.js.map +1 -1
  38. package/dist/commands/update.d.ts +12 -0
  39. package/dist/commands/update.d.ts.map +1 -1
  40. package/dist/commands/update.js +58 -5
  41. package/dist/commands/update.js.map +1 -1
  42. package/dist/console/app.d.ts +14 -6
  43. package/dist/console/app.d.ts.map +1 -1
  44. package/dist/console/app.js +308 -40
  45. package/dist/console/app.js.map +1 -1
  46. package/dist/console/commands.d.ts +29 -1
  47. package/dist/console/commands.d.ts.map +1 -1
  48. package/dist/console/commands.js +109 -13
  49. package/dist/console/commands.js.map +1 -1
  50. package/dist/console/control.d.ts +141 -0
  51. package/dist/console/control.d.ts.map +1 -0
  52. package/dist/console/control.js +189 -0
  53. package/dist/console/control.js.map +1 -0
  54. package/dist/console/mesh.d.ts +1 -1
  55. package/dist/console/mesh.d.ts.map +1 -1
  56. package/dist/console/root.d.ts +13 -1
  57. package/dist/console/root.d.ts.map +1 -1
  58. package/dist/console/root.js +25 -5
  59. package/dist/console/root.js.map +1 -1
  60. package/dist/console/ui/CommandPalette.d.ts +2 -1
  61. package/dist/console/ui/CommandPalette.d.ts.map +1 -1
  62. package/dist/console/ui/CommandPalette.js +3 -2
  63. package/dist/console/ui/CommandPalette.js.map +1 -1
  64. package/dist/console/ui/Confirm.d.ts +13 -4
  65. package/dist/console/ui/Confirm.d.ts.map +1 -1
  66. package/dist/console/ui/Confirm.js +13 -5
  67. package/dist/console/ui/Confirm.js.map +1 -1
  68. package/dist/console/ui/Detail.d.ts +8 -1
  69. package/dist/console/ui/Detail.d.ts.map +1 -1
  70. package/dist/console/ui/Detail.js +11 -4
  71. package/dist/console/ui/Detail.js.map +1 -1
  72. package/dist/console/ui/Help.d.ts.map +1 -1
  73. package/dist/console/ui/Help.js +3 -2
  74. package/dist/console/ui/Help.js.map +1 -1
  75. package/dist/console/ui/Roster.d.ts +9 -1
  76. package/dist/console/ui/Roster.d.ts.map +1 -1
  77. package/dist/console/ui/Roster.js +16 -5
  78. package/dist/console/ui/Roster.js.map +1 -1
  79. package/dist/console/ui/Sparkline.d.ts +13 -0
  80. package/dist/console/ui/Sparkline.d.ts.map +1 -0
  81. package/dist/console/ui/Sparkline.js +21 -0
  82. package/dist/console/ui/Sparkline.js.map +1 -0
  83. package/dist/console/ui/StatusBar.d.ts +4 -1
  84. package/dist/console/ui/StatusBar.d.ts.map +1 -1
  85. package/dist/console/ui/StatusBar.js +5 -3
  86. package/dist/console/ui/StatusBar.js.map +1 -1
  87. package/dist/console/ui/Tabs.d.ts +4 -2
  88. package/dist/console/ui/Tabs.d.ts.map +1 -1
  89. package/dist/console/ui/Tabs.js +5 -3
  90. package/dist/console/ui/Tabs.js.map +1 -1
  91. package/dist/console/ui/topo/Map.d.ts.map +1 -1
  92. package/dist/console/ui/topo/Map.js +34 -2
  93. package/dist/console/ui/topo/Map.js.map +1 -1
  94. package/dist/console/ui/topo/Matrix.d.ts.map +1 -1
  95. package/dist/console/ui/topo/Matrix.js +12 -3
  96. package/dist/console/ui/topo/Matrix.js.map +1 -1
  97. package/dist/console/ui/topo/Sequence.js +1 -1
  98. package/dist/console/ui/topo/Sequence.js.map +1 -1
  99. package/dist/console/ui/topo/Topo.d.ts +10 -2
  100. package/dist/console/ui/topo/Topo.d.ts.map +1 -1
  101. package/dist/console/ui/topo/Topo.js +6 -4
  102. package/dist/console/ui/topo/Topo.js.map +1 -1
  103. package/dist/console/ui/topo/model.d.ts +50 -2
  104. package/dist/console/ui/topo/model.d.ts.map +1 -1
  105. package/dist/console/ui/topo/model.js +69 -6
  106. package/dist/console/ui/topo/model.js.map +1 -1
  107. package/dist/lib/attach-client.d.ts.map +1 -1
  108. package/dist/lib/attach-client.js +7 -1
  109. package/dist/lib/attach-client.js.map +1 -1
  110. package/dist/lib/auth-proc.d.ts +7 -4
  111. package/dist/lib/auth-proc.d.ts.map +1 -1
  112. package/dist/lib/auth-proc.js +26 -7
  113. package/dist/lib/auth-proc.js.map +1 -1
  114. package/dist/lib/delivery-proc.d.ts +10 -2
  115. package/dist/lib/delivery-proc.d.ts.map +1 -1
  116. package/dist/lib/delivery-proc.js +7 -1
  117. package/dist/lib/delivery-proc.js.map +1 -1
  118. package/dist/lib/status.d.ts +5 -3
  119. package/dist/lib/status.d.ts.map +1 -1
  120. package/dist/lib/status.js +16 -3
  121. package/dist/lib/status.js.map +1 -1
  122. package/dist/lib/teardown-spare.d.ts +16 -0
  123. package/dist/lib/teardown-spare.d.ts.map +1 -0
  124. package/dist/lib/teardown-spare.js +46 -0
  125. package/dist/lib/teardown-spare.js.map +1 -0
  126. package/dist/view/mesh-view.d.ts +41 -1
  127. package/dist/view/mesh-view.d.ts.map +1 -1
  128. package/dist/view/mesh-view.js +107 -8
  129. package/dist/view/mesh-view.js.map +1 -1
  130. package/package.json +14 -7
@@ -0,0 +1,16 @@
1
+ import { type LocalProcessContext } from "@cotal-ai/workspace";
2
+ export type SpareSeatRow = {
3
+ name: string;
4
+ mode?: string;
5
+ pid?: number;
6
+ agent?: string;
7
+ cwd?: string;
8
+ status?: string;
9
+ };
10
+ /** Best-effort inventory for the operator-facing spare report. Detach safety is independently
11
+ * established by the exact-process capability marker, so a down broker cannot make the local
12
+ * manager unstoppable. */
13
+ export declare function listManagerSeatsForSpare(context: LocalProcessContext): Promise<SpareSeatRow[] | undefined>;
14
+ export declare function printSparedAgents(rows: SpareSeatRow[]): void;
15
+ export declare function printLegacyManagerSpareUncertainty(): void;
16
+ //# sourceMappingURL=teardown-spare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teardown-spare.d.ts","sourceRoot":"","sources":["../../src/lib/teardown-spare.ts"],"names":[],"mappings":"AASA,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;2BAE2B;AAC3B,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,CAwBhH;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,CAO5D;AAED,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD"}
@@ -0,0 +1,46 @@
1
+ /** The spare side of a stack teardown, shared by `down` and the foreground `up` Ctrl-C handler.
2
+ *
3
+ * One policy, one implementation: a stack stop that is not `--with-agents` snapshots the manager's
4
+ * seats, verifies the exact manager can release its local custody, and reports the agents left
5
+ * behind with the explicit reap route. `down.ts` grew this first (#964, #1301); the foreground
6
+ * signal path then re-teardowned the same stack with none of it (#1307). The helpers live here so
7
+ * the two teardown verbs cannot drift apart again. */
8
+ import { c } from "../ui.js";
9
+ import { askManager, resolveControlTarget } from "../lib/control.js";
10
+ import { loadMeshes } from "@cotal-ai/workspace";
11
+ /** Best-effort inventory for the operator-facing spare report. Detach safety is independently
12
+ * established by the exact-process capability marker, so a down broker cannot make the local
13
+ * manager unstoppable. */
14
+ export async function listManagerSeatsForSpare(context) {
15
+ const mesh = loadMeshes().find((candidate) => candidate.root === context.root && candidate.space === context.space);
16
+ if (!mesh) {
17
+ console.error(c.dim("could not list managed agents (this root has no recorded mesh); agents will still be spared"));
18
+ return undefined;
19
+ }
20
+ let target;
21
+ try {
22
+ target = await resolveControlTarget({ space: mesh.space, server: mesh.server }, "control-caller-privileged", undefined, { onRefusal: "throw" });
23
+ }
24
+ catch (e) {
25
+ console.error(c.dim(`could not list managed agents (${e.message}); agents will still be spared`));
26
+ return undefined;
27
+ }
28
+ const reply = await askManager(target.space, target.server, "ps", undefined, target.auth, "any");
29
+ if (!reply.ok || !Array.isArray(reply.data)) {
30
+ console.error(c.dim(`could not list managed agents (${reply.error ?? "invalid ps reply"}); agents will still be spared`));
31
+ return undefined;
32
+ }
33
+ return reply.data;
34
+ }
35
+ export function printSparedAgents(rows) {
36
+ console.log(c.dim(`left ${rows.length} managed agent${rows.length === 1 ? "" : "s"} running (no longer managed):`));
37
+ for (const row of rows) {
38
+ const facts = [row.name, row.mode, row.pid === undefined ? undefined : `pid ${row.pid}`, row.agent, row.cwd, row.status].filter(Boolean);
39
+ console.log(` ${facts.join(" · ")}`);
40
+ }
41
+ console.log(c.dim("to stop managed agents with the stack: cotal down --with-agents"));
42
+ }
43
+ export function printLegacyManagerSpareUncertainty() {
44
+ console.log(c.dim("manager version could not be verified; an older destructive SIGTERM handler may have reaped managed agents"));
45
+ }
46
+ //# sourceMappingURL=teardown-spare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teardown-spare.js","sourceRoot":"","sources":["../../src/lib/teardown-spare.ts"],"names":[],"mappings":"AAAA;;;;;;uDAMuD;AACvD,OAAO,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,UAAU,EAA4B,MAAM,qBAAqB,CAAC;AAW3E;;2BAE2B;AAC3B,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAA4B;IACzE,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IACpH,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC,CAAC;QACpH,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,oBAAoB,CACjC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAC1C,2BAA2B,EAC3B,SAAS,EACT,EAAE,SAAS,EAAE,OAAO,EAAE,CACvB,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,kCAAmC,CAAW,CAAC,OAAO,gCAAgC,CAAC,CAAC,CAAC;QAC7G,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjG,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,kCAAkC,KAAK,CAAC,KAAK,IAAI,kBAAkB,gCAAgC,CAAC,CAAC,CAAC;QAC1H,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAsB,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAoB;IACpD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,MAAM,iBAAiB,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,+BAA+B,CAAC,CAAC,CAAC;IACpH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,kCAAkC;IAChD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,4GAA4G,CAAC,CAAC,CAAC;AACnI,CAAC"}
@@ -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.51.0",
4
+ "version": "0.52.1",
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.51.0",
33
- "@cotal-ai/workspace": "0.51.0"
32
+ "@cotal-ai/core": "0.52.1",
33
+ "@cotal-ai/workspace": "0.52.1"
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/smoke-kit": "0.0.0",
47
- "@cotal-ai/auth": "0.51.0"
46
+ "@cotal-ai/auth": "0.52.1",
47
+ "@cotal-ai/smoke-kit": "0.0.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
  }