agent-comms 1.11.0 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +1 -1
  3. package/dist/bridges/pi/index.d.ts.map +1 -1
  4. package/dist/bridges/pi/index.js +29 -1
  5. package/dist/bridges/pi/index.js.map +1 -1
  6. package/dist/bridges/user/web/build.d.ts +12 -0
  7. package/dist/bridges/user/web/build.d.ts.map +1 -0
  8. package/dist/bridges/user/web/build.js +83 -0
  9. package/dist/bridges/user/web/build.js.map +1 -0
  10. package/dist/bridges/user/web/frontend/api.d.ts +29 -0
  11. package/dist/bridges/user/web/frontend/api.d.ts.map +1 -0
  12. package/dist/bridges/user/web/frontend/api.js +121 -0
  13. package/dist/bridges/user/web/frontend/api.js.map +1 -0
  14. package/dist/bridges/user/web/frontend/dom.d.ts +38 -0
  15. package/dist/bridges/user/web/frontend/dom.d.ts.map +1 -0
  16. package/dist/bridges/user/web/frontend/dom.js +71 -0
  17. package/dist/bridges/user/web/frontend/dom.js.map +1 -0
  18. package/dist/bridges/user/web/frontend/input.d.ts +22 -0
  19. package/dist/bridges/user/web/frontend/input.d.ts.map +1 -0
  20. package/dist/bridges/user/web/frontend/input.js +129 -0
  21. package/dist/bridges/user/web/frontend/input.js.map +1 -0
  22. package/dist/bridges/user/web/frontend/main.d.ts +8 -0
  23. package/dist/bridges/user/web/frontend/main.d.ts.map +1 -0
  24. package/dist/bridges/user/web/frontend/main.js +141 -0
  25. package/dist/bridges/user/web/frontend/main.js.map +1 -0
  26. package/dist/bridges/user/web/frontend/render.d.ts +30 -0
  27. package/dist/bridges/user/web/frontend/render.d.ts.map +1 -0
  28. package/dist/bridges/user/web/frontend/render.js +129 -0
  29. package/dist/bridges/user/web/frontend/render.js.map +1 -0
  30. package/dist/bridges/user/web/frontend/state.d.ts +34 -0
  31. package/dist/bridges/user/web/frontend/state.d.ts.map +1 -0
  32. package/dist/bridges/user/web/frontend/state.js +71 -0
  33. package/dist/bridges/user/web/frontend/state.js.map +1 -0
  34. package/dist/bridges/user/web/frontend/test/dom.unit.test.d.ts +5 -0
  35. package/dist/bridges/user/web/frontend/test/dom.unit.test.d.ts.map +1 -0
  36. package/dist/bridges/user/web/frontend/test/dom.unit.test.js +149 -0
  37. package/dist/bridges/user/web/frontend/test/dom.unit.test.js.map +1 -0
  38. package/dist/bridges/user/web/frontend/test/input.unit.test.d.ts +5 -0
  39. package/dist/bridges/user/web/frontend/test/input.unit.test.d.ts.map +1 -0
  40. package/dist/bridges/user/web/frontend/test/input.unit.test.js +131 -0
  41. package/dist/bridges/user/web/frontend/test/input.unit.test.js.map +1 -0
  42. package/dist/bridges/user/web/frontend/test/render.unit.test.d.ts +5 -0
  43. package/dist/bridges/user/web/frontend/test/render.unit.test.d.ts.map +1 -0
  44. package/dist/bridges/user/web/frontend/test/render.unit.test.js +436 -0
  45. package/dist/bridges/user/web/frontend/test/render.unit.test.js.map +1 -0
  46. package/dist/bridges/user/web/frontend/test/state.unit.test.d.ts +5 -0
  47. package/dist/bridges/user/web/frontend/test/state.unit.test.d.ts.map +1 -0
  48. package/dist/bridges/user/web/frontend/test/state.unit.test.js +119 -0
  49. package/dist/bridges/user/web/frontend/test/state.unit.test.js.map +1 -0
  50. package/dist/bridges/user/web/frontend/types.d.ts +157 -0
  51. package/dist/bridges/user/web/frontend/types.d.ts.map +1 -0
  52. package/dist/bridges/user/web/frontend/types.js +8 -0
  53. package/dist/bridges/user/web/frontend/types.js.map +1 -0
  54. package/dist/bridges/user/web/generated-html.d.ts +6 -0
  55. package/dist/bridges/user/web/generated-html.d.ts.map +1 -0
  56. package/dist/bridges/user/web/generated-html.js +179 -0
  57. package/dist/bridges/user/web/generated-html.js.map +1 -0
  58. package/dist/bridges/user/web/server.js +1 -1
  59. package/dist/bridges/user/web/server.js.map +1 -1
  60. package/dist/test/{coordinator-socket-error.test.d.ts → coordinator-socket-error.integration.test.d.ts} +1 -1
  61. package/dist/test/coordinator-socket-error.integration.test.d.ts.map +1 -0
  62. package/dist/test/{coordinator-socket-error.test.js → coordinator-socket-error.integration.test.js} +1 -1
  63. package/dist/test/coordinator-socket-error.integration.test.js.map +1 -0
  64. package/dist/test/{mesh-e2e.test.d.ts → mesh-e2e.integration.test.d.ts} +1 -1
  65. package/dist/test/mesh-e2e.integration.test.d.ts.map +1 -0
  66. package/dist/test/{mesh-e2e.test.js → mesh-e2e.integration.test.js} +1 -1
  67. package/dist/test/mesh-e2e.integration.test.js.map +1 -0
  68. package/dist/test/{mesh-smoke.test.d.ts → mesh-smoke.integration.test.d.ts} +1 -1
  69. package/dist/test/mesh-smoke.integration.test.d.ts.map +1 -0
  70. package/dist/test/{mesh-smoke.test.js → mesh-smoke.integration.test.js} +1 -1
  71. package/dist/test/mesh-smoke.integration.test.js.map +1 -0
  72. package/package.json +12 -2
  73. package/dist/bridges/user/web/index.html.d.ts +0 -8
  74. package/dist/bridges/user/web/index.html.d.ts.map +0 -1
  75. package/dist/bridges/user/web/index.html.js +0 -391
  76. package/dist/bridges/user/web/index.html.js.map +0 -1
  77. package/dist/test/coordinator-socket-error.test.d.ts.map +0 -1
  78. package/dist/test/coordinator-socket-error.test.js.map +0 -1
  79. package/dist/test/mesh-e2e.test.d.ts.map +0 -1
  80. package/dist/test/mesh-e2e.test.js.map +0 -1
  81. package/dist/test/mesh-smoke.test.d.ts.map +0 -1
  82. package/dist/test/mesh-smoke.test.js.map +0 -1
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Unit tests for input.ts — command parsing.
3
+ */
4
+ import { describe, it } from "node:test";
5
+ import assert from "node:assert/strict";
6
+ import { parseInput } from "../input.js";
7
+ describe("input", () => {
8
+ describe("parseInput", () => {
9
+ it("ignores empty input", () => {
10
+ assert.deepStrictEqual(parseInput("", undefined), { kind: "ignored" });
11
+ assert.deepStrictEqual(parseInput(" ", undefined), { kind: "ignored" });
12
+ });
13
+ it("returns error for message with no current room or DM target", () => {
14
+ const result = parseInput("hello", undefined, undefined);
15
+ assert.strictEqual(result.kind, "local");
16
+ if (result.kind === "local") {
17
+ assert.strictEqual(result.result.type, "error");
18
+ }
19
+ });
20
+ it("returns DM action when DM target is set and no current room", () => {
21
+ const result = parseInput("hello there", undefined, "agent-42");
22
+ assert.deepStrictEqual(result, {
23
+ kind: "action",
24
+ action: { action: "dm", target: "agent-42", content: "hello there" },
25
+ });
26
+ });
27
+ it("prefers current room over DM target for plain text", () => {
28
+ const result = parseInput("hello", "room-1", "agent-42");
29
+ assert.deepStrictEqual(result, {
30
+ kind: "action",
31
+ action: { action: "send", target: "room-1", content: "hello" },
32
+ });
33
+ });
34
+ it("returns send action for message in current room", () => {
35
+ const result = parseInput("hello there", "room-1");
36
+ assert.deepStrictEqual(result, {
37
+ kind: "action",
38
+ action: { action: "send", target: "room-1", content: "hello there" },
39
+ });
40
+ });
41
+ it("parses /join command", () => {
42
+ const result = parseInput("/join my-room", undefined);
43
+ assert.deepStrictEqual(result, {
44
+ kind: "action",
45
+ action: { action: "join_room", room: "my-room" },
46
+ });
47
+ });
48
+ it("returns error for /join without room", () => {
49
+ const result = parseInput("/join", undefined);
50
+ assert.strictEqual(result.kind, "local");
51
+ if (result.kind === "local") {
52
+ assert.strictEqual(result.result.type, "error");
53
+ assert.ok(result.result.text.includes("Usage"));
54
+ }
55
+ });
56
+ it("parses /leave with explicit room", () => {
57
+ const result = parseInput("/leave room-1", undefined);
58
+ assert.deepStrictEqual(result, {
59
+ kind: "action",
60
+ action: { action: "leave_room", room: "room-1" },
61
+ });
62
+ });
63
+ it("parses /leave with current room", () => {
64
+ const result = parseInput("/leave", "current-room");
65
+ assert.deepStrictEqual(result, {
66
+ kind: "action",
67
+ action: { action: "leave_room", room: "current-room" },
68
+ });
69
+ });
70
+ it("parses /dm command", () => {
71
+ const result = parseInput("/dm agent-1 hello friend", undefined);
72
+ assert.deepStrictEqual(result, {
73
+ kind: "action",
74
+ action: { action: "dm", target: "agent-1", content: "hello friend" },
75
+ });
76
+ });
77
+ it("returns error for /dm without target or message", () => {
78
+ const result = parseInput("/dm", undefined);
79
+ assert.strictEqual(result.kind, "local");
80
+ if (result.kind === "local") {
81
+ assert.strictEqual(result.result.type, "error");
82
+ }
83
+ });
84
+ it("parses /create command", () => {
85
+ const result = parseInput("/create new-room", undefined);
86
+ assert.deepStrictEqual(result, {
87
+ kind: "action",
88
+ action: { action: "create_room", name: "new-room", type: "public" },
89
+ });
90
+ });
91
+ it("parses /destroy command", () => {
92
+ const result = parseInput("/destroy old-room", undefined);
93
+ assert.deepStrictEqual(result, {
94
+ kind: "action",
95
+ action: { action: "destroy_room", room: "old-room" },
96
+ });
97
+ });
98
+ it("parses /rooms command", () => {
99
+ const result = parseInput("/rooms", undefined);
100
+ assert.deepStrictEqual(result, {
101
+ kind: "action",
102
+ action: { action: "list_rooms" },
103
+ });
104
+ });
105
+ it("parses /agents command", () => {
106
+ const result = parseInput("/agents", undefined);
107
+ assert.deepStrictEqual(result, {
108
+ kind: "action",
109
+ action: { action: "list_agents" },
110
+ });
111
+ });
112
+ it("parses /help command", () => {
113
+ const result = parseInput("/help", undefined);
114
+ assert.strictEqual(result.kind, "local");
115
+ if (result.kind === "local") {
116
+ assert.strictEqual(result.result.type, "help");
117
+ assert.ok(result.result.text.includes("/join"));
118
+ assert.ok(result.result.text.includes("/dm"));
119
+ }
120
+ });
121
+ it("returns unknown for unrecognized commands", () => {
122
+ const result = parseInput("/foobar", undefined);
123
+ assert.strictEqual(result.kind, "local");
124
+ if (result.kind === "local") {
125
+ assert.strictEqual(result.result.type, "unknown");
126
+ assert.ok(result.result.text.includes("/foobar"));
127
+ }
128
+ });
129
+ });
130
+ });
131
+ //# sourceMappingURL=input.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.unit.test.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/test/input.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit tests for render.ts — DOM rendering functions.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=render.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.unit.test.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/test/render.unit.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,436 @@
1
+ /**
2
+ * Unit tests for render.ts — DOM rendering functions.
3
+ */
4
+ import { describe, it } from "node:test";
5
+ import assert from "node:assert/strict";
6
+ import { Window } from "happy-dom";
7
+ import { clearMessages, renderAgentList, renderChatMessage, renderDeliveryEvent, renderDmMessage, renderHeader, renderMessageHistory, renderRoomList, renderSystemMessage, } from "../render.js";
8
+ function createDoc() {
9
+ const window = new Window();
10
+ const doc = window.document;
11
+ const messagesEl = doc.createElement("div");
12
+ const roomListEl = doc.createElement("div");
13
+ const agentListEl = doc.createElement("div");
14
+ const headerEl = doc.createElement("div");
15
+ return {
16
+ doc,
17
+ messagesEl,
18
+ roomListEl,
19
+ agentListEl,
20
+ headerEl,
21
+ cleanup: () => {
22
+ window.close();
23
+ },
24
+ };
25
+ }
26
+ const MOCK_MESSAGE = {
27
+ id: "msg-1",
28
+ from: "agent-1",
29
+ room: "room-1",
30
+ content: "Hello world",
31
+ timestamp: "2025-05-23T14:30:45.123Z",
32
+ readBy: [],
33
+ };
34
+ describe("render", () => {
35
+ describe("renderChatMessage", () => {
36
+ it("appends a message element with sender and time", () => {
37
+ const { doc, messagesEl, cleanup } = createDoc();
38
+ try {
39
+ renderChatMessage(doc, { messagesEl }, "Alice", "Hello", "2025-05-23T14:30:45Z");
40
+ assert.strictEqual(messagesEl.children.length, 1);
41
+ const el = messagesEl.children[0];
42
+ assert.strictEqual(el.className, "msg");
43
+ assert.ok(el.innerHTML.includes("Alice"));
44
+ assert.ok(el.innerHTML.includes("14:30:45"));
45
+ assert.ok(el.innerHTML.includes("Hello"));
46
+ }
47
+ finally {
48
+ cleanup();
49
+ }
50
+ });
51
+ });
52
+ describe("renderDmMessage", () => {
53
+ it("appends a DM message with badge", () => {
54
+ const { doc, messagesEl, cleanup } = createDoc();
55
+ try {
56
+ renderDmMessage(doc, { messagesEl }, "Bob", "Private msg", "2025-05-23T14:30:45Z");
57
+ const el = messagesEl.children[0];
58
+ assert.strictEqual(el.className, "msg dm");
59
+ assert.ok(el.innerHTML.includes("DM"));
60
+ assert.ok(el.innerHTML.includes("Bob"));
61
+ }
62
+ finally {
63
+ cleanup();
64
+ }
65
+ });
66
+ });
67
+ describe("renderSystemMessage", () => {
68
+ it("appends an italic system message", () => {
69
+ const { doc, messagesEl, cleanup } = createDoc();
70
+ try {
71
+ renderSystemMessage(doc, { messagesEl }, "Connected");
72
+ const el = messagesEl.children[0];
73
+ assert.strictEqual(el.className, "msg system");
74
+ assert.strictEqual(el.textContent, "Connected");
75
+ }
76
+ finally {
77
+ cleanup();
78
+ }
79
+ });
80
+ });
81
+ describe("clearMessages", () => {
82
+ it("removes all message elements", () => {
83
+ const { doc, messagesEl, cleanup } = createDoc();
84
+ try {
85
+ renderSystemMessage(doc, { messagesEl }, "one");
86
+ renderSystemMessage(doc, { messagesEl }, "two");
87
+ assert.strictEqual(messagesEl.children.length, 2);
88
+ clearMessages({ messagesEl });
89
+ assert.strictEqual(messagesEl.children.length, 0);
90
+ }
91
+ finally {
92
+ cleanup();
93
+ }
94
+ });
95
+ });
96
+ describe("renderHeader", () => {
97
+ it("sets header text", () => {
98
+ const { headerEl, cleanup } = createDoc();
99
+ try {
100
+ renderHeader({ headerEl }, "test-room");
101
+ assert.strictEqual(headerEl.textContent, "test-room");
102
+ }
103
+ finally {
104
+ cleanup();
105
+ }
106
+ });
107
+ });
108
+ describe("renderRoomList", () => {
109
+ it("renders rooms with active state", () => {
110
+ const { doc, roomListEl, agentListEl, cleanup } = createDoc();
111
+ try {
112
+ const rooms = [
113
+ {
114
+ id: "r1",
115
+ name: "Room 1",
116
+ type: "public",
117
+ owner: "a",
118
+ createdAt: "",
119
+ description: "",
120
+ members: ["a", "b"],
121
+ invited: [],
122
+ },
123
+ {
124
+ id: "r2",
125
+ name: "Room 2",
126
+ type: "private",
127
+ owner: "a",
128
+ createdAt: "",
129
+ description: "",
130
+ members: ["a"],
131
+ invited: [],
132
+ },
133
+ ];
134
+ let joinedRoom;
135
+ renderRoomList(doc, { roomListEl, agentListEl }, rooms, "r1", (id) => {
136
+ joinedRoom = id;
137
+ });
138
+ assert.strictEqual(roomListEl.children.length, 2);
139
+ assert.strictEqual(roomListEl.children[0].className, "room-item active");
140
+ assert.strictEqual(roomListEl.children[1].className, "room-item");
141
+ // Click handler works
142
+ roomListEl.children[1].click();
143
+ assert.strictEqual(joinedRoom, "r2");
144
+ }
145
+ finally {
146
+ cleanup();
147
+ }
148
+ });
149
+ });
150
+ describe("renderAgentList", () => {
151
+ it("renders empty list when no agents", () => {
152
+ const { doc, roomListEl, agentListEl, cleanup } = createDoc();
153
+ try {
154
+ renderAgentList(doc, { roomListEl, agentListEl }, []);
155
+ assert.strictEqual(agentListEl.children.length, 0);
156
+ }
157
+ finally {
158
+ cleanup();
159
+ }
160
+ });
161
+ it("renders agents with status dots", () => {
162
+ const { doc, roomListEl, agentListEl, cleanup } = createDoc();
163
+ try {
164
+ const agents = [
165
+ {
166
+ id: "a1",
167
+ name: "Agent 1",
168
+ harness: "pi",
169
+ cwd: "/t",
170
+ pid: 1,
171
+ startedAt: "",
172
+ visibility: "visible",
173
+ status: "active",
174
+ tags: [],
175
+ subscribedRooms: [],
176
+ },
177
+ {
178
+ id: "a2",
179
+ name: "Agent 2",
180
+ harness: "pi",
181
+ cwd: "/t",
182
+ pid: 2,
183
+ startedAt: "",
184
+ visibility: "visible",
185
+ status: "idle",
186
+ tags: [],
187
+ subscribedRooms: [],
188
+ },
189
+ ];
190
+ renderAgentList(doc, { roomListEl, agentListEl }, agents);
191
+ assert.strictEqual(agentListEl.children.length, 2);
192
+ assert.ok(agentListEl.children[0].innerHTML.includes("Agent 1"));
193
+ }
194
+ finally {
195
+ cleanup();
196
+ }
197
+ });
198
+ it("calls onSelect with agent ID when agent is clicked", () => {
199
+ const { doc, roomListEl, agentListEl, cleanup } = createDoc();
200
+ try {
201
+ const agents = [
202
+ {
203
+ id: "a1",
204
+ name: "Agent 1",
205
+ harness: "pi",
206
+ cwd: "/t",
207
+ pid: 1,
208
+ startedAt: "",
209
+ visibility: "visible",
210
+ status: "active",
211
+ tags: [],
212
+ subscribedRooms: [],
213
+ },
214
+ ];
215
+ let selectedId;
216
+ renderAgentList(doc, { roomListEl, agentListEl }, agents, (id) => {
217
+ selectedId = id;
218
+ });
219
+ const item = agentListEl.children[0];
220
+ item.click();
221
+ assert.strictEqual(selectedId, "a1");
222
+ }
223
+ finally {
224
+ cleanup();
225
+ }
226
+ });
227
+ });
228
+ describe("renderDeliveryEvent", () => {
229
+ it("renders room_message for current room", () => {
230
+ const { doc, messagesEl, cleanup } = createDoc();
231
+ try {
232
+ const event = {
233
+ type: "room_message",
234
+ message: MOCK_MESSAGE,
235
+ };
236
+ renderDeliveryEvent(doc, { messagesEl }, event, "room-1");
237
+ assert.strictEqual(messagesEl.children.length, 1);
238
+ }
239
+ finally {
240
+ cleanup();
241
+ }
242
+ });
243
+ it("skips room_message for other rooms", () => {
244
+ const { doc, messagesEl, cleanup } = createDoc();
245
+ try {
246
+ const event = {
247
+ type: "room_message",
248
+ message: MOCK_MESSAGE,
249
+ };
250
+ renderDeliveryEvent(doc, { messagesEl }, event, "other-room");
251
+ assert.strictEqual(messagesEl.children.length, 0);
252
+ }
253
+ finally {
254
+ cleanup();
255
+ }
256
+ });
257
+ it("renders dm regardless of current room", () => {
258
+ const { doc, messagesEl, cleanup } = createDoc();
259
+ try {
260
+ const event = {
261
+ type: "dm",
262
+ message: {
263
+ id: "dm-1",
264
+ from: "a1",
265
+ to: "a2",
266
+ content: "hey",
267
+ timestamp: "2025-05-23T14:30:45Z",
268
+ readBy: [],
269
+ },
270
+ };
271
+ renderDeliveryEvent(doc, { messagesEl }, event, undefined);
272
+ assert.strictEqual(messagesEl.children.length, 1);
273
+ assert.strictEqual(messagesEl.children[0].className, "msg dm");
274
+ }
275
+ finally {
276
+ cleanup();
277
+ }
278
+ });
279
+ it("renders member_joined as system message", () => {
280
+ const { doc, messagesEl, cleanup } = createDoc();
281
+ try {
282
+ const event = {
283
+ type: "member_joined",
284
+ room: "r1",
285
+ agent: "a1",
286
+ };
287
+ renderDeliveryEvent(doc, { messagesEl }, event, "r1");
288
+ assert.strictEqual(messagesEl.children[0].textContent, "a1 joined r1");
289
+ }
290
+ finally {
291
+ cleanup();
292
+ }
293
+ });
294
+ it("renders member_left as system message", () => {
295
+ const { doc, messagesEl, cleanup } = createDoc();
296
+ try {
297
+ const event = {
298
+ type: "member_left",
299
+ room: "r1",
300
+ agent: "a1",
301
+ };
302
+ renderDeliveryEvent(doc, { messagesEl }, event, "r1");
303
+ assert.strictEqual(messagesEl.children[0].textContent, "a1 left r1");
304
+ }
305
+ finally {
306
+ cleanup();
307
+ }
308
+ });
309
+ it("renders member_status as status message", () => {
310
+ const { doc, messagesEl, cleanup } = createDoc();
311
+ try {
312
+ const event = {
313
+ type: "member_status",
314
+ room: "r1",
315
+ agent: "a1",
316
+ status: "busy",
317
+ };
318
+ renderDeliveryEvent(doc, { messagesEl }, event, "r1");
319
+ assert.strictEqual(messagesEl.children[0].className, "msg status");
320
+ assert.ok(messagesEl.children[0].textContent?.includes("a1 is now busy"));
321
+ }
322
+ finally {
323
+ cleanup();
324
+ }
325
+ });
326
+ it("renders delivery_status as status message", () => {
327
+ const { doc, messagesEl, cleanup } = createDoc();
328
+ try {
329
+ const event = {
330
+ type: "delivery_status",
331
+ messageId: "msg-1",
332
+ agent: "a1",
333
+ status: "delivered",
334
+ };
335
+ renderDeliveryEvent(doc, { messagesEl }, event, undefined);
336
+ assert.strictEqual(messagesEl.children[0].className, "msg status");
337
+ assert.ok(messagesEl.children[0].textContent?.includes("delivered"));
338
+ }
339
+ finally {
340
+ cleanup();
341
+ }
342
+ });
343
+ it("renders room_members for current room", () => {
344
+ const { doc, messagesEl, cleanup } = createDoc();
345
+ try {
346
+ const event = {
347
+ type: "room_members",
348
+ room: "r1",
349
+ members: [
350
+ { id: "a1", name: "Alice", status: "active" },
351
+ { id: "a2", name: "Bob", status: "idle" },
352
+ ],
353
+ };
354
+ renderDeliveryEvent(doc, { messagesEl }, event, "r1");
355
+ const text = messagesEl.children[0].textContent ?? "";
356
+ assert.ok(text.includes("Alice"));
357
+ assert.ok(text.includes("Bob"));
358
+ }
359
+ finally {
360
+ cleanup();
361
+ }
362
+ });
363
+ it("skips room_members for other room", () => {
364
+ const { doc, messagesEl, cleanup } = createDoc();
365
+ try {
366
+ const event = {
367
+ type: "room_members",
368
+ room: "r1",
369
+ members: [{ id: "a1", name: "Alice", status: "active" }],
370
+ };
371
+ renderDeliveryEvent(doc, { messagesEl }, event, "other-room");
372
+ assert.strictEqual(messagesEl.children.length, 0);
373
+ }
374
+ finally {
375
+ cleanup();
376
+ }
377
+ });
378
+ it("renders room_invite with description", () => {
379
+ const { doc, messagesEl, cleanup } = createDoc();
380
+ try {
381
+ const event = {
382
+ type: "room_invite",
383
+ room: "r1",
384
+ roomDescription: "A cool room",
385
+ from: "a1",
386
+ fromName: "Alice",
387
+ fromCwd: "/home",
388
+ };
389
+ renderDeliveryEvent(doc, { messagesEl }, event, undefined);
390
+ const text = messagesEl.children[0].textContent ?? "";
391
+ assert.ok(text.includes("Alice"));
392
+ assert.ok(text.includes("r1"));
393
+ assert.ok(text.includes("A cool room"));
394
+ }
395
+ finally {
396
+ cleanup();
397
+ }
398
+ });
399
+ it("renders invite_declined with reason", () => {
400
+ const { doc, messagesEl, cleanup } = createDoc();
401
+ try {
402
+ const event = {
403
+ type: "invite_declined",
404
+ room: "r1",
405
+ agent: "a1",
406
+ agentName: "Alice",
407
+ reason: "Too busy",
408
+ };
409
+ renderDeliveryEvent(doc, { messagesEl }, event, undefined);
410
+ const text = messagesEl.children[0].textContent ?? "";
411
+ assert.ok(text.includes("Alice"));
412
+ assert.ok(text.includes("Too busy"));
413
+ }
414
+ finally {
415
+ cleanup();
416
+ }
417
+ });
418
+ });
419
+ describe("renderMessageHistory", () => {
420
+ it("renders multiple messages in order", () => {
421
+ const { doc, messagesEl, cleanup } = createDoc();
422
+ try {
423
+ const messages = [
424
+ { ...MOCK_MESSAGE, id: "1", content: "First" },
425
+ { ...MOCK_MESSAGE, id: "2", content: "Second" },
426
+ ];
427
+ renderMessageHistory(doc, { messagesEl }, messages);
428
+ assert.strictEqual(messagesEl.children.length, 2);
429
+ }
430
+ finally {
431
+ cleanup();
432
+ }
433
+ });
434
+ });
435
+ });
436
+ //# sourceMappingURL=render.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.unit.test.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/test/render.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit tests for state.ts — client state management.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=state.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.unit.test.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/test/state.unit.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}