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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/dist/bridges/pi/index.d.ts +5 -2
- package/dist/bridges/pi/index.d.ts.map +1 -1
- package/dist/bridges/pi/index.js +89 -6
- package/dist/bridges/pi/index.js.map +1 -1
- package/dist/bridges/user/controller.d.ts +1 -0
- package/dist/bridges/user/controller.d.ts.map +1 -1
- package/dist/bridges/user/controller.js +12 -0
- package/dist/bridges/user/controller.js.map +1 -1
- package/dist/bridges/user/tui.js +2 -0
- package/dist/bridges/user/tui.js.map +1 -1
- package/dist/bridges/user/web/build.d.ts +3 -5
- package/dist/bridges/user/web/build.d.ts.map +1 -1
- package/dist/bridges/user/web/build.js +11 -36
- package/dist/bridges/user/web/build.js.map +1 -1
- package/dist/bridges/user/web/frontend/components/App.d.ts +23 -0
- package/dist/bridges/user/web/frontend/components/App.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/components/App.js +7 -0
- package/dist/bridges/user/web/frontend/components/App.js.map +1 -0
- package/dist/bridges/user/web/frontend/components/ChatArea.d.ts +14 -0
- package/dist/bridges/user/web/frontend/components/ChatArea.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/components/ChatArea.js +38 -0
- package/dist/bridges/user/web/frontend/components/ChatArea.js.map +1 -0
- package/dist/bridges/user/web/frontend/components/CreateRoomForm.d.ts +11 -0
- package/dist/bridges/user/web/frontend/components/CreateRoomForm.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/components/CreateRoomForm.js +33 -0
- package/dist/bridges/user/web/frontend/components/CreateRoomForm.js.map +1 -0
- package/dist/bridges/user/web/frontend/components/JoinForm.d.ts +11 -0
- package/dist/bridges/user/web/frontend/components/JoinForm.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/components/JoinForm.js +28 -0
- package/dist/bridges/user/web/frontend/components/JoinForm.js.map +1 -0
- package/dist/bridges/user/web/frontend/components/Message.d.ts +8 -0
- package/dist/bridges/user/web/frontend/components/Message.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/components/Message.js +15 -0
- package/dist/bridges/user/web/frontend/components/Message.js.map +1 -0
- package/dist/bridges/user/web/frontend/components/MessageList.d.ts +8 -0
- package/dist/bridges/user/web/frontend/components/MessageList.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/components/MessageList.js +16 -0
- package/dist/bridges/user/web/frontend/components/MessageList.js.map +1 -0
- package/dist/bridges/user/web/frontend/components/ProjectTree.d.ts +17 -0
- package/dist/bridges/user/web/frontend/components/ProjectTree.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/components/ProjectTree.js +59 -0
- package/dist/bridges/user/web/frontend/components/ProjectTree.js.map +1 -0
- package/dist/bridges/user/web/frontend/components/Sidebar.d.ts +16 -0
- package/dist/bridges/user/web/frontend/components/Sidebar.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/components/Sidebar.js +31 -0
- package/dist/bridges/user/web/frontend/components/Sidebar.js.map +1 -0
- package/dist/bridges/user/web/frontend/dom.d.ts +12 -22
- package/dist/bridges/user/web/frontend/dom.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/dom.js +24 -49
- package/dist/bridges/user/web/frontend/dom.js.map +1 -1
- package/dist/bridges/user/web/frontend/input.d.ts +15 -0
- package/dist/bridges/user/web/frontend/input.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/input.js +38 -0
- package/dist/bridges/user/web/frontend/input.js.map +1 -1
- package/dist/bridges/user/web/frontend/main.d.ts +3 -3
- package/dist/bridges/user/web/frontend/main.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/main.js +65 -50
- package/dist/bridges/user/web/frontend/main.js.map +1 -1
- package/dist/bridges/user/web/frontend/messages.d.ts +17 -0
- package/dist/bridges/user/web/frontend/messages.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/messages.js +82 -0
- package/dist/bridges/user/web/frontend/messages.js.map +1 -0
- package/dist/bridges/user/web/frontend/project-tree.d.ts +9 -0
- package/dist/bridges/user/web/frontend/project-tree.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/project-tree.js +173 -0
- package/dist/bridges/user/web/frontend/project-tree.js.map +1 -0
- package/dist/bridges/user/web/frontend/state.d.ts +8 -1
- package/dist/bridges/user/web/frontend/state.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/state.js +17 -1
- package/dist/bridges/user/web/frontend/state.js.map +1 -1
- package/dist/bridges/user/web/frontend/types.d.ts +52 -0
- package/dist/bridges/user/web/frontend/types.d.ts.map +1 -1
- package/dist/bridges/user/web/server.d.ts.map +1 -1
- package/dist/bridges/user/web/server.js +26 -3
- package/dist/bridges/user/web/server.js.map +1 -1
- package/dist/bridges/user/web/test/web-server.integration.test.d.ts +7 -0
- package/dist/bridges/user/web/test/web-server.integration.test.d.ts.map +1 -0
- package/dist/bridges/user/web/test/web-server.integration.test.js +187 -0
- package/dist/bridges/user/web/test/web-server.integration.test.js.map +1 -0
- package/dist/core/bridge.d.ts +15 -0
- package/dist/core/bridge.d.ts.map +1 -1
- package/dist/core/bridge.js +60 -0
- package/dist/core/bridge.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/mesh-store.d.ts +3 -0
- package/dist/core/mesh-store.d.ts.map +1 -1
- package/dist/core/mesh-store.js +107 -7
- package/dist/core/mesh-store.js.map +1 -1
- package/dist/core/test/bridge.unit.test.d.ts +5 -0
- package/dist/core/test/bridge.unit.test.d.ts.map +1 -0
- package/dist/core/test/bridge.unit.test.js +120 -0
- package/dist/core/test/bridge.unit.test.js.map +1 -0
- package/dist/core/types.d.ts +10 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -1
- package/package.json +4 -3
- package/dist/bridges/user/web/frontend/render.d.ts +0 -30
- package/dist/bridges/user/web/frontend/render.d.ts.map +0 -1
- package/dist/bridges/user/web/frontend/render.js +0 -129
- package/dist/bridges/user/web/frontend/render.js.map +0 -1
- package/dist/bridges/user/web/frontend/test/dom.unit.test.d.ts +0 -5
- package/dist/bridges/user/web/frontend/test/dom.unit.test.d.ts.map +0 -1
- package/dist/bridges/user/web/frontend/test/dom.unit.test.js +0 -149
- package/dist/bridges/user/web/frontend/test/dom.unit.test.js.map +0 -1
- package/dist/bridges/user/web/frontend/test/input.unit.test.d.ts +0 -5
- package/dist/bridges/user/web/frontend/test/input.unit.test.d.ts.map +0 -1
- package/dist/bridges/user/web/frontend/test/input.unit.test.js +0 -131
- package/dist/bridges/user/web/frontend/test/input.unit.test.js.map +0 -1
- package/dist/bridges/user/web/frontend/test/render.unit.test.d.ts +0 -5
- package/dist/bridges/user/web/frontend/test/render.unit.test.d.ts.map +0 -1
- package/dist/bridges/user/web/frontend/test/render.unit.test.js +0 -436
- package/dist/bridges/user/web/frontend/test/render.unit.test.js.map +0 -1
- package/dist/bridges/user/web/frontend/test/state.unit.test.d.ts +0 -5
- package/dist/bridges/user/web/frontend/test/state.unit.test.d.ts.map +0 -1
- package/dist/bridges/user/web/frontend/test/state.unit.test.js +0 -119
- package/dist/bridges/user/web/frontend/test/state.unit.test.js.map +0 -1
|
@@ -1,75 +1,75 @@
|
|
|
1
|
+
import { jsx as _jsx } from "preact/jsx-runtime";
|
|
1
2
|
/**
|
|
2
|
-
* Entry point — bootstraps the web UI.
|
|
3
|
+
* Entry point — bootstraps the web UI with Preact.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
5
|
+
* Owns the state store, WebSocket connection, and action handlers.
|
|
6
|
+
* Renders the App component on every state change.
|
|
6
7
|
*/
|
|
8
|
+
import { render } from "preact";
|
|
7
9
|
import "./styles.css";
|
|
10
|
+
import { App } from "./components/App.js";
|
|
8
11
|
import { CommsWs, fetchAgents, fetchRoomMessages, fetchRooms } from "./api.js";
|
|
9
12
|
import { requireElement } from "./dom.js";
|
|
10
13
|
import { parseInput } from "./input.js";
|
|
11
|
-
import { clearMessages, renderDeliveryEvent, renderHeader, renderMessageHistory, renderRoomList, renderAgentList, renderSystemMessage, renderStatusMessage, } from "./render.js";
|
|
12
14
|
import { State } from "./state.js";
|
|
15
|
+
import { deliveryEventToMessage, roomMessageToDisplay } from "./messages.js";
|
|
13
16
|
// ---------------------------------------------------------------------------
|
|
14
|
-
//
|
|
17
|
+
// Mount point
|
|
15
18
|
// ---------------------------------------------------------------------------
|
|
16
|
-
const
|
|
17
|
-
const inputRaw = requireElement(document, "#input", "input");
|
|
18
|
-
const headerEl = requireElement(document, "#header");
|
|
19
|
-
const roomListEl = requireElement(document, "#room-list");
|
|
20
|
-
const agentListEl = requireElement(document, "#agent-list");
|
|
21
|
-
const messageTarget = { messagesEl };
|
|
22
|
-
const sidebarTarget = { roomListEl, agentListEl };
|
|
19
|
+
const rootEl = requireElement(document, "#root");
|
|
23
20
|
// ---------------------------------------------------------------------------
|
|
24
21
|
// State
|
|
25
22
|
// ---------------------------------------------------------------------------
|
|
26
23
|
const state = new State();
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Helpers
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
function addMessage(msg) {
|
|
28
|
+
state.addMessage(msg);
|
|
29
|
+
}
|
|
32
30
|
// ---------------------------------------------------------------------------
|
|
33
31
|
// WebSocket
|
|
34
32
|
// ---------------------------------------------------------------------------
|
|
33
|
+
let pendingAction;
|
|
35
34
|
const ws = new CommsWs({
|
|
36
35
|
onOpen: () => {
|
|
37
36
|
state.setConnected(true);
|
|
38
|
-
|
|
37
|
+
addMessage({ type: "system", text: "Connected to mesh" });
|
|
39
38
|
},
|
|
40
39
|
onClose: () => {
|
|
41
40
|
state.setConnected(false);
|
|
42
|
-
|
|
41
|
+
addMessage({ type: "system", text: "Disconnected — reconnecting..." });
|
|
43
42
|
},
|
|
44
43
|
onFrame: handleFrame,
|
|
45
44
|
});
|
|
46
45
|
function handleFrame(frame) {
|
|
46
|
+
const s = state.get();
|
|
47
47
|
switch (frame.type) {
|
|
48
|
-
case "delivery":
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
case "delivery": {
|
|
49
|
+
const msg = deliveryEventToMessage(frame.event, s.currentRoom);
|
|
50
|
+
if (msg)
|
|
51
|
+
addMessage(msg);
|
|
51
52
|
if (frame.event.type === "member_joined" ||
|
|
52
53
|
frame.event.type === "member_left" ||
|
|
53
54
|
frame.event.type === "member_status") {
|
|
54
55
|
void refreshState();
|
|
55
56
|
}
|
|
56
57
|
break;
|
|
58
|
+
}
|
|
57
59
|
case "result":
|
|
58
|
-
|
|
60
|
+
addMessage({ type: "system", text: frame.result.content });
|
|
59
61
|
if (!frame.result.isError) {
|
|
60
|
-
// Auto-switch current room after successful join_room via command
|
|
61
62
|
if (pendingAction?.action === "join_room" && !state.get().currentRoom) {
|
|
62
63
|
const roomId = pendingAction.room;
|
|
63
64
|
state.setDmTarget(undefined);
|
|
64
65
|
state.setCurrentRoom(roomId);
|
|
65
|
-
renderHeader({ headerEl }, roomId);
|
|
66
66
|
}
|
|
67
67
|
void refreshState();
|
|
68
68
|
}
|
|
69
69
|
pendingAction = undefined;
|
|
70
70
|
break;
|
|
71
71
|
case "error":
|
|
72
|
-
|
|
72
|
+
addMessage({ type: "status", text: `Error: ${frame.message}` });
|
|
73
73
|
break;
|
|
74
74
|
case "state":
|
|
75
75
|
state.applyState(frame.agents, frame.rooms);
|
|
@@ -79,7 +79,6 @@ function handleFrame(frame) {
|
|
|
79
79
|
// ---------------------------------------------------------------------------
|
|
80
80
|
// Actions
|
|
81
81
|
// ---------------------------------------------------------------------------
|
|
82
|
-
let pendingAction;
|
|
83
82
|
function sendAction(action) {
|
|
84
83
|
pendingAction = action;
|
|
85
84
|
ws.sendAction(action);
|
|
@@ -92,50 +91,66 @@ async function refreshState() {
|
|
|
92
91
|
async function onJoinRoom(roomId) {
|
|
93
92
|
state.setDmTarget(undefined);
|
|
94
93
|
state.setCurrentRoom(roomId);
|
|
95
|
-
|
|
96
|
-
clearMessages(messageTarget);
|
|
94
|
+
state.clearMessages();
|
|
97
95
|
sendAction({ action: "join_room", room: roomId });
|
|
98
96
|
// Load history
|
|
99
97
|
const messages = await fetchRoomMessages(roomId);
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
inputRaw.focus();
|
|
98
|
+
state.setMessages(messages.map(roomMessageToDisplay));
|
|
99
|
+
addMessage({ type: "system", text: `Joined ${roomId}` });
|
|
103
100
|
}
|
|
104
101
|
function onSelectAgent(agentId) {
|
|
105
102
|
state.setCurrentRoom(undefined);
|
|
106
103
|
state.setDmTarget(agentId);
|
|
107
|
-
clearMessages(
|
|
108
|
-
renderHeader({ headerEl }, `DM with ${agentId}`);
|
|
109
|
-
inputRaw.focus();
|
|
104
|
+
state.clearMessages();
|
|
110
105
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
106
|
+
function onLeaveRoom() {
|
|
107
|
+
const currentRoom = state.get().currentRoom;
|
|
108
|
+
if (currentRoom) {
|
|
109
|
+
sendAction({ action: "leave_room", room: currentRoom });
|
|
110
|
+
state.setCurrentRoom(undefined);
|
|
111
|
+
state.clearMessages();
|
|
112
|
+
addMessage({ type: "system", text: `Left room "${currentRoom}"` });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function handleSendAction(text) {
|
|
116
|
+
const s = state.get();
|
|
117
|
+
const result = parseInput(text, s.currentRoom, s.dmTarget);
|
|
118
118
|
switch (result.kind) {
|
|
119
119
|
case "action":
|
|
120
120
|
sendAction(result.action);
|
|
121
121
|
break;
|
|
122
122
|
case "local":
|
|
123
|
-
|
|
123
|
+
addMessage({ type: "system", text: result.result.text });
|
|
124
124
|
break;
|
|
125
125
|
case "ignored":
|
|
126
126
|
break;
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
})
|
|
129
|
+
function onCreateRoom(name, type, description) {
|
|
130
|
+
const action = {
|
|
131
|
+
action: "create_room",
|
|
132
|
+
name,
|
|
133
|
+
type,
|
|
134
|
+
...(description ? { description } : {}),
|
|
135
|
+
};
|
|
136
|
+
sendAction(action);
|
|
137
|
+
}
|
|
138
|
+
function onJoinRoomInput(roomName) {
|
|
139
|
+
void onJoinRoom(roomName);
|
|
140
|
+
}
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
// Render loop
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
function rerender() {
|
|
145
|
+
const s = state.get();
|
|
146
|
+
render(_jsx(App, { rooms: s.rooms, agents: s.agents, currentRoom: s.currentRoom, dmTarget: s.dmTarget, messages: s.messages, connected: s.connected, onJoinRoom: (roomId) => {
|
|
147
|
+
void onJoinRoom(roomId);
|
|
148
|
+
}, onSelectAgent: onSelectAgent, onLeaveRoom: onLeaveRoom, onSendAction: handleSendAction, onCreateRoom: onCreateRoom, onJoinRoomInput: onJoinRoomInput }), rootEl);
|
|
149
|
+
}
|
|
150
|
+
state.subscribe(rerender);
|
|
135
151
|
// ---------------------------------------------------------------------------
|
|
136
152
|
// Boot
|
|
137
153
|
// ---------------------------------------------------------------------------
|
|
138
154
|
ws.connect();
|
|
139
155
|
void refreshState();
|
|
140
|
-
inputRaw.focus();
|
|
141
156
|
//# sourceMappingURL=main.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/main.
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/main.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message conversion — transforms wire-format events into display messages.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions, no DOM or state dependency. Testable in isolation.
|
|
5
|
+
*/
|
|
6
|
+
import type { DeliveryEvent, DisplayMessage, RoomMessage } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Convert a delivery event to a display message for the UI.
|
|
9
|
+
* Returns undefined if the event should not be displayed
|
|
10
|
+
* (e.g. room_message for a room that isn't currently active).
|
|
11
|
+
*/
|
|
12
|
+
export declare function deliveryEventToMessage(event: DeliveryEvent, currentRoom: string | undefined): DisplayMessage | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Convert a room message (from REST API history) to a display message.
|
|
15
|
+
*/
|
|
16
|
+
export declare function roomMessageToDisplay(m: RoomMessage): DisplayMessage;
|
|
17
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/messages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7E;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,cAAc,GAAG,SAAS,CAoE5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,WAAW,GAAG,cAAc,CAOnE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message conversion — transforms wire-format events into display messages.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions, no DOM or state dependency. Testable in isolation.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Convert a delivery event to a display message for the UI.
|
|
8
|
+
* Returns undefined if the event should not be displayed
|
|
9
|
+
* (e.g. room_message for a room that isn't currently active).
|
|
10
|
+
*/
|
|
11
|
+
export function deliveryEventToMessage(event, currentRoom) {
|
|
12
|
+
switch (event.type) {
|
|
13
|
+
case "room_message":
|
|
14
|
+
if (currentRoom === event.message.room) {
|
|
15
|
+
return {
|
|
16
|
+
type: "chat",
|
|
17
|
+
sender: event.message.from,
|
|
18
|
+
content: event.message.content,
|
|
19
|
+
timestamp: event.message.timestamp,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
case "dm":
|
|
24
|
+
return {
|
|
25
|
+
type: "dm",
|
|
26
|
+
sender: event.message.from,
|
|
27
|
+
content: event.message.content,
|
|
28
|
+
timestamp: event.message.timestamp,
|
|
29
|
+
};
|
|
30
|
+
case "member_joined":
|
|
31
|
+
return { type: "system", text: `${event.agent} joined ${event.room}` };
|
|
32
|
+
case "member_left":
|
|
33
|
+
return { type: "system", text: `${event.agent} left ${event.room}` };
|
|
34
|
+
case "member_status":
|
|
35
|
+
return {
|
|
36
|
+
type: "status",
|
|
37
|
+
text: `${event.agent} is now ${event.status} in ${event.room}`,
|
|
38
|
+
};
|
|
39
|
+
case "delivery_status":
|
|
40
|
+
return {
|
|
41
|
+
type: "status",
|
|
42
|
+
text: `Message ${event.messageId} ${event.status} by ${event.agent}`,
|
|
43
|
+
};
|
|
44
|
+
case "room_members":
|
|
45
|
+
if (currentRoom === event.room) {
|
|
46
|
+
const memberList = event.members
|
|
47
|
+
.map((m) => `${m.name} (${m.status})`)
|
|
48
|
+
.join(", ");
|
|
49
|
+
return { type: "system", text: `Members: ${memberList}` };
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
case "room_invite": {
|
|
53
|
+
const desc = event.roomDescription ? ` — ${event.roomDescription}` : "";
|
|
54
|
+
return {
|
|
55
|
+
type: "system",
|
|
56
|
+
text: `${event.fromName} invited you to "${event.room}"${desc}`,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
case "invite_declined":
|
|
60
|
+
return {
|
|
61
|
+
type: "system",
|
|
62
|
+
text: `${event.agentName} declined invite to ${event.room}: "${event.reason}"`,
|
|
63
|
+
};
|
|
64
|
+
case "name_changed":
|
|
65
|
+
return {
|
|
66
|
+
type: "system",
|
|
67
|
+
text: `${event.oldName} is now known as ${event.newName}`,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Convert a room message (from REST API history) to a display message.
|
|
73
|
+
*/
|
|
74
|
+
export function roomMessageToDisplay(m) {
|
|
75
|
+
return {
|
|
76
|
+
type: "chat",
|
|
77
|
+
sender: m.from,
|
|
78
|
+
content: m.content,
|
|
79
|
+
timestamp: m.timestamp,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project tree — builds a nested directory tree from agent working directories.
|
|
3
|
+
*
|
|
4
|
+
* Pure function: agents + rooms → ProjectTree. No side effects.
|
|
5
|
+
* Project rooms (auto-created per cwd) are embedded in their directory nodes.
|
|
6
|
+
*/
|
|
7
|
+
import type { Agent, ProjectTree, Room } from "./types.js";
|
|
8
|
+
export declare function buildProjectTree(agents: Agent[], rooms: Room[]): ProjectTree;
|
|
9
|
+
//# sourceMappingURL=project-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-tree.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/project-tree.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAY,MAAM,YAAY,CAAC;AA0DrE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,CA8C5E"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project tree — builds a nested directory tree from agent working directories.
|
|
3
|
+
*
|
|
4
|
+
* Pure function: agents + rooms → ProjectTree. No side effects.
|
|
5
|
+
* Project rooms (auto-created per cwd) are embedded in their directory nodes.
|
|
6
|
+
*/
|
|
7
|
+
function insertIntoTrie(node, segments, agent) {
|
|
8
|
+
const [seg, ...rest] = segments;
|
|
9
|
+
if (seg === undefined) {
|
|
10
|
+
node.agents.push(agent);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
let target = node.children.get(seg);
|
|
14
|
+
if (!target) {
|
|
15
|
+
target = { children: new Map(), agents: [] };
|
|
16
|
+
node.children.set(seg, target);
|
|
17
|
+
}
|
|
18
|
+
insertIntoTrie(target, rest, agent);
|
|
19
|
+
}
|
|
20
|
+
/** Ensure a branch path exists in the trie (creates intermediate nodes). */
|
|
21
|
+
function ensureBranch(node, segments) {
|
|
22
|
+
const [seg, ...rest] = segments;
|
|
23
|
+
if (seg === undefined)
|
|
24
|
+
return;
|
|
25
|
+
let child = node.children.get(seg);
|
|
26
|
+
if (!child) {
|
|
27
|
+
child = { children: new Map(), agents: [] };
|
|
28
|
+
node.children.set(seg, child);
|
|
29
|
+
}
|
|
30
|
+
ensureBranch(child, rest);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build a nested project tree from agent cwd paths.
|
|
34
|
+
*
|
|
35
|
+
* - Trims the longest common prefix shared by ALL agent paths.
|
|
36
|
+
* - Agents in parent directories appear alongside child directories.
|
|
37
|
+
* - Empty branches are pruned.
|
|
38
|
+
* - Manual rooms (not auto-created per cwd) are separated out.
|
|
39
|
+
* - Children sorted: directories first (alphabetical), then agents (alphabetical).
|
|
40
|
+
*/
|
|
41
|
+
const PROJECT_ROOM_PREFIX = "Project room for ";
|
|
42
|
+
/** Check if a room is an auto-created project room. */
|
|
43
|
+
function isProjectRoom(room) {
|
|
44
|
+
return room.description.startsWith(PROJECT_ROOM_PREFIX);
|
|
45
|
+
}
|
|
46
|
+
/** Extract the cwd path from a project room's description. */
|
|
47
|
+
function projectRoomCwd(room) {
|
|
48
|
+
return room.description.slice(PROJECT_ROOM_PREFIX.length);
|
|
49
|
+
}
|
|
50
|
+
export function buildProjectTree(agents, rooms) {
|
|
51
|
+
const manualRooms = rooms.filter((r) => !isProjectRoom(r));
|
|
52
|
+
// Index project rooms by their cwd path
|
|
53
|
+
const projectRoomsByPath = new Map();
|
|
54
|
+
for (const room of rooms) {
|
|
55
|
+
if (isProjectRoom(room)) {
|
|
56
|
+
projectRoomsByPath.set(projectRoomCwd(room), room);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Use all project rooms as tree nodes even if no agents are in that directory
|
|
60
|
+
const allPaths = new Set();
|
|
61
|
+
for (const agent of agents) {
|
|
62
|
+
allPaths.add(agent.cwd);
|
|
63
|
+
}
|
|
64
|
+
for (const cwd of projectRoomsByPath.keys()) {
|
|
65
|
+
allPaths.add(cwd);
|
|
66
|
+
}
|
|
67
|
+
if (allPaths.size === 0) {
|
|
68
|
+
return { roots: [], manualRooms };
|
|
69
|
+
}
|
|
70
|
+
const paths = Array.from(allPaths);
|
|
71
|
+
const prefix = commonPathPrefix(paths);
|
|
72
|
+
const prefixSegments = prefix === "/" ? [] : splitPath(prefix);
|
|
73
|
+
// Group agents by their trimmed path
|
|
74
|
+
const root = { children: new Map(), agents: [] };
|
|
75
|
+
for (const agent of agents) {
|
|
76
|
+
const segments = splitPath(agent.cwd).slice(prefixSegments.length);
|
|
77
|
+
insertIntoTrie(root, segments, agent);
|
|
78
|
+
}
|
|
79
|
+
// Ensure directory branches exist for project room paths that have no agents
|
|
80
|
+
for (const cwd of projectRoomsByPath.keys()) {
|
|
81
|
+
const segments = splitPath(cwd).slice(prefixSegments.length);
|
|
82
|
+
ensureBranch(root, segments);
|
|
83
|
+
}
|
|
84
|
+
// Convert branch tree to TreeNode tree, embedding project rooms
|
|
85
|
+
const roots = branchToNodesWithRooms(root, prefix, "", projectRoomsByPath);
|
|
86
|
+
return { roots: sortChildren(roots), manualRooms };
|
|
87
|
+
}
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
// Internal helpers
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
function splitPath(p) {
|
|
92
|
+
// "/Users/joe/Developer" → ["Users", "joe", "Developer"]
|
|
93
|
+
return p.split("/").filter((s) => s.length > 0);
|
|
94
|
+
}
|
|
95
|
+
function joinPath(...segments) {
|
|
96
|
+
return "/" + segments.join("/");
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Find the longest common parent directory among all paths.
|
|
100
|
+
* Returns "/" if there's no common prefix beyond root.
|
|
101
|
+
*/
|
|
102
|
+
function commonPathPrefix(paths) {
|
|
103
|
+
if (paths.length === 0)
|
|
104
|
+
return "/";
|
|
105
|
+
const split = paths.map(splitPath);
|
|
106
|
+
const minLength = Math.min(...split.map((s) => s.length));
|
|
107
|
+
let commonLen = 0;
|
|
108
|
+
for (let i = 0; i < minLength; i++) {
|
|
109
|
+
const segment = split[0]?.[i];
|
|
110
|
+
if (segment === undefined)
|
|
111
|
+
break;
|
|
112
|
+
if (split.every((s) => s[i] === segment)) {
|
|
113
|
+
commonLen++;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Use parent of the common prefix so the last shared segment
|
|
120
|
+
// appears as a directory in the tree
|
|
121
|
+
if (commonLen > 0)
|
|
122
|
+
commonLen--;
|
|
123
|
+
if (commonLen === 0)
|
|
124
|
+
return "/";
|
|
125
|
+
return joinPath(...(split[0]?.slice(0, commonLen) ?? []));
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Convert the internal branch tree into TreeNode[], embedding project rooms.
|
|
129
|
+
*/
|
|
130
|
+
function branchToNodesWithRooms(branch, prefix, currentPath, projectRoomsByPath) {
|
|
131
|
+
const nodes = [];
|
|
132
|
+
// Subdirectories
|
|
133
|
+
for (const [name, child] of branch.children) {
|
|
134
|
+
const childPath = currentPath === "" && prefix === "/"
|
|
135
|
+
? "/" + name
|
|
136
|
+
: currentPath === ""
|
|
137
|
+
? prefix + "/" + name
|
|
138
|
+
: currentPath + "/" + name;
|
|
139
|
+
const childNodes = branchToNodesWithRooms(child, prefix, childPath, projectRoomsByPath);
|
|
140
|
+
if (childNodes.length > 0) {
|
|
141
|
+
// Check if this directory has a project room
|
|
142
|
+
const room = projectRoomsByPath.get(childPath);
|
|
143
|
+
nodes.push({
|
|
144
|
+
type: "directory",
|
|
145
|
+
name,
|
|
146
|
+
path: childPath,
|
|
147
|
+
...(room ? { roomId: room.id } : {}),
|
|
148
|
+
children: sortChildren(childNodes),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Agents in this directory
|
|
153
|
+
for (const agent of branch.agents) {
|
|
154
|
+
nodes.push({
|
|
155
|
+
type: "agent",
|
|
156
|
+
name: agent.name,
|
|
157
|
+
agentId: agent.id,
|
|
158
|
+
status: agent.status,
|
|
159
|
+
cwd: agent.cwd,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return nodes;
|
|
163
|
+
}
|
|
164
|
+
function sortChildren(nodes) {
|
|
165
|
+
return [...nodes].sort((a, b) => {
|
|
166
|
+
// Directories first, then agents
|
|
167
|
+
if (a.type !== b.type) {
|
|
168
|
+
return a.type === "directory" ? -1 : 1;
|
|
169
|
+
}
|
|
170
|
+
return a.name.localeCompare(b.name);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=project-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-tree.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/project-tree.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,SAAS,cAAc,CAAC,IAAY,EAAE,QAAkB,EAAE,KAAY;IACpE,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC;IAChC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IACD,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,4EAA4E;AAC5E,SAAS,YAAY,CAAC,IAAY,EAAE,QAAkB;IACpD,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC;IAChC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO;IAC9B,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEhD,uDAAuD;AACvD,SAAS,aAAa,CAAC,IAAU;IAC/B,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;AAC1D,CAAC;AAED,8DAA8D;AAC9D,SAAS,cAAc,CAAC,IAAU;IAChC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAe,EAAE,KAAa;IAC7D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,wCAAwC;IACxC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAgB,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5C,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE/D,qCAAqC;IACrC,MAAM,IAAI,GAAW,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAEzD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACnE,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,6EAA6E;IAC7E,KAAK,MAAM,GAAG,IAAI,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC7D,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,gEAAgE;IAChE,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAE3E,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;AACrD,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,SAAS,SAAS,CAAC,CAAS;IAC1B,yDAAyD;IACzD,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,QAAQ,CAAC,GAAG,QAAkB;IACrC,OAAO,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,KAAe;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEnC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM;QACjC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC;YACzC,SAAS,EAAE,CAAC;QACd,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,qCAAqC;IACrC,IAAI,SAAS,GAAG,CAAC;QAAE,SAAS,EAAE,CAAC;IAE/B,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAChC,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC7B,MAAc,EACd,MAAc,EACd,WAAmB,EACnB,kBAAqC;IAErC,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,iBAAiB;IACjB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,SAAS,GACb,WAAW,KAAK,EAAE,IAAI,MAAM,KAAK,GAAG;YAClC,CAAC,CAAC,GAAG,GAAG,IAAI;YACZ,CAAC,CAAC,WAAW,KAAK,EAAE;gBAClB,CAAC,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI;gBACrB,CAAC,CAAC,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC;QAEjC,MAAM,UAAU,GAAG,sBAAsB,CACvC,KAAK,EACL,MAAM,EACN,SAAS,EACT,kBAAkB,CACnB,CAAC;QACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,6CAA6C;YAC7C,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,WAAW;gBACjB,IAAI;gBACJ,IAAI,EAAE,SAAS;gBACf,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,EAAE,KAAK,CAAC,GAAG;SACf,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB;IACrC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,iCAAiC;QACjC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
* No DOM dependency. Testable in isolation.
|
|
5
5
|
* Consumers subscribe to changes and re-render as needed.
|
|
6
6
|
*/
|
|
7
|
-
import type { Agent, Room } from "./types.js";
|
|
7
|
+
import type { Agent, DisplayMessage, Room } from "./types.js";
|
|
8
8
|
export type StateChangeListener = (state: Readonly<ClientState>) => void;
|
|
9
9
|
export interface ClientState {
|
|
10
10
|
currentRoom: string | undefined;
|
|
11
11
|
dmTarget: string | undefined;
|
|
12
12
|
agents: Agent[];
|
|
13
13
|
rooms: Room[];
|
|
14
|
+
messages: DisplayMessage[];
|
|
14
15
|
connected: boolean;
|
|
15
16
|
}
|
|
16
17
|
export declare class State {
|
|
@@ -25,6 +26,12 @@ export declare class State {
|
|
|
25
26
|
setAgents(agents: Agent[]): void;
|
|
26
27
|
setRooms(rooms: Room[]): void;
|
|
27
28
|
setConnected(connected: boolean): void;
|
|
29
|
+
/** Add a display message to the message list. */
|
|
30
|
+
addMessage(message: DisplayMessage): void;
|
|
31
|
+
/** Replace all messages (e.g. when loading history). */
|
|
32
|
+
setMessages(messages: DisplayMessage[]): void;
|
|
33
|
+
/** Clear all messages. */
|
|
34
|
+
clearMessages(): void;
|
|
28
35
|
/** Bulk update from a state frame (initial WS connection). */
|
|
29
36
|
applyState(agents: Agent[], rooms: Room[]): void;
|
|
30
37
|
/** Reset to initial state. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;AAEzE,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;CACpB;AAWD,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAE5D,mEAAmE;IACnE,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAOpD,6CAA6C;IAC7C,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC;IAQ5B,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKhD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAK9C,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;IAKhC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAK7B,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAKtC,iDAAiD;IACjD,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAKzC,wDAAwD;IACxD,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI;IAK7C,0BAA0B;IAC1B,aAAa,IAAI,IAAI;IAKrB,8DAA8D;IAC9D,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAKhD,8BAA8B;IAC9B,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,MAAM;CAMf"}
|
|
@@ -9,6 +9,7 @@ const INITIAL_STATE = {
|
|
|
9
9
|
dmTarget: undefined,
|
|
10
10
|
agents: [],
|
|
11
11
|
rooms: [],
|
|
12
|
+
messages: [],
|
|
12
13
|
connected: false,
|
|
13
14
|
};
|
|
14
15
|
export class State {
|
|
@@ -48,6 +49,21 @@ export class State {
|
|
|
48
49
|
this.state = { ...this.state, connected };
|
|
49
50
|
this.notify();
|
|
50
51
|
}
|
|
52
|
+
/** Add a display message to the message list. */
|
|
53
|
+
addMessage(message) {
|
|
54
|
+
this.state = { ...this.state, messages: [...this.state.messages, message] };
|
|
55
|
+
this.notify();
|
|
56
|
+
}
|
|
57
|
+
/** Replace all messages (e.g. when loading history). */
|
|
58
|
+
setMessages(messages) {
|
|
59
|
+
this.state = { ...this.state, messages };
|
|
60
|
+
this.notify();
|
|
61
|
+
}
|
|
62
|
+
/** Clear all messages. */
|
|
63
|
+
clearMessages() {
|
|
64
|
+
this.state = { ...this.state, messages: [] };
|
|
65
|
+
this.notify();
|
|
66
|
+
}
|
|
51
67
|
/** Bulk update from a state frame (initial WS connection). */
|
|
52
68
|
applyState(agents, rooms) {
|
|
53
69
|
this.state = { ...this.state, agents, rooms };
|
|
@@ -55,7 +71,7 @@ export class State {
|
|
|
55
71
|
}
|
|
56
72
|
/** Reset to initial state. */
|
|
57
73
|
reset() {
|
|
58
|
-
this.state = { ...INITIAL_STATE };
|
|
74
|
+
this.state = { ...INITIAL_STATE, messages: [] };
|
|
59
75
|
this.notify();
|
|
60
76
|
}
|
|
61
77
|
// -----------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/state.ts"],"names":[],"mappings":"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"}
|