@agent-relay/mcp 2.0.13 → 2.0.15

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 (53) hide show
  1. package/README.md +24 -3
  2. package/dist/bin.js +13 -5
  3. package/dist/bin.js.map +1 -1
  4. package/dist/client.d.ts +54 -1
  5. package/dist/client.d.ts.map +1 -1
  6. package/dist/client.js +132 -18
  7. package/dist/client.js.map +1 -1
  8. package/dist/cloud.d.ts +12 -0
  9. package/dist/cloud.d.ts.map +1 -1
  10. package/dist/cloud.js +125 -1
  11. package/dist/cloud.js.map +1 -1
  12. package/dist/file-transport.d.ts +97 -0
  13. package/dist/file-transport.d.ts.map +1 -0
  14. package/dist/file-transport.js +197 -0
  15. package/dist/file-transport.js.map +1 -0
  16. package/dist/hybrid-client.d.ts +28 -0
  17. package/dist/hybrid-client.d.ts.map +1 -0
  18. package/dist/hybrid-client.js +159 -0
  19. package/dist/hybrid-client.js.map +1 -0
  20. package/dist/index.d.ts +4 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +6 -2
  23. package/dist/index.js.map +1 -1
  24. package/dist/install.d.ts +23 -1
  25. package/dist/install.d.ts.map +1 -1
  26. package/dist/install.js +229 -31
  27. package/dist/install.js.map +1 -1
  28. package/dist/server.d.ts.map +1 -1
  29. package/dist/server.js +7 -1
  30. package/dist/server.js.map +1 -1
  31. package/dist/simple.d.ts +1 -1
  32. package/dist/simple.d.ts.map +1 -1
  33. package/dist/tools/index.d.ts +1 -0
  34. package/dist/tools/index.d.ts.map +1 -1
  35. package/dist/tools/index.js +1 -0
  36. package/dist/tools/index.js.map +1 -1
  37. package/dist/tools/relay-continuity.d.ts +35 -0
  38. package/dist/tools/relay-continuity.d.ts.map +1 -0
  39. package/dist/tools/relay-continuity.js +101 -0
  40. package/dist/tools/relay-continuity.js.map +1 -0
  41. package/dist/tools/relay-health.d.ts +1 -4
  42. package/dist/tools/relay-health.d.ts.map +1 -1
  43. package/dist/tools/relay-health.js +7 -15
  44. package/dist/tools/relay-health.js.map +1 -1
  45. package/dist/tools/relay-logs.d.ts.map +1 -1
  46. package/dist/tools/relay-logs.js +4 -2
  47. package/dist/tools/relay-logs.js.map +1 -1
  48. package/dist/tools/relay-metrics.d.ts +1 -4
  49. package/dist/tools/relay-metrics.d.ts.map +1 -1
  50. package/dist/tools/relay-metrics.js +4 -15
  51. package/dist/tools/relay-metrics.js.map +1 -1
  52. package/dist/tools/relay-send.d.ts +2 -2
  53. package/package.json +3 -2
package/README.md CHANGED
@@ -15,7 +15,7 @@ agent-relay init
15
15
  ```
16
16
 
17
17
  The wizard will:
18
- 1. Configure MCP for your AI editors (Claude Code, Cursor)
18
+ 1. Configure MCP for your AI editors (Claude Code, Cursor, Codex, and more)
19
19
  2. Offer to start the daemon
20
20
  3. Show you how to use the relay tools
21
21
 
@@ -30,8 +30,24 @@ npx @agent-relay/mcp install
30
30
  # Or configure specific editors
31
31
  npx @agent-relay/mcp install --editor claude # Claude Code
32
32
  npx @agent-relay/mcp install --editor cursor # Cursor
33
+ npx @agent-relay/mcp install --editor codex # Codex (OpenAI)
33
34
  npx @agent-relay/mcp install --editor vscode # VS Code
34
35
  npx @agent-relay/mcp install --editor windsurf # Windsurf
36
+ npx @agent-relay/mcp install --editor gemini # Gemini CLI
37
+ npx @agent-relay/mcp install --editor opencode # OpenCode
38
+ npx @agent-relay/mcp install --editor droid # Droid (Factory)
39
+ ```
40
+
41
+ ### Global vs Project-Local Installation
42
+
43
+ By default, MCP is installed to your project directory (project-local). Use `--global` to install to your home directory:
44
+
45
+ ```bash
46
+ # Project-local (default) - writes to ./codex.toml, ./.cursor/mcp.json, etc.
47
+ npx @agent-relay/mcp install --editor codex
48
+
49
+ # Global - writes to ~/.codex/config.toml, ~/.cursor/mcp.json, etc.
50
+ npx @agent-relay/mcp install --editor codex --global
35
51
  ```
36
52
 
37
53
  ### Start the Daemon
@@ -111,8 +127,13 @@ agent-relay up
111
127
 
112
128
  1. Restart your editor after installing MCP
113
129
  2. Check the MCP configuration was created:
114
- - Claude Code: `~/.claude/settings.json`
115
- - Cursor: `~/.cursor/mcp.json`
130
+ - Claude Code: `~/.claude/settings.json` (global) or `.mcp.json` (project)
131
+ - Cursor: `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project)
132
+ - Codex: `~/.codex/config.toml` (global) or `codex.toml` (project)
133
+ - VS Code: `~/.vscode/mcp.json` (global) or `.vscode/mcp.json` (project)
134
+ - Gemini CLI: `~/.gemini/settings.json`
135
+ - OpenCode: `~/.config/opencode/opencode.json`
136
+ - Droid: `~/.factory/mcp.json`
116
137
 
117
138
  ### Check installation status
118
139
 
package/dist/bin.js CHANGED
@@ -97,13 +97,21 @@ switch (command) {
97
97
  // Dynamic import to avoid loading server code when not needed
98
98
  (async () => {
99
99
  try {
100
- const { createRelayClient, runMCPServer, discoverSocket } = await import('./index.js');
101
- // Discover socket or use default agent name
100
+ const { runMCPServer, discoverSocket, discoverAgentName } = await import('./index.js');
101
+ const { createHybridClient, discoverProjectRoot } = await import('./hybrid-client.js');
102
+ // Discover socket and agent identity
102
103
  const discovery = discoverSocket();
103
- const agentName = process.env.RELAY_AGENT_NAME || `mcp-${process.pid}`;
104
- // Create client and run server
105
- const client = createRelayClient({
104
+ const agentName = discoverAgentName(discovery) || `mcp-${process.pid}`;
105
+ // Discover project root for file-based transport
106
+ const projectRoot = discoverProjectRoot();
107
+ if (!projectRoot) {
108
+ console.error('Could not find project root (.agent-relay directory)');
109
+ process.exit(1);
110
+ }
111
+ // Create hybrid client (file-based writes, socket queries)
112
+ const client = createHybridClient({
106
113
  agentName,
114
+ projectRoot,
107
115
  socketPath: discovery?.socketPath,
108
116
  project: discovery?.project,
109
117
  });
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -1,6 +1,52 @@
1
1
  /**
2
2
  * RelayClient - Client for connecting to the Agent Relay daemon
3
3
  */
4
+ export interface HealthResponse {
5
+ healthScore: number;
6
+ summary: string;
7
+ issues: Array<{
8
+ severity: string;
9
+ message: string;
10
+ }>;
11
+ recommendations: string[];
12
+ crashes: Array<{
13
+ id: string;
14
+ agentName: string;
15
+ crashedAt: string;
16
+ likelyCause: string;
17
+ summary?: string;
18
+ }>;
19
+ alerts: Array<{
20
+ id: string;
21
+ agentName: string;
22
+ alertType: string;
23
+ message: string;
24
+ createdAt: string;
25
+ }>;
26
+ stats: {
27
+ totalCrashes24h: number;
28
+ totalAlerts24h: number;
29
+ agentCount: number;
30
+ };
31
+ }
32
+ export interface MetricsResponse {
33
+ agents: Array<{
34
+ name: string;
35
+ pid?: number;
36
+ status: string;
37
+ rssBytes?: number;
38
+ cpuPercent?: number;
39
+ trend?: string;
40
+ alertLevel?: string;
41
+ highWatermark?: number;
42
+ uptimeMs?: number;
43
+ }>;
44
+ system: {
45
+ totalMemory: number;
46
+ freeMemory: number;
47
+ heapUsed: number;
48
+ };
49
+ }
4
50
  export interface RelayClient {
5
51
  send(to: string, message: string, options?: {
6
52
  thread?: string;
@@ -52,10 +98,17 @@ export interface RelayClient {
52
98
  project?: string;
53
99
  }): Promise<Array<{
54
100
  name: string;
55
- cli: string;
101
+ cli?: string;
56
102
  idle?: boolean;
57
103
  parent?: string;
58
104
  }>>;
105
+ getHealth(options?: {
106
+ include_crashes?: boolean;
107
+ include_alerts?: boolean;
108
+ }): Promise<HealthResponse>;
109
+ getMetrics(options?: {
110
+ agent?: string;
111
+ }): Promise<MetricsResponse>;
59
112
  }
60
113
  export interface RelayClientOptions {
61
114
  agentName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzJ,KAAK,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtF,SAAS,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9I,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACjM,UAAU,CAAC,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CACpJ;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA+CD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAoG1E;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -2,6 +2,7 @@
2
2
  * RelayClient - Client for connecting to the Agent Relay daemon
3
3
  */
4
4
  import { createConnection } from 'node:net';
5
+ import { randomUUID } from 'node:crypto';
5
6
  import { discoverSocket } from './cloud.js';
6
7
  import { DaemonNotRunningError } from './errors.js';
7
8
  // Protocol version
@@ -44,14 +45,65 @@ class FrameParser {
44
45
  }
45
46
  export function createRelayClient(options) {
46
47
  const { agentName, project = 'default', timeout = 5000 } = options;
47
- const discovery = discoverSocket({ socketPath: options.socketPath });
48
- const socketPath = discovery?.socketPath || options.socketPath || '/tmp/agent-relay.sock';
48
+ // Prefer explicit socketPath option over discovery to avoid finding wrong daemon
49
+ const socketPath = options.socketPath || discoverSocket()?.socketPath || '/tmp/agent-relay.sock';
49
50
  // Generate unique IDs
50
51
  let idCounter = 0;
51
52
  const generateId = () => `mcp-${Date.now().toString(36)}-${(++idCounter).toString(36)}`;
52
- async function request(type, payload) {
53
+ // Timeouts for different operations
54
+ const RELEASE_TIMEOUT = 10000; // 10 seconds for release operations
55
+ /**
56
+ * Fire-and-forget: Send a message without waiting for any response.
57
+ * Used for SEND and SPAWN where we don't expect daemon to reply.
58
+ * @param type Message type
59
+ * @param payload Message payload (for SEND: must be SendPayload with kind, body, etc.)
60
+ * @param envelopeProps Envelope-level routing (from, to) - NOT in payload!
61
+ */
62
+ function fireAndForget(type, payload, envelopeProps) {
53
63
  return new Promise((resolve, reject) => {
54
64
  const id = generateId();
65
+ const envelope = {
66
+ v: PROTOCOL_VERSION,
67
+ type,
68
+ id,
69
+ ts: Date.now(),
70
+ payload,
71
+ };
72
+ // Add from/to at envelope level (required for SEND messages)
73
+ if (envelopeProps?.from)
74
+ envelope.from = envelopeProps.from;
75
+ if (envelopeProps?.to)
76
+ envelope.to = envelopeProps.to;
77
+ const socket = createConnection(socketPath);
78
+ socket.on('connect', () => {
79
+ socket.write(encodeFrame(envelope));
80
+ socket.end();
81
+ resolve();
82
+ });
83
+ socket.on('error', (err) => {
84
+ const errno = err.code;
85
+ if (errno === 'ECONNREFUSED' || errno === 'ENOENT') {
86
+ reject(new DaemonNotRunningError(`Cannot connect to daemon at ${socketPath}`));
87
+ }
88
+ else {
89
+ reject(err);
90
+ }
91
+ });
92
+ });
93
+ }
94
+ /**
95
+ * Request-response: Send a message and wait for daemon to respond.
96
+ * Used for queries (STATUS, INBOX, etc.) and blocking sends (waits for ACK).
97
+ * @param type Message type
98
+ * @param payload Message payload (for SEND: must be SendPayload with kind, body, etc.)
99
+ * @param customTimeout Optional timeout override
100
+ * @param payloadMeta Optional sync metadata for blocking sends
101
+ * @param envelopeProps Envelope-level routing (from, to) - NOT in payload!
102
+ */
103
+ async function request(type, payload, customTimeout, payloadMeta, envelopeProps) {
104
+ return new Promise((resolve, reject) => {
105
+ const id = generateId();
106
+ const correlationId = payloadMeta?.sync?.correlationId;
55
107
  // Build a proper protocol envelope
56
108
  const envelope = {
57
109
  v: PROTOCOL_VERSION,
@@ -60,14 +112,23 @@ export function createRelayClient(options) {
60
112
  ts: Date.now(),
61
113
  payload,
62
114
  };
115
+ // Add from/to at envelope level (required for SEND messages)
116
+ if (envelopeProps?.from)
117
+ envelope.from = envelopeProps.from;
118
+ if (envelopeProps?.to)
119
+ envelope.to = envelopeProps.to;
120
+ if (payloadMeta) {
121
+ envelope.payload_meta = payloadMeta;
122
+ }
63
123
  let timedOut = false;
64
124
  const parser = new FrameParser();
65
125
  const socket = createConnection(socketPath);
126
+ const effectiveTimeout = customTimeout ?? timeout;
66
127
  const timeoutId = setTimeout(() => {
67
128
  timedOut = true;
68
129
  socket.destroy();
69
- reject(new Error(`Request timeout after ${timeout}ms`));
70
- }, timeout);
130
+ reject(new Error(`Request timeout after ${effectiveTimeout}ms`));
131
+ }, effectiveTimeout);
71
132
  socket.on('connect', () => socket.write(encodeFrame(envelope)));
72
133
  socket.on('data', (data) => {
73
134
  // Ignore data if we've already timed out
@@ -75,17 +136,20 @@ export function createRelayClient(options) {
75
136
  return;
76
137
  const frames = parser.push(data);
77
138
  for (const response of frames) {
78
- // Check if this is a response to our request
79
- if (response.id === id || response.payload?.replyTo === id) {
139
+ const responsePayload = response.payload;
140
+ // Check if this is a response to our request (by id, replyTo, or correlationId for blocking sends)
141
+ const isMatchingResponse = response.id === id ||
142
+ responsePayload?.replyTo === id ||
143
+ (correlationId && responsePayload?.correlationId === correlationId);
144
+ if (isMatchingResponse) {
80
145
  clearTimeout(timeoutId);
81
146
  socket.end();
82
147
  // Handle error responses
83
148
  if (response.type === 'ERROR') {
84
- const errorPayload = response.payload;
85
- reject(new Error(errorPayload?.message || errorPayload?.code || 'Unknown error'));
149
+ reject(new Error(responsePayload?.message || responsePayload?.code || 'Unknown error'));
86
150
  }
87
- else if (response.payload?.error) {
88
- reject(new Error(response.payload.error));
151
+ else if (responsePayload?.error) {
152
+ reject(new Error(responsePayload.error));
89
153
  }
90
154
  else {
91
155
  resolve(response.payload);
@@ -109,15 +173,40 @@ export function createRelayClient(options) {
109
173
  }
110
174
  return {
111
175
  async send(to, message, opts = {}) {
112
- await request('SEND', { from: agentName, to, body: message, thread: opts.thread });
176
+ // Fire-and-forget: daemon doesn't respond to non-blocking SEND
177
+ // from/to must be at envelope level, kind/body/thread in payload
178
+ await fireAndForget('SEND', { kind: 'message', body: message, thread: opts.thread }, { from: agentName, to });
113
179
  },
114
180
  async sendAndWait(to, message, opts = {}) {
115
- const r = await request('SEND_AND_WAIT', { from: agentName, to, body: message, thread: opts.thread, timeoutMs: opts.timeoutMs || 30000 });
116
- return { from: r.from, content: r.body, thread: r.thread };
181
+ // Use proper SEND with sync.blocking - daemon handles the wait and returns ACK
182
+ // from/to must be at envelope level, kind/body/thread in payload
183
+ const waitTimeout = opts.timeoutMs || 30000;
184
+ const correlationId = randomUUID();
185
+ const r = await request('SEND', {
186
+ kind: 'message',
187
+ body: message,
188
+ thread: opts.thread,
189
+ }, waitTimeout + 5000, {
190
+ sync: {
191
+ blocking: true,
192
+ correlationId,
193
+ timeoutMs: waitTimeout,
194
+ },
195
+ }, { from: agentName, to });
196
+ return { from: r.from ?? to, content: r.response ?? '', thread: opts.thread };
117
197
  },
118
198
  async spawn(opts) {
199
+ // Fire-and-forget: daemon handles spawning, agent will message when ready
119
200
  try {
120
- await request('SPAWN', { ...opts, parent: agentName });
201
+ const payload = {
202
+ name: opts.name,
203
+ cli: opts.cli,
204
+ task: opts.task,
205
+ model: opts.model,
206
+ cwd: opts.cwd,
207
+ spawnerName: agentName, // Parent agent making the spawn request
208
+ };
209
+ await fireAndForget('SPAWN', payload);
121
210
  return { success: true };
122
211
  }
123
212
  catch (e) {
@@ -126,7 +215,8 @@ export function createRelayClient(options) {
126
215
  },
127
216
  async release(name, reason) {
128
217
  try {
129
- await request('RELEASE', { name, reason });
218
+ const payload = { name, reason };
219
+ await request('RELEASE', payload, RELEASE_TIMEOUT);
130
220
  return { success: true };
131
221
  }
132
222
  catch (e) {
@@ -143,11 +233,35 @@ export function createRelayClient(options) {
143
233
  }
144
234
  },
145
235
  async getInbox(opts = {}) {
146
- const msgs = await request('INBOX', { agent: agentName, limit: opts.limit, unreadOnly: opts.unread_only, from: opts.from, channel: opts.channel });
236
+ const payload = {
237
+ agent: agentName,
238
+ limit: opts.limit,
239
+ unreadOnly: opts.unread_only,
240
+ from: opts.from,
241
+ channel: opts.channel,
242
+ };
243
+ const response = await request('INBOX', payload);
244
+ const msgs = response.messages || [];
147
245
  return msgs.map(m => ({ id: m.id, from: m.from, content: m.body, channel: m.channel, thread: m.thread }));
148
246
  },
149
247
  async listAgents(opts = {}) {
150
- return request('LIST_AGENTS', { includeIdle: opts.include_idle, project: opts.project });
248
+ const payload = {
249
+ includeIdle: opts.include_idle,
250
+ project: opts.project,
251
+ };
252
+ const response = await request('LIST_AGENTS', payload);
253
+ return response.agents || [];
254
+ },
255
+ async getHealth(opts = {}) {
256
+ const payload = {
257
+ includeCrashes: opts.include_crashes,
258
+ includeAlerts: opts.include_alerts,
259
+ };
260
+ return request('HEALTH', payload);
261
+ },
262
+ async getMetrics(opts = {}) {
263
+ const payload = { agent: opts.agent };
264
+ return request('METRICS', payload);
151
265
  },
152
266
  };
153
267
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/cloud.d.ts CHANGED
@@ -105,4 +105,16 @@ export declare function getConnectionInfo(options?: CloudConnectionOptions): Clo
105
105
  * Environment variable summary for debugging.
106
106
  */
107
107
  export declare function getCloudEnvironmentSummary(): Record<string, string | undefined>;
108
+ /**
109
+ * Discover the agent name for the MCP server.
110
+ *
111
+ * Priority order:
112
+ * 1. RELAY_AGENT_NAME environment variable (explicit)
113
+ * 2. Identity file in .agent-relay directory (written by wrapper)
114
+ * 3. Scan outbox directories to find agent's outbox
115
+ *
116
+ * @param discovery - Optional discovery result with socket path info
117
+ * @returns Agent name or null if not found
118
+ */
119
+ export declare function discoverAgentName(discovery?: DiscoveryResult | null): string | null;
108
120
  //# sourceMappingURL=cloud.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../src/cloud.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACrC;AAMD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,GAAG,IAAI,CAc5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAMD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjF;AAoBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,GAAG,IAAI,CAiJ3F;AAMD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,QAAQ,CAAC,CAgBnB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CAevD;AAMD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,sBAA2B,GACnC,mBAAmB,GAAG,IAAI,CAoB5B;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAS/E"}
1
+ {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../src/cloud.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACrC;AAMD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,GAAG,IAAI,CAc5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAMD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjF;AAoBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,GAAG,IAAI,CAiJ3F;AAMD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,QAAQ,CAAC,CAgBnB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CAevD;AAMD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,sBAA2B,GACnC,mBAAmB,GAAG,IAAI,CAoB5B;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAU/E;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAgHnF"}
package/dist/cloud.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * Provides cloud workspace detection, remote daemon connection,
5
5
  * and workspace-aware socket discovery for cloud deployments.
6
6
  */
7
- import { existsSync, readdirSync, readFileSync } from 'node:fs';
7
+ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
8
8
  import { join } from 'node:path';
9
9
  import { homedir } from 'node:os';
10
10
  import { findProjectRoot } from '@agent-relay/config';
@@ -306,6 +306,130 @@ export function getCloudEnvironmentSummary() {
306
306
  WORKSPACE_OWNER_USER_ID: process.env.WORKSPACE_OWNER_USER_ID,
307
307
  RELAY_SOCKET: process.env.RELAY_SOCKET,
308
308
  RELAY_PROJECT: process.env.RELAY_PROJECT,
309
+ RELAY_AGENT_NAME: process.env.RELAY_AGENT_NAME,
309
310
  };
310
311
  }
312
+ // ============================================================================
313
+ // Agent Identity Discovery
314
+ // ============================================================================
315
+ /**
316
+ * Discover the agent name for the MCP server.
317
+ *
318
+ * Priority order:
319
+ * 1. RELAY_AGENT_NAME environment variable (explicit)
320
+ * 2. Identity file in .agent-relay directory (written by wrapper)
321
+ * 3. Scan outbox directories to find agent's outbox
322
+ *
323
+ * @param discovery - Optional discovery result with socket path info
324
+ * @returns Agent name or null if not found
325
+ */
326
+ export function discoverAgentName(discovery) {
327
+ // 1. Explicit environment variable
328
+ const envName = process.env.RELAY_AGENT_NAME;
329
+ if (envName) {
330
+ return envName;
331
+ }
332
+ // 2. Identity file in .agent-relay directory
333
+ // The wrapper creates this file with the agent name
334
+ const projectRoot = findProjectRoot(process.cwd());
335
+ const searchDirs = [process.cwd()];
336
+ if (projectRoot && projectRoot !== process.cwd()) {
337
+ searchDirs.push(projectRoot);
338
+ }
339
+ for (const dir of searchDirs) {
340
+ const relayDir = join(dir, '.agent-relay');
341
+ if (!existsSync(relayDir))
342
+ continue;
343
+ // First check for per-process identity files
344
+ // The orchestrator writes mcp-identity-{orchestrator.pid}
345
+ // Try to find one by checking process.ppid and its ancestors
346
+ const pidIdentityPath = join(relayDir, `mcp-identity-${process.ppid}`);
347
+ if (existsSync(pidIdentityPath)) {
348
+ try {
349
+ const content = readFileSync(pidIdentityPath, 'utf-8').trim();
350
+ if (content) {
351
+ return content;
352
+ }
353
+ }
354
+ catch {
355
+ // Ignore read errors
356
+ }
357
+ }
358
+ // Scan all mcp-identity-* files and return the most recently modified one
359
+ // This handles the case where MCP server's ppid doesn't match the orchestrator
360
+ try {
361
+ const files = readdirSync(relayDir, { withFileTypes: true })
362
+ .filter((d) => d.isFile() && d.name.startsWith('mcp-identity-'))
363
+ .map((d) => ({
364
+ path: join(relayDir, d.name),
365
+ name: d.name,
366
+ }));
367
+ if (files.length > 0) {
368
+ // Sort by mtime (most recent first) to get the latest identity
369
+ const sorted = files
370
+ .map((f) => {
371
+ try {
372
+ const stat = statSync(f.path);
373
+ return { ...f, mtime: stat.mtimeMs };
374
+ }
375
+ catch {
376
+ return { ...f, mtime: 0 };
377
+ }
378
+ })
379
+ .sort((a, b) => b.mtime - a.mtime);
380
+ // Return the most recently modified identity file
381
+ const latest = sorted[0];
382
+ if (latest) {
383
+ try {
384
+ const content = readFileSync(latest.path, 'utf-8').trim();
385
+ if (content) {
386
+ return content;
387
+ }
388
+ }
389
+ catch {
390
+ // Ignore
391
+ }
392
+ }
393
+ }
394
+ }
395
+ catch {
396
+ // Ignore scan errors
397
+ }
398
+ // Fallback to simple identity file (for single-agent scenarios)
399
+ const identityPath = join(relayDir, 'mcp-identity');
400
+ if (existsSync(identityPath)) {
401
+ try {
402
+ const content = readFileSync(identityPath, 'utf-8').trim();
403
+ if (content) {
404
+ return content;
405
+ }
406
+ }
407
+ catch {
408
+ // Ignore read errors
409
+ }
410
+ }
411
+ }
412
+ // 3. Check outbox directories for a match
413
+ // If only one agent's outbox exists, assume we're that agent
414
+ for (const dir of searchDirs) {
415
+ const outboxDir = join(dir, '.agent-relay', 'outbox');
416
+ if (existsSync(outboxDir)) {
417
+ try {
418
+ const agents = readdirSync(outboxDir, { withFileTypes: true })
419
+ .filter((d) => d.isDirectory())
420
+ .map((d) => d.name);
421
+ // If there's exactly one outbox, use that agent name
422
+ if (agents.length === 1) {
423
+ return agents[0];
424
+ }
425
+ // If there are multiple, we can't determine which one we are
426
+ // The wrapper should have created an identity file
427
+ }
428
+ catch {
429
+ // Ignore read errors
430
+ }
431
+ }
432
+ }
433
+ return null;
434
+ }
311
435
  //# sourceMappingURL=cloud.js.map