agent-comms 1.12.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 (134) 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 +118 -7
  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 +10 -0
  14. package/dist/bridges/user/web/build.d.ts.map +1 -0
  15. package/dist/bridges/user/web/build.js +58 -0
  16. package/dist/bridges/user/web/build.js.map +1 -0
  17. package/dist/bridges/user/web/frontend/api.d.ts +29 -0
  18. package/dist/bridges/user/web/frontend/api.d.ts.map +1 -0
  19. package/dist/bridges/user/web/frontend/api.js +121 -0
  20. package/dist/bridges/user/web/frontend/api.js.map +1 -0
  21. package/dist/bridges/user/web/frontend/components/App.d.ts +23 -0
  22. package/dist/bridges/user/web/frontend/components/App.d.ts.map +1 -0
  23. package/dist/bridges/user/web/frontend/components/App.js +7 -0
  24. package/dist/bridges/user/web/frontend/components/App.js.map +1 -0
  25. package/dist/bridges/user/web/frontend/components/ChatArea.d.ts +14 -0
  26. package/dist/bridges/user/web/frontend/components/ChatArea.d.ts.map +1 -0
  27. package/dist/bridges/user/web/frontend/components/ChatArea.js +38 -0
  28. package/dist/bridges/user/web/frontend/components/ChatArea.js.map +1 -0
  29. package/dist/bridges/user/web/frontend/components/CreateRoomForm.d.ts +11 -0
  30. package/dist/bridges/user/web/frontend/components/CreateRoomForm.d.ts.map +1 -0
  31. package/dist/bridges/user/web/frontend/components/CreateRoomForm.js +33 -0
  32. package/dist/bridges/user/web/frontend/components/CreateRoomForm.js.map +1 -0
  33. package/dist/bridges/user/web/frontend/components/JoinForm.d.ts +11 -0
  34. package/dist/bridges/user/web/frontend/components/JoinForm.d.ts.map +1 -0
  35. package/dist/bridges/user/web/frontend/components/JoinForm.js +28 -0
  36. package/dist/bridges/user/web/frontend/components/JoinForm.js.map +1 -0
  37. package/dist/bridges/user/web/frontend/components/Message.d.ts +8 -0
  38. package/dist/bridges/user/web/frontend/components/Message.d.ts.map +1 -0
  39. package/dist/bridges/user/web/frontend/components/Message.js +15 -0
  40. package/dist/bridges/user/web/frontend/components/Message.js.map +1 -0
  41. package/dist/bridges/user/web/frontend/components/MessageList.d.ts +8 -0
  42. package/dist/bridges/user/web/frontend/components/MessageList.d.ts.map +1 -0
  43. package/dist/bridges/user/web/frontend/components/MessageList.js +16 -0
  44. package/dist/bridges/user/web/frontend/components/MessageList.js.map +1 -0
  45. package/dist/bridges/user/web/frontend/components/ProjectTree.d.ts +17 -0
  46. package/dist/bridges/user/web/frontend/components/ProjectTree.d.ts.map +1 -0
  47. package/dist/bridges/user/web/frontend/components/ProjectTree.js +59 -0
  48. package/dist/bridges/user/web/frontend/components/ProjectTree.js.map +1 -0
  49. package/dist/bridges/user/web/frontend/components/Sidebar.d.ts +16 -0
  50. package/dist/bridges/user/web/frontend/components/Sidebar.d.ts.map +1 -0
  51. package/dist/bridges/user/web/frontend/components/Sidebar.js +31 -0
  52. package/dist/bridges/user/web/frontend/components/Sidebar.js.map +1 -0
  53. package/dist/bridges/user/web/frontend/dom.d.ts +28 -0
  54. package/dist/bridges/user/web/frontend/dom.d.ts.map +1 -0
  55. package/dist/bridges/user/web/frontend/dom.js +46 -0
  56. package/dist/bridges/user/web/frontend/dom.js.map +1 -0
  57. package/dist/bridges/user/web/frontend/input.d.ts +37 -0
  58. package/dist/bridges/user/web/frontend/input.d.ts.map +1 -0
  59. package/dist/bridges/user/web/frontend/input.js +167 -0
  60. package/dist/bridges/user/web/frontend/input.js.map +1 -0
  61. package/dist/bridges/user/web/frontend/main.d.ts +8 -0
  62. package/dist/bridges/user/web/frontend/main.d.ts.map +1 -0
  63. package/dist/bridges/user/web/frontend/main.js +156 -0
  64. package/dist/bridges/user/web/frontend/main.js.map +1 -0
  65. package/dist/bridges/user/web/frontend/messages.d.ts +17 -0
  66. package/dist/bridges/user/web/frontend/messages.d.ts.map +1 -0
  67. package/dist/bridges/user/web/frontend/messages.js +82 -0
  68. package/dist/bridges/user/web/frontend/messages.js.map +1 -0
  69. package/dist/bridges/user/web/frontend/project-tree.d.ts +9 -0
  70. package/dist/bridges/user/web/frontend/project-tree.d.ts.map +1 -0
  71. package/dist/bridges/user/web/frontend/project-tree.js +173 -0
  72. package/dist/bridges/user/web/frontend/project-tree.js.map +1 -0
  73. package/dist/bridges/user/web/frontend/state.d.ts +41 -0
  74. package/dist/bridges/user/web/frontend/state.d.ts.map +1 -0
  75. package/dist/bridges/user/web/frontend/state.js +87 -0
  76. package/dist/bridges/user/web/frontend/state.js.map +1 -0
  77. package/dist/bridges/user/web/frontend/types.d.ts +209 -0
  78. package/dist/bridges/user/web/frontend/types.d.ts.map +1 -0
  79. package/dist/bridges/user/web/frontend/types.js +8 -0
  80. package/dist/bridges/user/web/frontend/types.js.map +1 -0
  81. package/dist/bridges/user/web/generated-html.d.ts +6 -0
  82. package/dist/bridges/user/web/generated-html.d.ts.map +1 -0
  83. package/dist/bridges/user/web/generated-html.js +179 -0
  84. package/dist/bridges/user/web/generated-html.js.map +1 -0
  85. package/dist/bridges/user/web/server.d.ts.map +1 -1
  86. package/dist/bridges/user/web/server.js +26 -3
  87. package/dist/bridges/user/web/server.js.map +1 -1
  88. package/dist/bridges/user/web/test/web-server.integration.test.d.ts +7 -0
  89. package/dist/bridges/user/web/test/web-server.integration.test.d.ts.map +1 -0
  90. package/dist/bridges/user/web/test/web-server.integration.test.js +187 -0
  91. package/dist/bridges/user/web/test/web-server.integration.test.js.map +1 -0
  92. package/dist/core/bridge.d.ts +15 -0
  93. package/dist/core/bridge.d.ts.map +1 -1
  94. package/dist/core/bridge.js +60 -0
  95. package/dist/core/bridge.js.map +1 -1
  96. package/dist/core/index.d.ts +1 -1
  97. package/dist/core/index.d.ts.map +1 -1
  98. package/dist/core/index.js +1 -1
  99. package/dist/core/index.js.map +1 -1
  100. package/dist/core/mesh-store.d.ts +3 -0
  101. package/dist/core/mesh-store.d.ts.map +1 -1
  102. package/dist/core/mesh-store.js +107 -7
  103. package/dist/core/mesh-store.js.map +1 -1
  104. package/dist/core/test/bridge.unit.test.d.ts +5 -0
  105. package/dist/core/test/bridge.unit.test.d.ts.map +1 -0
  106. package/dist/core/test/bridge.unit.test.js +120 -0
  107. package/dist/core/test/bridge.unit.test.js.map +1 -0
  108. package/dist/core/types.d.ts +10 -0
  109. package/dist/core/types.d.ts.map +1 -1
  110. package/dist/core/types.js +6 -0
  111. package/dist/core/types.js.map +1 -1
  112. package/dist/test/{coordinator-socket-error.test.d.ts → coordinator-socket-error.integration.test.d.ts} +1 -1
  113. package/dist/test/coordinator-socket-error.integration.test.d.ts.map +1 -0
  114. package/dist/test/{coordinator-socket-error.test.js → coordinator-socket-error.integration.test.js} +1 -1
  115. package/dist/test/coordinator-socket-error.integration.test.js.map +1 -0
  116. package/dist/test/{mesh-e2e.test.d.ts → mesh-e2e.integration.test.d.ts} +1 -1
  117. package/dist/test/mesh-e2e.integration.test.d.ts.map +1 -0
  118. package/dist/test/{mesh-e2e.test.js → mesh-e2e.integration.test.js} +1 -1
  119. package/dist/test/mesh-e2e.integration.test.js.map +1 -0
  120. package/dist/test/{mesh-smoke.test.d.ts → mesh-smoke.integration.test.d.ts} +1 -1
  121. package/dist/test/mesh-smoke.integration.test.d.ts.map +1 -0
  122. package/dist/test/{mesh-smoke.test.js → mesh-smoke.integration.test.js} +1 -1
  123. package/dist/test/mesh-smoke.integration.test.js.map +1 -0
  124. package/package.json +11 -4
  125. package/dist/bridges/user/web/index.html.d.ts +0 -8
  126. package/dist/bridges/user/web/index.html.d.ts.map +0 -1
  127. package/dist/bridges/user/web/index.html.js +0 -391
  128. package/dist/bridges/user/web/index.html.js.map +0 -1
  129. package/dist/test/coordinator-socket-error.test.d.ts.map +0 -1
  130. package/dist/test/coordinator-socket-error.test.js.map +0 -1
  131. package/dist/test/mesh-e2e.test.d.ts.map +0 -1
  132. package/dist/test/mesh-e2e.test.js.map +0 -1
  133. package/dist/test/mesh-smoke.test.d.ts.map +0 -1
  134. package/dist/test/mesh-smoke.test.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-e2e.integration.test.js","sourceRoot":"","sources":["../../src/test/mesh-e2e.integration.test.ts"],"names":[],"mappings":"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"}
@@ -6,4 +6,4 @@
6
6
  * messages, and receive push delivery.
7
7
  */
8
8
  export {};
9
- //# sourceMappingURL=mesh-smoke.test.d.ts.map
9
+ //# sourceMappingURL=mesh-smoke.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-smoke.integration.test.d.ts","sourceRoot":"","sources":["../../src/test/mesh-smoke.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -190,4 +190,4 @@ main().catch((err) => {
190
190
  console.error("Smoke test failed:", err);
191
191
  process.exit(1);
192
192
  });
193
- //# sourceMappingURL=mesh-smoke.test.js.map
193
+ //# sourceMappingURL=mesh-smoke.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-smoke.integration.test.js","sourceRoot":"","sources":["../../src/test/mesh-smoke.integration.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-comms",
3
- "version": "1.12.0",
3
+ "version": "1.14.0",
4
4
  "description": "Cross-harness communication mesh for LLM agents — rooms, DMs, presence, and real-time push delivery over TCP",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@10.33.0",
@@ -45,11 +45,14 @@
45
45
  },
46
46
  "scripts": {
47
47
  "prepare": "husky",
48
- "build": "tsc && printf '#!/usr/bin/env node\n' | cat - dist/cli.js > dist/cli.tmp && mv dist/cli.tmp dist/cli.js",
48
+ "build:frontend": "tsx src/bridges/user/web/build.ts",
49
+ "build": "pnpm build:frontend && tsc && printf '#!/usr/bin/env node\n' | cat - dist/cli.js > dist/cli.tmp && mv dist/cli.tmp dist/cli.js",
49
50
  "generate:server-json": "tsx scripts/sync-release-metadata.ts",
50
51
  "publish:mcp-registry": "tsx scripts/publish-mcp-registry.ts",
51
52
  "lint": "eslint .",
52
- "test": "node --test dist/test/**/*.test.js",
53
+ "test": "node --test dist/test/coordinator-socket-error.integration.test.js",
54
+ "test:frontend": "tsx --test src/bridges/user/web/frontend/test/**/*.unit.test.ts",
55
+ "test:e2e": "playwright test",
53
56
  "typecheck": "tsc --noEmit"
54
57
  },
55
58
  "devDependencies": {
@@ -60,6 +63,7 @@
60
63
  "@eslint/markdown": "8.0.1",
61
64
  "@mariozechner/pi-ai": "0.70.2",
62
65
  "@mariozechner/pi-coding-agent": "0.70.2",
66
+ "@playwright/test": "1.60.0",
63
67
  "@semantic-release/changelog": "6.0.3",
64
68
  "@semantic-release/commit-analyzer": "13.0.1",
65
69
  "@semantic-release/exec": "6.0.3",
@@ -70,9 +74,11 @@
70
74
  "@types/node": "^25.6.0",
71
75
  "@types/ws": "8.18.1",
72
76
  "conventional-changelog-conventionalcommits": "9.3.1",
77
+ "esbuild": "0.28.0",
73
78
  "eslint": "10.2.1",
74
79
  "eslint-config-prettier": "10.1.8",
75
80
  "eslint-plugin-prettier": "5.5.5",
81
+ "happy-dom": "20.9.0",
76
82
  "husky": "9.1.7",
77
83
  "lint-staged": "17.0.4",
78
84
  "prettier": "3.8.3",
@@ -83,6 +89,7 @@
83
89
  },
84
90
  "dependencies": {
85
91
  "@modelcontextprotocol/sdk": "1.28.0",
92
+ "preact": "10.27.0",
86
93
  "typebox": "1.1.28",
87
94
  "ws": "8.20.0",
88
95
  "zod": "4.3.6"
@@ -94,7 +101,7 @@
94
101
  },
95
102
  "pi": {
96
103
  "extensions": [
97
- "./dist/bridges/pi"
104
+ "./src/bridges/pi/index.ts"
98
105
  ]
99
106
  }
100
107
  }
@@ -1,8 +0,0 @@
1
- /**
2
- * Frontend HTML — single-page chat UI served as a string constant.
3
- *
4
- * Vanilla JS + CSS, no build step, no framework. Communicates via
5
- * REST API + WebSocket.
6
- */
7
- export declare const FRONTEND_HTML = "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Agent Comms</title>\n<style>\n :root {\n --bg: #1a1a2e;\n --surface: #16213e;\n --border: #0f3460;\n --text: #e4e4e4;\n --dim: #888;\n --accent: #00b4d8;\n --green: #06d6a0;\n --red: #ef476f;\n --yellow: #ffd166;\n --purple: #b5838d;\n }\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n background: var(--bg);\n color: var(--text);\n height: 100vh;\n display: flex;\n }\n #sidebar {\n width: 260px;\n background: var(--surface);\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n #sidebar h2 {\n padding: 12px 16px;\n font-size: 14px;\n color: var(--accent);\n border-bottom: 1px solid var(--border);\n }\n .sidebar-section {\n flex: 1;\n overflow-y: auto;\n padding: 8px;\n }\n .sidebar-section h3 {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--dim);\n padding: 8px 8px 4px;\n }\n .room-item, .agent-item {\n padding: 6px 10px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n .room-item:hover, .agent-item:hover { background: rgba(255,255,255,0.05); }\n .room-item.active { background: var(--border); }\n .status-dot {\n width: 8px; height: 8px;\n border-radius: 50%;\n display: inline-block;\n }\n .status-dot.active { background: var(--green); }\n .status-dot.idle { background: var(--yellow); }\n .status-dot.busy { background: var(--red); }\n .status-dot.offline { background: var(--dim); }\n #main {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n #header {\n padding: 12px 20px;\n border-bottom: 1px solid var(--border);\n font-size: 15px;\n font-weight: 600;\n background: var(--surface);\n }\n #messages {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n .msg {\n font-size: 13px;\n line-height: 1.5;\n }\n .msg .sender { font-weight: 600; color: var(--accent); }\n .msg .time { color: var(--dim); font-size: 11px; margin-left: 8px; }\n .msg.system { color: var(--dim); font-style: italic; }\n .msg.status { color: var(--yellow); font-size: 12px; }\n .msg.dm { color: var(--purple); }\n .msg .dm-badge {\n background: var(--purple);\n color: #fff;\n font-size: 10px;\n padding: 1px 5px;\n border-radius: 3px;\n font-weight: 600;\n }\n #input-bar {\n display: flex;\n padding: 12px 20px;\n gap: 8px;\n background: var(--surface);\n border-top: 1px solid var(--border);\n }\n #input {\n flex: 1;\n background: var(--bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 8px 12px;\n color: var(--text);\n font-size: 13px;\n outline: none;\n }\n #input:focus { border-color: var(--accent); }\n #send-btn {\n background: var(--accent);\n border: none;\n border-radius: 6px;\n padding: 8px 16px;\n color: #fff;\n font-weight: 600;\n cursor: pointer;\n }\n #send-btn:hover { opacity: 0.9; }\n #empty-state {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--dim);\n font-size: 14px;\n }\n</style>\n</head>\n<body>\n\n<div id=\"sidebar\">\n <h2>Agent Comms</h2>\n <div class=\"sidebar-section\">\n <h3>Rooms</h3>\n <div id=\"room-list\"></div>\n <h3>Agents</h3>\n <div id=\"agent-list\"></div>\n </div>\n</div>\n\n<div id=\"main\">\n <div id=\"header\">Select a room</div>\n <div id=\"messages\"></div>\n <div id=\"input-bar\">\n <input id=\"input\" type=\"text\" placeholder=\"Type a message or /command...\" autocomplete=\"off\" />\n <button id=\"send-btn\">Send</button>\n </div>\n</div>\n\n<script>\nconst $ = (s) => document.querySelector(s);\nconst messagesEl = $('#messages');\nconst inputEl = $('#input');\nconst headerEl = $('#header');\nconst roomListEl = $('#room-list');\nconst agentListEl = $('#agent-list');\n\nlet currentRoom = null;\nlet ws = null;\n\n// Connect WebSocket\nfunction connect() {\n const proto = location.protocol === 'https:' ? 'wss:' : 'ws:';\n ws = new WebSocket(proto + '//' + location.host);\n\n ws.onopen = () => { addSystem('Connected to mesh'); };\n ws.onclose = () => { addSystem('Disconnected \u2014 reconnecting...'); setTimeout(connect, 3000); };\n ws.onerror = () => {};\n\n ws.onmessage = (e) => {\n const frame = JSON.parse(e.data);\n if (frame.type === 'delivery') handleDelivery(frame.event);\n if (frame.type === 'result') addSystem(frame.result.content);\n if (frame.type === 'error') addSystem('Error: ' + frame.message);\n if (frame.type === 'state') {\n renderAgents(frame.agents);\n renderRooms(frame.rooms);\n }\n };\n}\n\nfunction sendAction(params) {\n if (ws && ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify(params));\n }\n}\n\n// Delivery event handling\nfunction handleDelivery(event) {\n switch (event.type) {\n case 'room_message':\n if (!currentRoom || event.message.room !== currentRoom) return;\n addMessage(event.message.from, event.message.content, event.message.timestamp);\n break;\n case 'dm':\n addDm(event.message.from, event.message.content, event.message.timestamp);\n break;\n case 'member_joined':\n addSystem(event.agent + ' joined ' + event.room);\n refreshState();\n break;\n case 'member_left':\n addSystem(event.agent + ' left ' + event.room);\n refreshState();\n break;\n case 'member_status':\n addStatus(event.agent + ' is now ' + event.status + ' in ' + event.room);\n refreshState();\n break;\n case 'delivery_status':\n addStatus('Message ' + event.messageId + ' ' + event.status + ' by ' + event.agent);\n break;\n case 'room_members':\n if (currentRoom === event.room) {\n addSystem('Members: ' + event.members.map(m => m.name + ' (' + m.status + ')').join(', '));\n }\n break;\n case 'room_invite': {\n const desc = event.roomDescription ? ' \u2014 ' + event.roomDescription : '';\n addSystem(event.fromName + ' invited you to \"' + event.room + '\"' + desc);\n break;\n }\n case 'invite_declined':\n addSystem(event.agentName + ' declined invite to ' + event.room + ': \"' + event.reason + '\"');\n break;\n }\n}\n\n// UI rendering\nfunction addMessage(sender, content, timestamp) {\n const time = (timestamp || new Date().toISOString()).slice(11, 19);\n const div = document.createElement('div');\n div.className = 'msg';\n div.innerHTML = '<span class=\"sender\">' + esc(sender) + '</span><span class=\"time\">' + time + '</span>: ' + esc(content);\n messagesEl.appendChild(div);\n messagesEl.scrollTop = messagesEl.scrollHeight;\n}\n\nfunction addDm(sender, content, timestamp) {\n const time = (timestamp || new Date().toISOString()).slice(11, 19);\n const div = document.createElement('div');\n div.className = 'msg dm';\n div.innerHTML = '<span class=\"dm-badge\">DM</span> <span class=\"sender\">' + esc(sender) + '</span><span class=\"time\">' + time + '</span>: ' + esc(content);\n messagesEl.appendChild(div);\n messagesEl.scrollTop = messagesEl.scrollHeight;\n}\n\nfunction addSystem(text) {\n const div = document.createElement('div');\n div.className = 'msg system';\n div.textContent = text;\n messagesEl.appendChild(div);\n messagesEl.scrollTop = messagesEl.scrollHeight;\n}\n\nfunction addStatus(text) {\n const div = document.createElement('div');\n div.className = 'msg status';\n div.textContent = text;\n messagesEl.appendChild(div);\n messagesEl.scrollTop = messagesEl.scrollHeight;\n}\n\nfunction clearMessages() {\n messagesEl.innerHTML = '';\n}\n\nfunction esc(s) {\n const d = document.createElement('div');\n d.textContent = s;\n return d.innerHTML;\n}\n\n// State refresh\nasync function refreshState() {\n const [agentsRes, roomsRes] = await Promise.all([\n fetch('/api/agents'), fetch('/api/rooms')\n ]);\n renderAgents(await agentsRes.json());\n renderRooms(await roomsRes.json());\n}\n\nfunction renderAgents(agents) {\n agentListEl.innerHTML = '';\n for (const a of agents) {\n const div = document.createElement('div');\n div.className = 'agent-item';\n const dot = a.status || 'offline';\n div.innerHTML = '<span class=\"status-dot ' + dot + '\"></span> ' + esc(a.name);\n agentListEl.appendChild(div);\n }\n}\n\nfunction renderRooms(rooms) {\n roomListEl.innerHTML = '';\n for (const r of rooms) {\n const div = document.createElement('div');\n div.className = 'room-item' + (currentRoom === r.id ? ' active' : '');\n const joined = r.members.length;\n div.innerHTML = r.type.charAt(0).toUpperCase() + ' ' + esc(r.name) + ' <span style=\"color:var(--dim)\">(' + joined + ')</span>';\n div.onclick = () => joinRoom(r.id);\n roomListEl.appendChild(div);\n }\n}\n\nasync function joinRoom(roomId) {\n currentRoom = roomId;\n headerEl.textContent = roomId;\n clearMessages();\n\n // Highlight in sidebar\n document.querySelectorAll('.room-item').forEach(el => el.classList.remove('active'));\n sendAction({ action: 'join_room', room: roomId });\n\n // Load history\n const res = await fetch('/api/rooms/' + encodeURIComponent(roomId) + '/messages');\n const messages = await res.json();\n for (const m of messages) {\n addMessage(m.from, m.content, m.timestamp);\n }\n addSystem('Joined ' + roomId);\n inputEl.focus();\n}\n\n// Input handling\nfunction handleInput() {\n const text = inputEl.value.trim();\n if (!text) return;\n inputEl.value = '';\n\n if (text.startsWith('/')) {\n const parts = text.slice(1).split(/\\s+/);\n const cmd = parts[0].toLowerCase();\n switch (cmd) {\n case 'join': sendAction({ action: 'join_room', room: parts[1] }); break;\n case 'leave': sendAction({ action: 'leave_room', room: parts[1] || currentRoom }); break;\n case 'rooms': refreshState(); break;\n case 'agents': refreshState(); break;\n case 'dm': sendAction({ action: 'dm', target: parts[1], content: parts.slice(2).join(' ') }); break;\n case 'create': sendAction({ action: 'create_room', name: parts[1], type: 'public' }); break;\n case 'destroy': sendAction({ action: 'destroy_room', room: parts[1] }); break;\n case 'help':\n addSystem('Commands: /join, /leave, /rooms, /agents, /dm, /create, /destroy, /help');\n break;\n default:\n addSystem('Unknown command: /' + cmd);\n }\n } else if (currentRoom) {\n sendAction({ action: 'send', target: currentRoom, content: text });\n } else {\n addSystem('Join a room first (click one in the sidebar)');\n }\n}\n\n$('#send-btn').onclick = handleInput;\ninputEl.addEventListener('keydown', (e) => { if (e.key === 'Enter') handleInput(); });\n\n// Boot\nconnect();\nrefreshState();\ninputEl.focus();\n</script>\n</body>\n</html>";
8
- //# sourceMappingURL=index.html.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.html.d.ts","sourceRoot":"","sources":["../../../../src/bridges/user/web/index.html.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,aAAa,4hWA+XlB,CAAC"}
@@ -1,391 +0,0 @@
1
- /**
2
- * Frontend HTML — single-page chat UI served as a string constant.
3
- *
4
- * Vanilla JS + CSS, no build step, no framework. Communicates via
5
- * REST API + WebSocket.
6
- */
7
- export const FRONTEND_HTML = `<!DOCTYPE html>
8
- <html lang="en">
9
- <head>
10
- <meta charset="utf-8">
11
- <meta name="viewport" content="width=device-width, initial-scale=1">
12
- <title>Agent Comms</title>
13
- <style>
14
- :root {
15
- --bg: #1a1a2e;
16
- --surface: #16213e;
17
- --border: #0f3460;
18
- --text: #e4e4e4;
19
- --dim: #888;
20
- --accent: #00b4d8;
21
- --green: #06d6a0;
22
- --red: #ef476f;
23
- --yellow: #ffd166;
24
- --purple: #b5838d;
25
- }
26
- * { margin: 0; padding: 0; box-sizing: border-box; }
27
- body {
28
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
29
- background: var(--bg);
30
- color: var(--text);
31
- height: 100vh;
32
- display: flex;
33
- }
34
- #sidebar {
35
- width: 260px;
36
- background: var(--surface);
37
- border-right: 1px solid var(--border);
38
- display: flex;
39
- flex-direction: column;
40
- overflow: hidden;
41
- }
42
- #sidebar h2 {
43
- padding: 12px 16px;
44
- font-size: 14px;
45
- color: var(--accent);
46
- border-bottom: 1px solid var(--border);
47
- }
48
- .sidebar-section {
49
- flex: 1;
50
- overflow-y: auto;
51
- padding: 8px;
52
- }
53
- .sidebar-section h3 {
54
- font-size: 11px;
55
- text-transform: uppercase;
56
- color: var(--dim);
57
- padding: 8px 8px 4px;
58
- }
59
- .room-item, .agent-item {
60
- padding: 6px 10px;
61
- border-radius: 6px;
62
- cursor: pointer;
63
- font-size: 13px;
64
- display: flex;
65
- align-items: center;
66
- gap: 6px;
67
- }
68
- .room-item:hover, .agent-item:hover { background: rgba(255,255,255,0.05); }
69
- .room-item.active { background: var(--border); }
70
- .status-dot {
71
- width: 8px; height: 8px;
72
- border-radius: 50%;
73
- display: inline-block;
74
- }
75
- .status-dot.active { background: var(--green); }
76
- .status-dot.idle { background: var(--yellow); }
77
- .status-dot.busy { background: var(--red); }
78
- .status-dot.offline { background: var(--dim); }
79
- #main {
80
- flex: 1;
81
- display: flex;
82
- flex-direction: column;
83
- overflow: hidden;
84
- }
85
- #header {
86
- padding: 12px 20px;
87
- border-bottom: 1px solid var(--border);
88
- font-size: 15px;
89
- font-weight: 600;
90
- background: var(--surface);
91
- }
92
- #messages {
93
- flex: 1;
94
- overflow-y: auto;
95
- padding: 16px 20px;
96
- display: flex;
97
- flex-direction: column;
98
- gap: 4px;
99
- }
100
- .msg {
101
- font-size: 13px;
102
- line-height: 1.5;
103
- }
104
- .msg .sender { font-weight: 600; color: var(--accent); }
105
- .msg .time { color: var(--dim); font-size: 11px; margin-left: 8px; }
106
- .msg.system { color: var(--dim); font-style: italic; }
107
- .msg.status { color: var(--yellow); font-size: 12px; }
108
- .msg.dm { color: var(--purple); }
109
- .msg .dm-badge {
110
- background: var(--purple);
111
- color: #fff;
112
- font-size: 10px;
113
- padding: 1px 5px;
114
- border-radius: 3px;
115
- font-weight: 600;
116
- }
117
- #input-bar {
118
- display: flex;
119
- padding: 12px 20px;
120
- gap: 8px;
121
- background: var(--surface);
122
- border-top: 1px solid var(--border);
123
- }
124
- #input {
125
- flex: 1;
126
- background: var(--bg);
127
- border: 1px solid var(--border);
128
- border-radius: 6px;
129
- padding: 8px 12px;
130
- color: var(--text);
131
- font-size: 13px;
132
- outline: none;
133
- }
134
- #input:focus { border-color: var(--accent); }
135
- #send-btn {
136
- background: var(--accent);
137
- border: none;
138
- border-radius: 6px;
139
- padding: 8px 16px;
140
- color: #fff;
141
- font-weight: 600;
142
- cursor: pointer;
143
- }
144
- #send-btn:hover { opacity: 0.9; }
145
- #empty-state {
146
- flex: 1;
147
- display: flex;
148
- align-items: center;
149
- justify-content: center;
150
- color: var(--dim);
151
- font-size: 14px;
152
- }
153
- </style>
154
- </head>
155
- <body>
156
-
157
- <div id="sidebar">
158
- <h2>Agent Comms</h2>
159
- <div class="sidebar-section">
160
- <h3>Rooms</h3>
161
- <div id="room-list"></div>
162
- <h3>Agents</h3>
163
- <div id="agent-list"></div>
164
- </div>
165
- </div>
166
-
167
- <div id="main">
168
- <div id="header">Select a room</div>
169
- <div id="messages"></div>
170
- <div id="input-bar">
171
- <input id="input" type="text" placeholder="Type a message or /command..." autocomplete="off" />
172
- <button id="send-btn">Send</button>
173
- </div>
174
- </div>
175
-
176
- <script>
177
- const $ = (s) => document.querySelector(s);
178
- const messagesEl = $('#messages');
179
- const inputEl = $('#input');
180
- const headerEl = $('#header');
181
- const roomListEl = $('#room-list');
182
- const agentListEl = $('#agent-list');
183
-
184
- let currentRoom = null;
185
- let ws = null;
186
-
187
- // Connect WebSocket
188
- function connect() {
189
- const proto = location.protocol === 'https:' ? 'wss:' : 'ws:';
190
- ws = new WebSocket(proto + '//' + location.host);
191
-
192
- ws.onopen = () => { addSystem('Connected to mesh'); };
193
- ws.onclose = () => { addSystem('Disconnected — reconnecting...'); setTimeout(connect, 3000); };
194
- ws.onerror = () => {};
195
-
196
- ws.onmessage = (e) => {
197
- const frame = JSON.parse(e.data);
198
- if (frame.type === 'delivery') handleDelivery(frame.event);
199
- if (frame.type === 'result') addSystem(frame.result.content);
200
- if (frame.type === 'error') addSystem('Error: ' + frame.message);
201
- if (frame.type === 'state') {
202
- renderAgents(frame.agents);
203
- renderRooms(frame.rooms);
204
- }
205
- };
206
- }
207
-
208
- function sendAction(params) {
209
- if (ws && ws.readyState === WebSocket.OPEN) {
210
- ws.send(JSON.stringify(params));
211
- }
212
- }
213
-
214
- // Delivery event handling
215
- function handleDelivery(event) {
216
- switch (event.type) {
217
- case 'room_message':
218
- if (!currentRoom || event.message.room !== currentRoom) return;
219
- addMessage(event.message.from, event.message.content, event.message.timestamp);
220
- break;
221
- case 'dm':
222
- addDm(event.message.from, event.message.content, event.message.timestamp);
223
- break;
224
- case 'member_joined':
225
- addSystem(event.agent + ' joined ' + event.room);
226
- refreshState();
227
- break;
228
- case 'member_left':
229
- addSystem(event.agent + ' left ' + event.room);
230
- refreshState();
231
- break;
232
- case 'member_status':
233
- addStatus(event.agent + ' is now ' + event.status + ' in ' + event.room);
234
- refreshState();
235
- break;
236
- case 'delivery_status':
237
- addStatus('Message ' + event.messageId + ' ' + event.status + ' by ' + event.agent);
238
- break;
239
- case 'room_members':
240
- if (currentRoom === event.room) {
241
- addSystem('Members: ' + event.members.map(m => m.name + ' (' + m.status + ')').join(', '));
242
- }
243
- break;
244
- case 'room_invite': {
245
- const desc = event.roomDescription ? ' — ' + event.roomDescription : '';
246
- addSystem(event.fromName + ' invited you to "' + event.room + '"' + desc);
247
- break;
248
- }
249
- case 'invite_declined':
250
- addSystem(event.agentName + ' declined invite to ' + event.room + ': "' + event.reason + '"');
251
- break;
252
- }
253
- }
254
-
255
- // UI rendering
256
- function addMessage(sender, content, timestamp) {
257
- const time = (timestamp || new Date().toISOString()).slice(11, 19);
258
- const div = document.createElement('div');
259
- div.className = 'msg';
260
- div.innerHTML = '<span class="sender">' + esc(sender) + '</span><span class="time">' + time + '</span>: ' + esc(content);
261
- messagesEl.appendChild(div);
262
- messagesEl.scrollTop = messagesEl.scrollHeight;
263
- }
264
-
265
- function addDm(sender, content, timestamp) {
266
- const time = (timestamp || new Date().toISOString()).slice(11, 19);
267
- const div = document.createElement('div');
268
- div.className = 'msg dm';
269
- div.innerHTML = '<span class="dm-badge">DM</span> <span class="sender">' + esc(sender) + '</span><span class="time">' + time + '</span>: ' + esc(content);
270
- messagesEl.appendChild(div);
271
- messagesEl.scrollTop = messagesEl.scrollHeight;
272
- }
273
-
274
- function addSystem(text) {
275
- const div = document.createElement('div');
276
- div.className = 'msg system';
277
- div.textContent = text;
278
- messagesEl.appendChild(div);
279
- messagesEl.scrollTop = messagesEl.scrollHeight;
280
- }
281
-
282
- function addStatus(text) {
283
- const div = document.createElement('div');
284
- div.className = 'msg status';
285
- div.textContent = text;
286
- messagesEl.appendChild(div);
287
- messagesEl.scrollTop = messagesEl.scrollHeight;
288
- }
289
-
290
- function clearMessages() {
291
- messagesEl.innerHTML = '';
292
- }
293
-
294
- function esc(s) {
295
- const d = document.createElement('div');
296
- d.textContent = s;
297
- return d.innerHTML;
298
- }
299
-
300
- // State refresh
301
- async function refreshState() {
302
- const [agentsRes, roomsRes] = await Promise.all([
303
- fetch('/api/agents'), fetch('/api/rooms')
304
- ]);
305
- renderAgents(await agentsRes.json());
306
- renderRooms(await roomsRes.json());
307
- }
308
-
309
- function renderAgents(agents) {
310
- agentListEl.innerHTML = '';
311
- for (const a of agents) {
312
- const div = document.createElement('div');
313
- div.className = 'agent-item';
314
- const dot = a.status || 'offline';
315
- div.innerHTML = '<span class="status-dot ' + dot + '"></span> ' + esc(a.name);
316
- agentListEl.appendChild(div);
317
- }
318
- }
319
-
320
- function renderRooms(rooms) {
321
- roomListEl.innerHTML = '';
322
- for (const r of rooms) {
323
- const div = document.createElement('div');
324
- div.className = 'room-item' + (currentRoom === r.id ? ' active' : '');
325
- const joined = r.members.length;
326
- div.innerHTML = r.type.charAt(0).toUpperCase() + ' ' + esc(r.name) + ' <span style="color:var(--dim)">(' + joined + ')</span>';
327
- div.onclick = () => joinRoom(r.id);
328
- roomListEl.appendChild(div);
329
- }
330
- }
331
-
332
- async function joinRoom(roomId) {
333
- currentRoom = roomId;
334
- headerEl.textContent = roomId;
335
- clearMessages();
336
-
337
- // Highlight in sidebar
338
- document.querySelectorAll('.room-item').forEach(el => el.classList.remove('active'));
339
- sendAction({ action: 'join_room', room: roomId });
340
-
341
- // Load history
342
- const res = await fetch('/api/rooms/' + encodeURIComponent(roomId) + '/messages');
343
- const messages = await res.json();
344
- for (const m of messages) {
345
- addMessage(m.from, m.content, m.timestamp);
346
- }
347
- addSystem('Joined ' + roomId);
348
- inputEl.focus();
349
- }
350
-
351
- // Input handling
352
- function handleInput() {
353
- const text = inputEl.value.trim();
354
- if (!text) return;
355
- inputEl.value = '';
356
-
357
- if (text.startsWith('/')) {
358
- const parts = text.slice(1).split(/\\s+/);
359
- const cmd = parts[0].toLowerCase();
360
- switch (cmd) {
361
- case 'join': sendAction({ action: 'join_room', room: parts[1] }); break;
362
- case 'leave': sendAction({ action: 'leave_room', room: parts[1] || currentRoom }); break;
363
- case 'rooms': refreshState(); break;
364
- case 'agents': refreshState(); break;
365
- case 'dm': sendAction({ action: 'dm', target: parts[1], content: parts.slice(2).join(' ') }); break;
366
- case 'create': sendAction({ action: 'create_room', name: parts[1], type: 'public' }); break;
367
- case 'destroy': sendAction({ action: 'destroy_room', room: parts[1] }); break;
368
- case 'help':
369
- addSystem('Commands: /join, /leave, /rooms, /agents, /dm, /create, /destroy, /help');
370
- break;
371
- default:
372
- addSystem('Unknown command: /' + cmd);
373
- }
374
- } else if (currentRoom) {
375
- sendAction({ action: 'send', target: currentRoom, content: text });
376
- } else {
377
- addSystem('Join a room first (click one in the sidebar)');
378
- }
379
- }
380
-
381
- $('#send-btn').onclick = handleInput;
382
- inputEl.addEventListener('keydown', (e) => { if (e.key === 'Enter') handleInput(); });
383
-
384
- // Boot
385
- connect();
386
- refreshState();
387
- inputEl.focus();
388
- </script>
389
- </body>
390
- </html>`;
391
- //# sourceMappingURL=index.html.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.html.js","sourceRoot":"","sources":["../../../../src/bridges/user/web/index.html.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+XrB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"coordinator-socket-error.test.d.ts","sourceRoot":"","sources":["../../src/test/coordinator-socket-error.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"coordinator-socket-error.test.js","sourceRoot":"","sources":["../../src/test/coordinator-socket-error.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB;;;;;;;GAOG;AACH,KAAK,IAAI,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;IACzE,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IAEnB,+CAA+C;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC;QAClC,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,WAAW;KAClB,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,qEAAqE;IACrE,MAAM,CAAC,eAAe,EAAE,CAAC;IAEzB,kDAAkD;IAClD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAEzD,uEAAuE;IACvE,wCAAwC;IACxC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,kCAAkC,CAAC,CAAC;IAErE,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mesh-e2e.test.d.ts","sourceRoot":"","sources":["../../src/test/mesh-e2e.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mesh-e2e.test.js","sourceRoot":"","sources":["../../src/test/mesh-e2e.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mesh-smoke.test.d.ts","sourceRoot":"","sources":["../../src/test/mesh-smoke.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mesh-smoke.test.js","sourceRoot":"","sources":["../../src/test/mesh-smoke.test.ts"],"names":[],"mappings":"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"}