agent-comms 1.13.0 → 1.15.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/claude-code/channel.d.ts.map +1 -1
- package/dist/bridges/claude-code/channel.js +6 -1
- package/dist/bridges/claude-code/channel.js.map +1 -1
- package/dist/bridges/codex/tool.d.ts.map +1 -1
- package/dist/bridges/codex/tool.js +6 -1
- package/dist/bridges/codex/tool.js.map +1 -1
- package/dist/bridges/mcp/index.d.ts.map +1 -1
- package/dist/bridges/mcp/index.js +6 -1
- package/dist/bridges/mcp/index.js.map +1 -1
- package/dist/bridges/opencode/plugin.d.ts.map +1 -1
- package/dist/bridges/opencode/plugin.js +5 -0
- package/dist/bridges/opencode/plugin.js.map +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 +125 -20
- package/dist/bridges/pi/index.js.map +1 -1
- package/dist/bridges/user/controller.d.ts +10 -1
- package/dist/bridges/user/controller.d.ts.map +1 -1
- package/dist/bridges/user/controller.js +37 -1
- package/dist/bridges/user/controller.js.map +1 -1
- package/dist/bridges/user/tui.js +4 -0
- package/dist/bridges/user/tui.js.map +1 -1
- package/dist/bridges/user/web/build.d.ts +4 -4
- package/dist/bridges/user/web/build.js +53 -34
- package/dist/bridges/user/web/build.js.map +1 -1
- package/dist/bridges/user/web/frontend/components/App.d.ts +28 -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 +62 -0
- package/dist/bridges/user/web/frontend/components/ProjectTree.js.map +1 -0
- package/dist/bridges/user/web/frontend/components/RelayPanel.d.ts +15 -0
- package/dist/bridges/user/web/frontend/components/RelayPanel.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/components/RelayPanel.js +46 -0
- package/dist/bridges/user/web/frontend/components/RelayPanel.js.map +1 -0
- package/dist/bridges/user/web/frontend/components/Sidebar.d.ts +21 -0
- package/dist/bridges/user/web/frontend/components/Sidebar.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/components/Sidebar.js +37 -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 +39 -1
- 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 +135 -52
- package/dist/bridges/user/web/frontend/main.js.map +1 -1
- package/dist/bridges/user/web/frontend/mesh-client.d.ts +43 -0
- package/dist/bridges/user/web/frontend/mesh-client.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/mesh-client.js +132 -0
- package/dist/bridges/user/web/frontend/mesh-client.js.map +1 -0
- package/dist/bridges/user/web/frontend/mesh-worker.d.ts +14 -0
- package/dist/bridges/user/web/frontend/mesh-worker.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/mesh-worker.js +274 -0
- package/dist/bridges/user/web/frontend/mesh-worker.js.map +1 -0
- 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/relay-client.d.ts +40 -0
- package/dist/bridges/user/web/frontend/relay-client.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/relay-client.js +97 -0
- package/dist/bridges/user/web/frontend/relay-client.js.map +1 -0
- package/dist/bridges/user/web/frontend/relay-worker.d.ts +15 -0
- package/dist/bridges/user/web/frontend/relay-worker.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/relay-worker.js +366 -0
- package/dist/bridges/user/web/frontend/relay-worker.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/sw.d.ts +16 -0
- package/dist/bridges/user/web/frontend/sw.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/sw.js +145 -0
- package/dist/bridges/user/web/frontend/sw.js.map +1 -0
- 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/frontend/url-sync.d.ts +48 -0
- package/dist/bridges/user/web/frontend/url-sync.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/url-sync.js +74 -0
- package/dist/bridges/user/web/frontend/url-sync.js.map +1 -0
- package/dist/bridges/user/web/server.d.ts +10 -3
- package/dist/bridges/user/web/server.d.ts.map +1 -1
- package/dist/bridges/user/web/server.js +280 -15
- 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 +43 -0
- package/dist/core/bridge.d.ts.map +1 -1
- package/dist/core/bridge.js +197 -0
- package/dist/core/bridge.js.map +1 -1
- package/dist/core/comms-store.d.ts +22 -1
- package/dist/core/comms-store.d.ts.map +1 -1
- package/dist/core/discovery-mdns.d.ts +33 -0
- package/dist/core/discovery-mdns.d.ts.map +1 -0
- package/dist/core/discovery-mdns.js +182 -0
- package/dist/core/discovery-mdns.js.map +1 -0
- package/dist/core/discovery-tailscale.d.ts +40 -0
- package/dist/core/discovery-tailscale.d.ts.map +1 -0
- package/dist/core/discovery-tailscale.js +158 -0
- package/dist/core/discovery-tailscale.js.map +1 -0
- package/dist/core/discovery.d.ts +82 -0
- package/dist/core/discovery.d.ts.map +1 -0
- package/dist/core/discovery.js +194 -0
- package/dist/core/discovery.js.map +1 -0
- package/dist/core/federation.d.ts +100 -0
- package/dist/core/federation.d.ts.map +1 -0
- package/dist/core/federation.js +411 -0
- package/dist/core/federation.js.map +1 -0
- package/dist/core/identity.d.ts +31 -0
- package/dist/core/identity.d.ts.map +1 -0
- package/dist/core/identity.js +251 -0
- package/dist/core/identity.js.map +1 -0
- package/dist/core/index.d.ts +12 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +7 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/mesh-store.d.ts +75 -26
- package/dist/core/mesh-store.d.ts.map +1 -1
- package/dist/core/mesh-store.js +570 -355
- package/dist/core/mesh-store.js.map +1 -1
- package/dist/core/push-manager.d.ts +41 -0
- package/dist/core/push-manager.d.ts.map +1 -0
- package/dist/core/push-manager.js +60 -0
- package/dist/core/push-manager.js.map +1 -0
- package/dist/core/store.d.ts +21 -1
- package/dist/core/store.d.ts.map +1 -1
- package/dist/core/store.js +44 -0
- package/dist/core/store.js.map +1 -1
- package/dist/core/tcp-transport.d.ts +77 -0
- package/dist/core/tcp-transport.d.ts.map +1 -0
- package/dist/core/tcp-transport.js +596 -0
- package/dist/core/tcp-transport.js.map +1 -0
- 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/test/identity.unit.test.d.ts +5 -0
- package/dist/core/test/identity.unit.test.d.ts.map +1 -0
- package/dist/core/test/identity.unit.test.js +70 -0
- package/dist/core/test/identity.unit.test.js.map +1 -0
- package/dist/core/tls-transport.d.ts +69 -0
- package/dist/core/tls-transport.d.ts.map +1 -0
- package/dist/core/tls-transport.js +602 -0
- package/dist/core/tls-transport.js.map +1 -0
- package/dist/core/tool.d.ts +23 -2
- package/dist/core/tool.d.ts.map +1 -1
- package/dist/core/tool.js +269 -1
- package/dist/core/tool.js.map +1 -1
- package/dist/core/transport.d.ts +166 -0
- package/dist/core/transport.d.ts.map +1 -0
- package/dist/core/transport.js +20 -0
- package/dist/core/transport.js.map +1 -0
- package/dist/core/types.d.ts +146 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +77 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/vapid.d.ts +22 -0
- package/dist/core/vapid.d.ts.map +1 -0
- package/dist/core/vapid.js +50 -0
- package/dist/core/vapid.js.map +1 -0
- package/dist/core/web-push.d.ts +37 -0
- package/dist/core/web-push.d.ts.map +1 -0
- package/dist/core/web-push.js +198 -0
- package/dist/core/web-push.js.map +1 -0
- package/dist/core/wire-protocol.d.ts +131 -0
- package/dist/core/wire-protocol.d.ts.map +1 -0
- package/dist/core/wire-protocol.js +54 -0
- package/dist/core/wire-protocol.js.map +1 -0
- package/dist/core/ws-transport.d.ts +71 -0
- package/dist/core/ws-transport.d.ts.map +1 -0
- package/dist/core/ws-transport.js +560 -0
- package/dist/core/ws-transport.js.map +1 -0
- package/dist/test/approval.integration.test.d.ts +9 -0
- package/dist/test/approval.integration.test.d.ts.map +1 -0
- package/dist/test/approval.integration.test.js +361 -0
- package/dist/test/approval.integration.test.js.map +1 -0
- package/dist/test/delivery-receipt.helper.d.ts +16 -0
- package/dist/test/delivery-receipt.helper.d.ts.map +1 -0
- package/dist/test/delivery-receipt.helper.js +409 -0
- package/dist/test/delivery-receipt.helper.js.map +1 -0
- package/dist/test/delivery-receipt.runner.d.ts +13 -0
- package/dist/test/delivery-receipt.runner.d.ts.map +1 -0
- package/dist/test/delivery-receipt.runner.js +51 -0
- package/dist/test/delivery-receipt.runner.js.map +1 -0
- package/dist/test/federation.integration.test.d.ts +15 -0
- package/dist/test/federation.integration.test.d.ts.map +1 -0
- package/dist/test/federation.integration.test.js +218 -0
- package/dist/test/federation.integration.test.js.map +1 -0
- package/dist/test/listener-policy.integration.test.d.ts +9 -0
- package/dist/test/listener-policy.integration.test.d.ts.map +1 -0
- package/dist/test/listener-policy.integration.test.js +239 -0
- package/dist/test/listener-policy.integration.test.js.map +1 -0
- package/dist/test/tls-transport.integration.test.d.ts +8 -0
- package/dist/test/tls-transport.integration.test.d.ts.map +1 -0
- package/dist/test/tls-transport.integration.test.js +158 -0
- package/dist/test/tls-transport.integration.test.js.map +1 -0
- package/dist/test/visibility.integration.test.d.ts +12 -0
- package/dist/test/visibility.integration.test.d.ts.map +1 -0
- package/dist/test/visibility.integration.test.js +181 -0
- package/dist/test/visibility.integration.test.js.map +1 -0
- package/package.json +7 -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
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* RelayPanel — UI for configuring the PWA mesh relay.
|
|
4
|
+
*
|
|
5
|
+
* Provides input fields for two mesh WebSocket URLs, connect/disconnect
|
|
6
|
+
* controls, and a live status display showing connection state and
|
|
7
|
+
* forwarding statistics.
|
|
8
|
+
*/
|
|
9
|
+
import { useState, useEffect } from "preact/hooks";
|
|
10
|
+
export function RelayPanel({ status, onConnect, onDisconnect, }) {
|
|
11
|
+
const [urlA, setUrlA] = useState(status.urlA ?? "ws://localhost:8080/ws/mesh");
|
|
12
|
+
const [urlB, setUrlB] = useState(status.urlB ?? "ws://localhost:8081/ws/mesh");
|
|
13
|
+
const [expanded, setExpanded] = useState(false);
|
|
14
|
+
const bothConnected = status.connectedA && status.connectedB;
|
|
15
|
+
const eitherConnected = status.connectedA || status.connectedB;
|
|
16
|
+
// Sync URL fields when the relay reports new URLs (e.g. after reconnect)
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (status.urlA)
|
|
19
|
+
setUrlA(status.urlA);
|
|
20
|
+
if (status.urlB)
|
|
21
|
+
setUrlB(status.urlB);
|
|
22
|
+
}, [status.urlA, status.urlB]);
|
|
23
|
+
if (!expanded) {
|
|
24
|
+
return (_jsx("div", { class: "relay-panel relay-collapsed", children: _jsxs("button", { class: "relay-toggle-btn", onClick: () => {
|
|
25
|
+
setExpanded(true);
|
|
26
|
+
}, children: ["\u293A Relay", bothConnected && (_jsx("span", { class: "relay-badge relay-badge-green", children: "\u25CF" })), eitherConnected && !bothConnected && (_jsx("span", { class: "relay-badge relay-badge-yellow", children: "\u25CF" })), status.forwardedCount > 0 && (_jsx("span", { class: "relay-count", children: status.forwardedCount }))] }) }));
|
|
27
|
+
}
|
|
28
|
+
const handleConnect = (e) => {
|
|
29
|
+
e.preventDefault();
|
|
30
|
+
if (urlA.trim() && urlB.trim()) {
|
|
31
|
+
onConnect(urlA.trim(), urlB.trim());
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
return (_jsxs("div", { class: "relay-panel", children: [_jsxs("div", { class: "relay-header", children: [_jsx("span", { class: "relay-title", children: "Mesh Relay" }), _jsx("button", { class: "relay-collapse-btn", onClick: () => {
|
|
35
|
+
setExpanded(false);
|
|
36
|
+
}, title: "Collapse relay panel", children: "\u2715" })] }), _jsxs("form", { class: "relay-form", onSubmit: handleConnect, children: [_jsxs("label", { class: "relay-label", children: ["Mesh A", _jsx("input", { type: "url", class: "relay-input", placeholder: "ws://machine-a:8080/ws/mesh", value: urlA, onInput: (e) => {
|
|
37
|
+
const target = e.target;
|
|
38
|
+
if (target instanceof HTMLInputElement)
|
|
39
|
+
setUrlA(target.value);
|
|
40
|
+
}, disabled: eitherConnected }), _jsx("span", { class: `relay-status-dot ${status.connectedA ? "active" : ""}` })] }), _jsxs("label", { class: "relay-label", children: ["Mesh B", _jsx("input", { type: "url", class: "relay-input", placeholder: "ws://machine-b:8080/ws/mesh", value: urlB, onInput: (e) => {
|
|
41
|
+
const target = e.target;
|
|
42
|
+
if (target instanceof HTMLInputElement)
|
|
43
|
+
setUrlB(target.value);
|
|
44
|
+
}, disabled: eitherConnected }), _jsx("span", { class: `relay-status-dot ${status.connectedB ? "active" : ""}` })] }), _jsx("div", { class: "relay-actions", children: !eitherConnected ? (_jsx("button", { type: "submit", class: "relay-connect-btn", disabled: !urlA.trim() || !urlB.trim(), children: "Connect" })) : (_jsx("button", { type: "button", class: "relay-disconnect-btn", onClick: onDisconnect, children: "Disconnect" })) })] }), eitherConnected && (_jsxs("div", { class: "relay-stats", children: [_jsxs("span", { class: "relay-stat", children: ["Forwarded: ", status.forwardedCount] }), _jsxs("span", { class: "relay-stat", children: ["A: ", status.connectedA ? "connected" : "disconnected"] }), _jsxs("span", { class: "relay-stat", children: ["B: ", status.connectedB ? "connected" : "disconnected"] })] })), status.errors.length > 0 && (_jsx("div", { class: "relay-errors", children: status.errors.slice(-3).map((err, i) => (_jsx("div", { class: "relay-error", children: err }, i))) }))] }));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=RelayPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RelayPanel.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/RelayPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sidebar — project tree, manual rooms, create/join room controls.
|
|
3
|
+
*/
|
|
4
|
+
import type { Agent, Room } from "../types.js";
|
|
5
|
+
import type { RelayStatus } from "../relay-client.js";
|
|
6
|
+
interface SidebarProps {
|
|
7
|
+
rooms: Room[];
|
|
8
|
+
agents: Agent[];
|
|
9
|
+
currentRoom: string | undefined;
|
|
10
|
+
relayStatus: RelayStatus;
|
|
11
|
+
onJoinRoom: (roomId: string) => void;
|
|
12
|
+
onSelectAgent: (agentId: string) => void;
|
|
13
|
+
onRenameAgent: (agentId: string, newName: string) => void;
|
|
14
|
+
onCreateRoom: (name: string, type: "public" | "private" | "secret", description: string) => void;
|
|
15
|
+
onJoinRoomInput: (roomName: string) => void;
|
|
16
|
+
onRelayConnect: (urlA: string, urlB: string) => void;
|
|
17
|
+
onRelayDisconnect: () => void;
|
|
18
|
+
}
|
|
19
|
+
export declare function Sidebar({ rooms, agents, currentRoom, relayStatus, onJoinRoom, onSelectAgent, onRenameAgent, onCreateRoom, onJoinRoomInput, onRelayConnect, onRelayDisconnect, }: SidebarProps): import("preact").JSX.Element;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=Sidebar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/Sidebar.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOtD,UAAU,YAAY;IACpB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,YAAY,EAAE,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,EACrC,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,iBAAiB,GAClB,EAAE,YAAY,gCAkFd"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Sidebar — project tree, manual rooms, create/join room controls.
|
|
4
|
+
*/
|
|
5
|
+
import { useState } from "preact/hooks";
|
|
6
|
+
import { buildProjectTree } from "../project-tree.js";
|
|
7
|
+
import { CreateRoomForm } from "./CreateRoomForm.js";
|
|
8
|
+
import { JoinForm } from "./JoinForm.js";
|
|
9
|
+
import { ProjectTree } from "./ProjectTree.js";
|
|
10
|
+
import { RelayPanel } from "./RelayPanel.js";
|
|
11
|
+
export function Sidebar({ rooms, agents, currentRoom, relayStatus, onJoinRoom, onSelectAgent, onRenameAgent, onCreateRoom, onJoinRoomInput, onRelayConnect, onRelayDisconnect, }) {
|
|
12
|
+
const [createFormVisible, setCreateFormVisible] = useState(false);
|
|
13
|
+
const [joinFormVisible, setJoinFormVisible] = useState(false);
|
|
14
|
+
const [showOffline, setShowOffline] = useState(false);
|
|
15
|
+
const visibleAgents = showOffline
|
|
16
|
+
? agents
|
|
17
|
+
: agents.filter((a) => a.status !== "offline");
|
|
18
|
+
const tree = buildProjectTree(visibleAgents, rooms);
|
|
19
|
+
return (_jsxs("div", { id: "sidebar", children: [_jsxs("h2", { children: ["Agent Comms", _jsx("button", { id: "toggle-offline-btn", class: `icon-btn${showOffline ? " active" : ""}`, title: `${showOffline ? "Hide" : "Show"} offline agents`, onClick: () => {
|
|
20
|
+
setShowOffline((v) => !v);
|
|
21
|
+
}, children: showOffline ? "◉" : "◎" })] }), _jsxs("div", { class: "sidebar-section", children: [_jsx(ProjectTree, { tree: tree, onJoinRoom: onJoinRoom, onSelectAgent: onSelectAgent, onRenameAgent: onRenameAgent, currentRoom: currentRoom }), _jsxs("div", { class: "section-heading", children: [_jsx("h3", { children: "Create" }), _jsx("button", { id: "create-room-toggle", class: "icon-btn", title: "Create room", onClick: () => {
|
|
22
|
+
setCreateFormVisible((v) => !v);
|
|
23
|
+
}, children: "+" })] }), _jsx(CreateRoomForm, { visible: createFormVisible, onSubmit: (name, type, desc) => {
|
|
24
|
+
onCreateRoom(name, type, desc);
|
|
25
|
+
setCreateFormVisible(false);
|
|
26
|
+
}, onCancel: () => {
|
|
27
|
+
setCreateFormVisible(false);
|
|
28
|
+
} }), _jsx("button", { id: "join-toggle-btn", class: "join-toggle-btn", onClick: () => {
|
|
29
|
+
setJoinFormVisible((v) => !v);
|
|
30
|
+
}, children: "+ Join Room" }), _jsx(JoinForm, { visible: joinFormVisible, onSubmit: (name) => {
|
|
31
|
+
onJoinRoomInput(name);
|
|
32
|
+
setJoinFormVisible(false);
|
|
33
|
+
}, onCancel: () => {
|
|
34
|
+
setJoinFormVisible(false);
|
|
35
|
+
} }), _jsx(RelayPanel, { status: relayStatus, onConnect: onRelayConnect, onDisconnect: onRelayDisconnect })] })] }));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=Sidebar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/Sidebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* DOM utilities for the web UI.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* escapeHtml and formatTime are used by message rendering.
|
|
5
|
+
* requireElement is used by the entry point to grab the root mount point.
|
|
6
6
|
*/
|
|
7
|
-
/**
|
|
8
|
-
* Query selector scoped to a root element.
|
|
9
|
-
* Returns `undefined` if not found (not null).
|
|
10
|
-
*/
|
|
11
|
-
export declare function querySelector(root: ParentNode, selector: string): HTMLElement | undefined;
|
|
12
7
|
/**
|
|
13
8
|
* Query selector that throws if the element is missing.
|
|
14
9
|
* Use for elements that must exist in the HTML shell.
|
|
@@ -16,23 +11,18 @@ export declare function querySelector(root: ParentNode, selector: string): HTMLE
|
|
|
16
11
|
export declare function requireElement(root: ParentNode, selector: string): HTMLElement;
|
|
17
12
|
export declare function requireElement<K extends keyof HTMLElementTagNameMap>(root: ParentNode, selector: string, tag: K): HTMLElementTagNameMap[K];
|
|
18
13
|
/**
|
|
19
|
-
* HTML-escape a string for safe insertion
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Create an HTML element with optional attributes and children.
|
|
24
|
-
*/
|
|
25
|
-
export declare function createElement<K extends keyof HTMLElementTagNameMap>(doc: Document, tag: K, attrs?: Record<string, string>, ...children: (string | Node)[]): HTMLElementTagNameMap[K];
|
|
26
|
-
/**
|
|
27
|
-
* Remove all children from an element.
|
|
28
|
-
*/
|
|
29
|
-
export declare function clearChildren(el: HTMLElement): void;
|
|
30
|
-
/**
|
|
31
|
-
* Append a child and return the parent for chaining.
|
|
14
|
+
* HTML-escape a string for safe insertion.
|
|
15
|
+
* With Preact JSX, text content is auto-escaped — this is only needed
|
|
16
|
+
* when constructing raw HTML strings.
|
|
32
17
|
*/
|
|
33
|
-
export declare function
|
|
18
|
+
export declare function escapeHtml(text: string): string;
|
|
34
19
|
/**
|
|
35
20
|
* Format an ISO timestamp to HH:MM:SS for display.
|
|
36
21
|
*/
|
|
37
22
|
export declare function formatTime(timestamp: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Get an input or select element from an event target.
|
|
25
|
+
* Avoids type assertions by using instanceof narrowing.
|
|
26
|
+
*/
|
|
27
|
+
export declare function inputFromEvent(e: Event): HTMLInputElement | HTMLSelectElement;
|
|
38
28
|
//# sourceMappingURL=dom.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/dom.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAgB,
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/dom.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;AAChF,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,qBAAqB,EAClE,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,CAAC,GACL,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAgB5B;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,GAAG,gBAAgB,GAAG,iBAAiB,CAS7E"}
|
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* DOM utilities for the web UI.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* escapeHtml and formatTime are used by message rendering.
|
|
5
|
+
* requireElement is used by the entry point to grab the root mount point.
|
|
6
6
|
*/
|
|
7
|
-
/**
|
|
8
|
-
* Query selector scoped to a root element.
|
|
9
|
-
* Returns `undefined` if not found (not null).
|
|
10
|
-
*/
|
|
11
|
-
export function querySelector(root, selector) {
|
|
12
|
-
const el = root.querySelector(selector);
|
|
13
|
-
return el ?? undefined;
|
|
14
|
-
}
|
|
15
7
|
export function requireElement(root, selector, tag) {
|
|
16
8
|
const el = root.querySelector(selector);
|
|
17
9
|
if (!el)
|
|
@@ -22,45 +14,16 @@ export function requireElement(root, selector, tag) {
|
|
|
22
14
|
return el;
|
|
23
15
|
}
|
|
24
16
|
/**
|
|
25
|
-
* HTML-escape a string for safe insertion
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const div = doc.createElement("div");
|
|
29
|
-
div.textContent = text;
|
|
30
|
-
return div.innerHTML;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Create an HTML element with optional attributes and children.
|
|
34
|
-
*/
|
|
35
|
-
export function createElement(doc, tag, attrs, ...children) {
|
|
36
|
-
const el = doc.createElement(tag);
|
|
37
|
-
if (attrs) {
|
|
38
|
-
for (const [key, value] of Object.entries(attrs)) {
|
|
39
|
-
el.setAttribute(key, value);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
for (const child of children) {
|
|
43
|
-
if (typeof child === "string") {
|
|
44
|
-
el.appendChild(doc.createTextNode(child));
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
el.appendChild(child);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return el;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Remove all children from an element.
|
|
54
|
-
*/
|
|
55
|
-
export function clearChildren(el) {
|
|
56
|
-
el.innerHTML = "";
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Append a child and return the parent for chaining.
|
|
17
|
+
* HTML-escape a string for safe insertion.
|
|
18
|
+
* With Preact JSX, text content is auto-escaped — this is only needed
|
|
19
|
+
* when constructing raw HTML strings.
|
|
60
20
|
*/
|
|
61
|
-
export function
|
|
62
|
-
|
|
63
|
-
|
|
21
|
+
export function escapeHtml(text) {
|
|
22
|
+
return text
|
|
23
|
+
.replace(/&/g, "&")
|
|
24
|
+
.replace(/</g, "<")
|
|
25
|
+
.replace(/>/g, ">")
|
|
26
|
+
.replace(/"/g, """);
|
|
64
27
|
}
|
|
65
28
|
/**
|
|
66
29
|
* Format an ISO timestamp to HH:MM:SS for display.
|
|
@@ -68,4 +31,16 @@ export function appendTo(parent, child) {
|
|
|
68
31
|
export function formatTime(timestamp) {
|
|
69
32
|
return timestamp.slice(11, 19);
|
|
70
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Get an input or select element from an event target.
|
|
36
|
+
* Avoids type assertions by using instanceof narrowing.
|
|
37
|
+
*/
|
|
38
|
+
export function inputFromEvent(e) {
|
|
39
|
+
const target = e.target;
|
|
40
|
+
if (target instanceof HTMLInputElement ||
|
|
41
|
+
target instanceof HTMLSelectElement) {
|
|
42
|
+
return target;
|
|
43
|
+
}
|
|
44
|
+
throw new Error("Event target is not an input element");
|
|
45
|
+
}
|
|
71
46
|
//# sourceMappingURL=dom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/dom.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/dom.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,MAAM,UAAU,cAAc,CAC5B,IAAgB,EAChB,QAAgB,EAChB,GAAY;IAEZ,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAc,QAAQ,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;IACpE,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,WAAW,QAAQ,aAAa,GAAG,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,OAAO,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,CAAQ;IACrC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACxB,IACE,MAAM,YAAY,gBAAgB;QAClC,MAAM,YAAY,iBAAiB,EACnC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -18,5 +18,20 @@ export type InputResult = {
|
|
|
18
18
|
} | {
|
|
19
19
|
kind: "ignored";
|
|
20
20
|
};
|
|
21
|
+
export type LocalRoute = {
|
|
22
|
+
kind: "join_room";
|
|
23
|
+
room: string;
|
|
24
|
+
} | {
|
|
25
|
+
kind: "leave_room";
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Classify an InputResult to determine if it should be handled locally
|
|
29
|
+
* (e.g. join_room needs to set client state and fetch history) or sent
|
|
30
|
+
* directly to the server via sendAction.
|
|
31
|
+
*
|
|
32
|
+
* Returns null for actions that should go through sendAction directly,
|
|
33
|
+
* and for non-action results (local, ignored).
|
|
34
|
+
*/
|
|
35
|
+
export declare function routeAction(result: InputResult): LocalRoute | null;
|
|
21
36
|
export declare function parseInput(text: string, currentRoom: string | undefined, dmTarget?: string): InputResult;
|
|
22
37
|
//# sourceMappingURL=input.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/input.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAMzC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAMxB,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,QAAQ,CAAC,EAAE,MAAM,GAChB,WAAW,CA6Bb"}
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/input.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAMzC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAMxB,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC;AAE3B;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,IAAI,CAUlE;AAMD,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,QAAQ,CAAC,EAAE,MAAM,GAChB,WAAW,CA6Bb"}
|
|
@@ -4,6 +4,26 @@
|
|
|
4
4
|
* Pure logic, no DOM dependency. Returns an Action or a local command result.
|
|
5
5
|
* Testable in isolation.
|
|
6
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* Classify an InputResult to determine if it should be handled locally
|
|
9
|
+
* (e.g. join_room needs to set client state and fetch history) or sent
|
|
10
|
+
* directly to the server via sendAction.
|
|
11
|
+
*
|
|
12
|
+
* Returns null for actions that should go through sendAction directly,
|
|
13
|
+
* and for non-action results (local, ignored).
|
|
14
|
+
*/
|
|
15
|
+
export function routeAction(result) {
|
|
16
|
+
if (result.kind !== "action")
|
|
17
|
+
return null;
|
|
18
|
+
const action = result.action;
|
|
19
|
+
if (action.action === "join_room") {
|
|
20
|
+
return { kind: "join_room", room: action.room };
|
|
21
|
+
}
|
|
22
|
+
if (action.action === "leave_room") {
|
|
23
|
+
return { kind: "leave_room" };
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
7
27
|
// ---------------------------------------------------------------------------
|
|
8
28
|
// Parser
|
|
9
29
|
// ---------------------------------------------------------------------------
|
|
@@ -111,12 +131,30 @@ function parseCommand(text, currentRoom) {
|
|
|
111
131
|
kind: "action",
|
|
112
132
|
action: { action: "destroy_room", room: parts[1] },
|
|
113
133
|
};
|
|
134
|
+
case "rename":
|
|
135
|
+
if (!parts[1] || !parts[2]) {
|
|
136
|
+
return {
|
|
137
|
+
kind: "local",
|
|
138
|
+
result: {
|
|
139
|
+
type: "error",
|
|
140
|
+
text: "Usage: /rename <agent> <new-name>",
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
kind: "action",
|
|
146
|
+
action: {
|
|
147
|
+
action: "rename_agent",
|
|
148
|
+
agent: parts[1],
|
|
149
|
+
name: parts.slice(2).join(" "),
|
|
150
|
+
},
|
|
151
|
+
};
|
|
114
152
|
case "help":
|
|
115
153
|
return {
|
|
116
154
|
kind: "local",
|
|
117
155
|
result: {
|
|
118
156
|
type: "help",
|
|
119
|
-
text: "Commands: /join, /leave, /rooms, /agents, /dm, /create, /destroy, /help",
|
|
157
|
+
text: "Commands: /join, /leave, /rooms, /agents, /dm, /create, /destroy, /rename, /help",
|
|
120
158
|
},
|
|
121
159
|
};
|
|
122
160
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/input.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/input.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Entry point — bootstraps the web UI.
|
|
2
|
+
* Entry point — bootstraps the web UI with Preact.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Owns the state store, WebSocket connection, and action handlers.
|
|
5
|
+
* Renders the App component on every state change.
|
|
6
6
|
*/
|
|
7
7
|
import "./styles.css";
|
|
8
8
|
//# sourceMappingURL=main.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/main.
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/main.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,cAAc,CAAC"}
|