@agent-relay/dashboard-server 2.0.93 → 2.0.94

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 (176) hide show
  1. package/dist/routes/models.d.ts.map +1 -1
  2. package/dist/routes/models.js +39 -3
  3. package/dist/routes/models.js.map +1 -1
  4. package/dist/services/index.d.ts +0 -1
  5. package/dist/services/index.d.ts.map +1 -1
  6. package/dist/services/index.js +0 -1
  7. package/dist/services/index.js.map +1 -1
  8. package/dist/types/index.d.ts +0 -75
  9. package/dist/types/index.d.ts.map +1 -1
  10. package/dist/websocket/logs.d.ts +1 -25
  11. package/dist/websocket/logs.d.ts.map +1 -1
  12. package/dist/websocket/logs.js +0 -397
  13. package/dist/websocket/logs.js.map +1 -1
  14. package/out/404.html +1 -1
  15. package/out/_next/static/chunks/{3663-47290254b8f6f5dd.js → 3663-191a9aa9104061af.js} +1 -1
  16. package/out/_next/static/chunks/4201-d11188cf35739bff.js +1 -0
  17. package/out/_next/static/chunks/5787-f6fd7a3fbfe5eae6.js +73 -0
  18. package/out/_next/static/chunks/app/app/[[...slug]]/{page-c1376e695ba19e38.js → page-2b872f60e3d64014.js} +1 -1
  19. package/out/_next/static/chunks/app/{page-f2ebc7d0bc08e395.js → page-ca5511e5d65100a5.js} +1 -1
  20. package/out/about.html +1 -1
  21. package/out/about.txt +1 -1
  22. package/out/app/onboarding.html +1 -1
  23. package/out/app/onboarding.txt +1 -1
  24. package/out/app.html +1 -1
  25. package/out/app.txt +2 -2
  26. package/out/blog/go-to-bed-wake-up-to-a-finished-product.html +1 -1
  27. package/out/blog/go-to-bed-wake-up-to-a-finished-product.txt +1 -1
  28. package/out/blog/let-them-cook-multi-agent-orchestration.html +1 -1
  29. package/out/blog/let-them-cook-multi-agent-orchestration.txt +1 -1
  30. package/out/blog.html +1 -1
  31. package/out/blog.txt +1 -1
  32. package/out/careers.html +1 -1
  33. package/out/careers.txt +1 -1
  34. package/out/changelog.html +1 -1
  35. package/out/changelog.txt +1 -1
  36. package/out/cloud/link.html +1 -1
  37. package/out/cloud/link.txt +1 -1
  38. package/out/complete-profile.html +1 -1
  39. package/out/complete-profile.txt +1 -1
  40. package/out/connect-repos.html +1 -1
  41. package/out/connect-repos.txt +1 -1
  42. package/out/contact.html +1 -1
  43. package/out/contact.txt +1 -1
  44. package/out/dev/cli-tools.html +1 -1
  45. package/out/dev/cli-tools.txt +1 -1
  46. package/out/dev/log-viewer.html +1 -1
  47. package/out/dev/log-viewer.txt +1 -1
  48. package/out/docs.html +1 -1
  49. package/out/docs.txt +1 -1
  50. package/out/history.html +1 -1
  51. package/out/history.txt +2 -2
  52. package/out/index.html +1 -1
  53. package/out/index.txt +2 -2
  54. package/out/login.html +1 -1
  55. package/out/login.txt +1 -1
  56. package/out/metrics.html +1 -1
  57. package/out/metrics.txt +2 -2
  58. package/out/pricing.html +1 -1
  59. package/out/pricing.txt +1 -1
  60. package/out/privacy.html +1 -1
  61. package/out/privacy.txt +1 -1
  62. package/out/providers/setup/claude.html +1 -1
  63. package/out/providers/setup/claude.txt +1 -1
  64. package/out/providers/setup/codex.html +1 -1
  65. package/out/providers/setup/codex.txt +1 -1
  66. package/out/providers/setup/cursor.html +1 -1
  67. package/out/providers/setup/cursor.txt +1 -1
  68. package/out/providers.html +1 -1
  69. package/out/providers.txt +1 -1
  70. package/out/security.html +1 -1
  71. package/out/security.txt +1 -1
  72. package/out/signup.html +1 -1
  73. package/out/signup.txt +1 -1
  74. package/out/terms.html +1 -1
  75. package/out/terms.txt +1 -1
  76. package/package.json +6 -9
  77. package/dist/lib/attachment-storage.d.ts +0 -10
  78. package/dist/lib/attachment-storage.d.ts.map +0 -1
  79. package/dist/lib/attachment-storage.js +0 -53
  80. package/dist/lib/attachment-storage.js.map +0 -1
  81. package/dist/lib/broadcast.d.ts +0 -18
  82. package/dist/lib/broadcast.d.ts.map +0 -1
  83. package/dist/lib/broadcast.js +0 -118
  84. package/dist/lib/broadcast.js.map +0 -1
  85. package/dist/lib/channel-state.d.ts +0 -32
  86. package/dist/lib/channel-state.d.ts.map +0 -1
  87. package/dist/lib/channel-state.js +0 -146
  88. package/dist/lib/channel-state.js.map +0 -1
  89. package/dist/lib/cli-auth.d.ts +0 -40
  90. package/dist/lib/cli-auth.d.ts.map +0 -1
  91. package/dist/lib/cli-auth.js +0 -144
  92. package/dist/lib/cli-auth.js.map +0 -1
  93. package/dist/lib/data-assembly.d.ts +0 -136
  94. package/dist/lib/data-assembly.d.ts.map +0 -1
  95. package/dist/lib/data-assembly.js +0 -550
  96. package/dist/lib/data-assembly.js.map +0 -1
  97. package/dist/lib/server-state.d.ts +0 -115
  98. package/dist/lib/server-state.d.ts.map +0 -1
  99. package/dist/lib/server-state.js +0 -138
  100. package/dist/lib/server-state.js.map +0 -1
  101. package/dist/lib/websocket-runtime.d.ts +0 -17
  102. package/dist/lib/websocket-runtime.d.ts.map +0 -1
  103. package/dist/lib/websocket-runtime.js +0 -76
  104. package/dist/lib/websocket-runtime.js.map +0 -1
  105. package/dist/routes/auth.d.ts +0 -45
  106. package/dist/routes/auth.d.ts.map +0 -1
  107. package/dist/routes/auth.js +0 -261
  108. package/dist/routes/auth.js.map +0 -1
  109. package/dist/routes/channels-integrated.d.ts +0 -84
  110. package/dist/routes/channels-integrated.d.ts.map +0 -1
  111. package/dist/routes/channels-integrated.js +0 -644
  112. package/dist/routes/channels-integrated.js.map +0 -1
  113. package/dist/routes/decisions.d.ts +0 -31
  114. package/dist/routes/decisions.d.ts.map +0 -1
  115. package/dist/routes/decisions.js +0 -109
  116. package/dist/routes/decisions.js.map +0 -1
  117. package/dist/routes/fleet.d.ts +0 -24
  118. package/dist/routes/fleet.d.ts.map +0 -1
  119. package/dist/routes/fleet.js +0 -131
  120. package/dist/routes/fleet.js.map +0 -1
  121. package/dist/routes/history.d.ts +0 -13
  122. package/dist/routes/history.d.ts.map +0 -1
  123. package/dist/routes/history.js +0 -205
  124. package/dist/routes/history.js.map +0 -1
  125. package/dist/routes/messaging.d.ts +0 -34
  126. package/dist/routes/messaging.d.ts.map +0 -1
  127. package/dist/routes/messaging.js +0 -306
  128. package/dist/routes/messaging.js.map +0 -1
  129. package/dist/routes/settings.d.ts +0 -6
  130. package/dist/routes/settings.d.ts.map +0 -1
  131. package/dist/routes/settings.js +0 -119
  132. package/dist/routes/settings.js.map +0 -1
  133. package/dist/routes/spawn.d.ts +0 -75
  134. package/dist/routes/spawn.d.ts.map +0 -1
  135. package/dist/routes/spawn.js +0 -521
  136. package/dist/routes/spawn.js.map +0 -1
  137. package/dist/routes/system.d.ts +0 -21
  138. package/dist/routes/system.d.ts.map +0 -1
  139. package/dist/routes/system.js +0 -186
  140. package/dist/routes/system.js.map +0 -1
  141. package/dist/routes/tasks.d.ts +0 -27
  142. package/dist/routes/tasks.d.ts.map +0 -1
  143. package/dist/routes/tasks.js +0 -103
  144. package/dist/routes/tasks.js.map +0 -1
  145. package/dist/routes/ui.d.ts +0 -6
  146. package/dist/routes/ui.d.ts.map +0 -1
  147. package/dist/routes/ui.js +0 -114
  148. package/dist/routes/ui.js.map +0 -1
  149. package/dist/server.d.ts +0 -4
  150. package/dist/server.d.ts.map +0 -1
  151. package/dist/server.js +0 -481
  152. package/dist/server.js.map +0 -1
  153. package/dist/services/broker-spawn-reader.d.ts +0 -40
  154. package/dist/services/broker-spawn-reader.d.ts.map +0 -1
  155. package/dist/services/broker-spawn-reader.js +0 -155
  156. package/dist/services/broker-spawn-reader.js.map +0 -1
  157. package/dist/services/user-bridge.d.ts +0 -155
  158. package/dist/services/user-bridge.d.ts.map +0 -1
  159. package/dist/services/user-bridge.js +0 -385
  160. package/dist/services/user-bridge.js.map +0 -1
  161. package/dist/websocket/bridge.d.ts +0 -12
  162. package/dist/websocket/bridge.d.ts.map +0 -1
  163. package/dist/websocket/bridge.js +0 -33
  164. package/dist/websocket/bridge.js.map +0 -1
  165. package/dist/websocket/main.d.ts +0 -15
  166. package/dist/websocket/main.d.ts.map +0 -1
  167. package/dist/websocket/main.js +0 -84
  168. package/dist/websocket/main.js.map +0 -1
  169. package/dist/websocket/presence.d.ts +0 -74
  170. package/dist/websocket/presence.d.ts.map +0 -1
  171. package/dist/websocket/presence.js +0 -330
  172. package/dist/websocket/presence.js.map +0 -1
  173. package/out/_next/static/chunks/270-8c0b8109123a0c5f.js +0 -73
  174. package/out/_next/static/chunks/5518-3b96a248632a79c0.js +0 -1
  175. /package/out/_next/static/{9CykW6n4dJn75_XoFVN_X → wgSCX8AQnjVl_Rnx1gUp5}/_buildManifest.js +0 -0
  176. /package/out/_next/static/{9CykW6n4dJn75_XoFVN_X → wgSCX8AQnjVl_Rnx1gUp5}/_ssgManifest.js +0 -0
package/dist/server.js DELETED
@@ -1,481 +0,0 @@
1
- import express from 'express';
2
- import { WebSocketServer } from 'ws';
3
- import http from 'http';
4
- import path from 'path';
5
- import fs from 'fs';
6
- import { createStorageAdapter } from '@agent-relay/storage/adapter';
7
- import { UserBridge } from './services/user-bridge.js';
8
- import { detectWorkspacePath } from '@agent-relay/config';
9
- import { BrokerSpawnReader } from './services/broker-spawn-reader.js';
10
- import { startCLIAuth, getAuthSession, cancelAuthSession, submitAuthCode, completeAuthSession, getSupportedProviders, } from './lib/cli-auth.js';
11
- import { createServerState } from './lib/server-state.js';
12
- import { createBroadcasters } from './lib/broadcast.js';
13
- import { createDataAssembly } from './lib/data-assembly.js';
14
- import { createChannelPersistence } from './lib/channel-state.js';
15
- import { setupWebSocketRuntime } from './lib/websocket-runtime.js';
16
- import { initializeAttachmentStorage } from './lib/attachment-storage.js';
17
- import { setupMainWebSocket } from './websocket/main.js';
18
- import { setupBridgeWebSocket } from './websocket/bridge.js';
19
- import { setupLogsWebSocket } from './websocket/logs.js';
20
- import { setupPresenceWebSocket } from './websocket/presence.js';
21
- import { registerMessagingRoutes } from './routes/messaging.js';
22
- import { registerHistoryRoutes } from './routes/history.js';
23
- import { registerAuthRoutes } from './routes/auth.js';
24
- import { registerSettingsRoutes } from './routes/settings.js';
25
- import { registerDecisionsRoutes } from './routes/decisions.js';
26
- import { registerTasksRoutes } from './routes/tasks.js';
27
- import { registerFleetRoutes } from './routes/fleet.js';
28
- import { registerSpawnRoutes } from './routes/spawn.js';
29
- import { registerMetricsRoutes } from './routes/metrics.js';
30
- import { registerChannelsIntegratedRoutes } from './routes/channels-integrated.js';
31
- import { registerSystemRoutes } from './routes/system.js';
32
- import { registerUiRoutes } from './routes/ui.js';
33
- import { registerModelsRoutes } from './routes/models.js';
34
- import { getBindHost, isAgentOnline as checkAgentOnline, isRecipientOnline as checkRecipientOnline, getTeamMembers as resolveTeamMembers, isValidUsername, isValidAvatarUrl, } from './lib/utils.js';
35
- export async function startDashboard(portOrOptions, dataDirArg, teamDirArg, dbPathArg) {
36
- // Handle overloaded signatures
37
- const options = typeof portOrOptions === 'number'
38
- ? { port: portOrOptions, dataDir: dataDirArg, teamDir: teamDirArg, dbPath: dbPathArg }
39
- : portOrOptions;
40
- const { port, dataDir, teamDir, dbPath, enableSpawner, projectRoot, tmuxSession, onMarkSpawning, onClearSpawning, verbose } = options;
41
- let { relayAdapter } = options;
42
- // Auto-create a RelayAdapter when projectRoot is available and no adapter is passed.
43
- // This makes the dashboard self-contained — `relay-dashboard-server --integrated --project-root .`
44
- // works without the CLI.
45
- if (!relayAdapter && enableSpawner && projectRoot) {
46
- try {
47
- const brokerSdk = await import('@agent-relay/sdk');
48
- relayAdapter = new brokerSdk.RelayAdapter({
49
- cwd: projectRoot,
50
- clientName: 'dashboard',
51
- });
52
- console.log('[dashboard] Auto-created RelayAdapter for broker mode');
53
- }
54
- catch {
55
- // Ignore import failures here and throw a clear error below.
56
- }
57
- }
58
- if (!relayAdapter) {
59
- throw new Error('[dashboard] RelayAdapter is required (legacy daemon relay-client mode has been removed)');
60
- }
61
- // Debug logging helper - only logs when verbose is true or VERBOSE env var is set
62
- const isVerbose = verbose || process.env.VERBOSE === 'true';
63
- const debug = (message) => {
64
- if (isVerbose) {
65
- console.log(message);
66
- }
67
- };
68
- console.log('[dashboard] Starting dashboard...');
69
- const disableStorage = process.env.RELAY_DISABLE_STORAGE === 'true';
70
- // Use createStorageAdapter to match daemon's storage type (JSONL by default)
71
- // This ensures dashboard reads from the same storage as daemon writes to
72
- // Enable watchForChanges so JSONL adapter auto-reloads when daemon writes new messages
73
- const storagePath = dbPath ?? path.join(dataDir, 'messages.sqlite');
74
- const storage = disableStorage
75
- ? undefined
76
- : await createStorageAdapter(storagePath, { watchForChanges: true });
77
- const defaultWorkspaceId = process.env.RELAY_WORKSPACE_ID ?? process.env.AGENT_RELAY_WORKSPACE_ID;
78
- const { loadChannelRecords, loadPersistedChannelsForUser, persistChannelMembershipEvent, } = createChannelPersistence({
79
- storage,
80
- defaultWorkspaceId,
81
- });
82
- // Initialize spawner if enabled
83
- // When projectRoot is explicitly provided (e.g., via --project-root), use it directly.
84
- // Only use detectWorkspacePath for cloud workspace auto-detection when no explicit root is given.
85
- // This fixes #380: detectWorkspacePath could re-resolve projectRoot incorrectly when
86
- // tool directories like ~/.nvm contain package.json markers.
87
- const workspacePath = projectRoot || detectWorkspacePath(dataDir);
88
- console.log(`[dashboard] Workspace path: ${workspacePath}`);
89
- // SpawnReader is now always broker-backed.
90
- const brokerSpawnReader = new BrokerSpawnReader(relayAdapter);
91
- await relayAdapter.start();
92
- await brokerSpawnReader.initialize();
93
- const spawnReader = brokerSpawnReader;
94
- console.log('[dashboard] Using broker adapter for spawn operations');
95
- process.on('uncaughtException', (err) => {
96
- console.error('Uncaught Exception:', err);
97
- });
98
- process.on('unhandledRejection', (reason, promise) => {
99
- console.error('Unhandled Rejection at:', promise, 'reason:', reason);
100
- });
101
- const app = express();
102
- const server = http.createServer(app);
103
- // Use noServer mode to manually route upgrade requests
104
- // This prevents the bug where multiple WebSocketServers attached to the same
105
- // HTTP server cause conflicts - each one's upgrade handler fires and the ones
106
- // that don't match the path call abortHandshake(400), writing raw HTTP to the socket
107
- const wss = new WebSocketServer({
108
- noServer: true,
109
- perMessageDeflate: false,
110
- skipUTF8Validation: true,
111
- maxPayload: 100 * 1024 * 1024 // 100MB
112
- });
113
- const wssBridge = new WebSocketServer({
114
- noServer: true,
115
- perMessageDeflate: false,
116
- skipUTF8Validation: true,
117
- maxPayload: 100 * 1024 * 1024
118
- });
119
- const wssLogs = new WebSocketServer({
120
- noServer: true,
121
- perMessageDeflate: false,
122
- skipUTF8Validation: true,
123
- maxPayload: 100 * 1024 * 1024
124
- });
125
- const wssPresence = new WebSocketServer({
126
- noServer: true,
127
- perMessageDeflate: false,
128
- skipUTF8Validation: true,
129
- maxPayload: 1024 * 1024 // 1MB - presence messages are small
130
- });
131
- const state = createServerState({
132
- dataDir,
133
- teamDir,
134
- projectRoot,
135
- verbose: isVerbose,
136
- defaultWorkspaceId,
137
- storage,
138
- relayAdapter,
139
- spawnReader,
140
- wss,
141
- wssBridge,
142
- wssLogs,
143
- wssPresence,
144
- });
145
- const logSubscriptions = state.logSubscriptions;
146
- const fileWatchers = state.fileWatchers;
147
- const fileLastSize = state.fileLastSize;
148
- const mainMessageBuffer = state.mainMessageBuffer;
149
- const agentLogBuffers = state.agentLogBuffers;
150
- const getAgentLogBuffer = state.getAgentLogBuffer;
151
- const mainClientAlive = state.mainClientAlive;
152
- const bridgeClientAlive = state.bridgeClientAlive;
153
- const onlineUsers = state.onlineUsers;
154
- const agentCwdMap = state.agentCwdMap;
155
- const resolveWorkspaceId = state.resolveWorkspaceId;
156
- setupWebSocketRuntime({
157
- server,
158
- wss,
159
- wssBridge,
160
- wssLogs,
161
- wssPresence,
162
- mainClientAlive,
163
- bridgeClientAlive,
164
- debug,
165
- });
166
- if (storage) {
167
- await storage.init();
168
- }
169
- // Request logger for debugging
170
- app.use((req, res, next) => {
171
- if (req.path.startsWith('/api/channels')) {
172
- console.log(`[dashboard] ${req.method} ${req.path} - incoming request`);
173
- }
174
- next();
175
- });
176
- // Increase JSON body limit for base64 image uploads (10MB)
177
- app.use(express.json({ limit: '10mb' }));
178
- const { attachmentsDir, uploadsDir, stopEviction } = initializeAttachmentStorage(dataDir);
179
- process.on('beforeExit', stopEviction);
180
- // Serve uploaded files statically
181
- app.use('/uploads', express.static(uploadsDir));
182
- // Serve attachments from ~/.relay/attachments
183
- app.use('/attachments', express.static(attachmentsDir));
184
- // In-memory attachment registry (for current session)
185
- // Attachments are also stored on disk, so this is just for quick lookups
186
- const attachmentRegistry = state.attachmentRegistry;
187
- registerUiRoutes(app);
188
- // Relay clients for sending messages from dashboard are broker-backed shims.
189
- // Forward declaration - initialized after helper factories.
190
- let userBridge;
191
- const getRelayClient = async (senderName = 'Dashboard', _entityType) => {
192
- return state.getBrokerClientShim(senderName);
193
- };
194
- userBridge = new UserBridge({
195
- createRelayClient: async (options) => {
196
- return getRelayClient(options.agentName, options.entityType);
197
- },
198
- loadPersistedChannels: (username) => loadPersistedChannelsForUser(username, defaultWorkspaceId),
199
- lookupUserInfo: (username) => {
200
- const presence = onlineUsers.get(username);
201
- if (presence) {
202
- return { avatarUrl: presence.info.avatarUrl };
203
- }
204
- return undefined;
205
- },
206
- });
207
- const isAgentOnline = (agentName) => checkAgentOnline(teamDir, agentName);
208
- const isRecipientOnline = (name) => checkRecipientOnline(teamDir, name, onlineUsers, userBridge);
209
- const getTeamMembers = (teamName) => resolveTeamMembers(teamName, projectRoot, dataDir, teamDir, spawnReader);
210
- const { getAllData, getBridgeData, isInternalAgent, remapAgentName, buildThreadSummaryMap, formatDuration, } = createDataAssembly({
211
- dataDir,
212
- teamDir,
213
- projectRoot,
214
- defaultWorkspaceId,
215
- storage,
216
- spawnReader,
217
- onlineUsers,
218
- agentCwdMap,
219
- debug,
220
- });
221
- registerHistoryRoutes(app, {
222
- storage,
223
- formatDuration,
224
- isInternalAgent,
225
- remapAgentName,
226
- });
227
- // Track clients that are still initializing (haven't received first data yet)
228
- // This prevents race conditions where broadcastData sends before initial data is sent
229
- const initializingClients = state.initializingClients;
230
- const { broadcastData, broadcastBridgeData, broadcastPresence, broadcastLogOutput } = createBroadcasters(state, { getAllData, getBridgeData, debug });
231
- registerMessagingRoutes(app, {
232
- getTeamMembers,
233
- isAgentOnline,
234
- isRecipientOnline,
235
- getRelayClient,
236
- attachmentRegistry,
237
- attachmentsDir,
238
- broadcastData,
239
- storage,
240
- remapAgentName,
241
- });
242
- // Expose broadcastLogOutput for PTY wrappers to call.
243
- global.__broadcastLogOutput = broadcastLogOutput;
244
- // Handle new WebSocket connections - send initial data immediately.
245
- setupMainWebSocket({
246
- wss,
247
- mainClientAlive,
248
- mainMessageBuffer,
249
- initializingClients,
250
- getAllData,
251
- debug,
252
- });
253
- // Handle bridge WebSocket connections.
254
- setupBridgeWebSocket({
255
- wssBridge,
256
- bridgeClientAlive,
257
- getBridgeData,
258
- debug,
259
- });
260
- setupLogsWebSocket({
261
- wssLogs,
262
- teamDir,
263
- debug,
264
- logSubscriptions,
265
- fileWatchers,
266
- fileLastSize,
267
- agentLogBuffers,
268
- getAgentLogBuffer,
269
- spawnReader,
270
- });
271
- // ===== Presence WebSocket Handler =====
272
- const { broadcastChannelMessage, broadcastDirectMessage } = setupPresenceWebSocket({
273
- wss,
274
- wssPresence,
275
- mainMessageBuffer,
276
- onlineUsers,
277
- presenceHealth: state.presenceHealth,
278
- broadcastPresence,
279
- isValidUsername,
280
- isValidAvatarUrl,
281
- getUserBridge: () => userBridge,
282
- debug,
283
- });
284
- relayAdapter.onEvent((event) => {
285
- if (event.kind === 'relay_inbound') {
286
- const senderPresence = onlineUsers.get(event.from);
287
- const fromAvatarUrl = senderPresence?.info.avatarUrl;
288
- const fromEntityType = senderPresence ? 'user' : 'agent';
289
- const timestamp = new Date().toISOString();
290
- // Route to channel or direct message based on target.
291
- if (event.target.startsWith('#')) {
292
- broadcastChannelMessage({
293
- type: 'channel_message',
294
- targetUser: event.target,
295
- channel: event.target,
296
- from: event.from,
297
- fromAvatarUrl,
298
- fromEntityType,
299
- body: event.body,
300
- thread: event.thread_id,
301
- timestamp,
302
- });
303
- }
304
- else {
305
- broadcastDirectMessage({
306
- type: 'direct_message',
307
- targetUser: event.target,
308
- from: event.from,
309
- fromAvatarUrl,
310
- fromEntityType,
311
- body: event.body,
312
- id: event.event_id,
313
- messageId: event.event_id,
314
- timestamp,
315
- });
316
- }
317
- }
318
- });
319
- console.log('[dashboard] Broker event subscription active for message forwarding');
320
- registerChannelsIntegratedRoutes(app, {
321
- storage,
322
- teamDir,
323
- attachmentRegistry,
324
- onlineUsers,
325
- userBridge,
326
- spawnReader,
327
- resolveWorkspaceId,
328
- loadChannelRecords,
329
- persistChannelMembershipEvent,
330
- getRelayClient,
331
- buildThreadSummaryMap,
332
- isInternalAgent,
333
- getAllData,
334
- });
335
- registerAuthRoutes(app, {
336
- startCLIAuth,
337
- getAuthSession,
338
- cancelAuthSession,
339
- submitAuthCode,
340
- completeAuthSession,
341
- getSupportedProviders,
342
- });
343
- registerMetricsRoutes(app, {
344
- teamDir,
345
- spawnReader,
346
- resolveWorkspaceId,
347
- });
348
- registerSystemRoutes(app, {
349
- dataDir,
350
- teamDir,
351
- projectRoot,
352
- resolveWorkspaceId,
353
- getRelayClient,
354
- });
355
- registerSpawnRoutes(app, {
356
- dataDir,
357
- projectRoot,
358
- relayAdapter,
359
- spawnReader,
360
- agentCwdMap,
361
- isAgentOnline,
362
- resolveWorkspaceId,
363
- broadcastData,
364
- broadcastPresence,
365
- });
366
- registerSettingsRoutes(app);
367
- registerModelsRoutes(app);
368
- const decisions = state.decisions;
369
- registerDecisionsRoutes(app, {
370
- decisions,
371
- getRelayClient,
372
- broadcastData,
373
- });
374
- const tasks = state.tasks;
375
- registerTasksRoutes(app, {
376
- tasks,
377
- getRelayClient,
378
- broadcastData,
379
- });
380
- registerFleetRoutes(app, {
381
- dataDir,
382
- spawnReader,
383
- wss,
384
- decisions,
385
- tasks,
386
- });
387
- // Watch for changes - poll as a safety net for DB-backed storage mode.
388
- // Real-time updates are already handled by explicit broadcastData() calls
389
- // at every data mutation point (message send, spawn, release, cwd update, etc.).
390
- // This interval only catches external/indirect changes (presence, DB edits).
391
- if (storage) {
392
- setInterval(() => {
393
- broadcastData().catch((err) => console.error('Broadcast failed', err));
394
- broadcastBridgeData().catch((err) => console.error('Bridge broadcast failed', err));
395
- }, 5000);
396
- }
397
- else {
398
- let fsWait = null;
399
- let bridgeFsWait = null;
400
- try {
401
- if (fs.existsSync(dataDir)) {
402
- console.log(`Watching ${dataDir} for changes...`);
403
- fs.watch(dataDir, { recursive: true }, (eventType, filename) => {
404
- if (filename && (filename.endsWith('inbox.md') || filename.endsWith('team.json') || filename.endsWith('agents.json') || filename.endsWith('processing-state.json'))) {
405
- // Debounce
406
- if (fsWait)
407
- return;
408
- fsWait = setTimeout(() => {
409
- fsWait = null;
410
- broadcastData().catch((err) => {
411
- console.error('Broadcast failed', err);
412
- });
413
- }, 100);
414
- }
415
- // Watch for bridge state changes
416
- if (filename && filename.endsWith('bridge-state.json')) {
417
- if (bridgeFsWait)
418
- return;
419
- bridgeFsWait = setTimeout(() => {
420
- bridgeFsWait = null;
421
- broadcastBridgeData().catch((err) => {
422
- console.error('Bridge broadcast failed', err);
423
- });
424
- }, 100);
425
- }
426
- });
427
- }
428
- else {
429
- console.warn(`Data directory ${dataDir} does not exist yet.`);
430
- }
431
- }
432
- catch (e) {
433
- console.error('Watch failed:', e);
434
- }
435
- }
436
- // Try to find an available port, starting from the requested port
437
- const findAvailablePort = async (startPort, maxAttempts = 10) => {
438
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
439
- const portToTry = startPort + attempt;
440
- const isAvailable = await new Promise((resolve) => {
441
- const testServer = http.createServer();
442
- testServer.once('error', () => resolve(false));
443
- testServer.once('listening', () => {
444
- testServer.close();
445
- resolve(true);
446
- });
447
- testServer.listen(portToTry);
448
- });
449
- if (isAvailable) {
450
- return portToTry;
451
- }
452
- console.log(`Port ${portToTry} in use, trying ${portToTry + 1}...`);
453
- }
454
- throw new Error(`Could not find available port after trying ${startPort}-${startPort + maxAttempts - 1}`);
455
- };
456
- const availablePort = await findAvailablePort(port);
457
- if (availablePort !== port) {
458
- console.log(`Requested dashboard port ${port} is busy; switching to ${availablePort}.`);
459
- }
460
- return new Promise((resolve, reject) => {
461
- const host = getBindHost();
462
- const listenCallback = async () => {
463
- console.log(`Dashboard running at http://${host || 'localhost'}:${availablePort} (build: cloud-channels-v2)`);
464
- console.log(`Monitoring: ${dataDir}`);
465
- // Health and spawned status are now pass-through broker/cloud proxies.
466
- resolve(availablePort);
467
- };
468
- // Bind to specified host in cloud environments, or let Node.js default for local
469
- if (host) {
470
- server.listen(availablePort, host, listenCallback);
471
- }
472
- else {
473
- server.listen(availablePort, listenCallback);
474
- }
475
- server.on('error', (err) => {
476
- console.error('Server error:', err);
477
- reject(err);
478
- });
479
- });
480
- }
481
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- /**
2
- * BrokerSpawnReader — Implements SpawnManagerLike using RelayAdapter.
3
- *
4
- * Bridges the dashboard's sync SpawnManagerLike interface with the
5
- * async broker SDK by maintaining an internal cache of agents and
6
- * worker output, updated via broker event subscription.
7
- */
8
- import type { RelayAdapter } from '@agent-relay/sdk';
9
- import type { SpawnManagerLike } from '../types/index.js';
10
- export declare class BrokerSpawnReader implements SpawnManagerLike {
11
- private adapter;
12
- private agentCache;
13
- private outputBuffers;
14
- private rawOutputBuffers;
15
- private unsubscribe?;
16
- constructor(adapter: RelayAdapter);
17
- /**
18
- * Start listening to broker events.
19
- * Must be called once after adapter.start() to seed state and begin tracking.
20
- */
21
- initialize(): Promise<void>;
22
- hasWorker(name: string): boolean;
23
- getActiveWorkers(): Array<{
24
- name: string;
25
- cli: string;
26
- task: string;
27
- team?: string;
28
- spawnerName?: string;
29
- spawnedAt: number;
30
- pid?: number;
31
- }>;
32
- getWorkerOutput(name: string, limit?: number): string[] | undefined;
33
- getWorkerRawOutput(name: string): string | undefined;
34
- sendWorkerInput(name: string, data: string): Promise<boolean>;
35
- /** Refresh the agent cache from the broker. */
36
- refresh(): Promise<void>;
37
- /** Clean up event subscriptions. */
38
- destroy(): void;
39
- }
40
- //# sourceMappingURL=broker-spawn-reader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"broker-spawn-reader.d.ts","sourceRoot":"","sources":["../../src/services/broker-spawn-reader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAkB1D,qBAAa,iBAAkB,YAAW,gBAAgB;IAM5C,OAAO,CAAC,OAAO;IAL3B,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,WAAW,CAAC,CAAa;gBAEb,OAAO,EAAE,YAAY;IAEzC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoEjC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIhC,gBAAgB,IAAI,KAAK,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IAIF,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAMhE,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI9C,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUnE,+CAA+C;IACzC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC9B,oCAAoC;IACpC,OAAO,IAAI,IAAI;CAMhB"}