@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,53 +0,0 @@
1
- import fs from 'fs';
2
- import os from 'os';
3
- import path from 'path';
4
- /**
5
- * Prepare uploads/attachments directories and start periodic attachment eviction.
6
- */
7
- export function initializeAttachmentStorage(dataDir) {
8
- const attachmentsDir = path.join(os.homedir(), '.relay', 'attachments');
9
- if (!fs.existsSync(attachmentsDir)) {
10
- fs.mkdirSync(attachmentsDir, { recursive: true });
11
- }
12
- const uploadsDir = path.join(dataDir, 'uploads');
13
- if (!fs.existsSync(uploadsDir)) {
14
- fs.mkdirSync(uploadsDir, { recursive: true });
15
- }
16
- const maxAgeMs = 7 * 24 * 60 * 60 * 1000;
17
- const evictOldAttachments = async () => {
18
- try {
19
- const files = await fs.promises.readdir(attachmentsDir);
20
- const now = Date.now();
21
- let evictedCount = 0;
22
- for (const file of files) {
23
- const filePath = path.join(attachmentsDir, file);
24
- try {
25
- const stat = await fs.promises.stat(filePath);
26
- if (stat.isFile() && now - stat.mtimeMs > maxAgeMs) {
27
- await fs.promises.unlink(filePath);
28
- evictedCount++;
29
- }
30
- }
31
- catch {
32
- // Ignore per-file errors (deleted concurrently, permission changes, etc).
33
- }
34
- }
35
- if (evictedCount > 0) {
36
- console.log(`[dashboard] Evicted ${evictedCount} old attachment(s)`);
37
- }
38
- }
39
- catch (err) {
40
- console.error('[dashboard] Failed to evict old attachments:', err);
41
- }
42
- };
43
- void evictOldAttachments();
44
- const evictionInterval = setInterval(() => {
45
- void evictOldAttachments();
46
- }, 60 * 60 * 1000);
47
- return {
48
- attachmentsDir,
49
- uploadsDir,
50
- stopEviction: () => clearInterval(evictionInterval),
51
- };
52
- }
53
- //# sourceMappingURL=attachment-storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"attachment-storage.js","sourceRoot":"","sources":["../../src/lib/attachment-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAQxB;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAe;IACzD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IACxE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACnC,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEzC,MAAM,mBAAmB,GAAG,KAAK,IAAI,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,YAAY,GAAG,CAAC,CAAC;YAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;gBACjD,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC9C,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,CAAC;wBACnD,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;wBACnC,YAAY,EAAE,CAAC;oBACjB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,0EAA0E;gBAC5E,CAAC;YACH,CAAC;YAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,uBAAuB,YAAY,oBAAoB,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,mBAAmB,EAAE,CAAC;IAC3B,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,KAAK,mBAAmB,EAAE,CAAC;IAC7B,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAEnB,OAAO;QACL,cAAc;QACd,UAAU;QACV,YAAY,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC;KACpD,CAAC;AACJ,CAAC"}
@@ -1,18 +0,0 @@
1
- import { WebSocket } from 'ws';
2
- import type { ServerState } from './server-state.js';
3
- export interface BroadcastDependencies {
4
- getAllData: () => Promise<unknown>;
5
- getBridgeData: () => Promise<unknown>;
6
- debug?: (message: string) => void;
7
- }
8
- export interface Broadcasters {
9
- broadcastData: () => Promise<void>;
10
- broadcastBridgeData: () => Promise<void>;
11
- broadcastPresence: (message: object, exclude?: WebSocket) => void;
12
- broadcastLogOutput: (agentName: string, output: string) => void;
13
- }
14
- /**
15
- * Build reusable broadcaster functions backed by shared ServerState.
16
- */
17
- export declare function createBroadcasters(state: ServerState, deps: BroadcastDependencies): Broadcasters;
18
- //# sourceMappingURL=broadcast.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/lib/broadcast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,aAAa,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,mBAAmB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAClE,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,qBAAqB,GAC1B,YAAY,CA8Hd"}
@@ -1,118 +0,0 @@
1
- import { WebSocket } from 'ws';
2
- /**
3
- * Build reusable broadcaster functions backed by shared ServerState.
4
- */
5
- export function createBroadcasters(state, deps) {
6
- let lastBroadcastPayload = '';
7
- let lastBridgeBroadcastPayload = '';
8
- const broadcastData = async () => {
9
- try {
10
- const data = await deps.getAllData();
11
- // Skip broadcast when team data is temporarily unavailable.
12
- if (!data) {
13
- return;
14
- }
15
- const rawPayload = JSON.stringify(data);
16
- if (!rawPayload || rawPayload.length === 0) {
17
- console.warn('[dashboard] Skipping broadcast - empty payload');
18
- return;
19
- }
20
- if (rawPayload === lastBroadcastPayload) {
21
- return;
22
- }
23
- lastBroadcastPayload = rawPayload;
24
- const seq = state.mainMessageBuffer.push('data', rawPayload);
25
- const payload = JSON.stringify(typeof data === 'object' && data !== null
26
- ? { seq, ...data }
27
- : { seq, data });
28
- state.refs.wss.clients.forEach((client) => {
29
- // Skip clients still being initialized by the connection handler.
30
- if (state.initializingClients.has(client)) {
31
- return;
32
- }
33
- if (client.readyState === WebSocket.OPEN) {
34
- try {
35
- client.send(payload);
36
- }
37
- catch (err) {
38
- console.error('[dashboard] Failed to send to client:', err);
39
- }
40
- }
41
- });
42
- }
43
- catch (err) {
44
- console.error('[dashboard] Failed to broadcast data:', err);
45
- }
46
- };
47
- const broadcastBridgeData = async () => {
48
- try {
49
- const data = await deps.getBridgeData();
50
- const payload = JSON.stringify(data);
51
- if (!payload || payload.length === 0) {
52
- console.warn('[dashboard] Skipping bridge broadcast - empty payload');
53
- return;
54
- }
55
- if (payload === lastBridgeBroadcastPayload) {
56
- return;
57
- }
58
- lastBridgeBroadcastPayload = payload;
59
- state.refs.wssBridge.clients.forEach((client) => {
60
- if (client.readyState === WebSocket.OPEN) {
61
- try {
62
- client.send(payload);
63
- }
64
- catch (err) {
65
- console.error('[dashboard] Failed to send to bridge client:', err);
66
- }
67
- }
68
- });
69
- }
70
- catch (err) {
71
- console.error('[dashboard] Failed to broadcast bridge data:', err);
72
- }
73
- };
74
- const broadcastPresence = (message, exclude) => {
75
- const payload = JSON.stringify(message);
76
- state.refs.wssPresence.clients.forEach((client) => {
77
- if (client !== exclude && client.readyState === WebSocket.OPEN) {
78
- client.send(payload);
79
- }
80
- });
81
- };
82
- const broadcastLogOutput = (agentName, output) => {
83
- const clients = state.logSubscriptions.get(agentName);
84
- if (output.length === 0)
85
- return;
86
- const basePayload = {
87
- type: 'output',
88
- agent: agentName,
89
- data: output,
90
- content: output,
91
- timestamp: new Date().toISOString(),
92
- };
93
- const serializedBase = JSON.stringify(basePayload);
94
- const seq = state.getAgentLogBuffer(agentName).push('output', serializedBase);
95
- const payload = JSON.stringify({
96
- ...basePayload,
97
- seq,
98
- });
99
- if (!clients || clients.size === 0) {
100
- return;
101
- }
102
- for (const client of clients) {
103
- if (client.readyState === WebSocket.OPEN) {
104
- client.send(payload);
105
- }
106
- }
107
- if (deps.debug) {
108
- deps.debug(`[dashboard] Broadcasted log output for ${agentName} to ${clients.size} client(s)`);
109
- }
110
- };
111
- return {
112
- broadcastData,
113
- broadcastBridgeData,
114
- broadcastPresence,
115
- broadcastLogOutput,
116
- };
117
- }
118
- //# sourceMappingURL=broadcast.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/lib/broadcast.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- import type { StorageAdapter } from '@agent-relay/storage/adapter';
2
- export interface ChannelRecord {
3
- id: string;
4
- visibility: 'public' | 'private';
5
- status: 'active' | 'archived';
6
- createdAt?: number;
7
- createdBy?: string;
8
- description?: string;
9
- lastActivityAt: number;
10
- lastMessage?: {
11
- content: string;
12
- from: string;
13
- timestamp: string;
14
- };
15
- members: Set<string>;
16
- dmParticipants?: string[];
17
- }
18
- interface ChannelPersistenceOptions {
19
- storage?: StorageAdapter;
20
- defaultWorkspaceId?: string;
21
- }
22
- interface PersistMembershipOptions {
23
- invitedBy?: string;
24
- workspaceId?: string;
25
- }
26
- export declare function createChannelPersistence(options: ChannelPersistenceOptions): {
27
- loadChannelRecords: (workspaceId?: string) => Promise<Map<string, ChannelRecord>>;
28
- loadPersistedChannelsForUser: (username: string, workspaceId?: string) => Promise<string[]>;
29
- persistChannelMembershipEvent: (channel: string, member: string, action: "join" | "leave" | "invite", eventOptions?: PersistMembershipOptions) => Promise<void>;
30
- };
31
- export {};
32
- //# sourceMappingURL=channel-state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channel-state.d.ts","sourceRoot":"","sources":["../../src/lib/channel-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,UAAU,yBAAyB;IACjC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,UAAU,wBAAwB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB;uCAGzB,MAAM,KAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;6CAmGtC,MAAM,gBAAgB,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC;6CAqB3F,MAAM,UACP,MAAM,UACN,MAAM,GAAG,OAAO,GAAG,QAAQ,iBACpB,wBAAwB;EAyC1C"}
@@ -1,146 +0,0 @@
1
- import crypto from 'crypto';
2
- export function createChannelPersistence(options) {
3
- const { storage, defaultWorkspaceId } = options;
4
- const loadChannelRecords = async (workspaceId) => {
5
- const map = new Map();
6
- if (!storage) {
7
- return map;
8
- }
9
- const stored = await storage.getMessages({ order: 'asc' });
10
- const ensureRecord = (id) => {
11
- let record = map.get(id);
12
- if (!record) {
13
- record = {
14
- id,
15
- visibility: 'public',
16
- status: 'active',
17
- lastActivityAt: 0,
18
- members: new Set(),
19
- };
20
- if (id.startsWith('dm:')) {
21
- const participants = id.split(':').slice(1).filter(Boolean);
22
- if (participants.length > 0) {
23
- participants.forEach((participant) => record.members.add(participant));
24
- record.dmParticipants = participants;
25
- }
26
- }
27
- map.set(id, record);
28
- }
29
- return record;
30
- };
31
- const addMember = (record, member) => {
32
- if (!member)
33
- return;
34
- record.members.add(member);
35
- };
36
- for (const msg of stored) {
37
- const target = msg.to;
38
- if (!target || (!target.startsWith('#') && !target.startsWith('dm:'))) {
39
- continue;
40
- }
41
- const data = msg.data;
42
- const messageWorkspaceId = typeof data?._workspaceId === 'string' ? data._workspaceId : undefined;
43
- if (workspaceId && messageWorkspaceId && messageWorkspaceId !== workspaceId) {
44
- continue;
45
- }
46
- const record = ensureRecord(target);
47
- const timestamp = typeof msg.ts === 'number' ? msg.ts : Date.now();
48
- const channelCreate = data?._channelCreate;
49
- if (channelCreate) {
50
- record.createdAt = record.createdAt ?? timestamp;
51
- record.createdBy = channelCreate.createdBy ?? record.createdBy;
52
- if (channelCreate.description) {
53
- record.description = String(channelCreate.description);
54
- }
55
- record.visibility = channelCreate.isPrivate ? 'private' : 'public';
56
- }
57
- const stateChange = data?._channelState;
58
- if (stateChange) {
59
- record.status = stateChange === 'archived' ? 'archived' : 'active';
60
- record.lastActivityAt = Math.max(record.lastActivityAt, timestamp);
61
- }
62
- const membership = data?._channelMembership;
63
- if (membership?.member) {
64
- if (membership.action === 'leave') {
65
- record.members.delete(membership.member);
66
- }
67
- else {
68
- addMember(record, membership.member);
69
- }
70
- record.lastActivityAt = Math.max(record.lastActivityAt, timestamp);
71
- }
72
- const isChannelMessage = Boolean(data?._isChannelMessage);
73
- if (isChannelMessage) {
74
- addMember(record, msg.from);
75
- record.lastActivityAt = Math.max(record.lastActivityAt, timestamp);
76
- record.lastMessage = {
77
- content: msg.body,
78
- from: msg.from || '__system__',
79
- timestamp: new Date(timestamp).toISOString(),
80
- };
81
- if (target.startsWith('dm:') && !record.dmParticipants) {
82
- const participants = target.split(':').slice(1).filter(Boolean);
83
- if (participants.length > 0) {
84
- participants.forEach((participant) => record.members.add(participant));
85
- record.dmParticipants = participants;
86
- }
87
- }
88
- }
89
- }
90
- return map;
91
- };
92
- const loadPersistedChannelsForUser = async (username, workspaceId) => {
93
- const channelMap = await loadChannelRecords(workspaceId);
94
- const result = [];
95
- for (const record of channelMap.values()) {
96
- if (record.status === 'archived') {
97
- continue;
98
- }
99
- if (record.members.has(username)) {
100
- result.push(record.id);
101
- }
102
- }
103
- if (!result.includes('#general')) {
104
- result.unshift('#general');
105
- }
106
- return result;
107
- };
108
- const persistChannelMembershipEvent = async (channel, member, action, eventOptions) => {
109
- if (!storage)
110
- return;
111
- const data = {
112
- _channelMembership: {
113
- member,
114
- action,
115
- invitedBy: eventOptions?.invitedBy,
116
- },
117
- };
118
- const workspaceToStore = eventOptions?.workspaceId ?? defaultWorkspaceId;
119
- if (workspaceToStore) {
120
- data._workspaceId = workspaceToStore;
121
- }
122
- await storage
123
- .saveMessage({
124
- id: `channel-membership-${crypto.randomUUID()}`,
125
- ts: Date.now(),
126
- from: '__system__',
127
- to: channel,
128
- topic: undefined,
129
- kind: 'state',
130
- body: `${action}:${member}`,
131
- data,
132
- status: 'read',
133
- is_urgent: false,
134
- is_broadcast: true,
135
- })
136
- .catch((err) => {
137
- console.error('[channels] Failed to persist membership event', err);
138
- });
139
- };
140
- return {
141
- loadChannelRecords,
142
- loadPersistedChannelsForUser,
143
- persistChannelMembershipEvent,
144
- };
145
- }
146
- //# sourceMappingURL=channel-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channel-state.js","sourceRoot":"","sources":["../../src/lib/channel-state.ts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- export interface StartCLIAuthOptions {
2
- useDeviceFlow?: boolean;
3
- userId?: string;
4
- }
5
- export interface AuthSession {
6
- id: string;
7
- provider: string;
8
- userId?: string;
9
- status: 'starting' | 'waiting_auth' | 'success' | 'error';
10
- authUrl?: string;
11
- token?: string;
12
- refreshToken?: string;
13
- tokenExpiresAt?: Date;
14
- error?: string;
15
- createdAt: Date;
16
- updatedAt: Date;
17
- }
18
- interface SubmitAuthCodeResult {
19
- success: boolean;
20
- error?: string;
21
- needsRestart?: boolean;
22
- }
23
- interface CompleteAuthResult {
24
- success: boolean;
25
- error?: string;
26
- token?: string;
27
- }
28
- interface SupportedProvider {
29
- id: string;
30
- displayName: string;
31
- command: string;
32
- }
33
- export declare function startCLIAuth(provider: string, options?: StartCLIAuthOptions): Promise<AuthSession>;
34
- export declare function getAuthSession(sessionId: string): AuthSession | null;
35
- export declare function cancelAuthSession(sessionId: string): boolean;
36
- export declare function submitAuthCode(sessionId: string, code: string): Promise<SubmitAuthCodeResult>;
37
- export declare function completeAuthSession(sessionId: string): Promise<CompleteAuthResult>;
38
- export declare function getSupportedProviders(): SupportedProvider[];
39
- export {};
40
- //# sourceMappingURL=cli-auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-auth.d.ts","sourceRoot":"","sources":["../../src/lib/cli-auth.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,CAAC;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,UAAU,oBAAoB;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,kBAAkB;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AA0ED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CAuBxG;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAKpE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAK5D;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiCnG;AAED,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoBxF;AAED,wBAAgB,qBAAqB,IAAI,iBAAiB,EAAE,CAK3D"}
@@ -1,144 +0,0 @@
1
- import crypto from 'crypto';
2
- import { getSupportedProviders as getConfiguredProviders } from '@agent-relay/config/cli-auth-config';
3
- const sessions = new Map();
4
- let daemonApi = null;
5
- let daemonApiLoadPromise;
6
- const daemonModuleId = '@agent-relay/daemon';
7
- function getFallbackProviders() {
8
- try {
9
- const providers = getConfiguredProviders();
10
- if (Array.isArray(providers) && providers.length > 0) {
11
- return providers;
12
- }
13
- }
14
- catch {
15
- // Ignore and use static fallback below.
16
- }
17
- return [
18
- { id: 'claude', displayName: 'Claude', command: 'claude' },
19
- { id: 'openai', displayName: 'OpenAI / Codex', command: 'codex' },
20
- { id: 'gemini', displayName: 'Gemini', command: 'gemini' },
21
- ];
22
- }
23
- async function loadDaemonApi() {
24
- if (daemonApi) {
25
- return daemonApi;
26
- }
27
- if (!daemonApiLoadPromise) {
28
- daemonApiLoadPromise = import(daemonModuleId)
29
- .then((mod) => {
30
- if (typeof mod.startCLIAuth === 'function' &&
31
- typeof mod.getAuthSession === 'function' &&
32
- typeof mod.cancelAuthSession === 'function' &&
33
- typeof mod.submitAuthCode === 'function' &&
34
- typeof mod.completeAuthSession === 'function' &&
35
- typeof mod.getSupportedProviders === 'function') {
36
- daemonApi = {
37
- startCLIAuth: mod.startCLIAuth,
38
- getAuthSession: mod.getAuthSession,
39
- cancelAuthSession: mod.cancelAuthSession,
40
- submitAuthCode: mod.submitAuthCode,
41
- completeAuthSession: mod.completeAuthSession,
42
- getSupportedProviders: mod.getSupportedProviders,
43
- };
44
- }
45
- })
46
- .catch(() => {
47
- // Daemon package isn't present in this workspace; use fallback implementation.
48
- })
49
- .then(() => undefined);
50
- }
51
- await daemonApiLoadPromise;
52
- return daemonApi;
53
- }
54
- function touchSession(session) {
55
- session.updatedAt = new Date();
56
- sessions.set(session.id, session);
57
- }
58
- export async function startCLIAuth(provider, options) {
59
- const api = await loadDaemonApi();
60
- if (api) {
61
- return api.startCLIAuth(provider, options);
62
- }
63
- const supportedProviders = getFallbackProviders();
64
- if (!supportedProviders.some((p) => p.id === provider)) {
65
- throw new Error(`Unsupported provider: ${provider}`);
66
- }
67
- const now = new Date();
68
- const session = {
69
- id: crypto.randomUUID(),
70
- provider,
71
- userId: options?.userId,
72
- status: 'waiting_auth',
73
- createdAt: now,
74
- updatedAt: now,
75
- };
76
- sessions.set(session.id, session);
77
- return session;
78
- }
79
- export function getAuthSession(sessionId) {
80
- if (daemonApi) {
81
- return daemonApi.getAuthSession(sessionId);
82
- }
83
- return sessions.get(sessionId) ?? null;
84
- }
85
- export function cancelAuthSession(sessionId) {
86
- if (daemonApi) {
87
- return daemonApi.cancelAuthSession(sessionId);
88
- }
89
- return sessions.delete(sessionId);
90
- }
91
- export async function submitAuthCode(sessionId, code) {
92
- const api = await loadDaemonApi();
93
- if (api) {
94
- return api.submitAuthCode(sessionId, code);
95
- }
96
- const session = sessions.get(sessionId);
97
- if (!session) {
98
- return {
99
- success: false,
100
- error: 'Session not found',
101
- needsRestart: true,
102
- };
103
- }
104
- if (!code.trim()) {
105
- session.status = 'error';
106
- session.error = 'Auth code is required';
107
- touchSession(session);
108
- return {
109
- success: false,
110
- error: session.error,
111
- needsRestart: false,
112
- };
113
- }
114
- session.status = 'success';
115
- session.token = code.trim();
116
- session.tokenExpiresAt = new Date(Date.now() + 60 * 60 * 1000);
117
- session.error = undefined;
118
- touchSession(session);
119
- return { success: true };
120
- }
121
- export async function completeAuthSession(sessionId) {
122
- const api = await loadDaemonApi();
123
- if (api) {
124
- return api.completeAuthSession(sessionId);
125
- }
126
- const session = sessions.get(sessionId);
127
- if (!session) {
128
- return { success: false, error: 'Session not found' };
129
- }
130
- if (session.status === 'success') {
131
- return { success: true, token: session.token };
132
- }
133
- if (session.status === 'error') {
134
- return { success: false, error: session.error ?? 'Authentication failed' };
135
- }
136
- return { success: false, error: 'Authentication still in progress' };
137
- }
138
- export function getSupportedProviders() {
139
- if (daemonApi) {
140
- return daemonApi.getSupportedProviders();
141
- }
142
- return getFallbackProviders();
143
- }
144
- //# sourceMappingURL=cli-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-auth.js","sourceRoot":"","sources":["../../src/lib/cli-auth.ts"],"names":[],"mappings":"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"}