@agent-relay/sdk 0.1.0
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/README.md +171 -0
- package/dist/client.d.ts +181 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +695 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol/framing.d.ts +80 -0
- package/dist/protocol/framing.d.ts.map +1 -0
- package/dist/protocol/framing.js +206 -0
- package/dist/protocol/framing.js.map +1 -0
- package/dist/protocol/index.d.ts +6 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +6 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/protocol/types.d.ts +341 -0
- package/dist/protocol/types.d.ts.map +1 -0
- package/dist/protocol/types.js +8 -0
- package/dist/protocol/types.js.map +1 -0
- package/dist/standalone.d.ts +87 -0
- package/dist/standalone.d.ts.map +1 -0
- package/dist/standalone.js +126 -0
- package/dist/standalone.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Relay Protocol Types
|
|
3
|
+
* @agent-relay/sdk
|
|
4
|
+
*
|
|
5
|
+
* These types define the wire protocol for agent-to-agent communication.
|
|
6
|
+
*/
|
|
7
|
+
export declare const PROTOCOL_VERSION = 1;
|
|
8
|
+
export type MessageType = 'HELLO' | 'WELCOME' | 'SEND' | 'DELIVER' | 'ACK' | 'NACK' | 'PING' | 'PONG' | 'ERROR' | 'BUSY' | 'RESUME' | 'BYE' | 'STATE' | 'SYNC' | 'SYNC_SNAPSHOT' | 'SYNC_DELTA' | 'SUBSCRIBE' | 'UNSUBSCRIBE' | 'SHADOW_BIND' | 'SHADOW_UNBIND' | 'LOG' | 'CHANNEL_JOIN' | 'CHANNEL_LEAVE' | 'CHANNEL_MESSAGE' | 'CHANNEL_INFO' | 'CHANNEL_MEMBERS' | 'CHANNEL_TYPING' | 'SPAWN' | 'SPAWN_RESULT' | 'RELEASE' | 'RELEASE_RESULT';
|
|
9
|
+
export type PayloadKind = 'message' | 'action' | 'state' | 'thinking';
|
|
10
|
+
/**
|
|
11
|
+
* Base envelope structure for all protocol messages.
|
|
12
|
+
*/
|
|
13
|
+
export interface Envelope<T = unknown> {
|
|
14
|
+
/** Protocol version */
|
|
15
|
+
v: number;
|
|
16
|
+
/** Message type */
|
|
17
|
+
type: MessageType;
|
|
18
|
+
/** Unique message ID */
|
|
19
|
+
id: string;
|
|
20
|
+
/** Timestamp (Unix ms) */
|
|
21
|
+
ts: number;
|
|
22
|
+
/** Sender name */
|
|
23
|
+
from?: string;
|
|
24
|
+
/** Recipient name or '*' for broadcast */
|
|
25
|
+
to?: string | '*';
|
|
26
|
+
/** Topic for pub/sub */
|
|
27
|
+
topic?: string;
|
|
28
|
+
/** Message payload */
|
|
29
|
+
payload: T;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Entity type distinguishes between AI agents and human users.
|
|
33
|
+
*/
|
|
34
|
+
export type EntityType = 'agent' | 'user';
|
|
35
|
+
export interface HelloPayload {
|
|
36
|
+
/** Agent name */
|
|
37
|
+
agent: string;
|
|
38
|
+
/** Client capabilities */
|
|
39
|
+
capabilities: {
|
|
40
|
+
ack: boolean;
|
|
41
|
+
resume: boolean;
|
|
42
|
+
max_inflight: number;
|
|
43
|
+
supports_topics: boolean;
|
|
44
|
+
};
|
|
45
|
+
/** Entity type: 'agent' (default) or 'user' */
|
|
46
|
+
entityType?: EntityType;
|
|
47
|
+
/** CLI identifier (claude, codex, gemini, etc.) */
|
|
48
|
+
cli?: string;
|
|
49
|
+
/** Program identifier */
|
|
50
|
+
program?: string;
|
|
51
|
+
/** Model identifier */
|
|
52
|
+
model?: string;
|
|
53
|
+
/** Task/role description */
|
|
54
|
+
task?: string;
|
|
55
|
+
/** Working directory */
|
|
56
|
+
workingDirectory?: string;
|
|
57
|
+
/** Display name for human users */
|
|
58
|
+
displayName?: string;
|
|
59
|
+
/** Avatar URL for human users */
|
|
60
|
+
avatarUrl?: string;
|
|
61
|
+
/** Session resume info */
|
|
62
|
+
session?: {
|
|
63
|
+
resume_token?: string;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export interface WelcomePayload {
|
|
67
|
+
/** Session ID assigned by server */
|
|
68
|
+
session_id: string;
|
|
69
|
+
/** Token for session resume */
|
|
70
|
+
resume_token?: string;
|
|
71
|
+
/** Server configuration */
|
|
72
|
+
server: {
|
|
73
|
+
max_frame_bytes: number;
|
|
74
|
+
heartbeat_ms: number;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export interface SendPayload {
|
|
78
|
+
/** Message type */
|
|
79
|
+
kind: PayloadKind;
|
|
80
|
+
/** Message body */
|
|
81
|
+
body: string;
|
|
82
|
+
/** Optional structured data */
|
|
83
|
+
data?: Record<string, unknown>;
|
|
84
|
+
/** Thread ID for grouping related messages */
|
|
85
|
+
thread?: string;
|
|
86
|
+
}
|
|
87
|
+
export interface SyncMeta {
|
|
88
|
+
/** Correlation ID for matching responses */
|
|
89
|
+
correlationId: string;
|
|
90
|
+
/** Timeout for blocking sends (ms) */
|
|
91
|
+
timeoutMs?: number;
|
|
92
|
+
/** Whether sender should block awaiting ACK */
|
|
93
|
+
blocking: boolean;
|
|
94
|
+
}
|
|
95
|
+
export interface SendMeta {
|
|
96
|
+
requires_ack?: boolean;
|
|
97
|
+
ttl_ms?: number;
|
|
98
|
+
/** Importance level (0-100, higher = more important) */
|
|
99
|
+
importance?: number;
|
|
100
|
+
/** Correlation ID for replies */
|
|
101
|
+
replyTo?: string;
|
|
102
|
+
/** Sync metadata for blocking sends */
|
|
103
|
+
sync?: SyncMeta;
|
|
104
|
+
}
|
|
105
|
+
export interface DeliveryInfo {
|
|
106
|
+
/** Delivery sequence number */
|
|
107
|
+
seq: number;
|
|
108
|
+
/** Session ID */
|
|
109
|
+
session_id: string;
|
|
110
|
+
/** Original 'to' field ('*' indicates broadcast) */
|
|
111
|
+
originalTo?: string;
|
|
112
|
+
}
|
|
113
|
+
export interface AckPayload {
|
|
114
|
+
/** ID of the message being acknowledged */
|
|
115
|
+
ack_id: string;
|
|
116
|
+
/** Sequence number */
|
|
117
|
+
seq: number;
|
|
118
|
+
/** Cumulative acknowledgment */
|
|
119
|
+
cumulative_seq?: number;
|
|
120
|
+
/** Selective acknowledgments */
|
|
121
|
+
sack?: number[];
|
|
122
|
+
/**
|
|
123
|
+
* Correlation ID for matching ACK to original blocking SEND.
|
|
124
|
+
* Set by daemon when forwarding ACK back to the sender.
|
|
125
|
+
*/
|
|
126
|
+
correlationId?: string;
|
|
127
|
+
/**
|
|
128
|
+
* Response status for sync messaging.
|
|
129
|
+
* Common values: 'OK', 'ERROR', 'ACCEPTED', 'REJECTED'.
|
|
130
|
+
* Allows richer status codes than a simple boolean.
|
|
131
|
+
*/
|
|
132
|
+
response?: string;
|
|
133
|
+
/**
|
|
134
|
+
* Optional structured response data.
|
|
135
|
+
* Can contain any additional information the responder wants to include.
|
|
136
|
+
*/
|
|
137
|
+
responseData?: unknown;
|
|
138
|
+
}
|
|
139
|
+
export interface NackPayload {
|
|
140
|
+
/** ID of the message being rejected */
|
|
141
|
+
ack_id: string;
|
|
142
|
+
/** Rejection code */
|
|
143
|
+
code?: 'BUSY' | 'INVALID' | 'FORBIDDEN' | 'STALE';
|
|
144
|
+
/** Legacy reason field */
|
|
145
|
+
reason?: 'busy' | 'invalid' | 'forbidden';
|
|
146
|
+
/** Human-readable message */
|
|
147
|
+
message?: string;
|
|
148
|
+
}
|
|
149
|
+
export interface BusyPayload {
|
|
150
|
+
/** Time before retry (ms) */
|
|
151
|
+
retry_after_ms: number;
|
|
152
|
+
/** Current queue depth */
|
|
153
|
+
queue_depth: number;
|
|
154
|
+
}
|
|
155
|
+
export interface PingPayload {
|
|
156
|
+
nonce: string;
|
|
157
|
+
}
|
|
158
|
+
export interface PongPayload {
|
|
159
|
+
nonce: string;
|
|
160
|
+
}
|
|
161
|
+
export type ErrorCode = 'BAD_REQUEST' | 'UNAUTHORIZED' | 'NOT_FOUND' | 'INTERNAL' | 'RESUME_TOO_OLD';
|
|
162
|
+
export interface ErrorPayload {
|
|
163
|
+
/** Error code */
|
|
164
|
+
code: ErrorCode;
|
|
165
|
+
/** Error message */
|
|
166
|
+
message: string;
|
|
167
|
+
/** Whether the error is fatal (connection should be closed) */
|
|
168
|
+
fatal: boolean;
|
|
169
|
+
}
|
|
170
|
+
export interface LogPayload {
|
|
171
|
+
/** Log/output data */
|
|
172
|
+
data: string;
|
|
173
|
+
/** Timestamp (defaults to envelope ts) */
|
|
174
|
+
timestamp?: number;
|
|
175
|
+
}
|
|
176
|
+
export interface SyncStream {
|
|
177
|
+
topic: string;
|
|
178
|
+
peer: string;
|
|
179
|
+
last_seq: number;
|
|
180
|
+
server_last_seq?: number;
|
|
181
|
+
}
|
|
182
|
+
export interface SyncPayload {
|
|
183
|
+
session_id: string;
|
|
184
|
+
streams: SyncStream[];
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Attachment metadata for messages.
|
|
188
|
+
*/
|
|
189
|
+
export interface MessageAttachment {
|
|
190
|
+
id: string;
|
|
191
|
+
filename: string;
|
|
192
|
+
mimeType: string;
|
|
193
|
+
size?: number;
|
|
194
|
+
url?: string;
|
|
195
|
+
data?: string;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Payload for CHANNEL_JOIN message.
|
|
199
|
+
*/
|
|
200
|
+
export interface ChannelJoinPayload {
|
|
201
|
+
/** Channel to join (e.g., '#general') */
|
|
202
|
+
channel: string;
|
|
203
|
+
/** Display name for the channel member list */
|
|
204
|
+
displayName?: string;
|
|
205
|
+
/** Avatar URL */
|
|
206
|
+
avatarUrl?: string;
|
|
207
|
+
/** Member name to add (for admin operations) */
|
|
208
|
+
member?: string;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Payload for CHANNEL_LEAVE message.
|
|
212
|
+
*/
|
|
213
|
+
export interface ChannelLeavePayload {
|
|
214
|
+
/** Channel to leave */
|
|
215
|
+
channel: string;
|
|
216
|
+
/** Reason for leaving */
|
|
217
|
+
reason?: string;
|
|
218
|
+
/** Member name to remove (for admin operations) */
|
|
219
|
+
member?: string;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Payload for CHANNEL_MESSAGE.
|
|
223
|
+
*/
|
|
224
|
+
export interface ChannelMessagePayload {
|
|
225
|
+
/** Target channel */
|
|
226
|
+
channel: string;
|
|
227
|
+
/** Message content */
|
|
228
|
+
body: string;
|
|
229
|
+
/** Thread ID for threaded replies */
|
|
230
|
+
thread?: string;
|
|
231
|
+
/** Mentioned usernames/agent names */
|
|
232
|
+
mentions?: string[];
|
|
233
|
+
/** File attachments */
|
|
234
|
+
attachments?: MessageAttachment[];
|
|
235
|
+
/** Optional structured data */
|
|
236
|
+
data?: Record<string, unknown>;
|
|
237
|
+
}
|
|
238
|
+
export type SpeakOnTrigger = 'SESSION_END' | 'CODE_WRITTEN' | 'REVIEW_REQUEST' | 'EXPLICIT_ASK' | 'ALL_MESSAGES';
|
|
239
|
+
export interface ShadowConfig {
|
|
240
|
+
/** Primary agent this shadow is attached to */
|
|
241
|
+
primaryAgent: string;
|
|
242
|
+
/** When the shadow should speak */
|
|
243
|
+
speakOn: SpeakOnTrigger[];
|
|
244
|
+
/** Receive messages TO the primary */
|
|
245
|
+
receiveIncoming?: boolean;
|
|
246
|
+
/** Receive messages FROM the primary */
|
|
247
|
+
receiveOutgoing?: boolean;
|
|
248
|
+
}
|
|
249
|
+
export interface ShadowBindPayload {
|
|
250
|
+
primaryAgent: string;
|
|
251
|
+
speakOn?: SpeakOnTrigger[];
|
|
252
|
+
receiveIncoming?: boolean;
|
|
253
|
+
receiveOutgoing?: boolean;
|
|
254
|
+
}
|
|
255
|
+
export interface ShadowUnbindPayload {
|
|
256
|
+
primaryAgent: string;
|
|
257
|
+
}
|
|
258
|
+
export interface SpawnPayload {
|
|
259
|
+
/** Name for the new agent */
|
|
260
|
+
name: string;
|
|
261
|
+
/** CLI to use (claude, codex, gemini, etc.) */
|
|
262
|
+
cli: string;
|
|
263
|
+
/** Task description */
|
|
264
|
+
task: string;
|
|
265
|
+
/** Team name */
|
|
266
|
+
team?: string;
|
|
267
|
+
/** Working directory */
|
|
268
|
+
cwd?: string;
|
|
269
|
+
/** Socket path for the spawned agent */
|
|
270
|
+
socketPath?: string;
|
|
271
|
+
/** Parent agent name */
|
|
272
|
+
spawnerName?: string;
|
|
273
|
+
/** Interactive mode */
|
|
274
|
+
interactive?: boolean;
|
|
275
|
+
/** Spawn as shadow of this agent */
|
|
276
|
+
shadowOf?: string;
|
|
277
|
+
/** Shadow speak-on triggers */
|
|
278
|
+
shadowSpeakOn?: SpeakOnTrigger[];
|
|
279
|
+
/** User ID for cloud persistence */
|
|
280
|
+
userId?: string;
|
|
281
|
+
}
|
|
282
|
+
export interface SpawnPolicyDecision {
|
|
283
|
+
allowed: boolean;
|
|
284
|
+
reason?: string;
|
|
285
|
+
quotaRemaining?: number;
|
|
286
|
+
}
|
|
287
|
+
export interface SpawnResultPayload {
|
|
288
|
+
/** Correlation ID (matches original SPAWN envelope ID) */
|
|
289
|
+
replyTo: string;
|
|
290
|
+
/** Whether spawn succeeded */
|
|
291
|
+
success: boolean;
|
|
292
|
+
/** Spawned agent name */
|
|
293
|
+
name: string;
|
|
294
|
+
/** Process ID (if successful) */
|
|
295
|
+
pid?: number;
|
|
296
|
+
/** Error message (if failed) */
|
|
297
|
+
error?: string;
|
|
298
|
+
/** Policy decision (if blocked) */
|
|
299
|
+
policyDecision?: SpawnPolicyDecision;
|
|
300
|
+
}
|
|
301
|
+
export interface ReleasePayload {
|
|
302
|
+
/** Agent name to release */
|
|
303
|
+
name: string;
|
|
304
|
+
}
|
|
305
|
+
export interface ReleaseResultPayload {
|
|
306
|
+
/** Correlation ID */
|
|
307
|
+
replyTo: string;
|
|
308
|
+
/** Whether release succeeded */
|
|
309
|
+
success: boolean;
|
|
310
|
+
/** Released agent name */
|
|
311
|
+
name: string;
|
|
312
|
+
/** Error message (if failed) */
|
|
313
|
+
error?: string;
|
|
314
|
+
}
|
|
315
|
+
export type HelloEnvelope = Envelope<HelloPayload>;
|
|
316
|
+
export type WelcomeEnvelope = Envelope<WelcomePayload>;
|
|
317
|
+
export type SendEnvelope = Envelope<SendPayload> & {
|
|
318
|
+
payload_meta?: SendMeta;
|
|
319
|
+
};
|
|
320
|
+
export type DeliverEnvelope = Envelope<SendPayload> & {
|
|
321
|
+
delivery: DeliveryInfo;
|
|
322
|
+
payload_meta?: SendMeta;
|
|
323
|
+
};
|
|
324
|
+
export type AckEnvelope = Envelope<AckPayload>;
|
|
325
|
+
export type NackEnvelope = Envelope<NackPayload>;
|
|
326
|
+
export type PingEnvelope = Envelope<PingPayload>;
|
|
327
|
+
export type PongEnvelope = Envelope<PongPayload>;
|
|
328
|
+
export type ErrorEnvelope = Envelope<ErrorPayload>;
|
|
329
|
+
export type BusyEnvelope = Envelope<BusyPayload>;
|
|
330
|
+
export type LogEnvelope = Envelope<LogPayload>;
|
|
331
|
+
export type ShadowBindEnvelope = Envelope<ShadowBindPayload>;
|
|
332
|
+
export type ShadowUnbindEnvelope = Envelope<ShadowUnbindPayload>;
|
|
333
|
+
export type SyncEnvelope = Envelope<SyncPayload>;
|
|
334
|
+
export type SpawnEnvelope = Envelope<SpawnPayload>;
|
|
335
|
+
export type SpawnResultEnvelope = Envelope<SpawnResultPayload>;
|
|
336
|
+
export type ReleaseEnvelope = Envelope<ReleasePayload>;
|
|
337
|
+
export type ReleaseResultEnvelope = Envelope<ReleaseResultPayload>;
|
|
338
|
+
export type ChannelJoinEnvelope = Envelope<ChannelJoinPayload>;
|
|
339
|
+
export type ChannelLeaveEnvelope = Envelope<ChannelLeavePayload>;
|
|
340
|
+
export type ChannelMessageEnvelope = Envelope<ChannelMessagePayload>;
|
|
341
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/protocol/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/protocol/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standalone Relay - Dead Simple Agent Communication
|
|
3
|
+
*
|
|
4
|
+
* Use Agent Relay as a pure communication layer without any external setup.
|
|
5
|
+
* Just import and go.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createRelay } from '@agent-relay/sdk/standalone';
|
|
10
|
+
*
|
|
11
|
+
* const relay = await createRelay();
|
|
12
|
+
*
|
|
13
|
+
* const alice = await relay.client('Alice');
|
|
14
|
+
* const bob = await relay.client('Bob');
|
|
15
|
+
*
|
|
16
|
+
* bob.onMessage = (from, { body }) => console.log(`${from}: ${body}`);
|
|
17
|
+
* alice.sendMessage('Bob', 'Hello!');
|
|
18
|
+
*
|
|
19
|
+
* await relay.stop();
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import { RelayClient, type ClientConfig } from './client.js';
|
|
23
|
+
export interface RelayConfig {
|
|
24
|
+
/** Socket path for IPC. Default: /tmp/agent-relay-standalone.sock */
|
|
25
|
+
socketPath?: string;
|
|
26
|
+
/** Suppress console logging. Default: true */
|
|
27
|
+
quiet?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface Relay {
|
|
30
|
+
/** Create a connected client for an agent */
|
|
31
|
+
client(name: string, config?: Partial<ClientConfig>): Promise<RelayClient>;
|
|
32
|
+
/** Stop the relay and disconnect all clients */
|
|
33
|
+
stop(): Promise<void>;
|
|
34
|
+
/** Check if relay is running */
|
|
35
|
+
readonly isRunning: boolean;
|
|
36
|
+
/** The socket path being used */
|
|
37
|
+
readonly socketPath: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create a standalone relay for pure agent-to-agent communication.
|
|
41
|
+
*
|
|
42
|
+
* This starts an in-process daemon - no external setup required.
|
|
43
|
+
* Perfect for using Agent Relay as just a communication layer.
|
|
44
|
+
*
|
|
45
|
+
* @example Basic Usage
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const relay = await createRelay();
|
|
48
|
+
*
|
|
49
|
+
* const agent1 = await relay.client('Agent1');
|
|
50
|
+
* const agent2 = await relay.client('Agent2');
|
|
51
|
+
*
|
|
52
|
+
* agent2.onMessage = (from, payload) => {
|
|
53
|
+
* console.log(`Message from ${from}: ${payload.body}`);
|
|
54
|
+
* };
|
|
55
|
+
*
|
|
56
|
+
* agent1.sendMessage('Agent2', 'Hello!');
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* @example With Custom Socket
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const relay = await createRelay({ socketPath: '/tmp/my-relay.sock' });
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare function createRelay(config?: RelayConfig): Promise<Relay>;
|
|
65
|
+
/**
|
|
66
|
+
* Quick helper to create two connected agents for simple communication.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const { alice, bob, stop } = await createPair('Alice', 'Bob');
|
|
71
|
+
*
|
|
72
|
+
* bob.onMessage = (from, { body }) => console.log(`${from}: ${body}`);
|
|
73
|
+
* alice.sendMessage('Bob', 'Hi there!');
|
|
74
|
+
*
|
|
75
|
+
* await stop();
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare function createPair(name1: string, name2: string, config?: RelayConfig): Promise<{
|
|
79
|
+
[K in typeof name1]: RelayClient;
|
|
80
|
+
} & {
|
|
81
|
+
[K in typeof name2]: RelayClient;
|
|
82
|
+
} & {
|
|
83
|
+
relay: Relay;
|
|
84
|
+
stop: () => Promise<void>;
|
|
85
|
+
}>;
|
|
86
|
+
export { RelayClient, type ClientConfig } from './client.js';
|
|
87
|
+
//# sourceMappingURL=standalone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAS7D,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,6CAA6C;IAC7C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3E,gDAAgD;IAChD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,gCAAgC;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,iCAAiC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAID;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,WAAW,CAAC,MAAM,GAAE,WAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,CA2D1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,WAAgB,GACvB,OAAO,CAAC;KACR,CAAC,IAAI,OAAO,KAAK,GAAG,WAAW;CACjC,GAAG;KACD,CAAC,IAAI,OAAO,KAAK,GAAG,WAAW;CACjC,GAAG;IACF,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,CAAC,CAWD;AAGD,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standalone Relay - Dead Simple Agent Communication
|
|
3
|
+
*
|
|
4
|
+
* Use Agent Relay as a pure communication layer without any external setup.
|
|
5
|
+
* Just import and go.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createRelay } from '@agent-relay/sdk/standalone';
|
|
10
|
+
*
|
|
11
|
+
* const relay = await createRelay();
|
|
12
|
+
*
|
|
13
|
+
* const alice = await relay.client('Alice');
|
|
14
|
+
* const bob = await relay.client('Bob');
|
|
15
|
+
*
|
|
16
|
+
* bob.onMessage = (from, { body }) => console.log(`${from}: ${body}`);
|
|
17
|
+
* alice.sendMessage('Bob', 'Hello!');
|
|
18
|
+
*
|
|
19
|
+
* await relay.stop();
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import { RelayClient } from './client.js';
|
|
23
|
+
const DEFAULT_SOCKET_PATH = '/tmp/agent-relay-standalone.sock';
|
|
24
|
+
/**
|
|
25
|
+
* Create a standalone relay for pure agent-to-agent communication.
|
|
26
|
+
*
|
|
27
|
+
* This starts an in-process daemon - no external setup required.
|
|
28
|
+
* Perfect for using Agent Relay as just a communication layer.
|
|
29
|
+
*
|
|
30
|
+
* @example Basic Usage
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const relay = await createRelay();
|
|
33
|
+
*
|
|
34
|
+
* const agent1 = await relay.client('Agent1');
|
|
35
|
+
* const agent2 = await relay.client('Agent2');
|
|
36
|
+
*
|
|
37
|
+
* agent2.onMessage = (from, payload) => {
|
|
38
|
+
* console.log(`Message from ${from}: ${payload.body}`);
|
|
39
|
+
* };
|
|
40
|
+
*
|
|
41
|
+
* agent1.sendMessage('Agent2', 'Hello!');
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @example With Custom Socket
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const relay = await createRelay({ socketPath: '/tmp/my-relay.sock' });
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export async function createRelay(config = {}) {
|
|
50
|
+
const socketPath = config.socketPath ?? DEFAULT_SOCKET_PATH;
|
|
51
|
+
const quiet = config.quiet ?? true;
|
|
52
|
+
// Lazy-load daemon to keep SDK lightweight for client-only users
|
|
53
|
+
let Daemon;
|
|
54
|
+
try {
|
|
55
|
+
const daemonModule = await import('@agent-relay/daemon');
|
|
56
|
+
Daemon = daemonModule.Daemon;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
throw new Error('To use standalone relay, install @agent-relay/daemon:\n' +
|
|
60
|
+
' npm install @agent-relay/daemon\n\n' +
|
|
61
|
+
'Or if you have an external daemon running, use RelayClient directly.');
|
|
62
|
+
}
|
|
63
|
+
const daemon = new Daemon({
|
|
64
|
+
socketPath,
|
|
65
|
+
consensus: false, // Minimal mode - just messaging
|
|
66
|
+
cloudSync: false, // No cloud features
|
|
67
|
+
});
|
|
68
|
+
await daemon.start();
|
|
69
|
+
const clients = [];
|
|
70
|
+
return {
|
|
71
|
+
async client(name, clientConfig = {}) {
|
|
72
|
+
const client = new RelayClient({
|
|
73
|
+
agentName: name,
|
|
74
|
+
socketPath,
|
|
75
|
+
quiet,
|
|
76
|
+
reconnect: true,
|
|
77
|
+
...clientConfig,
|
|
78
|
+
});
|
|
79
|
+
await client.connect();
|
|
80
|
+
clients.push(client);
|
|
81
|
+
return client;
|
|
82
|
+
},
|
|
83
|
+
async stop() {
|
|
84
|
+
// Disconnect all clients first
|
|
85
|
+
for (const client of clients) {
|
|
86
|
+
client.destroy();
|
|
87
|
+
}
|
|
88
|
+
clients.length = 0;
|
|
89
|
+
// Stop the daemon
|
|
90
|
+
await daemon.stop();
|
|
91
|
+
},
|
|
92
|
+
get isRunning() {
|
|
93
|
+
return daemon.isRunning;
|
|
94
|
+
},
|
|
95
|
+
get socketPath() {
|
|
96
|
+
return socketPath;
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Quick helper to create two connected agents for simple communication.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```typescript
|
|
105
|
+
* const { alice, bob, stop } = await createPair('Alice', 'Bob');
|
|
106
|
+
*
|
|
107
|
+
* bob.onMessage = (from, { body }) => console.log(`${from}: ${body}`);
|
|
108
|
+
* alice.sendMessage('Bob', 'Hi there!');
|
|
109
|
+
*
|
|
110
|
+
* await stop();
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
export async function createPair(name1, name2, config = {}) {
|
|
114
|
+
const relay = await createRelay(config);
|
|
115
|
+
const client1 = await relay.client(name1);
|
|
116
|
+
const client2 = await relay.client(name2);
|
|
117
|
+
return {
|
|
118
|
+
[name1]: client1,
|
|
119
|
+
[name2]: client2,
|
|
120
|
+
relay,
|
|
121
|
+
stop: () => relay.stop(),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Re-export client for convenience
|
|
125
|
+
export { RelayClient } from './client.js';
|
|
126
|
+
//# sourceMappingURL=standalone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,WAAW,EAAqB,MAAM,aAAa,CAAC;AA2B7D,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAsB,EAAE;IACxD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;IAEnC,iEAAiE;IACjE,IAAI,MAA2D,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACzD,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,yDAAyD;YACzD,uCAAuC;YACvC,sEAAsE,CACvE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,UAAU;QACV,SAAS,EAAE,KAAK,EAAE,gCAAgC;QAClD,SAAS,EAAE,KAAK,EAAE,oBAAoB;KACvC,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,eAAsC,EAAE;YACjE,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC;gBAC7B,SAAS,EAAE,IAAI;gBACf,UAAU;gBACV,KAAK;gBACL,SAAS,EAAE,IAAI;gBACf,GAAG,YAAY;aAChB,CAAC,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,CAAC,IAAI;YACR,+BAA+B;YAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;YACD,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACnB,kBAAkB;YAClB,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QAED,IAAI,SAAS;YACX,OAAO,MAAM,CAAC,SAAS,CAAC;QAC1B,CAAC;QAED,IAAI,UAAU;YACZ,OAAO,UAAU,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAa,EACb,KAAa,EACb,SAAsB,EAAE;IASxB,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE1C,OAAO;QACL,CAAC,KAAK,CAAC,EAAE,OAAO;QAChB,CAAC,KAAK,CAAC,EAAE,OAAO;QAChB,KAAK;QACL,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE;KAClB,CAAC;AACX,CAAC;AAED,mCAAmC;AACnC,OAAO,EAAE,WAAW,EAAqB,MAAM,aAAa,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@agent-relay/sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Lightweight SDK for agent-to-agent communication via Agent Relay",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./standalone": {
|
|
14
|
+
"types": "./dist/standalone.d.ts",
|
|
15
|
+
"import": "./dist/standalone.js",
|
|
16
|
+
"default": "./dist/standalone.js"
|
|
17
|
+
},
|
|
18
|
+
"./protocol": {
|
|
19
|
+
"types": "./dist/protocol/index.d.ts",
|
|
20
|
+
"import": "./dist/protocol/index.js",
|
|
21
|
+
"default": "./dist/protocol/index.js"
|
|
22
|
+
},
|
|
23
|
+
"./client": {
|
|
24
|
+
"types": "./dist/client.d.ts",
|
|
25
|
+
"import": "./dist/client.js",
|
|
26
|
+
"default": "./dist/client.js"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist",
|
|
31
|
+
"README.md"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsc",
|
|
35
|
+
"clean": "rm -rf dist",
|
|
36
|
+
"test": "vitest run",
|
|
37
|
+
"test:watch": "vitest",
|
|
38
|
+
"prepublishOnly": "npm run build"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"agent-relay",
|
|
42
|
+
"agent",
|
|
43
|
+
"ai",
|
|
44
|
+
"communication",
|
|
45
|
+
"sdk"
|
|
46
|
+
],
|
|
47
|
+
"author": "Khaliq Gant",
|
|
48
|
+
"license": "MIT",
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "git+https://github.com/AgentWorkforce/relay.git",
|
|
52
|
+
"directory": "packages/sdk"
|
|
53
|
+
},
|
|
54
|
+
"publishConfig": {
|
|
55
|
+
"access": "public"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"@agent-relay/protocol": "^0.1.2"
|
|
59
|
+
},
|
|
60
|
+
"engines": {
|
|
61
|
+
"node": ">=18.0.0"
|
|
62
|
+
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"@agent-relay/daemon": "^0.1.0"
|
|
65
|
+
},
|
|
66
|
+
"peerDependenciesMeta": {
|
|
67
|
+
"@agent-relay/daemon": {
|
|
68
|
+
"optional": true
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"optionalDependencies": {
|
|
72
|
+
"@msgpack/msgpack": "^3.0.0"
|
|
73
|
+
},
|
|
74
|
+
"devDependencies": {
|
|
75
|
+
"@agent-relay/daemon": "^0.1.0",
|
|
76
|
+
"@types/node": "^22.19.3",
|
|
77
|
+
"typescript": "^5.9.3",
|
|
78
|
+
"vitest": "^3.0.0"
|
|
79
|
+
}
|
|
80
|
+
}
|