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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateRoomForm.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/CreateRoomForm.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAY3C,MAAM,UAAU,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,QAAQ,GACY;IACpB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CACtC,QAAQ,CACT,CAAC;IACF,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEnD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,YAAY,GAAG,CAAC,CAAQ,EAAE,EAAE;QAChC,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO;QACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,EAAE,CAAC,CAAC;QACZ,WAAW,CAAC,QAAQ,CAAC,CAAC;QACtB,cAAc,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO,CACL,cAAK,EAAE,EAAC,kBAAkB,EAAC,KAAK,EAAC,SAAS,YACxC,gBAAM,KAAK,EAAC,kBAAkB,EAAC,QAAQ,EAAE,YAAY,aACnD,yCAEE,gBACE,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,WAAW,EAChB,QAAQ,QACR,WAAW,EAAC,oBAAoB,EAChC,KAAK,EAAE,IAAI,EACX,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gCACb,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;4BACnC,CAAC,GACD,IACI,EACR,oCAEE,kBACE,IAAI,EAAC,WAAW,EAChB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gCACd,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gCACpC,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;oCAC9D,WAAW,CAAC,GAAG,CAAC,CAAC;gCACnB,CAAC;4BACH,CAAC,aAED,iBAAQ,KAAK,EAAC,QAAQ,uBAAgB,EACtC,iBAAQ,KAAK,EAAC,SAAS,wBAAiB,EACxC,iBAAQ,KAAK,EAAC,QAAQ,uBAAgB,IAC/B,IACH,EACR,sDAEE,gBACE,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,kBAAkB,EACvB,WAAW,EAAC,0BAA0B,EACtC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gCACb,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;4BAC1C,CAAC,GACD,IACI,EACR,eAAK,KAAK,EAAC,kBAAkB,aAC3B,iBAAQ,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,oBAAoB,uBAEvC,EACT,iBAAQ,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,oBAAoB,EAAC,OAAO,EAAE,QAAQ,uBAEzD,IACL,IACD,GACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * JoinForm — inline form for joining a room by name.
3
+ */
4
+ interface JoinFormProps {
5
+ visible: boolean;
6
+ onSubmit: (roomName: string) => void;
7
+ onCancel: () => void;
8
+ }
9
+ export declare function JoinForm({ visible, onSubmit, onCancel }: JoinFormProps): import("preact").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=JoinForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JoinForm.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/JoinForm.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAKH,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,aAAa,gCAoCtE"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
+ /**
3
+ * JoinForm — inline form for joining a room by name.
4
+ */
5
+ import { useState } from "preact/hooks";
6
+ import { inputFromEvent } from "../dom.js";
7
+ export function JoinForm({ visible, onSubmit, onCancel }) {
8
+ const [roomName, setRoomName] = useState("");
9
+ if (!visible)
10
+ return _jsx("div", { id: "join-form", class: "join-form hidden" });
11
+ const handleSubmit = () => {
12
+ const trimmed = roomName.trim();
13
+ if (trimmed) {
14
+ onSubmit(trimmed);
15
+ setRoomName("");
16
+ }
17
+ };
18
+ const handleKeyDown = (e) => {
19
+ if (e.key === "Enter")
20
+ handleSubmit();
21
+ if (e.key === "Escape")
22
+ onCancel();
23
+ };
24
+ return (_jsxs("div", { id: "join-form", class: "join-form", children: [_jsx("input", { class: "join-input", type: "text", placeholder: "Room name...", autocomplete: "off", value: roomName, onInput: (e) => {
25
+ setRoomName(inputFromEvent(e).value);
26
+ }, onKeyDown: handleKeyDown }), _jsx("button", { class: "join-submit", onClick: handleSubmit, children: "Join" })] }));
27
+ }
28
+ //# sourceMappingURL=JoinForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JoinForm.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/JoinForm.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAQ3C,MAAM,UAAU,QAAQ,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAiB;IACrE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE7C,IAAI,CAAC,OAAO;QAAE,OAAO,cAAK,EAAE,EAAC,WAAW,EAAC,KAAK,EAAC,kBAAkB,GAAG,CAAC;IAErE,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClB,WAAW,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,CAAgB,EAAE,EAAE;QACzC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO;YAAE,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;YAAE,QAAQ,EAAE,CAAC;IACrC,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,EAAE,EAAC,WAAW,EAAC,KAAK,EAAC,WAAW,aACnC,gBACE,KAAK,EAAC,YAAY,EAClB,IAAI,EAAC,MAAM,EACX,WAAW,EAAC,cAAc,EAC1B,YAAY,EAAC,KAAK,EAClB,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACb,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACvC,CAAC,EACD,SAAS,EAAE,aAAa,GACxB,EACF,iBAAQ,KAAK,EAAC,aAAa,EAAC,OAAO,EAAE,YAAY,qBAExC,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Message — renders a single display message.
3
+ */
4
+ import type { DisplayMessage } from "../types.js";
5
+ export declare function Message({ message }: {
6
+ message: DisplayMessage;
7
+ }): import("preact").JSX.Element;
8
+ //# sourceMappingURL=Message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/Message.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,wBAAgB,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,cAAc,CAAA;CAAE,gCAwB/D"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
+ import { formatTime } from "../dom.js";
3
+ export function Message({ message }) {
4
+ switch (message.type) {
5
+ case "chat":
6
+ return (_jsxs("div", { class: "msg", children: [_jsx("span", { class: "sender", children: message.sender }), _jsx("span", { class: "time", children: formatTime(message.timestamp) }), ":", " ", message.content] }));
7
+ case "dm":
8
+ return (_jsxs("div", { class: "msg dm", children: [_jsx("span", { class: "dm-badge", children: "DM" }), " ", _jsx("span", { class: "sender", children: message.sender }), _jsx("span", { class: "time", children: formatTime(message.timestamp) }), ":", " ", message.content] }));
9
+ case "system":
10
+ return _jsx("div", { class: "msg system", children: message.text });
11
+ case "status":
12
+ return _jsx("div", { class: "msg status", children: message.text });
13
+ }
14
+ }
15
+ //# sourceMappingURL=Message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Message.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/Message.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,UAAU,OAAO,CAAC,EAAE,OAAO,EAA+B;IAC9D,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,CACL,eAAK,KAAK,EAAC,KAAK,aACd,eAAM,KAAK,EAAC,QAAQ,YAAE,OAAO,CAAC,MAAM,GAAQ,EAC5C,eAAM,KAAK,EAAC,MAAM,YAAE,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,GAAQ,OAAE,GAAG,EAC7D,OAAO,CAAC,OAAO,IACZ,CACP,CAAC;QACJ,KAAK,IAAI;YACP,OAAO,CACL,eAAK,KAAK,EAAC,QAAQ,aACjB,eAAM,KAAK,EAAC,UAAU,mBAAU,EAAC,GAAG,EACpC,eAAM,KAAK,EAAC,QAAQ,YAAE,OAAO,CAAC,MAAM,GAAQ,EAC5C,eAAM,KAAK,EAAC,MAAM,YAAE,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,GAAQ,OAAE,GAAG,EAC7D,OAAO,CAAC,OAAO,IACZ,CACP,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,cAAK,KAAK,EAAC,YAAY,YAAE,OAAO,CAAC,IAAI,GAAO,CAAC;QACtD,KAAK,QAAQ;YACX,OAAO,cAAK,KAAK,EAAC,YAAY,YAAE,OAAO,CAAC,IAAI,GAAO,CAAC;IACxD,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MessageList — scrollable message area with auto-scroll.
3
+ */
4
+ import type { DisplayMessage } from "../types.js";
5
+ export declare function MessageList({ messages }: {
6
+ messages: DisplayMessage[];
7
+ }): import("preact").JSX.Element;
8
+ //# sourceMappingURL=MessageList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/MessageList.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,cAAc,EAAE,CAAA;CAAE,gCAgBvE"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "preact/jsx-runtime";
2
+ /**
3
+ * MessageList — scrollable message area with auto-scroll.
4
+ */
5
+ import { useRef, useEffect } from "preact/hooks";
6
+ import { Message } from "./Message.js";
7
+ export function MessageList({ messages }) {
8
+ const ref = useRef(null);
9
+ useEffect(() => {
10
+ if (ref.current) {
11
+ ref.current.scrollTop = ref.current.scrollHeight;
12
+ }
13
+ }, [messages.length]);
14
+ return (_jsx("div", { id: "messages", ref: ref, children: messages.map((msg, i) => (_jsx(Message, { message: msg }, i))) }));
15
+ }
16
+ //# sourceMappingURL=MessageList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageList.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/MessageList.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAkC;IACtE,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;QACnD,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtB,OAAO,CACL,cAAK,EAAE,EAAC,UAAU,EAAC,GAAG,EAAE,GAAG,YACxB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,KAAC,OAAO,IAAS,OAAO,EAAE,GAAG,IAAf,CAAC,CAAkB,CAClC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * ProjectTree — recursive tree view of agents grouped by working directory.
3
+ *
4
+ * Shows directories as expandable/collapsible nodes with agents nested inside.
5
+ * Manual rooms appear in a separate flat list below the tree.
6
+ */
7
+ import type { ProjectTree as ProjectTreeData } from "../types.js";
8
+ interface ProjectTreeProps {
9
+ tree: ProjectTreeData;
10
+ onJoinRoom: (roomId: string) => void;
11
+ onSelectAgent: (agentId: string) => void;
12
+ onRenameAgent: (agentId: string, newName: string) => void;
13
+ currentRoom: string | undefined;
14
+ }
15
+ export declare function ProjectTree({ tree, onJoinRoom, onSelectAgent, onRenameAgent, currentRoom, }: ProjectTreeProps): import("preact").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=ProjectTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectTree.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/ProjectTree.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAGV,WAAW,IAAI,eAAe,EAE/B,MAAM,aAAa,CAAC;AAGrB,UAAU,gBAAgB;IACxB,IAAI,EAAE,eAAe,CAAC;IACtB,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,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,UAAU,EACV,aAAa,EACb,aAAa,EACb,WAAW,GACZ,EAAE,gBAAgB,gCA+BlB"}
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
+ /**
3
+ * ProjectTree — recursive tree view of agents grouped by working directory.
4
+ *
5
+ * Shows directories as expandable/collapsible nodes with agents nested inside.
6
+ * Manual rooms appear in a separate flat list below the tree.
7
+ */
8
+ import { useState } from "preact/hooks";
9
+ import { inputFromEvent } from "../dom.js";
10
+ export function ProjectTree({ tree, onJoinRoom, onSelectAgent, onRenameAgent, currentRoom, }) {
11
+ return (_jsxs("div", { class: "project-tree", children: [tree.roots.map((node) => (_jsx(TreeNodeView, { node: node, onJoinRoom: onJoinRoom, onSelectAgent: onSelectAgent, onRenameAgent: onRenameAgent, currentRoom: currentRoom }))), tree.manualRooms.length > 0 && (_jsxs("div", { class: "tree-section", children: [_jsx("h3", { class: "tree-section-heading", children: "Rooms" }), tree.manualRooms.map((room) => (_jsxs("div", { class: "room-item" + (currentRoom === room.id ? " active" : ""), onClick: () => {
12
+ onJoinRoom(room.id);
13
+ }, children: [_jsx("span", { children: room.name }), _jsxs("span", { children: ["(", String(room.members.length), ")"] })] }, room.id)))] }))] }));
14
+ }
15
+ function TreeNodeView({ node, onJoinRoom, onSelectAgent, onRenameAgent, currentRoom, }) {
16
+ if (node.type === "agent") {
17
+ return (_jsx(AgentView, { node: node, onSelectAgent: onSelectAgent, onRenameAgent: onRenameAgent }));
18
+ }
19
+ return (_jsx(DirectoryView, { node: node, onJoinRoom: onJoinRoom, onSelectAgent: onSelectAgent, onRenameAgent: onRenameAgent, currentRoom: currentRoom }));
20
+ }
21
+ function DirectoryView({ node, onJoinRoom, onSelectAgent, onRenameAgent, currentRoom, }) {
22
+ const [expanded, setExpanded] = useState(true);
23
+ return (_jsxs("div", { class: "tree-directory", children: [_jsxs("div", { class: "tree-directory-name", children: [_jsxs("span", { class: "tree-folder-toggle", onClick: () => {
24
+ setExpanded(!expanded);
25
+ }, children: [_jsx("span", { class: "tree-folder-icon", children: expanded ? "📂" : "📁" }), _jsx("span", { children: node.name })] }), node.roomId && (_jsx("span", { class: `tree-room-join${currentRoom === node.roomId ? " active" : ""}`, onClick: () => {
26
+ if (node.roomId)
27
+ onJoinRoom(node.roomId);
28
+ }, children: "\uD83D\uDCAC" }))] }), expanded && (_jsx("div", { class: "tree-children", children: node.children.map((child) => (_jsx(TreeNodeView, { node: child, onJoinRoom: onJoinRoom, onSelectAgent: onSelectAgent, onRenameAgent: onRenameAgent, currentRoom: currentRoom }, child.type === "agent" ? child.agentId : child.path))) }))] }));
29
+ }
30
+ function AgentView({ node, onSelectAgent, onRenameAgent }) {
31
+ const [editing, setEditing] = useState(false);
32
+ const [editName, setEditName] = useState("");
33
+ const handleDoubleClick = () => {
34
+ setEditName(node.name);
35
+ setEditing(true);
36
+ };
37
+ const handleSubmit = () => {
38
+ const trimmed = editName.trim();
39
+ if (trimmed && trimmed !== node.name) {
40
+ onRenameAgent(node.agentId, trimmed);
41
+ }
42
+ setEditing(false);
43
+ };
44
+ const handleKeyDown = (e) => {
45
+ if (e.key === "Enter")
46
+ handleSubmit();
47
+ if (e.key === "Escape")
48
+ setEditing(false);
49
+ };
50
+ if (editing) {
51
+ return (_jsxs("div", { class: "tree-agent agent-item editing", children: [_jsx("span", { class: `status-dot ${node.status}` }), _jsx("input", { class: "agent-rename-input", type: "text", value: editName, autofocus: true, onInput: (e) => {
52
+ setEditName(inputFromEvent(e).value);
53
+ }, onKeyDown: handleKeyDown, onBlur: handleSubmit })] }));
54
+ }
55
+ return (_jsxs("div", { class: "tree-agent agent-item", onClick: () => {
56
+ onSelectAgent(node.agentId);
57
+ }, onDblClick: handleDoubleClick, children: [_jsx("span", { class: `status-dot ${node.status}` }), _jsx("span", { children: node.name })] }));
58
+ }
59
+ //# sourceMappingURL=ProjectTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectTree.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/ProjectTree.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Sidebar — rooms list, agents list, create/join room controls.
3
+ */
4
+ import type { Agent, Room } from "../types.js";
5
+ interface SidebarProps {
6
+ rooms: Room[];
7
+ agents: Agent[];
8
+ currentRoom: string | undefined;
9
+ onJoinRoom: (roomId: string) => void;
10
+ onSelectAgent: (agentId: string) => void;
11
+ onCreateRoom: (name: string, type: "public" | "private" | "secret", description: string) => void;
12
+ onJoinRoomInput: (roomName: string) => void;
13
+ }
14
+ export declare function Sidebar({ rooms, agents, currentRoom, onJoinRoom, onSelectAgent, onCreateRoom, onJoinRoomInput, }: SidebarProps): import("preact").JSX.Element;
15
+ export {};
16
+ //# 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;AAI/C,UAAU,YAAY;IACpB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,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;CAC7C;AAED,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,MAAM,EACN,WAAW,EACX,UAAU,EACV,aAAa,EACb,YAAY,EACZ,eAAe,GAChB,EAAE,YAAY,gCAoFd"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
+ /**
3
+ * Sidebar — rooms list, agents list, create/join room controls.
4
+ */
5
+ import { useState } from "preact/hooks";
6
+ import { CreateRoomForm } from "./CreateRoomForm.js";
7
+ import { JoinForm } from "./JoinForm.js";
8
+ export function Sidebar({ rooms, agents, currentRoom, onJoinRoom, onSelectAgent, onCreateRoom, onJoinRoomInput, }) {
9
+ const [createFormVisible, setCreateFormVisible] = useState(false);
10
+ const [joinFormVisible, setJoinFormVisible] = useState(false);
11
+ return (_jsxs("div", { id: "sidebar", children: [_jsx("h2", { children: "Agent Comms" }), _jsxs("div", { class: "sidebar-section", children: [_jsxs("div", { class: "section-heading", children: [_jsx("h3", { children: "Rooms" }), _jsx("button", { id: "create-room-toggle", class: "icon-btn", title: "Create room", onClick: () => {
12
+ setCreateFormVisible((v) => !v);
13
+ }, children: "+" })] }), _jsx(CreateRoomForm, { visible: createFormVisible, onSubmit: (name, type, desc) => {
14
+ onCreateRoom(name, type, desc);
15
+ setCreateFormVisible(false);
16
+ }, onCancel: () => {
17
+ setCreateFormVisible(false);
18
+ } }), _jsx("div", { id: "room-list", children: rooms.map((room) => (_jsxs("div", { class: `room-item${currentRoom === room.id ? " active" : ""}`, onClick: () => {
19
+ onJoinRoom(room.id);
20
+ }, children: [room.type.charAt(0).toUpperCase(), " ", room.name, " ", _jsxs("span", { style: "color:var(--dim)", children: ["(", String(room.members.length), ")"] })] }, room.id))) }), _jsx("button", { id: "join-toggle-btn", class: "join-toggle-btn", onClick: () => {
21
+ setJoinFormVisible((v) => !v);
22
+ }, children: "+ Join Room" }), _jsx(JoinForm, { visible: joinFormVisible, onSubmit: (name) => {
23
+ onJoinRoomInput(name);
24
+ setJoinFormVisible(false);
25
+ }, onCancel: () => {
26
+ setJoinFormVisible(false);
27
+ } }), _jsx("h3", { children: "Agents" }), _jsx("div", { id: "agent-list", children: agents.map((agent) => (_jsxs("div", { class: "agent-item", onClick: () => {
28
+ onSelectAgent(agent.id);
29
+ }, children: [_jsx("span", { class: `status-dot ${agent.status}` }), ` ${agent.name}`] }, agent.id))) })] })] }));
30
+ }
31
+ //# 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
- * Minimal DOM helpers no framework, just typed wrappers.
2
+ * DOM utilities for the web UI.
3
3
  *
4
- * All functions take a Document parameter for testability (jsdom/happy-dom).
5
- * In the browser, pass the global `document`.
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 via textContent→innerHTML round-trip.
20
- */
21
- export declare function escapeHtml(doc: Document, text: string): string;
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 appendTo(parent: HTMLElement, child: Node): HTMLElement;
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,aAAa,CAC3B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,GACf,WAAW,GAAG,SAAS,CAGzB;AAED;;;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;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,qBAAqB,EACjE,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,CAAC,EACN,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,GAAG,QAAQ,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAC7B,qBAAqB,CAAC,CAAC,CAAC,CAe1B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAEnD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,GAAG,WAAW,CAGtE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD"}
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
- * Minimal DOM helpers no framework, just typed wrappers.
2
+ * DOM utilities for the web UI.
3
3
  *
4
- * All functions take a Document parameter for testability (jsdom/happy-dom).
5
- * In the browser, pass the global `document`.
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 via textContent→innerHTML round-trip.
26
- */
27
- export function escapeHtml(doc, text) {
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 appendTo(parent, child) {
62
- parent.appendChild(child);
63
- return parent;
21
+ export function escapeHtml(text) {
22
+ return text
23
+ .replace(/&/g, "&amp;")
24
+ .replace(/</g, "&lt;")
25
+ .replace(/>/g, "&gt;")
26
+ .replace(/"/g, "&quot;");
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;AAEH;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAgB,EAChB,QAAgB;IAEhB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAc,QAAQ,CAAC,CAAC;IACrD,OAAO,EAAE,IAAI,SAAS,CAAC;AACzB,CAAC;AAYD,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;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAa,EAAE,IAAY;IACpD,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;IACvB,OAAO,GAAG,CAAC,SAAS,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAa,EACb,GAAM,EACN,KAA8B,EAC9B,GAAG,QAA2B;IAE9B,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,EAAe;IAC3C,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAmB,EAAE,KAAW;IACvD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,OAAO,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC"}
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,6 +131,24 @@ 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",
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/input.ts"],"names":[],"mappings":"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"}
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
- * Imports all modules, binds DOM events, connects WebSocket,
5
- * and wires up the render loop.
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.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,cAAc,CAAC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/main.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,cAAc,CAAC"}