@agent-relay/dashboard-server 2.0.92 → 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 (205) hide show
  1. package/dist/lib/types.d.ts +3 -2
  2. package/dist/lib/types.d.ts.map +1 -1
  3. package/dist/lib/utils.d.ts +5 -0
  4. package/dist/lib/utils.d.ts.map +1 -1
  5. package/dist/lib/utils.js +16 -0
  6. package/dist/lib/utils.js.map +1 -1
  7. package/dist/proxy-server.d.ts.map +1 -1
  8. package/dist/proxy-server.js +32 -19
  9. package/dist/proxy-server.js.map +1 -1
  10. package/dist/relaycast-provider-helpers.d.ts +6 -0
  11. package/dist/relaycast-provider-helpers.d.ts.map +1 -1
  12. package/dist/relaycast-provider-helpers.js +10 -9
  13. package/dist/relaycast-provider-helpers.js.map +1 -1
  14. package/dist/relaycast-provider.d.ts +3 -7
  15. package/dist/relaycast-provider.d.ts.map +1 -1
  16. package/dist/relaycast-provider.js +5 -28
  17. package/dist/relaycast-provider.js.map +1 -1
  18. package/dist/routes/channels.d.ts.map +1 -1
  19. package/dist/routes/channels.js +7 -8
  20. package/dist/routes/channels.js.map +1 -1
  21. package/dist/routes/health.d.ts.map +1 -1
  22. package/dist/routes/health.js +2 -3
  23. package/dist/routes/health.js.map +1 -1
  24. package/dist/routes/models.d.ts.map +1 -1
  25. package/dist/routes/models.js +39 -3
  26. package/dist/routes/models.js.map +1 -1
  27. package/dist/routes/relay-config.d.ts.map +1 -1
  28. package/dist/routes/relay-config.js +19 -6
  29. package/dist/routes/relay-config.js.map +1 -1
  30. package/dist/routes/thread-replies.d.ts.map +1 -1
  31. package/dist/routes/thread-replies.js +4 -4
  32. package/dist/routes/thread-replies.js.map +1 -1
  33. package/dist/services/index.d.ts +0 -1
  34. package/dist/services/index.d.ts.map +1 -1
  35. package/dist/services/index.js +0 -1
  36. package/dist/services/index.js.map +1 -1
  37. package/dist/types/index.d.ts +0 -75
  38. package/dist/types/index.d.ts.map +1 -1
  39. package/dist/websocket/logs.d.ts +1 -25
  40. package/dist/websocket/logs.d.ts.map +1 -1
  41. package/dist/websocket/logs.js +0 -397
  42. package/dist/websocket/logs.js.map +1 -1
  43. package/out/404.html +1 -1
  44. package/out/_next/static/chunks/{3663-47290254b8f6f5dd.js → 3663-191a9aa9104061af.js} +1 -1
  45. package/out/_next/static/chunks/4201-d11188cf35739bff.js +1 -0
  46. package/out/_next/static/chunks/5787-f6fd7a3fbfe5eae6.js +73 -0
  47. package/out/_next/static/chunks/app/app/[[...slug]]/{page-c1376e695ba19e38.js → page-2b872f60e3d64014.js} +1 -1
  48. package/out/_next/static/chunks/app/{page-f2ebc7d0bc08e395.js → page-ca5511e5d65100a5.js} +1 -1
  49. package/out/about.html +1 -1
  50. package/out/about.txt +1 -1
  51. package/out/app/onboarding.html +1 -1
  52. package/out/app/onboarding.txt +1 -1
  53. package/out/app.html +1 -1
  54. package/out/app.txt +2 -2
  55. package/out/blog/go-to-bed-wake-up-to-a-finished-product.html +1 -1
  56. package/out/blog/go-to-bed-wake-up-to-a-finished-product.txt +1 -1
  57. package/out/blog/let-them-cook-multi-agent-orchestration.html +1 -1
  58. package/out/blog/let-them-cook-multi-agent-orchestration.txt +1 -1
  59. package/out/blog.html +1 -1
  60. package/out/blog.txt +1 -1
  61. package/out/careers.html +1 -1
  62. package/out/careers.txt +1 -1
  63. package/out/changelog.html +1 -1
  64. package/out/changelog.txt +1 -1
  65. package/out/cloud/link.html +1 -1
  66. package/out/cloud/link.txt +1 -1
  67. package/out/complete-profile.html +1 -1
  68. package/out/complete-profile.txt +1 -1
  69. package/out/connect-repos.html +1 -1
  70. package/out/connect-repos.txt +1 -1
  71. package/out/contact.html +1 -1
  72. package/out/contact.txt +1 -1
  73. package/out/dev/cli-tools.html +1 -1
  74. package/out/dev/cli-tools.txt +1 -1
  75. package/out/dev/log-viewer.html +1 -1
  76. package/out/dev/log-viewer.txt +1 -1
  77. package/out/docs.html +1 -1
  78. package/out/docs.txt +1 -1
  79. package/out/history.html +1 -1
  80. package/out/history.txt +2 -2
  81. package/out/index.html +1 -1
  82. package/out/index.txt +2 -2
  83. package/out/login.html +1 -1
  84. package/out/login.txt +1 -1
  85. package/out/metrics.html +1 -1
  86. package/out/metrics.txt +2 -2
  87. package/out/pricing.html +1 -1
  88. package/out/pricing.txt +1 -1
  89. package/out/privacy.html +1 -1
  90. package/out/privacy.txt +1 -1
  91. package/out/providers/setup/claude.html +1 -1
  92. package/out/providers/setup/claude.txt +1 -1
  93. package/out/providers/setup/codex.html +1 -1
  94. package/out/providers/setup/codex.txt +1 -1
  95. package/out/providers/setup/cursor.html +1 -1
  96. package/out/providers/setup/cursor.txt +1 -1
  97. package/out/providers.html +1 -1
  98. package/out/providers.txt +1 -1
  99. package/out/security.html +1 -1
  100. package/out/security.txt +1 -1
  101. package/out/signup.html +1 -1
  102. package/out/signup.txt +1 -1
  103. package/out/terms.html +1 -1
  104. package/out/terms.txt +1 -1
  105. package/package.json +6 -9
  106. package/dist/lib/attachment-storage.d.ts +0 -10
  107. package/dist/lib/attachment-storage.d.ts.map +0 -1
  108. package/dist/lib/attachment-storage.js +0 -53
  109. package/dist/lib/attachment-storage.js.map +0 -1
  110. package/dist/lib/broadcast.d.ts +0 -18
  111. package/dist/lib/broadcast.d.ts.map +0 -1
  112. package/dist/lib/broadcast.js +0 -118
  113. package/dist/lib/broadcast.js.map +0 -1
  114. package/dist/lib/channel-state.d.ts +0 -32
  115. package/dist/lib/channel-state.d.ts.map +0 -1
  116. package/dist/lib/channel-state.js +0 -146
  117. package/dist/lib/channel-state.js.map +0 -1
  118. package/dist/lib/cli-auth.d.ts +0 -40
  119. package/dist/lib/cli-auth.d.ts.map +0 -1
  120. package/dist/lib/cli-auth.js +0 -144
  121. package/dist/lib/cli-auth.js.map +0 -1
  122. package/dist/lib/data-assembly.d.ts +0 -136
  123. package/dist/lib/data-assembly.d.ts.map +0 -1
  124. package/dist/lib/data-assembly.js +0 -550
  125. package/dist/lib/data-assembly.js.map +0 -1
  126. package/dist/lib/server-state.d.ts +0 -115
  127. package/dist/lib/server-state.d.ts.map +0 -1
  128. package/dist/lib/server-state.js +0 -138
  129. package/dist/lib/server-state.js.map +0 -1
  130. package/dist/lib/websocket-runtime.d.ts +0 -17
  131. package/dist/lib/websocket-runtime.d.ts.map +0 -1
  132. package/dist/lib/websocket-runtime.js +0 -76
  133. package/dist/lib/websocket-runtime.js.map +0 -1
  134. package/dist/routes/auth.d.ts +0 -45
  135. package/dist/routes/auth.d.ts.map +0 -1
  136. package/dist/routes/auth.js +0 -261
  137. package/dist/routes/auth.js.map +0 -1
  138. package/dist/routes/channels-integrated.d.ts +0 -84
  139. package/dist/routes/channels-integrated.d.ts.map +0 -1
  140. package/dist/routes/channels-integrated.js +0 -644
  141. package/dist/routes/channels-integrated.js.map +0 -1
  142. package/dist/routes/decisions.d.ts +0 -31
  143. package/dist/routes/decisions.d.ts.map +0 -1
  144. package/dist/routes/decisions.js +0 -109
  145. package/dist/routes/decisions.js.map +0 -1
  146. package/dist/routes/fleet.d.ts +0 -24
  147. package/dist/routes/fleet.d.ts.map +0 -1
  148. package/dist/routes/fleet.js +0 -131
  149. package/dist/routes/fleet.js.map +0 -1
  150. package/dist/routes/history.d.ts +0 -13
  151. package/dist/routes/history.d.ts.map +0 -1
  152. package/dist/routes/history.js +0 -205
  153. package/dist/routes/history.js.map +0 -1
  154. package/dist/routes/messaging.d.ts +0 -34
  155. package/dist/routes/messaging.d.ts.map +0 -1
  156. package/dist/routes/messaging.js +0 -306
  157. package/dist/routes/messaging.js.map +0 -1
  158. package/dist/routes/settings.d.ts +0 -6
  159. package/dist/routes/settings.d.ts.map +0 -1
  160. package/dist/routes/settings.js +0 -119
  161. package/dist/routes/settings.js.map +0 -1
  162. package/dist/routes/spawn.d.ts +0 -75
  163. package/dist/routes/spawn.d.ts.map +0 -1
  164. package/dist/routes/spawn.js +0 -521
  165. package/dist/routes/spawn.js.map +0 -1
  166. package/dist/routes/system.d.ts +0 -21
  167. package/dist/routes/system.d.ts.map +0 -1
  168. package/dist/routes/system.js +0 -186
  169. package/dist/routes/system.js.map +0 -1
  170. package/dist/routes/tasks.d.ts +0 -27
  171. package/dist/routes/tasks.d.ts.map +0 -1
  172. package/dist/routes/tasks.js +0 -103
  173. package/dist/routes/tasks.js.map +0 -1
  174. package/dist/routes/ui.d.ts +0 -6
  175. package/dist/routes/ui.d.ts.map +0 -1
  176. package/dist/routes/ui.js +0 -114
  177. package/dist/routes/ui.js.map +0 -1
  178. package/dist/server.d.ts +0 -4
  179. package/dist/server.d.ts.map +0 -1
  180. package/dist/server.js +0 -481
  181. package/dist/server.js.map +0 -1
  182. package/dist/services/broker-spawn-reader.d.ts +0 -40
  183. package/dist/services/broker-spawn-reader.d.ts.map +0 -1
  184. package/dist/services/broker-spawn-reader.js +0 -155
  185. package/dist/services/broker-spawn-reader.js.map +0 -1
  186. package/dist/services/user-bridge.d.ts +0 -155
  187. package/dist/services/user-bridge.d.ts.map +0 -1
  188. package/dist/services/user-bridge.js +0 -385
  189. package/dist/services/user-bridge.js.map +0 -1
  190. package/dist/websocket/bridge.d.ts +0 -12
  191. package/dist/websocket/bridge.d.ts.map +0 -1
  192. package/dist/websocket/bridge.js +0 -33
  193. package/dist/websocket/bridge.js.map +0 -1
  194. package/dist/websocket/main.d.ts +0 -15
  195. package/dist/websocket/main.d.ts.map +0 -1
  196. package/dist/websocket/main.js +0 -84
  197. package/dist/websocket/main.js.map +0 -1
  198. package/dist/websocket/presence.d.ts +0 -74
  199. package/dist/websocket/presence.d.ts.map +0 -1
  200. package/dist/websocket/presence.js +0 -330
  201. package/dist/websocket/presence.js.map +0 -1
  202. package/out/_next/static/chunks/270-8c0b8109123a0c5f.js +0 -73
  203. package/out/_next/static/chunks/5518-6d77237eefc8d5ae.js +0 -1
  204. /package/out/_next/static/{5cqIVzlh9DbJT28EbNrcC → wgSCX8AQnjVl_Rnx1gUp5}/_buildManifest.js +0 -0
  205. /package/out/_next/static/{5cqIVzlh9DbJT28EbNrcC → wgSCX8AQnjVl_Rnx1gUp5}/_ssgManifest.js +0 -0
@@ -1,521 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { execFile } from 'child_process';
4
- import { getAgentOutboxTemplate } from '@agent-relay/config';
5
- import { listTrajectorySteps, getTrajectoryStatus, getTrajectoryHistory } from '@agent-relay/trajectory';
6
- import { fetchBrokerSpawnedAgents } from '../lib/spawned-agents.js';
7
- /**
8
- * Spawn, logs, repositories, and trajectory routes.
9
- */
10
- export function registerSpawnRoutes(app, deps) {
11
- const { dataDir, projectRoot, relayAdapter, spawnReader, agentCwdMap, isAgentOnline, resolveWorkspaceId, broadcastData, broadcastPresence, } = deps;
12
- // GET /api/logs/:name - Get historical logs for a spawned agent.
13
- app.get('/api/logs/:name', (req, res) => {
14
- if (!spawnReader) {
15
- return res.status(503).json({ error: 'Spawner not enabled' });
16
- }
17
- const { name } = req.params;
18
- const limit = req.query.limit ? parseInt(req.query.limit, 10) : 500;
19
- const raw = req.query.raw === 'true';
20
- if (!spawnReader.hasWorker(name)) {
21
- return res.status(404).json({ error: `Agent ${name} not found` });
22
- }
23
- try {
24
- if (raw) {
25
- const output = spawnReader.getWorkerRawOutput(name);
26
- return res.json({
27
- name,
28
- raw: true,
29
- output: output || '',
30
- timestamp: new Date().toISOString(),
31
- });
32
- }
33
- const lines = spawnReader.getWorkerOutput(name, limit);
34
- return res.json({
35
- name,
36
- raw: false,
37
- lines: lines || [],
38
- lineCount: lines?.length || 0,
39
- timestamp: new Date().toISOString(),
40
- });
41
- }
42
- catch (err) {
43
- console.error(`Failed to get logs for ${name}:`, err);
44
- return res.status(500).json({ error: 'Failed to get logs' });
45
- }
46
- });
47
- // GET /api/logs - List all agents with available logs.
48
- app.get('/api/logs', (_req, res) => {
49
- if (!spawnReader) {
50
- return res.status(503).json({ error: 'Spawner not enabled' });
51
- }
52
- try {
53
- const workers = spawnReader.getActiveWorkers();
54
- const agents = workers.map((w) => ({
55
- name: w.name,
56
- cli: w.cli,
57
- pid: w.pid,
58
- spawnedAt: new Date(w.spawnedAt).toISOString(),
59
- hasLogs: true,
60
- }));
61
- return res.json({ agents });
62
- }
63
- catch (err) {
64
- console.error('Failed to list agents with logs:', err);
65
- return res.status(500).json({ error: 'Failed to list agents' });
66
- }
67
- });
68
- // GET /api/agents/:name/online - Check if an agent is online.
69
- app.get('/api/agents/:name/online', (req, res) => {
70
- const { name } = req.params;
71
- const online = isAgentOnline(name);
72
- return res.json({ name, online });
73
- });
74
- // PUT /api/agents/:name/cwd - Register an agent's working directory.
75
- app.put('/api/agents/:name/cwd', (req, res) => {
76
- const { name } = req.params;
77
- const { cwd } = req.body || {};
78
- if (!cwd || typeof cwd !== 'string') {
79
- return res.status(400).json({ error: 'Missing required field: cwd' });
80
- }
81
- agentCwdMap.set(name, cwd);
82
- broadcastData().catch(() => { });
83
- return res.json({ success: true, name, cwd });
84
- });
85
- // POST /api/spawn - Spawn a new agent.
86
- app.post('/api/spawn', async (req, res) => {
87
- const { name, cli = 'claude', task = '', team, model, spawnerName, cwd, interactive, shadowMode, shadowAgent, shadowOf, shadowTriggers, shadowSpeakOn, userId, continueFrom, } = req.body;
88
- void shadowAgent;
89
- void shadowTriggers;
90
- void shadowSpeakOn;
91
- if (!name || typeof name !== 'string') {
92
- return res.status(400).json({
93
- success: false,
94
- error: 'Missing required field: name',
95
- });
96
- }
97
- const effectiveCwd = cwd || (spawnerName ? agentCwdMap.get(spawnerName) : undefined);
98
- try {
99
- const result = await relayAdapter.spawn({
100
- name,
101
- cli,
102
- task,
103
- team: team || undefined,
104
- model: model || undefined,
105
- cwd: effectiveCwd || undefined,
106
- interactive,
107
- shadowMode,
108
- shadowOf,
109
- spawnerName: spawnerName || undefined,
110
- userId: typeof userId === 'string' ? userId : undefined,
111
- continueFrom: typeof continueFrom === 'string' ? continueFrom : undefined,
112
- includeWorkflowConventions: true,
113
- });
114
- if (result.success) {
115
- if (effectiveCwd) {
116
- agentCwdMap.set(name, effectiveCwd);
117
- }
118
- broadcastData().catch(() => { });
119
- broadcastPresence({
120
- type: 'agent_spawned',
121
- agent: { name },
122
- cli,
123
- task,
124
- spawnedBy: spawnerName || 'Dashboard',
125
- timestamp: new Date().toISOString(),
126
- });
127
- }
128
- return res.json(result);
129
- }
130
- catch (err) {
131
- const message = err instanceof Error ? err.message : String(err);
132
- console.error('[api] Spawn error:', err);
133
- return res.status(500).json({
134
- success: false,
135
- name,
136
- error: message,
137
- });
138
- }
139
- });
140
- // POST /api/repos/clone - Clone a repo into the workspace directory.
141
- app.post('/api/repos/clone', async (req, res) => {
142
- const { fullName } = req.body;
143
- if (!fullName || typeof fullName !== 'string' || !fullName.includes('/')) {
144
- return res.status(400).json({ success: false, error: 'fullName is required (e.g., "Owner/RepoName")' });
145
- }
146
- if (!/^[a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+$/.test(fullName)) {
147
- return res.status(400).json({ success: false, error: 'Invalid repository name format' });
148
- }
149
- const repoName = fullName.split('/').pop();
150
- if (!repoName) {
151
- return res.status(400).json({ success: false, error: 'Invalid repository name' });
152
- }
153
- const workspaceDir = process.env.WORKSPACE_DIR || path.dirname(projectRoot || dataDir);
154
- const targetDir = path.join(workspaceDir, repoName);
155
- const resolvedTarget = path.resolve(targetDir);
156
- const resolvedWorkspace = path.resolve(workspaceDir);
157
- if (!resolvedTarget.startsWith(resolvedWorkspace + path.sep)) {
158
- return res.status(400).json({ success: false, error: 'Invalid path' });
159
- }
160
- if (fs.existsSync(path.join(targetDir, '.git'))) {
161
- return res.json({ success: true, message: 'Already cloned', path: targetDir });
162
- }
163
- if (fs.existsSync(targetDir)) {
164
- console.log(`[api/repos/clone] Removing stale directory ${targetDir} (no .git found)`);
165
- fs.rmSync(targetDir, { recursive: true, force: true });
166
- }
167
- const cloneUrl = `https://github.com/${fullName}.git`;
168
- try {
169
- await new Promise((resolve, reject) => {
170
- execFile('git', ['clone', cloneUrl, targetDir], { timeout: 120000 }, (error, _stdout, stderr) => {
171
- if (error) {
172
- reject(new Error(stderr || error.message));
173
- }
174
- else {
175
- resolve();
176
- }
177
- });
178
- });
179
- execFile('git', ['config', '--global', '--add', 'safe.directory', targetDir], () => { });
180
- return res.json({ success: true, path: targetDir });
181
- }
182
- catch (err) {
183
- const safeMessage = err instanceof Error ? err.message : 'Clone failed';
184
- console.error('[api/repos/clone] Clone failed:', safeMessage);
185
- try {
186
- fs.rmSync(targetDir, { recursive: true, force: true });
187
- }
188
- catch {
189
- // Ignore cleanup errors.
190
- }
191
- return res.status(500).json({ success: false, error: safeMessage });
192
- }
193
- });
194
- // POST /api/repos/remove - Remove a cloned repo directory from the workspace.
195
- app.post('/api/repos/remove', async (req, res) => {
196
- const { fullName } = req.body;
197
- if (!fullName || typeof fullName !== 'string' || !fullName.includes('/')) {
198
- return res.status(400).json({ success: false, error: 'fullName is required (e.g., "Owner/RepoName")' });
199
- }
200
- if (!/^[a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+$/.test(fullName)) {
201
- return res.status(400).json({ success: false, error: 'Invalid repository name format' });
202
- }
203
- const repoName = fullName.split('/').pop();
204
- if (!repoName) {
205
- return res.status(400).json({ success: false, error: 'Invalid repository name' });
206
- }
207
- const workspaceDir = process.env.WORKSPACE_DIR || path.dirname(projectRoot || dataDir);
208
- const targetDir = path.join(workspaceDir, repoName);
209
- const resolvedTarget = path.resolve(targetDir);
210
- const resolvedWorkspace = path.resolve(workspaceDir);
211
- if (!resolvedTarget.startsWith(resolvedWorkspace + path.sep)) {
212
- return res.status(400).json({ success: false, error: 'Invalid path' });
213
- }
214
- if (!fs.existsSync(targetDir)) {
215
- return res.json({ success: true, message: 'Directory does not exist', path: targetDir });
216
- }
217
- try {
218
- fs.rmSync(targetDir, { recursive: true, force: true });
219
- console.log(`[api/repos/remove] Removed directory: ${targetDir}`);
220
- return res.json({ success: true, path: targetDir });
221
- }
222
- catch (err) {
223
- const message = err instanceof Error ? err.message : 'Remove failed';
224
- console.error('[api/repos/remove] Remove failed:', message);
225
- return res.status(500).json({ success: false, error: message });
226
- }
227
- });
228
- // POST /api/spawn/architect - Spawn an Architect agent for bridge mode.
229
- app.post('/api/spawn/architect', async (req, res) => {
230
- if (!spawnReader) {
231
- return res.status(503).json({
232
- success: false,
233
- error: 'Spawner not enabled. Start dashboard with enableSpawner: true',
234
- });
235
- }
236
- const { cli = 'claude' } = req.body;
237
- const activeWorkers = spawnReader.getActiveWorkers() || [];
238
- if (activeWorkers.some((w) => w.name.toLowerCase() === 'architect')) {
239
- return res.status(409).json({
240
- success: false,
241
- error: 'Architect agent already running',
242
- });
243
- }
244
- const bridgeStatePath = path.join(dataDir, 'bridge-state.json');
245
- let projectContext = 'No bridge projects connected.';
246
- if (fs.existsSync(bridgeStatePath)) {
247
- try {
248
- const bridgeState = JSON.parse(fs.readFileSync(bridgeStatePath, 'utf-8'));
249
- if (bridgeState.projects && bridgeState.projects.length > 0) {
250
- projectContext = bridgeState.projects
251
- .map((p) => `- ${p.id}: ${p.path} (Lead: ${p.lead?.name || 'none'})`)
252
- .join('\n');
253
- }
254
- }
255
- catch (e) {
256
- console.error('[api] Failed to read bridge state:', e);
257
- }
258
- }
259
- const outboxPath = getAgentOutboxTemplate().replace(/\$/g, '\\$');
260
- const architectPrompt = `You are the Architect, a cross-project coordinator overseeing multiple codebases.
261
-
262
- ## Connected Projects
263
- ${projectContext}
264
-
265
- ## Your Role
266
- - Coordinate high-level work across all projects
267
- - Assign tasks to project leads
268
- - Ensure consistency and resolve cross-project dependencies
269
- - Review overall architecture decisions
270
-
271
- ## Cross-Project Messaging
272
-
273
- Write a file to your outbox, then output the trigger. Use project:AgentName syntax for cross-project messages:
274
-
275
- \`\`\`bash
276
- # Message specific agent in a project
277
- cat > ${outboxPath}/msg << 'EOF'
278
- TO: project-id:AgentName
279
-
280
- Your message to this agent.
281
- EOF
282
- \`\`\`
283
- Then output: \`->relay-file:msg\`
284
-
285
- \`\`\`bash
286
- # Broadcast to all agents in a project
287
- cat > ${outboxPath}/broadcast << 'EOF'
288
- TO: project-id:*
289
-
290
- Broadcast to all agents in a project.
291
- EOF
292
- \`\`\`
293
- Then output: \`->relay-file:broadcast\`
294
-
295
- \`\`\`bash
296
- # Broadcast to ALL agents in ALL projects
297
- cat > ${outboxPath}/all << 'EOF'
298
- TO: *:*
299
-
300
- Broadcast to ALL agents in ALL projects.
301
- EOF
302
- \`\`\`
303
- Then output: \`->relay-file:all\`
304
-
305
- ## Getting Started
306
- 1. Check in with each project lead to understand current status
307
- 2. Identify cross-project dependencies
308
- 3. Coordinate work across teams
309
-
310
- Start by greeting the project leads and asking for status updates.`;
311
- try {
312
- const result = await relayAdapter.spawn({
313
- name: 'Architect',
314
- cli,
315
- task: architectPrompt,
316
- includeWorkflowConventions: true,
317
- });
318
- if (result.success) {
319
- broadcastData().catch(() => { });
320
- }
321
- return res.json(result);
322
- }
323
- catch (err) {
324
- const message = err instanceof Error ? err.message : String(err);
325
- console.error('[api] Architect spawn error:', err);
326
- return res.status(500).json({
327
- success: false,
328
- name: 'Architect',
329
- error: message,
330
- });
331
- }
332
- });
333
- // GET /api/spawned - List active spawned agents (broker pass-through).
334
- app.get('/api/spawned', async (req, res) => {
335
- try {
336
- const response = await fetchBrokerSpawnedAgents({
337
- query: new URLSearchParams(req.query),
338
- headers: {
339
- workspaceId: resolveWorkspaceId(req),
340
- authorization: req.headers.authorization,
341
- },
342
- });
343
- const body = await response.text();
344
- const contentType = response.headers.get('content-type') ?? 'application/json; charset=utf-8';
345
- return res.status(response.status).setHeader('content-type', contentType).send(body);
346
- }
347
- catch (err) {
348
- return res.status(502).json({
349
- success: false,
350
- error: 'Broker spawned-agents proxy failed',
351
- message: err.message,
352
- });
353
- }
354
- });
355
- // DELETE /api/spawned/:name - Release a spawned agent.
356
- app.delete('/api/spawned/:name', async (req, res) => {
357
- if (!spawnReader) {
358
- return res.status(503).json({
359
- success: false,
360
- error: 'Spawner not enabled',
361
- });
362
- }
363
- const { name } = req.params;
364
- try {
365
- const result = await relayAdapter.release(name);
366
- const released = result.success;
367
- if (released) {
368
- agentCwdMap.delete(name);
369
- broadcastData().catch(() => { });
370
- broadcastPresence({
371
- type: 'agent_released',
372
- agent: { name },
373
- releasedBy: 'Dashboard',
374
- timestamp: new Date().toISOString(),
375
- });
376
- }
377
- return res.json({
378
- success: released,
379
- name,
380
- error: released ? undefined : `Agent ${name} not found`,
381
- });
382
- }
383
- catch (err) {
384
- const message = err instanceof Error ? err.message : String(err);
385
- console.error('[api] Release error:', err);
386
- return res.status(500).json({
387
- success: false,
388
- name,
389
- error: message,
390
- });
391
- }
392
- });
393
- // POST /api/agents/by-name/:name/interrupt - Send ESC sequence to interrupt an agent.
394
- app.post('/api/agents/by-name/:name/interrupt', async (req, res) => {
395
- if (!spawnReader) {
396
- return res.status(503).json({
397
- success: false,
398
- error: 'Spawner not enabled',
399
- });
400
- }
401
- const { name } = req.params;
402
- if (!spawnReader.hasWorker(name)) {
403
- return res.status(404).json({
404
- success: false,
405
- error: `Agent ${name} not found or not spawned`,
406
- });
407
- }
408
- try {
409
- const success = await spawnReader.sendWorkerInput(name, '\x1b\x1b');
410
- if (success) {
411
- console.log(`[api] Sent interrupt (ESC ESC) to agent ${name}`);
412
- return res.json({
413
- success: true,
414
- message: `Interrupt signal sent to ${name}`,
415
- });
416
- }
417
- return res.status(500).json({
418
- success: false,
419
- error: `Failed to send interrupt to ${name}`,
420
- });
421
- }
422
- catch (err) {
423
- const message = err instanceof Error ? err.message : String(err);
424
- console.error('[api] Interrupt error:', err);
425
- return res.status(500).json({
426
- success: false,
427
- error: message,
428
- });
429
- }
430
- });
431
- // POST /api/agents/by-name/:name/inject - Send text input to inject into agent PTY.
432
- app.post('/api/agents/by-name/:name/inject', async (req, res) => {
433
- const { name } = req.params;
434
- const { text } = req.body || {};
435
- if (!text || typeof text !== 'string') {
436
- return res.status(400).json({ error: 'text is required' });
437
- }
438
- try {
439
- if (spawnReader && typeof spawnReader.sendWorkerInput === 'function') {
440
- await spawnReader.sendWorkerInput(name, text);
441
- }
442
- return res.json({ success: true, name, injected: text });
443
- }
444
- catch (err) {
445
- const errorMessage = err instanceof Error ? err.message : `${err}`;
446
- return res.status(500).json({ error: `Failed to inject into ${name}: ${errorMessage}` });
447
- }
448
- });
449
- // GET /api/trajectory - Get current trajectory status.
450
- app.get('/api/trajectory', async (_req, res) => {
451
- try {
452
- const status = await getTrajectoryStatus();
453
- return res.json({
454
- success: true,
455
- ...status,
456
- });
457
- }
458
- catch (err) {
459
- const message = err instanceof Error ? err.message : String(err);
460
- console.error('[api] Trajectory status error:', err);
461
- return res.status(500).json({
462
- success: false,
463
- error: message,
464
- });
465
- }
466
- });
467
- // GET /api/trajectory/steps - List trajectory steps.
468
- app.get('/api/trajectory/steps', async (req, res) => {
469
- try {
470
- const trajectoryId = typeof req.query.trajectoryId === 'string' ? req.query.trajectoryId : undefined;
471
- const result = await listTrajectorySteps(trajectoryId);
472
- if (result.success) {
473
- return res.json({
474
- success: true,
475
- steps: result.steps,
476
- });
477
- }
478
- return res.status(500).json({
479
- success: false,
480
- steps: [],
481
- error: result.error,
482
- });
483
- }
484
- catch (err) {
485
- const message = err instanceof Error ? err.message : String(err);
486
- console.error('[api] Trajectory steps error:', err);
487
- return res.status(500).json({
488
- success: false,
489
- steps: [],
490
- error: message,
491
- });
492
- }
493
- });
494
- // GET /api/trajectory/history - List all trajectories (completed and active).
495
- app.get('/api/trajectory/history', async (_req, res) => {
496
- try {
497
- const result = await getTrajectoryHistory();
498
- if (result.success) {
499
- return res.json({
500
- success: true,
501
- trajectories: result.trajectories,
502
- });
503
- }
504
- return res.status(500).json({
505
- success: false,
506
- trajectories: [],
507
- error: result.error,
508
- });
509
- }
510
- catch (err) {
511
- const message = err instanceof Error ? err.message : String(err);
512
- console.error('[api] Trajectory history error:', err);
513
- return res.status(500).json({
514
- success: false,
515
- trajectories: [],
516
- error: message,
517
- });
518
- }
519
- });
520
- }
521
- //# sourceMappingURL=spawn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/routes/spawn.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import type { Application } from 'express';
2
- interface RelayClientLike {
3
- sendMessage: (to: string, body: string, kind?: string, data?: unknown, thread?: string) => string | boolean | Promise<string | boolean>;
4
- }
5
- export interface SystemRouteDeps {
6
- dataDir: string;
7
- teamDir: string;
8
- projectRoot?: string;
9
- resolveWorkspaceId: (req: {
10
- query?: Record<string, unknown>;
11
- body?: Record<string, unknown>;
12
- headers?: Record<string, unknown>;
13
- }) => string | undefined;
14
- getRelayClient: (senderName?: string, entityType?: 'agent' | 'user') => Promise<RelayClientLike>;
15
- }
16
- /**
17
- * Health, files, bridge, and operational helper routes.
18
- */
19
- export declare function registerSystemRoutes(app: Application, deps: SystemRouteDeps): void;
20
- export {};
21
- //# sourceMappingURL=system.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/routes/system.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,UAAU,eAAe;IACvB,WAAW,EAAE,CACX,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,MAAM,KACZ,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,CAAC,GAAG,EAAE;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,KAAK,MAAM,GAAG,SAAS,CAAC;IACzB,cAAc,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAClG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,CAsMlF"}