agent-relay 2.1.13 → 2.1.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.
- package/dist/index.cjs +37571 -50918
- package/dist/src/cli/index.js +1 -1
- package/dist/src/cli/index.js.map +1 -1
- package/package.json +18 -18
- package/packages/acp-bridge/package.json +2 -2
- package/packages/api-types/package.json +1 -1
- package/packages/benchmark/datasets/quick-test.yaml +20 -0
- package/packages/benchmark/dist/runners/base.d.ts.map +1 -1
- package/packages/benchmark/dist/runners/base.js +1 -0
- package/packages/benchmark/dist/runners/base.js.map +1 -1
- package/packages/benchmark/package.json +4 -4
- package/packages/benchmark/src/runners/base.ts +1 -0
- package/packages/bridge/dist/spawner.d.ts.map +1 -1
- package/packages/bridge/dist/spawner.js +2 -30
- package/packages/bridge/dist/spawner.js.map +1 -1
- package/packages/bridge/package.json +7 -8
- package/packages/bridge/src/spawner.ts +2 -29
- package/packages/cli-tester/package.json +1 -1
- package/packages/config/dist/teams-config.d.ts +7 -1
- package/packages/config/dist/teams-config.d.ts.map +1 -1
- package/packages/config/dist/teams-config.js +88 -34
- package/packages/config/dist/teams-config.js.map +1 -1
- package/packages/config/package.json +2 -2
- package/packages/config/src/teams-config.ts +106 -39
- package/packages/continuity/package.json +2 -2
- package/packages/daemon/dist/server.d.ts.map +1 -1
- package/packages/daemon/dist/server.js +18 -0
- package/packages/daemon/dist/server.js.map +1 -1
- package/packages/daemon/dist/spawn-manager.d.ts +8 -0
- package/packages/daemon/dist/spawn-manager.d.ts.map +1 -1
- package/packages/daemon/dist/spawn-manager.js +14 -3
- package/packages/daemon/dist/spawn-manager.js.map +1 -1
- package/packages/daemon/package.json +12 -12
- package/packages/daemon/src/server.ts +17 -0
- package/packages/daemon/src/spawn-manager.ts +21 -3
- package/packages/hooks/package.json +4 -4
- package/packages/mcp/CHANGELOG.md +28 -0
- package/packages/mcp/README.md +31 -0
- package/packages/mcp/dist/bin.js +18 -5
- package/packages/mcp/dist/bin.js.map +1 -1
- package/packages/mcp/dist/{client.d.ts → client-adapter.d.ts} +22 -36
- package/packages/mcp/dist/client-adapter.d.ts.map +1 -0
- package/packages/mcp/dist/client-adapter.js +227 -0
- package/packages/mcp/dist/client-adapter.js.map +1 -0
- package/packages/mcp/dist/hybrid-client.d.ts +1 -31
- package/packages/mcp/dist/hybrid-client.d.ts.map +1 -1
- package/packages/mcp/dist/hybrid-client.js +3 -153
- package/packages/mcp/dist/hybrid-client.js.map +1 -1
- package/packages/mcp/dist/index.d.ts +2 -3
- package/packages/mcp/dist/index.d.ts.map +1 -1
- package/packages/mcp/dist/index.js +4 -3
- package/packages/mcp/dist/index.js.map +1 -1
- package/packages/mcp/dist/resources/agents.d.ts +1 -1
- package/packages/mcp/dist/resources/agents.d.ts.map +1 -1
- package/packages/mcp/dist/resources/inbox.d.ts +1 -1
- package/packages/mcp/dist/resources/inbox.d.ts.map +1 -1
- package/packages/mcp/dist/resources/project.d.ts +1 -1
- package/packages/mcp/dist/resources/project.d.ts.map +1 -1
- package/packages/mcp/dist/server.d.ts +5 -1
- package/packages/mcp/dist/server.d.ts.map +1 -1
- package/packages/mcp/dist/server.js.map +1 -1
- package/packages/mcp/dist/simple.d.ts +1 -1
- package/packages/mcp/dist/simple.d.ts.map +1 -1
- package/packages/mcp/dist/simple.js +1 -1
- package/packages/mcp/dist/simple.js.map +1 -1
- package/packages/mcp/dist/tools/relay-broadcast.d.ts +1 -1
- package/packages/mcp/dist/tools/relay-broadcast.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-channel.d.ts +1 -1
- package/packages/mcp/dist/tools/relay-channel.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-connected.d.ts +1 -1
- package/packages/mcp/dist/tools/relay-connected.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-consensus.d.ts +7 -7
- package/packages/mcp/dist/tools/relay-consensus.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-continuity.d.ts +1 -1
- package/packages/mcp/dist/tools/relay-continuity.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-health.d.ts +1 -1
- package/packages/mcp/dist/tools/relay-health.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-inbox.d.ts +2 -2
- package/packages/mcp/dist/tools/relay-inbox.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-logs.d.ts +1 -1
- package/packages/mcp/dist/tools/relay-logs.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-messages.d.ts +7 -7
- package/packages/mcp/dist/tools/relay-messages.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-metrics.d.ts +1 -1
- package/packages/mcp/dist/tools/relay-metrics.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-metrics.js +4 -4
- package/packages/mcp/dist/tools/relay-metrics.js.map +1 -1
- package/packages/mcp/dist/tools/relay-release.d.ts +1 -1
- package/packages/mcp/dist/tools/relay-release.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-remove-agent.d.ts +1 -1
- package/packages/mcp/dist/tools/relay-remove-agent.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-send.d.ts +3 -3
- package/packages/mcp/dist/tools/relay-send.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-shadow.d.ts +1 -1
- package/packages/mcp/dist/tools/relay-shadow.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-spawn.d.ts +3 -3
- package/packages/mcp/dist/tools/relay-spawn.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-status.d.ts +1 -1
- package/packages/mcp/dist/tools/relay-status.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-subscribe.d.ts +1 -1
- package/packages/mcp/dist/tools/relay-subscribe.d.ts.map +1 -1
- package/packages/mcp/dist/tools/relay-who.d.ts +1 -1
- package/packages/mcp/dist/tools/relay-who.d.ts.map +1 -1
- package/packages/mcp/package.json +13 -4
- package/packages/mcp/src/bin.ts +21 -6
- package/packages/mcp/src/client-adapter.ts +346 -0
- package/packages/mcp/src/hybrid-client.ts +3 -202
- package/packages/mcp/src/index.ts +12 -5
- package/packages/mcp/src/resources/agents.ts +1 -1
- package/packages/mcp/src/resources/inbox.ts +1 -1
- package/packages/mcp/src/resources/project.ts +1 -1
- package/packages/mcp/src/server.ts +5 -1
- package/packages/mcp/src/simple.ts +1 -1
- package/packages/mcp/src/tools/relay-broadcast.ts +1 -1
- package/packages/mcp/src/tools/relay-channel.ts +1 -1
- package/packages/mcp/src/tools/relay-connected.ts +1 -1
- package/packages/mcp/src/tools/relay-consensus.ts +1 -1
- package/packages/mcp/src/tools/relay-continuity.ts +1 -1
- package/packages/mcp/src/tools/relay-health.ts +1 -1
- package/packages/mcp/src/tools/relay-inbox.ts +1 -1
- package/packages/mcp/src/tools/relay-logs.ts +1 -1
- package/packages/mcp/src/tools/relay-messages.ts +1 -1
- package/packages/mcp/src/tools/relay-metrics.ts +7 -5
- package/packages/mcp/src/tools/relay-release.ts +1 -1
- package/packages/mcp/src/tools/relay-remove-agent.ts +1 -1
- package/packages/mcp/src/tools/relay-send.ts +1 -1
- package/packages/mcp/src/tools/relay-shadow.ts +1 -1
- package/packages/mcp/src/tools/relay-spawn.ts +1 -1
- package/packages/mcp/src/tools/relay-status.ts +1 -1
- package/packages/mcp/src/tools/relay-subscribe.ts +1 -1
- package/packages/mcp/src/tools/relay-who.ts +1 -1
- package/packages/mcp/tests/client.test.ts +332 -432
- package/packages/memory/package.json +2 -2
- package/packages/policy/package.json +2 -2
- package/packages/protocol/package.json +1 -1
- package/packages/resiliency/package.json +1 -1
- package/packages/sdk/README.md +185 -0
- package/packages/sdk/dist/client.d.ts +1 -1
- package/packages/sdk/dist/client.d.ts.map +1 -1
- package/packages/sdk/dist/client.js +2 -1
- package/packages/sdk/dist/client.js.map +1 -1
- package/packages/sdk/dist/standalone.d.ts +2 -0
- package/packages/sdk/dist/standalone.d.ts.map +1 -1
- package/packages/sdk/dist/standalone.js +6 -1
- package/packages/sdk/dist/standalone.js.map +1 -1
- package/packages/sdk/package.json +3 -4
- package/packages/sdk/src/client.ts +2 -2
- package/packages/sdk/src/standalone.ts +8 -1
- package/packages/spawner/package.json +1 -1
- package/packages/state/package.json +1 -1
- package/packages/storage/package.json +2 -2
- package/packages/storage/src/jsonl-adapter.test.ts +3 -1
- package/packages/telemetry/package.json +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +3 -3
- package/packages/wrapper/dist/relay-pty-orchestrator.d.ts.map +1 -1
- package/packages/wrapper/dist/relay-pty-orchestrator.js +13 -0
- package/packages/wrapper/dist/relay-pty-orchestrator.js.map +1 -1
- package/packages/wrapper/package.json +6 -6
- package/packages/wrapper/src/relay-pty-orchestrator.ts +14 -0
- package/packages/mcp/dist/client.d.ts.map +0 -1
- package/packages/mcp/dist/client.js +0 -320
- package/packages/mcp/dist/client.js.map +0 -1
- package/packages/mcp/src/client.ts +0 -485
package/packages/mcp/dist/bin.js
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { parseArgs } from 'node:util';
|
|
12
12
|
import { runInstall, validateEditor, getValidEditors } from './install-cli.js';
|
|
13
|
+
import { RelayClient } from '@agent-relay/sdk';
|
|
14
|
+
import { createRelayClientAdapter } from './client-adapter.js';
|
|
13
15
|
const { values, positionals } = parseArgs({
|
|
14
16
|
allowPositionals: true,
|
|
15
17
|
options: {
|
|
@@ -104,7 +106,7 @@ switch (command) {
|
|
|
104
106
|
(async () => {
|
|
105
107
|
try {
|
|
106
108
|
const { runMCPServer, discoverSocket, discoverAgentName } = await import('./index.js');
|
|
107
|
-
const {
|
|
109
|
+
const { discoverProjectRoot } = await import('./hybrid-client.js');
|
|
108
110
|
const { join } = await import('node:path');
|
|
109
111
|
const { existsSync } = await import('node:fs');
|
|
110
112
|
// Use explicit project path if provided (for MCP servers invoked from different contexts)
|
|
@@ -123,7 +125,7 @@ switch (command) {
|
|
|
123
125
|
}
|
|
124
126
|
const discovery = discoverSocket();
|
|
125
127
|
const agentName = discoverAgentName(discovery) || `mcp-${process.pid}`;
|
|
126
|
-
// Discover project root
|
|
128
|
+
// Discover project root
|
|
127
129
|
if (!projectRoot) {
|
|
128
130
|
projectRoot = discoverProjectRoot() ?? undefined;
|
|
129
131
|
}
|
|
@@ -139,14 +141,25 @@ switch (command) {
|
|
|
139
141
|
console.error('Run "agent-relay up" in the project to start the daemon first');
|
|
140
142
|
process.exit(1);
|
|
141
143
|
}
|
|
142
|
-
|
|
143
|
-
const client = createHybridClient({
|
|
144
|
+
const client = new RelayClient({
|
|
144
145
|
agentName,
|
|
146
|
+
socketPath: socketPath || discovery?.socketPath,
|
|
147
|
+
quiet: values.quiet,
|
|
148
|
+
reconnect: true,
|
|
149
|
+
});
|
|
150
|
+
await client.connect();
|
|
151
|
+
const mcpClient = createRelayClientAdapter(client, {
|
|
152
|
+
agentName,
|
|
153
|
+
project: discovery?.project,
|
|
145
154
|
projectRoot,
|
|
146
155
|
socketPath: socketPath || discovery?.socketPath,
|
|
156
|
+
});
|
|
157
|
+
await runMCPServer(mcpClient, {
|
|
158
|
+
projectRoot,
|
|
147
159
|
project: discovery?.project,
|
|
160
|
+
socketPath: socketPath || discovery?.socketPath,
|
|
161
|
+
agentName,
|
|
148
162
|
});
|
|
149
|
-
await runMCPServer(client);
|
|
150
163
|
}
|
|
151
164
|
catch (err) {
|
|
152
165
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* This module uses @agent-relay/protocol for wire format handling
|
|
5
|
-
* to avoid code duplication with the SDK.
|
|
6
|
-
*/
|
|
7
|
-
import { type AckPayload, type HealthResponsePayload, type MetricsResponsePayload, type MessagesResponsePayload } from '@agent-relay/protocol';
|
|
8
|
-
import { type SpawnResult, type ReleaseResult } from '@agent-relay/utils/client-helpers';
|
|
1
|
+
import { RelayClient as SdkRelayClient, type AckPayload, type AgentInfo, type HealthResponsePayload, type MetricsResponsePayload, type MessagesResponsePayload, type SpawnResult, type ReleaseResultPayload } from '@agent-relay/sdk';
|
|
2
|
+
export type QueryMessage = MessagesResponsePayload['messages'][number];
|
|
9
3
|
export type HealthResponse = HealthResponsePayload;
|
|
10
4
|
export type MetricsResponse = MetricsResponsePayload;
|
|
11
5
|
export type MessagesResponse = MessagesResponsePayload;
|
|
12
|
-
export type QueryMessage = MessagesResponsePayload['messages'][number];
|
|
13
6
|
export interface RelayClient {
|
|
14
7
|
send(to: string, message: string, options?: {
|
|
15
8
|
thread?: string;
|
|
@@ -24,15 +17,16 @@ export interface RelayClient {
|
|
|
24
17
|
}): Promise<AckPayload>;
|
|
25
18
|
broadcast(message: string, options?: {
|
|
26
19
|
kind?: string;
|
|
20
|
+
data?: Record<string, unknown>;
|
|
27
21
|
}): Promise<void>;
|
|
28
22
|
spawn(options: {
|
|
29
23
|
name: string;
|
|
30
24
|
cli: string;
|
|
31
|
-
task
|
|
25
|
+
task?: string;
|
|
32
26
|
model?: string;
|
|
33
27
|
cwd?: string;
|
|
34
28
|
}): Promise<SpawnResult>;
|
|
35
|
-
release(name: string, reason?: string): Promise<
|
|
29
|
+
release(name: string, reason?: string): Promise<ReleaseResultPayload>;
|
|
36
30
|
subscribe(topic: string): Promise<{
|
|
37
31
|
success: boolean;
|
|
38
32
|
error?: string;
|
|
@@ -52,12 +46,10 @@ export interface RelayClient {
|
|
|
52
46
|
sendChannelMessage(channel: string, message: string, options?: {
|
|
53
47
|
thread?: string;
|
|
54
48
|
}): Promise<void>;
|
|
55
|
-
/** Admin join: Add any member to a channel (does not require member to be connected) */
|
|
56
49
|
adminJoinChannel(channel: string, member: string): Promise<{
|
|
57
50
|
success: boolean;
|
|
58
51
|
error?: string;
|
|
59
52
|
}>;
|
|
60
|
-
/** Admin remove: Remove any member from a channel */
|
|
61
53
|
adminRemoveMember(channel: string, member: string): Promise<{
|
|
62
54
|
success: boolean;
|
|
63
55
|
error?: string;
|
|
@@ -113,20 +105,10 @@ export interface RelayClient {
|
|
|
113
105
|
listAgents(options?: {
|
|
114
106
|
include_idle?: boolean;
|
|
115
107
|
project?: string;
|
|
116
|
-
}): Promise<
|
|
117
|
-
name: string;
|
|
118
|
-
cli?: string;
|
|
119
|
-
idle?: boolean;
|
|
120
|
-
parent?: string;
|
|
121
|
-
}>>;
|
|
108
|
+
}): Promise<AgentInfo[]>;
|
|
122
109
|
listConnectedAgents(options?: {
|
|
123
110
|
project?: string;
|
|
124
|
-
}): Promise<
|
|
125
|
-
name: string;
|
|
126
|
-
cli?: string;
|
|
127
|
-
idle?: boolean;
|
|
128
|
-
parent?: string;
|
|
129
|
-
}>>;
|
|
111
|
+
}): Promise<AgentInfo[]>;
|
|
130
112
|
removeAgent(name: string, options?: {
|
|
131
113
|
removeMessages?: boolean;
|
|
132
114
|
}): Promise<{
|
|
@@ -137,33 +119,37 @@ export interface RelayClient {
|
|
|
137
119
|
getHealth(options?: {
|
|
138
120
|
include_crashes?: boolean;
|
|
139
121
|
include_alerts?: boolean;
|
|
140
|
-
}): Promise<
|
|
122
|
+
}): Promise<HealthResponsePayload>;
|
|
141
123
|
getMetrics(options?: {
|
|
142
124
|
agent?: string;
|
|
143
|
-
}): Promise<
|
|
144
|
-
/**
|
|
145
|
-
* Query all messages (not filtered by recipient).
|
|
146
|
-
* Useful for dashboard views and message history.
|
|
147
|
-
*/
|
|
125
|
+
}): Promise<MetricsResponsePayload>;
|
|
148
126
|
queryMessages(options?: {
|
|
149
127
|
limit?: number;
|
|
150
128
|
sinceTs?: number;
|
|
129
|
+
since_ts?: number;
|
|
151
130
|
from?: string;
|
|
152
131
|
to?: string;
|
|
153
132
|
thread?: string;
|
|
154
133
|
order?: 'asc' | 'desc';
|
|
155
134
|
}): Promise<QueryMessage[]>;
|
|
156
|
-
/**
|
|
157
|
-
* Send log output to the daemon for dashboard streaming.
|
|
158
|
-
*/
|
|
159
135
|
sendLog(data: string): Promise<void>;
|
|
160
136
|
}
|
|
137
|
+
export interface RelayClientAdapterOptions {
|
|
138
|
+
agentName: string;
|
|
139
|
+
project?: string;
|
|
140
|
+
projectRoot?: string;
|
|
141
|
+
socketPath?: string;
|
|
142
|
+
}
|
|
143
|
+
export declare function createRelayClientAdapter(client: SdkRelayClient, ctx: RelayClientAdapterOptions): RelayClient;
|
|
161
144
|
export interface RelayClientOptions {
|
|
162
145
|
agentName: string;
|
|
163
146
|
socketPath?: string;
|
|
164
147
|
project?: string;
|
|
148
|
+
quiet?: boolean;
|
|
165
149
|
timeout?: number;
|
|
166
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Factory that creates an SDK RelayClient and wraps it with the MCP adapter.
|
|
153
|
+
*/
|
|
167
154
|
export declare function createRelayClient(options: RelayClientOptions): RelayClient;
|
|
168
|
-
|
|
169
|
-
//# sourceMappingURL=client.d.ts.map
|
|
155
|
+
//# sourceMappingURL=client-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-adapter.d.ts","sourceRoot":"","sources":["../src/client-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { RelayClient as SdkRelayClient } from '@agent-relay/sdk';
|
|
2
|
+
import { PROTOCOL_VERSION } from '@agent-relay/protocol';
|
|
3
|
+
import { randomUUID } from 'node:crypto';
|
|
4
|
+
async function ensureReady(client) {
|
|
5
|
+
if (client.state !== 'READY') {
|
|
6
|
+
await client.connect();
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
function boolResult(ok, action) {
|
|
10
|
+
return ok ? { success: true } : { success: false, error: `Failed to ${action}` };
|
|
11
|
+
}
|
|
12
|
+
export function createRelayClientAdapter(client, ctx) {
|
|
13
|
+
const project = ctx.projectRoot ?? ctx.project ?? 'default';
|
|
14
|
+
const socketPath = ctx.socketPath ?? '';
|
|
15
|
+
return {
|
|
16
|
+
async send(to, message, opts = {}) {
|
|
17
|
+
await ensureReady(client);
|
|
18
|
+
const ok = client.sendMessage(to, message, opts.kind ?? 'message', opts.data, opts.thread);
|
|
19
|
+
if (!ok)
|
|
20
|
+
throw new Error('Failed to send message');
|
|
21
|
+
},
|
|
22
|
+
async sendAndWait(to, message, opts = {}) {
|
|
23
|
+
await ensureReady(client);
|
|
24
|
+
return client.sendAndWait(to, message, {
|
|
25
|
+
thread: opts.thread,
|
|
26
|
+
timeoutMs: opts.timeoutMs,
|
|
27
|
+
kind: opts.kind,
|
|
28
|
+
data: opts.data,
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
async broadcast(message, opts = {}) {
|
|
32
|
+
await ensureReady(client);
|
|
33
|
+
const ok = client.broadcast(message, opts.kind ?? 'message', opts.data);
|
|
34
|
+
if (!ok)
|
|
35
|
+
throw new Error('Failed to broadcast message');
|
|
36
|
+
},
|
|
37
|
+
async subscribe(topic) {
|
|
38
|
+
await ensureReady(client);
|
|
39
|
+
const ok = client.subscribe(topic);
|
|
40
|
+
return boolResult(ok, 'subscribe');
|
|
41
|
+
},
|
|
42
|
+
async unsubscribe(topic) {
|
|
43
|
+
await ensureReady(client);
|
|
44
|
+
const ok = client.unsubscribe(topic);
|
|
45
|
+
return boolResult(ok, 'unsubscribe');
|
|
46
|
+
},
|
|
47
|
+
async joinChannel(channel, displayName) {
|
|
48
|
+
await ensureReady(client);
|
|
49
|
+
const ok = client.joinChannel(channel, displayName);
|
|
50
|
+
return boolResult(ok, 'join channel');
|
|
51
|
+
},
|
|
52
|
+
async leaveChannel(channel, reason) {
|
|
53
|
+
await ensureReady(client);
|
|
54
|
+
const ok = client.leaveChannel(channel, reason);
|
|
55
|
+
return boolResult(ok, 'leave channel');
|
|
56
|
+
},
|
|
57
|
+
async sendChannelMessage(channel, message, options = {}) {
|
|
58
|
+
await ensureReady(client);
|
|
59
|
+
const ok = client.sendChannelMessage(channel, message, { thread: options.thread });
|
|
60
|
+
if (!ok)
|
|
61
|
+
throw new Error('Failed to send channel message');
|
|
62
|
+
},
|
|
63
|
+
async adminJoinChannel(channel, member) {
|
|
64
|
+
await ensureReady(client);
|
|
65
|
+
const ok = client.adminJoinChannel(channel, member);
|
|
66
|
+
return boolResult(ok, 'add member to channel');
|
|
67
|
+
},
|
|
68
|
+
async adminRemoveMember(channel, member) {
|
|
69
|
+
await ensureReady(client);
|
|
70
|
+
const ok = client.adminRemoveMember(channel, member);
|
|
71
|
+
return boolResult(ok, 'remove member from channel');
|
|
72
|
+
},
|
|
73
|
+
async bindAsShadow(primaryAgent, opts = {}) {
|
|
74
|
+
await ensureReady(client);
|
|
75
|
+
const ok = client.bindAsShadow(primaryAgent, { speakOn: opts.speakOn });
|
|
76
|
+
return boolResult(ok, 'bind as shadow');
|
|
77
|
+
},
|
|
78
|
+
async unbindAsShadow(primaryAgent) {
|
|
79
|
+
await ensureReady(client);
|
|
80
|
+
const ok = client.unbindAsShadow(primaryAgent);
|
|
81
|
+
return boolResult(ok, 'unbind shadow');
|
|
82
|
+
},
|
|
83
|
+
async createProposal(opts) {
|
|
84
|
+
await ensureReady(client);
|
|
85
|
+
const envelope = {
|
|
86
|
+
v: PROTOCOL_VERSION,
|
|
87
|
+
type: 'PROPOSAL_CREATE',
|
|
88
|
+
id: randomUUID(),
|
|
89
|
+
ts: Date.now(),
|
|
90
|
+
payload: {
|
|
91
|
+
id: opts.id,
|
|
92
|
+
description: opts.description,
|
|
93
|
+
options: opts.options,
|
|
94
|
+
votingMethod: opts.votingMethod ?? 'majority',
|
|
95
|
+
deadline: opts.deadline,
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
const ok = client.send?.(envelope) ?? false;
|
|
99
|
+
return boolResult(ok, 'create proposal');
|
|
100
|
+
},
|
|
101
|
+
async vote(opts) {
|
|
102
|
+
await ensureReady(client);
|
|
103
|
+
const envelope = {
|
|
104
|
+
v: PROTOCOL_VERSION,
|
|
105
|
+
type: 'VOTE',
|
|
106
|
+
id: randomUUID(),
|
|
107
|
+
ts: Date.now(),
|
|
108
|
+
payload: {
|
|
109
|
+
proposalId: opts.proposalId,
|
|
110
|
+
vote: opts.vote,
|
|
111
|
+
reason: opts.reason,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
const ok = client.send?.(envelope) ?? false;
|
|
115
|
+
return boolResult(ok, 'vote');
|
|
116
|
+
},
|
|
117
|
+
async spawn(options) {
|
|
118
|
+
await ensureReady(client);
|
|
119
|
+
return client.spawn(options);
|
|
120
|
+
},
|
|
121
|
+
async release(name, reason) {
|
|
122
|
+
await ensureReady(client);
|
|
123
|
+
return client.release(name, reason);
|
|
124
|
+
},
|
|
125
|
+
async getStatus() {
|
|
126
|
+
try {
|
|
127
|
+
await ensureReady(client);
|
|
128
|
+
const status = await client.getStatus();
|
|
129
|
+
return {
|
|
130
|
+
connected: true,
|
|
131
|
+
agentName: ctx.agentName,
|
|
132
|
+
project,
|
|
133
|
+
socketPath,
|
|
134
|
+
daemonVersion: status.version,
|
|
135
|
+
uptime: status.uptime ? `${Math.floor(status.uptime / 1000)}s` : undefined,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return {
|
|
140
|
+
connected: false,
|
|
141
|
+
agentName: ctx.agentName,
|
|
142
|
+
project,
|
|
143
|
+
socketPath,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
async getInbox(options = {}) {
|
|
148
|
+
await ensureReady(client);
|
|
149
|
+
const messages = await client.getInbox({
|
|
150
|
+
limit: options.limit,
|
|
151
|
+
unreadOnly: options.unread_only,
|
|
152
|
+
from: options.from,
|
|
153
|
+
channel: options.channel,
|
|
154
|
+
});
|
|
155
|
+
return messages.map((m) => ({
|
|
156
|
+
id: m.id,
|
|
157
|
+
from: m.from,
|
|
158
|
+
content: m.body,
|
|
159
|
+
channel: m.channel,
|
|
160
|
+
thread: m.thread,
|
|
161
|
+
}));
|
|
162
|
+
},
|
|
163
|
+
async listAgents(options = {}) {
|
|
164
|
+
await ensureReady(client);
|
|
165
|
+
return client.listAgents({
|
|
166
|
+
includeIdle: options.include_idle,
|
|
167
|
+
project: options.project,
|
|
168
|
+
});
|
|
169
|
+
},
|
|
170
|
+
async listConnectedAgents(options = {}) {
|
|
171
|
+
await ensureReady(client);
|
|
172
|
+
return client.listConnectedAgents({
|
|
173
|
+
project: options.project,
|
|
174
|
+
});
|
|
175
|
+
},
|
|
176
|
+
async removeAgent(name, options = {}) {
|
|
177
|
+
await ensureReady(client);
|
|
178
|
+
return client.removeAgent(name, { removeMessages: options.removeMessages });
|
|
179
|
+
},
|
|
180
|
+
async getHealth(options = {}) {
|
|
181
|
+
await ensureReady(client);
|
|
182
|
+
return client.getHealth({
|
|
183
|
+
includeCrashes: options.include_crashes,
|
|
184
|
+
includeAlerts: options.include_alerts,
|
|
185
|
+
});
|
|
186
|
+
},
|
|
187
|
+
async getMetrics(options = {}) {
|
|
188
|
+
await ensureReady(client);
|
|
189
|
+
return client.getMetrics({ agent: options.agent });
|
|
190
|
+
},
|
|
191
|
+
async queryMessages(options = {}) {
|
|
192
|
+
await ensureReady(client);
|
|
193
|
+
const response = await client.queryMessages({
|
|
194
|
+
limit: options.limit,
|
|
195
|
+
sinceTs: options.sinceTs ?? options.since_ts,
|
|
196
|
+
from: options.from,
|
|
197
|
+
to: options.to,
|
|
198
|
+
thread: options.thread,
|
|
199
|
+
order: options.order,
|
|
200
|
+
});
|
|
201
|
+
return response || [];
|
|
202
|
+
},
|
|
203
|
+
async sendLog(data) {
|
|
204
|
+
await ensureReady(client);
|
|
205
|
+
const ok = client.sendLog(data);
|
|
206
|
+
if (!ok)
|
|
207
|
+
throw new Error('Failed to send log');
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Factory that creates an SDK RelayClient and wraps it with the MCP adapter.
|
|
213
|
+
*/
|
|
214
|
+
export function createRelayClient(options) {
|
|
215
|
+
const sdkClient = new SdkRelayClient({
|
|
216
|
+
agentName: options.agentName,
|
|
217
|
+
socketPath: options.socketPath,
|
|
218
|
+
quiet: options.quiet,
|
|
219
|
+
reconnect: true,
|
|
220
|
+
});
|
|
221
|
+
return createRelayClientAdapter(sdkClient, {
|
|
222
|
+
agentName: options.agentName,
|
|
223
|
+
project: options.project,
|
|
224
|
+
socketPath: options.socketPath,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=client-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-adapter.js","sourceRoot":"","sources":["../src/client-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* IMPORTANT: The file-based writes ONLY work when relay-pty is wrapping the agent.
|
|
5
|
-
* relay-pty watches for ->relay-file:* triggers in agent output and processes outbox files.
|
|
6
|
-
* The daemon does NOT watch outbox directories directly.
|
|
7
|
-
*
|
|
8
|
-
* For pure MCP tools (not wrapped by relay-pty), use createRelayClient() instead,
|
|
9
|
-
* which communicates directly with the daemon via socket.
|
|
10
|
-
*
|
|
11
|
-
* This hybrid client is designed for scenarios where:
|
|
12
|
-
* - An agent is wrapped by relay-pty
|
|
13
|
-
* - File-based writes avoid socket connection overhead
|
|
14
|
-
* - Socket is still used for queries (getInbox, listAgents, etc.)
|
|
15
|
-
*/
|
|
16
|
-
import type { RelayClient } from './client.js';
|
|
17
|
-
export interface HybridClientOptions {
|
|
18
|
-
/** Agent name */
|
|
19
|
-
agentName: string;
|
|
20
|
-
/** Project root directory (where .agent-relay lives) */
|
|
21
|
-
projectRoot: string;
|
|
22
|
-
/** Socket path (optional, will discover if not provided) */
|
|
23
|
-
socketPath?: string;
|
|
24
|
-
/** Project ID */
|
|
25
|
-
project?: string;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Create a hybrid client that uses file-based for writes, socket for queries.
|
|
29
|
-
*/
|
|
30
|
-
export declare function createHybridClient(options: HybridClientOptions): RelayClient;
|
|
31
|
-
/**
|
|
32
|
-
* Discover project root from socket path or environment.
|
|
2
|
+
* Discover project root by locating a .agent-relay directory.
|
|
33
3
|
*/
|
|
34
4
|
export declare function discoverProjectRoot(): string | null;
|
|
35
5
|
//# sourceMappingURL=hybrid-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid-client.d.ts","sourceRoot":"","sources":["../src/hybrid-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hybrid-client.d.ts","sourceRoot":"","sources":["../src/hybrid-client.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAkBnD"}
|
|
@@ -1,166 +1,16 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
1
3
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* IMPORTANT: The file-based writes ONLY work when relay-pty is wrapping the agent.
|
|
5
|
-
* relay-pty watches for ->relay-file:* triggers in agent output and processes outbox files.
|
|
6
|
-
* The daemon does NOT watch outbox directories directly.
|
|
7
|
-
*
|
|
8
|
-
* For pure MCP tools (not wrapped by relay-pty), use createRelayClient() instead,
|
|
9
|
-
* which communicates directly with the daemon via socket.
|
|
10
|
-
*
|
|
11
|
-
* This hybrid client is designed for scenarios where:
|
|
12
|
-
* - An agent is wrapped by relay-pty
|
|
13
|
-
* - File-based writes avoid socket connection overhead
|
|
14
|
-
* - Socket is still used for queries (getInbox, listAgents, etc.)
|
|
15
|
-
*/
|
|
16
|
-
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
17
|
-
import { join, dirname } from 'node:path';
|
|
18
|
-
import { createRelayClient } from './client.js';
|
|
19
|
-
import { discoverSocket } from './cloud.js';
|
|
20
|
-
/**
|
|
21
|
-
* Create a hybrid client that uses file-based for writes, socket for queries.
|
|
22
|
-
*/
|
|
23
|
-
export function createHybridClient(options) {
|
|
24
|
-
const { agentName, projectRoot, project = 'default' } = options;
|
|
25
|
-
// Setup directories
|
|
26
|
-
const relayDir = join(projectRoot, '.agent-relay');
|
|
27
|
-
const outboxDir = join(relayDir, 'outbox', agentName);
|
|
28
|
-
const inboxDir = join(relayDir, 'inbox', agentName);
|
|
29
|
-
// Ensure directories exist
|
|
30
|
-
if (!existsSync(outboxDir)) {
|
|
31
|
-
mkdirSync(outboxDir, { recursive: true });
|
|
32
|
-
}
|
|
33
|
-
if (!existsSync(inboxDir)) {
|
|
34
|
-
mkdirSync(inboxDir, { recursive: true });
|
|
35
|
-
}
|
|
36
|
-
// Get socket path for queries
|
|
37
|
-
// Use discoverSocket() which respects cloud workspace config and env overrides.
|
|
38
|
-
// Only fall back to relayDir/relay.sock for non-cloud local development.
|
|
39
|
-
const discovery = discoverSocket();
|
|
40
|
-
const socketPath = options.socketPath || discovery?.socketPath || join(relayDir, 'relay.sock');
|
|
41
|
-
if (process.env.DEBUG || process.env.RELAY_DEBUG) {
|
|
42
|
-
console.debug('[hybrid-client] Socket path:', socketPath, 'source:', discovery?.source ?? 'fallback', 'isCloud:', discovery?.isCloud ?? false);
|
|
43
|
-
}
|
|
44
|
-
// Create socket client for queries only
|
|
45
|
-
let socketClient = null;
|
|
46
|
-
const getSocketClient = () => {
|
|
47
|
-
if (!socketClient) {
|
|
48
|
-
socketClient = createRelayClient({
|
|
49
|
-
agentName,
|
|
50
|
-
socketPath,
|
|
51
|
-
project,
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
return socketClient;
|
|
55
|
-
};
|
|
56
|
-
// File-based send (write to outbox)
|
|
57
|
-
const send = async (to, message, opts = {}) => {
|
|
58
|
-
let content = `TO: ${to}\n`;
|
|
59
|
-
if (opts.thread) {
|
|
60
|
-
content += `THREAD: ${opts.thread}\n`;
|
|
61
|
-
}
|
|
62
|
-
content += `\n${message}`;
|
|
63
|
-
const msgPath = join(outboxDir, 'msg');
|
|
64
|
-
writeFileSync(msgPath, content);
|
|
65
|
-
// NOTE: relay-pty (not daemon) watches for ->relay-file:msg trigger.
|
|
66
|
-
// The agent must output "->relay-file:msg" for relay-pty to process.
|
|
67
|
-
};
|
|
68
|
-
// File-based sendAndWait (for now, delegate to socket - can improve later)
|
|
69
|
-
const sendAndWait = async (to, message, opts = {}) => {
|
|
70
|
-
// For await responses, we still use socket since we need the response
|
|
71
|
-
// TODO: Implement file-based request/response pattern
|
|
72
|
-
return getSocketClient().sendAndWait(to, message, opts);
|
|
73
|
-
};
|
|
74
|
-
// File-based spawn
|
|
75
|
-
const spawn = async (opts) => {
|
|
76
|
-
let content = `KIND: spawn\n`;
|
|
77
|
-
content += `NAME: ${opts.name}\n`;
|
|
78
|
-
content += `CLI: ${opts.cli}\n`;
|
|
79
|
-
if (opts.model) {
|
|
80
|
-
content += `MODEL: ${opts.model}\n`;
|
|
81
|
-
}
|
|
82
|
-
if (opts.cwd) {
|
|
83
|
-
content += `CWD: ${opts.cwd}\n`;
|
|
84
|
-
}
|
|
85
|
-
content += `\n${opts.task}`;
|
|
86
|
-
const spawnPath = join(outboxDir, 'spawn');
|
|
87
|
-
writeFileSync(spawnPath, content);
|
|
88
|
-
return { success: true };
|
|
89
|
-
};
|
|
90
|
-
// File-based release
|
|
91
|
-
const release = async (name, reason) => {
|
|
92
|
-
let content = `KIND: release\n`;
|
|
93
|
-
content += `NAME: ${name}\n`;
|
|
94
|
-
if (reason) {
|
|
95
|
-
content += `\n${reason}`;
|
|
96
|
-
}
|
|
97
|
-
const releasePath = join(outboxDir, 'release');
|
|
98
|
-
writeFileSync(releasePath, content);
|
|
99
|
-
return { success: true };
|
|
100
|
-
};
|
|
101
|
-
// File-based continuity (NEW - not in original MCP)
|
|
102
|
-
const saveContinuity = async (state) => {
|
|
103
|
-
let content = `KIND: continuity\n`;
|
|
104
|
-
content += `ACTION: save\n\n`;
|
|
105
|
-
if (state.currentTask)
|
|
106
|
-
content += `Current task: ${state.currentTask}\n`;
|
|
107
|
-
if (state.completed)
|
|
108
|
-
content += `Completed: ${state.completed}\n`;
|
|
109
|
-
if (state.inProgress)
|
|
110
|
-
content += `In progress: ${state.inProgress}\n`;
|
|
111
|
-
if (state.keyDecisions)
|
|
112
|
-
content += `Key decisions: ${state.keyDecisions}\n`;
|
|
113
|
-
if (state.files)
|
|
114
|
-
content += `Files: ${state.files}\n`;
|
|
115
|
-
const continuityPath = join(outboxDir, 'continuity');
|
|
116
|
-
writeFileSync(continuityPath, content);
|
|
117
|
-
};
|
|
118
|
-
const loadContinuity = async () => {
|
|
119
|
-
const content = `KIND: continuity\nACTION: load\n`;
|
|
120
|
-
const continuityPath = join(outboxDir, 'continuity');
|
|
121
|
-
writeFileSync(continuityPath, content);
|
|
122
|
-
};
|
|
123
|
-
const markUncertain = async (item) => {
|
|
124
|
-
const content = `KIND: continuity\nACTION: uncertain\n\n${item}`;
|
|
125
|
-
const continuityPath = join(outboxDir, 'continuity');
|
|
126
|
-
writeFileSync(continuityPath, content);
|
|
127
|
-
};
|
|
128
|
-
// Socket-based queries (these work fine over socket)
|
|
129
|
-
const getStatus = async () => getSocketClient().getStatus();
|
|
130
|
-
const getInbox = async (opts) => getSocketClient().getInbox(opts);
|
|
131
|
-
const listAgents = async (opts) => getSocketClient().listAgents(opts);
|
|
132
|
-
const getHealth = async (opts) => getSocketClient().getHealth(opts);
|
|
133
|
-
const getMetrics = async (opts) => getSocketClient().getMetrics(opts);
|
|
134
|
-
return {
|
|
135
|
-
send,
|
|
136
|
-
sendAndWait,
|
|
137
|
-
spawn,
|
|
138
|
-
release,
|
|
139
|
-
getStatus,
|
|
140
|
-
getInbox,
|
|
141
|
-
listAgents,
|
|
142
|
-
getHealth,
|
|
143
|
-
getMetrics,
|
|
144
|
-
// Extended methods (not in base RelayClient interface but useful)
|
|
145
|
-
saveContinuity,
|
|
146
|
-
loadContinuity,
|
|
147
|
-
markUncertain,
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Discover project root from socket path or environment.
|
|
4
|
+
* Discover project root by locating a .agent-relay directory.
|
|
152
5
|
*/
|
|
153
6
|
export function discoverProjectRoot() {
|
|
154
|
-
// Check RELAY_SOCKET env var
|
|
155
7
|
const socketEnv = process.env.RELAY_SOCKET;
|
|
156
8
|
if (socketEnv) {
|
|
157
|
-
// Socket path is like /path/to/project/.agent-relay/relay.sock
|
|
158
9
|
const match = socketEnv.match(/^(.+)\/\.agent-relay\/relay\.sock$/);
|
|
159
10
|
if (match) {
|
|
160
11
|
return match[1];
|
|
161
12
|
}
|
|
162
13
|
}
|
|
163
|
-
// Search from cwd upward
|
|
164
14
|
let dir = process.cwd();
|
|
165
15
|
while (dir !== '/') {
|
|
166
16
|
if (existsSync(join(dir, '.agent-relay'))) {
|