@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
@@ -1,155 +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
- /** Max lines of output to buffer per agent (matches xterm scrollback). */
9
- const MAX_OUTPUT_LINES = 10_000;
10
- /** Max bytes for the raw output buffer per agent (5 MB). */
11
- const MAX_RAW_BYTES = 5_000_000;
12
- export class BrokerSpawnReader {
13
- adapter;
14
- agentCache = new Map();
15
- outputBuffers = new Map();
16
- rawOutputBuffers = new Map();
17
- unsubscribe;
18
- constructor(adapter) {
19
- this.adapter = adapter;
20
- }
21
- /**
22
- * Start listening to broker events.
23
- * Must be called once after adapter.start() to seed state and begin tracking.
24
- */
25
- async initialize() {
26
- // Seed cache from current agent list
27
- try {
28
- const agents = await this.adapter.listAgents();
29
- for (const a of agents) {
30
- this.agentCache.set(a.name, {
31
- name: a.name,
32
- cli: a.cli || 'unknown',
33
- task: '',
34
- spawnedAt: Date.now(),
35
- pid: a.pid,
36
- });
37
- }
38
- }
39
- catch {
40
- // Non-fatal — broker may not have agents yet
41
- }
42
- // Subscribe to events for live updates
43
- this.unsubscribe = this.adapter.onEvent((event) => {
44
- switch (event.kind) {
45
- case 'agent_spawned': {
46
- this.agentCache.set(event.name, {
47
- name: event.name,
48
- cli: 'unknown',
49
- task: '',
50
- spawnedAt: Date.now(),
51
- });
52
- // Initialize output buffers
53
- this.outputBuffers.set(event.name, []);
54
- this.rawOutputBuffers.set(event.name, '');
55
- break;
56
- }
57
- case 'agent_released':
58
- case 'agent_exited': {
59
- this.agentCache.delete(event.name);
60
- // Keep output buffers so logs are still accessible after exit
61
- break;
62
- }
63
- case 'worker_stream': {
64
- const lines = this.outputBuffers.get(event.name);
65
- if (lines) {
66
- lines.push(event.chunk);
67
- // Trim to max buffer size
68
- if (lines.length > MAX_OUTPUT_LINES) {
69
- lines.splice(0, lines.length - MAX_OUTPUT_LINES);
70
- }
71
- }
72
- else {
73
- this.outputBuffers.set(event.name, [event.chunk]);
74
- }
75
- // Append raw chunk as-is (no newline synthesis) so TUI repaint
76
- // control sequences remain faithful for xterm rendering.
77
- let raw = (this.rawOutputBuffers.get(event.name) ?? '') + event.chunk;
78
- if (raw.length > MAX_RAW_BYTES) {
79
- // Trim from the front, keeping from the first newline after the cut point
80
- const trimPoint = raw.length - MAX_RAW_BYTES;
81
- const newlineIdx = raw.indexOf('\n', trimPoint);
82
- raw = newlineIdx !== -1 ? raw.slice(newlineIdx + 1) : raw.slice(trimPoint);
83
- }
84
- this.rawOutputBuffers.set(event.name, raw);
85
- break;
86
- }
87
- }
88
- });
89
- }
90
- hasWorker(name) {
91
- return this.agentCache.has(name);
92
- }
93
- getActiveWorkers() {
94
- return Array.from(this.agentCache.values());
95
- }
96
- getWorkerOutput(name, limit = 500) {
97
- const lines = this.outputBuffers.get(name);
98
- if (!lines)
99
- return undefined;
100
- return lines.slice(-limit);
101
- }
102
- getWorkerRawOutput(name) {
103
- return this.rawOutputBuffers.get(name);
104
- }
105
- async sendWorkerInput(name, data) {
106
- try {
107
- await this.adapter.sendInput(name, data);
108
- return true;
109
- }
110
- catch (err) {
111
- console.error(`[broker-spawn-reader] Failed to send input to ${name}:`, err);
112
- return false;
113
- }
114
- }
115
- /** Refresh the agent cache from the broker. */
116
- async refresh() {
117
- try {
118
- const agents = await this.adapter.listAgents();
119
- const currentNames = new Set(agents.map((a) => a.name));
120
- // Remove agents no longer present
121
- for (const name of this.agentCache.keys()) {
122
- if (!currentNames.has(name)) {
123
- this.agentCache.delete(name);
124
- }
125
- }
126
- // Add/update agents
127
- for (const a of agents) {
128
- const existing = this.agentCache.get(a.name);
129
- if (existing) {
130
- existing.pid = a.pid;
131
- }
132
- else {
133
- this.agentCache.set(a.name, {
134
- name: a.name,
135
- cli: a.cli || 'unknown',
136
- task: '',
137
- spawnedAt: Date.now(),
138
- pid: a.pid,
139
- });
140
- }
141
- }
142
- }
143
- catch {
144
- // Non-fatal
145
- }
146
- }
147
- /** Clean up event subscriptions. */
148
- destroy() {
149
- this.unsubscribe?.();
150
- this.agentCache.clear();
151
- this.outputBuffers.clear();
152
- this.rawOutputBuffers.clear();
153
- }
154
- }
155
- //# sourceMappingURL=broker-spawn-reader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"broker-spawn-reader.js","sourceRoot":"","sources":["../../src/services/broker-spawn-reader.ts"],"names":[],"mappings":"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"}
@@ -1,155 +0,0 @@
1
- /**
2
- * User Bridge - Bridges dashboard WebSocket users to the relay daemon.
3
- *
4
- * This module allows human users connected via WebSocket to:
5
- * - Register as "user" entities in the relay daemon
6
- * - Join/leave channels
7
- * - Send/receive messages through the relay daemon
8
- * - Communicate with agents and other users
9
- */
10
- import type { WebSocket } from 'ws';
11
- /**
12
- * Relay client interface (subset of RelayClient for dependency injection)
13
- */
14
- export interface IRelayClient {
15
- connect(): Promise<void>;
16
- disconnect(): void;
17
- state: string;
18
- sendMessage(to: string, body: string, kind?: string, data?: unknown, thread?: string): boolean;
19
- joinChannel(channel: string, displayName?: string): boolean;
20
- leaveChannel(channel: string, reason?: string): boolean;
21
- sendChannelMessage(channel: string, body: string, options?: {
22
- thread?: string;
23
- mentions?: string[];
24
- attachments?: unknown[];
25
- data?: Record<string, unknown>;
26
- }): boolean;
27
- adminJoinChannel?(channel: string, member: string): boolean;
28
- adminRemoveMember?(channel: string, member: string): boolean;
29
- onMessage?: (from: string, payload: any, messageId: string, meta?: any, originalTo?: string) => void;
30
- onChannelMessage?: (from: string, channel: string, body: string, envelope: any) => void;
31
- }
32
- /**
33
- * Factory function type for creating relay clients
34
- */
35
- export type RelayClientFactory = (options: {
36
- agentName: string;
37
- entityType: 'user';
38
- displayName?: string;
39
- avatarUrl?: string;
40
- }) => Promise<IRelayClient>;
41
- /**
42
- * User info for avatar lookups
43
- */
44
- export interface UserInfo {
45
- avatarUrl?: string;
46
- }
47
- /**
48
- * Options for creating a UserBridge
49
- */
50
- export interface UserBridgeOptions {
51
- createRelayClient: RelayClientFactory;
52
- loadPersistedChannels?: (username: string) => Promise<string[]>;
53
- /** Optional callback to look up user info (avatar URL) by username */
54
- lookupUserInfo?: (username: string) => UserInfo | undefined;
55
- }
56
- /**
57
- * Message options for sending
58
- */
59
- export interface SendMessageOptions {
60
- thread?: string;
61
- data?: Record<string, unknown>;
62
- attachments?: unknown[];
63
- }
64
- /**
65
- * UserBridge manages the connection between dashboard WebSocket users
66
- * and the relay daemon.
67
- */
68
- export declare class UserBridge {
69
- private readonly createRelayClient;
70
- private readonly loadPersistedChannels?;
71
- private readonly lookupUserInfo?;
72
- private readonly users;
73
- constructor(options: UserBridgeOptions);
74
- /**
75
- * Get the relay client for a user if they are registered.
76
- * This allows external code to reuse the userBridge's relay client
77
- * instead of creating a duplicate connection.
78
- */
79
- getRelayClient(username: string): IRelayClient | undefined;
80
- /**
81
- * Register a user with the relay daemon.
82
- * Creates a relay client connection for the user.
83
- */
84
- registerUser(username: string, webSocket: WebSocket, options?: {
85
- avatarUrl?: string;
86
- displayName?: string;
87
- }): Promise<void>;
88
- /**
89
- * Remove a specific WebSocket connection from a user's session.
90
- * If this was the last connection, unregister the user entirely.
91
- */
92
- private removeWebSocket;
93
- /**
94
- * Unregister a user and disconnect their relay client.
95
- */
96
- unregisterUser(username: string): void;
97
- /**
98
- * Check if a user is registered.
99
- */
100
- isUserRegistered(username: string): boolean;
101
- /**
102
- * Add a new WebSocket connection for an existing user session.
103
- * This is needed when a user opens a new tab.
104
- */
105
- updateWebSocket(username: string, newWebSocket: WebSocket): boolean;
106
- /**
107
- * Get list of all registered users.
108
- */
109
- getRegisteredUsers(): string[];
110
- /**
111
- * Join a channel.
112
- */
113
- joinChannel(username: string, channel: string): Promise<boolean>;
114
- /**
115
- * Leave a channel.
116
- */
117
- leaveChannel(username: string, channel: string): Promise<boolean>;
118
- /**
119
- * Get channels a user has joined.
120
- */
121
- getUserChannels(username: string): string[];
122
- /**
123
- * Send a message to a channel.
124
- */
125
- sendChannelMessage(username: string, channel: string, body: string, options?: SendMessageOptions): Promise<boolean>;
126
- /**
127
- * Send a direct message to another user or agent.
128
- */
129
- sendDirectMessage(fromUsername: string, toName: string, body: string, options?: SendMessageOptions): Promise<boolean>;
130
- /**
131
- * Handle incoming direct message from relay daemon.
132
- */
133
- private handleIncomingDirectMessage;
134
- /**
135
- * Handle incoming channel message from relay daemon.
136
- */
137
- private handleIncomingChannelMessage;
138
- /**
139
- * Admin: Add a member to a channel (does not require member to be connected).
140
- * Used to sync channel memberships from database.
141
- * Uses the first available user session or creates a temporary one.
142
- */
143
- adminJoinChannel(channel: string, member: string): Promise<boolean>;
144
- /**
145
- * Admin: Remove a member from a channel (does not require member to be connected).
146
- * Used to remove channel members from dashboard.
147
- * Uses the first available user session or creates a temporary one.
148
- */
149
- adminRemoveMember(channel: string, member: string): Promise<boolean>;
150
- /**
151
- * Dispose of all user sessions.
152
- */
153
- dispose(): void;
154
- }
155
- //# sourceMappingURL=user-bridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-bridge.d.ts","sourceRoot":"","sources":["../../src/services/user-bridge.ts"],"names":[],"mappings":"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"}