agent-comms 1.13.0 → 1.14.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 (122) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +1 -1
  3. package/dist/bridges/pi/index.d.ts +5 -2
  4. package/dist/bridges/pi/index.d.ts.map +1 -1
  5. package/dist/bridges/pi/index.js +89 -6
  6. package/dist/bridges/pi/index.js.map +1 -1
  7. package/dist/bridges/user/controller.d.ts +1 -0
  8. package/dist/bridges/user/controller.d.ts.map +1 -1
  9. package/dist/bridges/user/controller.js +12 -0
  10. package/dist/bridges/user/controller.js.map +1 -1
  11. package/dist/bridges/user/tui.js +2 -0
  12. package/dist/bridges/user/tui.js.map +1 -1
  13. package/dist/bridges/user/web/build.d.ts +3 -5
  14. package/dist/bridges/user/web/build.d.ts.map +1 -1
  15. package/dist/bridges/user/web/build.js +11 -36
  16. package/dist/bridges/user/web/build.js.map +1 -1
  17. package/dist/bridges/user/web/frontend/components/App.d.ts +23 -0
  18. package/dist/bridges/user/web/frontend/components/App.d.ts.map +1 -0
  19. package/dist/bridges/user/web/frontend/components/App.js +7 -0
  20. package/dist/bridges/user/web/frontend/components/App.js.map +1 -0
  21. package/dist/bridges/user/web/frontend/components/ChatArea.d.ts +14 -0
  22. package/dist/bridges/user/web/frontend/components/ChatArea.d.ts.map +1 -0
  23. package/dist/bridges/user/web/frontend/components/ChatArea.js +38 -0
  24. package/dist/bridges/user/web/frontend/components/ChatArea.js.map +1 -0
  25. package/dist/bridges/user/web/frontend/components/CreateRoomForm.d.ts +11 -0
  26. package/dist/bridges/user/web/frontend/components/CreateRoomForm.d.ts.map +1 -0
  27. package/dist/bridges/user/web/frontend/components/CreateRoomForm.js +33 -0
  28. package/dist/bridges/user/web/frontend/components/CreateRoomForm.js.map +1 -0
  29. package/dist/bridges/user/web/frontend/components/JoinForm.d.ts +11 -0
  30. package/dist/bridges/user/web/frontend/components/JoinForm.d.ts.map +1 -0
  31. package/dist/bridges/user/web/frontend/components/JoinForm.js +28 -0
  32. package/dist/bridges/user/web/frontend/components/JoinForm.js.map +1 -0
  33. package/dist/bridges/user/web/frontend/components/Message.d.ts +8 -0
  34. package/dist/bridges/user/web/frontend/components/Message.d.ts.map +1 -0
  35. package/dist/bridges/user/web/frontend/components/Message.js +15 -0
  36. package/dist/bridges/user/web/frontend/components/Message.js.map +1 -0
  37. package/dist/bridges/user/web/frontend/components/MessageList.d.ts +8 -0
  38. package/dist/bridges/user/web/frontend/components/MessageList.d.ts.map +1 -0
  39. package/dist/bridges/user/web/frontend/components/MessageList.js +16 -0
  40. package/dist/bridges/user/web/frontend/components/MessageList.js.map +1 -0
  41. package/dist/bridges/user/web/frontend/components/ProjectTree.d.ts +17 -0
  42. package/dist/bridges/user/web/frontend/components/ProjectTree.d.ts.map +1 -0
  43. package/dist/bridges/user/web/frontend/components/ProjectTree.js +59 -0
  44. package/dist/bridges/user/web/frontend/components/ProjectTree.js.map +1 -0
  45. package/dist/bridges/user/web/frontend/components/Sidebar.d.ts +16 -0
  46. package/dist/bridges/user/web/frontend/components/Sidebar.d.ts.map +1 -0
  47. package/dist/bridges/user/web/frontend/components/Sidebar.js +31 -0
  48. package/dist/bridges/user/web/frontend/components/Sidebar.js.map +1 -0
  49. package/dist/bridges/user/web/frontend/dom.d.ts +12 -22
  50. package/dist/bridges/user/web/frontend/dom.d.ts.map +1 -1
  51. package/dist/bridges/user/web/frontend/dom.js +24 -49
  52. package/dist/bridges/user/web/frontend/dom.js.map +1 -1
  53. package/dist/bridges/user/web/frontend/input.d.ts +15 -0
  54. package/dist/bridges/user/web/frontend/input.d.ts.map +1 -1
  55. package/dist/bridges/user/web/frontend/input.js +38 -0
  56. package/dist/bridges/user/web/frontend/input.js.map +1 -1
  57. package/dist/bridges/user/web/frontend/main.d.ts +3 -3
  58. package/dist/bridges/user/web/frontend/main.d.ts.map +1 -1
  59. package/dist/bridges/user/web/frontend/main.js +65 -50
  60. package/dist/bridges/user/web/frontend/main.js.map +1 -1
  61. package/dist/bridges/user/web/frontend/messages.d.ts +17 -0
  62. package/dist/bridges/user/web/frontend/messages.d.ts.map +1 -0
  63. package/dist/bridges/user/web/frontend/messages.js +82 -0
  64. package/dist/bridges/user/web/frontend/messages.js.map +1 -0
  65. package/dist/bridges/user/web/frontend/project-tree.d.ts +9 -0
  66. package/dist/bridges/user/web/frontend/project-tree.d.ts.map +1 -0
  67. package/dist/bridges/user/web/frontend/project-tree.js +173 -0
  68. package/dist/bridges/user/web/frontend/project-tree.js.map +1 -0
  69. package/dist/bridges/user/web/frontend/state.d.ts +8 -1
  70. package/dist/bridges/user/web/frontend/state.d.ts.map +1 -1
  71. package/dist/bridges/user/web/frontend/state.js +17 -1
  72. package/dist/bridges/user/web/frontend/state.js.map +1 -1
  73. package/dist/bridges/user/web/frontend/types.d.ts +52 -0
  74. package/dist/bridges/user/web/frontend/types.d.ts.map +1 -1
  75. package/dist/bridges/user/web/server.d.ts.map +1 -1
  76. package/dist/bridges/user/web/server.js +26 -3
  77. package/dist/bridges/user/web/server.js.map +1 -1
  78. package/dist/bridges/user/web/test/web-server.integration.test.d.ts +7 -0
  79. package/dist/bridges/user/web/test/web-server.integration.test.d.ts.map +1 -0
  80. package/dist/bridges/user/web/test/web-server.integration.test.js +187 -0
  81. package/dist/bridges/user/web/test/web-server.integration.test.js.map +1 -0
  82. package/dist/core/bridge.d.ts +15 -0
  83. package/dist/core/bridge.d.ts.map +1 -1
  84. package/dist/core/bridge.js +60 -0
  85. package/dist/core/bridge.js.map +1 -1
  86. package/dist/core/index.d.ts +1 -1
  87. package/dist/core/index.d.ts.map +1 -1
  88. package/dist/core/index.js +1 -1
  89. package/dist/core/index.js.map +1 -1
  90. package/dist/core/mesh-store.d.ts +3 -0
  91. package/dist/core/mesh-store.d.ts.map +1 -1
  92. package/dist/core/mesh-store.js +107 -7
  93. package/dist/core/mesh-store.js.map +1 -1
  94. package/dist/core/test/bridge.unit.test.d.ts +5 -0
  95. package/dist/core/test/bridge.unit.test.d.ts.map +1 -0
  96. package/dist/core/test/bridge.unit.test.js +120 -0
  97. package/dist/core/test/bridge.unit.test.js.map +1 -0
  98. package/dist/core/types.d.ts +10 -0
  99. package/dist/core/types.d.ts.map +1 -1
  100. package/dist/core/types.js +6 -0
  101. package/dist/core/types.js.map +1 -1
  102. package/package.json +4 -3
  103. package/dist/bridges/user/web/frontend/render.d.ts +0 -30
  104. package/dist/bridges/user/web/frontend/render.d.ts.map +0 -1
  105. package/dist/bridges/user/web/frontend/render.js +0 -129
  106. package/dist/bridges/user/web/frontend/render.js.map +0 -1
  107. package/dist/bridges/user/web/frontend/test/dom.unit.test.d.ts +0 -5
  108. package/dist/bridges/user/web/frontend/test/dom.unit.test.d.ts.map +0 -1
  109. package/dist/bridges/user/web/frontend/test/dom.unit.test.js +0 -149
  110. package/dist/bridges/user/web/frontend/test/dom.unit.test.js.map +0 -1
  111. package/dist/bridges/user/web/frontend/test/input.unit.test.d.ts +0 -5
  112. package/dist/bridges/user/web/frontend/test/input.unit.test.d.ts.map +0 -1
  113. package/dist/bridges/user/web/frontend/test/input.unit.test.js +0 -131
  114. package/dist/bridges/user/web/frontend/test/input.unit.test.js.map +0 -1
  115. package/dist/bridges/user/web/frontend/test/render.unit.test.d.ts +0 -5
  116. package/dist/bridges/user/web/frontend/test/render.unit.test.d.ts.map +0 -1
  117. package/dist/bridges/user/web/frontend/test/render.unit.test.js +0 -436
  118. package/dist/bridges/user/web/frontend/test/render.unit.test.js.map +0 -1
  119. package/dist/bridges/user/web/frontend/test/state.unit.test.d.ts +0 -5
  120. package/dist/bridges/user/web/frontend/test/state.unit.test.d.ts.map +0 -1
  121. package/dist/bridges/user/web/frontend/test/state.unit.test.js +0 -119
  122. package/dist/bridges/user/web/frontend/test/state.unit.test.js.map +0 -1
@@ -1,436 +0,0 @@
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
@@ -1 +0,0 @@
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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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Unit tests for state.ts — client state management.
3
- */
4
- export {};
5
- //# sourceMappingURL=state.unit.test.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,119 +0,0 @@
1
- /**
2
- * Unit tests for state.ts — client state management.
3
- */
4
- import { describe, it } from "node:test";
5
- import assert from "node:assert/strict";
6
- import { State } from "../state.js";
7
- const MOCK_AGENT = {
8
- id: "abc123",
9
- name: "Test Agent",
10
- harness: "pi",
11
- cwd: "/test",
12
- pid: 1234,
13
- startedAt: "2025-05-23T10:00:00Z",
14
- visibility: "visible",
15
- status: "active",
16
- tags: [],
17
- subscribedRooms: [],
18
- };
19
- const MOCK_ROOM = {
20
- id: "test-room",
21
- name: "Test Room",
22
- type: "public",
23
- owner: "abc123",
24
- createdAt: "2025-05-23T10:00:00Z",
25
- description: "A test room",
26
- members: ["abc123"],
27
- invited: [],
28
- };
29
- describe("state", () => {
30
- it("starts with initial state", () => {
31
- const state = new State();
32
- const s = state.get();
33
- assert.strictEqual(s.currentRoom, undefined);
34
- assert.strictEqual(s.dmTarget, undefined);
35
- assert.deepStrictEqual(s.agents, []);
36
- assert.deepStrictEqual(s.rooms, []);
37
- assert.strictEqual(s.connected, false);
38
- });
39
- it("sets current room and notifies", () => {
40
- const state = new State();
41
- const notified = [];
42
- state.subscribe((s) => notified.push(s));
43
- state.setCurrentRoom("room-1");
44
- assert.strictEqual(state.get().currentRoom, "room-1");
45
- assert.strictEqual(notified.length, 1);
46
- assert.strictEqual(notified[0]?.currentRoom, "room-1");
47
- });
48
- it("sets agents and notifies", () => {
49
- const state = new State();
50
- state.setAgents([MOCK_AGENT]);
51
- assert.deepStrictEqual(state.get().agents, [MOCK_AGENT]);
52
- });
53
- it("sets rooms and notifies", () => {
54
- const state = new State();
55
- state.setRooms([MOCK_ROOM]);
56
- assert.deepStrictEqual(state.get().rooms, [MOCK_ROOM]);
57
- });
58
- it("sets connected and notifies", () => {
59
- const state = new State();
60
- state.setConnected(true);
61
- assert.strictEqual(state.get().connected, true);
62
- });
63
- it("applyState sets agents and rooms atomically", () => {
64
- const state = new State();
65
- const notified = Array();
66
- state.subscribe(() => notified.push(true));
67
- state.applyState([MOCK_AGENT], [MOCK_ROOM]);
68
- assert.deepStrictEqual(state.get().agents, [MOCK_AGENT]);
69
- assert.deepStrictEqual(state.get().rooms, [MOCK_ROOM]);
70
- assert.strictEqual(notified.length, 1);
71
- });
72
- it("sets dmTarget and notifies", () => {
73
- const state = new State();
74
- const notified = [];
75
- state.subscribe((s) => notified.push(s));
76
- state.setDmTarget("agent-42");
77
- assert.strictEqual(state.get().dmTarget, "agent-42");
78
- assert.strictEqual(notified.length, 1);
79
- assert.strictEqual(notified[0]?.dmTarget, "agent-42");
80
- });
81
- it("reset returns to initial state", () => {
82
- const state = new State();
83
- state.setCurrentRoom("room-1");
84
- state.setAgents([MOCK_AGENT]);
85
- state.setConnected(true);
86
- state.reset();
87
- const s = state.get();
88
- assert.strictEqual(s.currentRoom, undefined);
89
- assert.deepStrictEqual(s.agents, []);
90
- assert.strictEqual(s.connected, false);
91
- });
92
- it("unsubscribe stops notifications", () => {
93
- const state = new State();
94
- let count = 0;
95
- const unsub = state.subscribe(() => {
96
- count++;
97
- });
98
- state.setConnected(true);
99
- assert.strictEqual(count, 1);
100
- unsub();
101
- state.setConnected(false);
102
- assert.strictEqual(count, 1);
103
- });
104
- it("multiple subscribers all get notified", () => {
105
- const state = new State();
106
- let count1 = 0;
107
- let count2 = 0;
108
- state.subscribe(() => {
109
- count1++;
110
- });
111
- state.subscribe(() => {
112
- count2++;
113
- });
114
- state.setConnected(true);
115
- assert.strictEqual(count1, 1);
116
- assert.strictEqual(count2, 1);
117
- });
118
- });
119
- //# sourceMappingURL=state.unit.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.unit.test.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/test/state.unit.test.ts"],"names":[],"mappings":"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"}