@agent-relay/harness-driver 7.1.1

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 (50) hide show
  1. package/README.md +9 -0
  2. package/dist/actions.d.ts +10 -0
  3. package/dist/actions.d.ts.map +1 -0
  4. package/dist/actions.js +140 -0
  5. package/dist/actions.js.map +1 -0
  6. package/dist/broker-driver.d.ts +17 -0
  7. package/dist/broker-driver.d.ts.map +1 -0
  8. package/dist/broker-driver.js +56 -0
  9. package/dist/broker-driver.js.map +1 -0
  10. package/dist/broker-path.d.ts +31 -0
  11. package/dist/broker-path.d.ts.map +1 -0
  12. package/dist/broker-path.js +216 -0
  13. package/dist/broker-path.js.map +1 -0
  14. package/dist/client.d.ts +293 -0
  15. package/dist/client.d.ts.map +1 -0
  16. package/dist/client.js +892 -0
  17. package/dist/client.js.map +1 -0
  18. package/dist/driver-types.d.ts +43 -0
  19. package/dist/driver-types.d.ts.map +1 -0
  20. package/dist/driver-types.js +2 -0
  21. package/dist/driver-types.js.map +1 -0
  22. package/dist/event-bus.d.ts +57 -0
  23. package/dist/event-bus.d.ts.map +1 -0
  24. package/dist/event-bus.js +76 -0
  25. package/dist/event-bus.js.map +1 -0
  26. package/dist/harness.d.ts +82 -0
  27. package/dist/harness.d.ts.map +1 -0
  28. package/dist/harness.js +96 -0
  29. package/dist/harness.js.map +1 -0
  30. package/dist/index.d.ts +10 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +10 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/lifecycle-hooks.d.ts +166 -0
  35. package/dist/lifecycle-hooks.d.ts.map +1 -0
  36. package/dist/lifecycle-hooks.js +25 -0
  37. package/dist/lifecycle-hooks.js.map +1 -0
  38. package/dist/protocol.d.ts +527 -0
  39. package/dist/protocol.d.ts.map +1 -0
  40. package/dist/protocol.js +2 -0
  41. package/dist/protocol.js.map +1 -0
  42. package/dist/transport.d.ts +104 -0
  43. package/dist/transport.d.ts.map +1 -0
  44. package/dist/transport.js +520 -0
  45. package/dist/transport.js.map +1 -0
  46. package/dist/types.d.ts +120 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +5 -0
  49. package/dist/types.js.map +1 -0
  50. package/package.json +71 -0
@@ -0,0 +1,520 @@
1
+ /**
2
+ * BrokerTransport — HTTP/WS transport layer for communicating with the
3
+ * agent-relay broker. Used internally by HarnessDriverClient.
4
+ *
5
+ * Handles:
6
+ * - HTTP requests with API key auth and structured error parsing
7
+ * - WebSocket connection for real-time event streaming
8
+ * - Event buffering, replay, and query (mirrors stdio client behavior)
9
+ */
10
+ import WebSocket from 'ws';
11
+ export class HarnessDriverProtocolError extends Error {
12
+ code;
13
+ retryable;
14
+ status;
15
+ data;
16
+ constructor(payload) {
17
+ super(payload.message);
18
+ this.name = 'HarnessDriverProtocolError';
19
+ this.code = payload.code;
20
+ this.retryable = payload.retryable ?? false;
21
+ this.status = payload.status;
22
+ this.data = payload.data;
23
+ }
24
+ }
25
+ const DEFAULT_INPUT_HIGH_WATER_MARK_BYTES = 1024 * 1024;
26
+ const DEFAULT_INPUT_OPEN_TIMEOUT_MS = 10_000;
27
+ export class PtyInputStream {
28
+ ws;
29
+ queue = [];
30
+ highWaterMarkBytes;
31
+ openPromise;
32
+ openResolve;
33
+ openReject;
34
+ openTimer = null;
35
+ inFlight = null;
36
+ bufferedBytes = 0;
37
+ opened = false;
38
+ _closed = false;
39
+ flushing = false;
40
+ constructor(options) {
41
+ this.highWaterMarkBytes = normalizePositiveIntegerOption(options.highWaterMarkBytes, DEFAULT_INPUT_HIGH_WATER_MARK_BYTES, 'highWaterMarkBytes');
42
+ const openTimeoutMs = normalizePositiveIntegerOption(options.openTimeoutMs, DEFAULT_INPUT_OPEN_TIMEOUT_MS, 'openTimeoutMs');
43
+ this.openPromise = new Promise((resolve, reject) => {
44
+ this.openResolve = resolve;
45
+ this.openReject = reject;
46
+ });
47
+ this.openPromise.catch(() => undefined);
48
+ const headers = {};
49
+ if (options.apiKey) {
50
+ headers['X-API-Key'] = options.apiKey;
51
+ }
52
+ this.ws = new WebSocket(options.url, { headers });
53
+ this.openTimer = setTimeout(() => {
54
+ const error = new HarnessDriverProtocolError({
55
+ code: 'input_stream_open_timeout',
56
+ message: 'timed out opening PTY input stream',
57
+ retryable: true,
58
+ });
59
+ this.rejectOpen(error);
60
+ this.failAll(error);
61
+ this.close();
62
+ }, openTimeoutMs);
63
+ this.ws.on('open', () => {
64
+ // The broker sends pty_input_ready after it verifies the agent exists
65
+ // and is PTY-backed. Keep queued writes blocked until that handshake.
66
+ });
67
+ this.ws.on('message', (data) => {
68
+ this.handleMessage(data);
69
+ });
70
+ this.ws.on('close', (code, reason) => {
71
+ this._closed = true;
72
+ this.clearOpenTimer();
73
+ const detail = reason.length > 0 ? `: ${reason.toString()}` : '';
74
+ const error = new HarnessDriverProtocolError({
75
+ code: 'input_stream_closed',
76
+ message: `PTY input stream closed (${code})${detail}`,
77
+ retryable: false,
78
+ });
79
+ this.rejectOpen(error);
80
+ this.failAll(error);
81
+ });
82
+ this.ws.on('error', (cause) => {
83
+ const error = new HarnessDriverProtocolError({
84
+ code: 'input_stream_error',
85
+ message: cause instanceof Error ? cause.message : 'PTY input stream failed',
86
+ retryable: true,
87
+ data: cause,
88
+ });
89
+ this.rejectOpen(error);
90
+ this.failAll(error);
91
+ });
92
+ }
93
+ get closed() {
94
+ return this._closed;
95
+ }
96
+ get bufferedAmountBytes() {
97
+ return this.bufferedBytes;
98
+ }
99
+ waitUntilOpen() {
100
+ return this.openPromise;
101
+ }
102
+ send(data) {
103
+ if (this._closed) {
104
+ return Promise.reject(new HarnessDriverProtocolError({
105
+ code: 'input_stream_closed',
106
+ message: 'PTY input stream is closed',
107
+ retryable: false,
108
+ }));
109
+ }
110
+ const bytes = Buffer.byteLength(data, 'utf8');
111
+ if (this.bufferedBytes + bytes > this.highWaterMarkBytes) {
112
+ return Promise.reject(new HarnessDriverProtocolError({
113
+ code: 'input_backpressure',
114
+ message: `PTY input stream buffered ${this.bufferedBytes} bytes; refusing ${bytes} more over high water mark ${this.highWaterMarkBytes}`,
115
+ retryable: true,
116
+ }));
117
+ }
118
+ return new Promise((resolve, reject) => {
119
+ const pending = {
120
+ data,
121
+ bytes,
122
+ resolve,
123
+ reject,
124
+ settled: false,
125
+ };
126
+ this.queue.push(pending);
127
+ this.bufferedBytes += bytes;
128
+ this.flush();
129
+ });
130
+ }
131
+ close(code, reason) {
132
+ if (this._closed)
133
+ return;
134
+ this._closed = true;
135
+ this.clearOpenTimer();
136
+ if (this.ws.readyState === WebSocket.OPEN || this.ws.readyState === WebSocket.CONNECTING) {
137
+ this.ws.close(code, reason);
138
+ }
139
+ const error = new HarnessDriverProtocolError({
140
+ code: 'input_stream_closed',
141
+ message: 'PTY input stream closed',
142
+ retryable: false,
143
+ });
144
+ this.rejectOpen(error);
145
+ this.failAll(error);
146
+ }
147
+ async flush() {
148
+ if (this.flushing || this.inFlight || this.queue.length === 0 || this._closed) {
149
+ return;
150
+ }
151
+ this.flushing = true;
152
+ try {
153
+ await this.openPromise;
154
+ }
155
+ catch (error) {
156
+ this.failAll(asError(error));
157
+ return;
158
+ }
159
+ finally {
160
+ this.flushing = false;
161
+ }
162
+ if (this.inFlight || this.queue.length === 0 || this._closed) {
163
+ return;
164
+ }
165
+ const next = this.queue.shift();
166
+ if (!next)
167
+ return;
168
+ this.inFlight = next;
169
+ this.ws.send(next.data, (error) => {
170
+ if (!error)
171
+ return;
172
+ if (this.inFlight === next) {
173
+ this.inFlight = null;
174
+ }
175
+ const protocolError = new HarnessDriverProtocolError({
176
+ code: 'input_stream_send_failed',
177
+ message: error.message,
178
+ retryable: true,
179
+ data: error,
180
+ });
181
+ this.settle(next, protocolError);
182
+ this.failAll(protocolError);
183
+ });
184
+ }
185
+ handleMessage(data) {
186
+ let payload;
187
+ try {
188
+ payload = JSON.parse(rawDataToString(data));
189
+ }
190
+ catch {
191
+ return;
192
+ }
193
+ if (!payload || typeof payload !== 'object') {
194
+ return;
195
+ }
196
+ const message = payload;
197
+ const type = typeof message.type === 'string' ? message.type : undefined;
198
+ if (type === 'pty_input_ready') {
199
+ this.opened = true;
200
+ this.clearOpenTimer();
201
+ this.openResolve?.();
202
+ this.flush();
203
+ return;
204
+ }
205
+ if (type === 'pty_input_ack') {
206
+ const current = this.inFlight;
207
+ if (!current)
208
+ return;
209
+ this.inFlight = null;
210
+ this.settle(current, {
211
+ name: typeof message.name === 'string' ? message.name : '',
212
+ bytes_written: typeof message.bytes_written === 'number' ? message.bytes_written : current.bytes,
213
+ });
214
+ this.flush();
215
+ return;
216
+ }
217
+ if (type === 'pty_input_error' || type === 'error') {
218
+ const error = new HarnessDriverProtocolError({
219
+ code: typeof message.code === 'string' ? message.code : 'input_stream_error',
220
+ message: typeof message.message === 'string' ? message.message : 'PTY input stream failed',
221
+ retryable: Boolean(message.retryable),
222
+ status: typeof message.statusCode === 'number' ? message.statusCode : undefined,
223
+ data: message,
224
+ });
225
+ this.rejectOpen(error);
226
+ this.failAll(error);
227
+ this.close();
228
+ }
229
+ }
230
+ settle(item, result) {
231
+ if (item.settled)
232
+ return;
233
+ item.settled = true;
234
+ this.bufferedBytes = Math.max(0, this.bufferedBytes - item.bytes);
235
+ if (result instanceof Error) {
236
+ item.reject(result);
237
+ }
238
+ else {
239
+ item.resolve(result);
240
+ }
241
+ }
242
+ failAll(error) {
243
+ if (this.inFlight) {
244
+ this.settle(this.inFlight, error);
245
+ this.inFlight = null;
246
+ }
247
+ while (this.queue.length > 0) {
248
+ const item = this.queue.shift();
249
+ if (item)
250
+ this.settle(item, error);
251
+ }
252
+ }
253
+ rejectOpen(error) {
254
+ if (!this.opened) {
255
+ this.openReject?.(error);
256
+ }
257
+ }
258
+ clearOpenTimer() {
259
+ if (this.openTimer) {
260
+ clearTimeout(this.openTimer);
261
+ this.openTimer = null;
262
+ }
263
+ }
264
+ }
265
+ function asError(error) {
266
+ return error instanceof Error ? error : new Error(String(error));
267
+ }
268
+ function normalizePositiveIntegerOption(value, fallback, name) {
269
+ const resolved = value ?? fallback;
270
+ if (!Number.isFinite(resolved) || resolved <= 0) {
271
+ throw new HarnessDriverProtocolError({
272
+ code: 'invalid_input_stream_options',
273
+ message: `${name} must be a finite number greater than 0`,
274
+ retryable: false,
275
+ });
276
+ }
277
+ return Math.floor(resolved);
278
+ }
279
+ function rawDataToString(data) {
280
+ if (Array.isArray(data)) {
281
+ return Buffer.concat(data).toString('utf8');
282
+ }
283
+ if (data instanceof ArrayBuffer) {
284
+ return Buffer.from(new Uint8Array(data)).toString('utf8');
285
+ }
286
+ return Buffer.from(data).toString('utf8');
287
+ }
288
+ export class BrokerTransport {
289
+ baseUrl;
290
+ apiKey;
291
+ fetchFn;
292
+ requestTimeoutMs;
293
+ maxBufferSize;
294
+ ws = null;
295
+ eventListeners = new Set();
296
+ eventBuffer = [];
297
+ reconnectTimer = null;
298
+ sinceSeq = 0;
299
+ _connected = false;
300
+ _intentionalClose = false;
301
+ constructor(options) {
302
+ this.baseUrl = options.baseUrl.replace(/\/$/, '');
303
+ this.apiKey = options.apiKey;
304
+ this.fetchFn = options.fetch ?? fetch;
305
+ this.requestTimeoutMs = options.requestTimeoutMs ?? 30_000;
306
+ this.maxBufferSize = options.maxBufferSize ?? 1000;
307
+ }
308
+ get connected() {
309
+ return this._connected;
310
+ }
311
+ get wsUrl() {
312
+ return this.baseUrl.replace(/^http/, 'ws') + '/ws';
313
+ }
314
+ inputStreamUrl(name) {
315
+ return `${this.baseUrl.replace(/^http/, 'ws')}/api/input/${encodeURIComponent(name)}/stream`;
316
+ }
317
+ // ── HTTP ─────────────────────────────────────────────────────────────
318
+ async request(path, init) {
319
+ const headers = headersToRecord(init?.headers);
320
+ if (init?.body !== undefined && !hasHeader(headers, 'Content-Type')) {
321
+ headers['Content-Type'] = 'application/json';
322
+ }
323
+ if (this.apiKey) {
324
+ setHeader(headers, 'X-API-Key', this.apiKey);
325
+ }
326
+ const signal = init?.signal ?? AbortSignal.timeout(this.requestTimeoutMs);
327
+ const res = await this.fetchFn(`${this.baseUrl}${path}`, { ...init, headers, signal });
328
+ if (!res.ok) {
329
+ let body;
330
+ try {
331
+ body = (await res.json());
332
+ }
333
+ catch {
334
+ // non-JSON error
335
+ }
336
+ throw new HarnessDriverProtocolError({
337
+ code: body?.code ?? `http_${res.status}`,
338
+ message: (body?.message ?? body?.error ?? res.statusText) || `HTTP ${res.status}`,
339
+ retryable: res.status >= 500,
340
+ status: res.status,
341
+ data: body,
342
+ });
343
+ }
344
+ if (isEmptySuccessResponse(res)) {
345
+ return undefined;
346
+ }
347
+ const bodyText = await res.text();
348
+ if (bodyText.length === 0) {
349
+ return undefined;
350
+ }
351
+ try {
352
+ return JSON.parse(bodyText);
353
+ }
354
+ catch {
355
+ throw new HarnessDriverProtocolError({
356
+ code: 'invalid_response',
357
+ message: 'response was not JSON',
358
+ retryable: false,
359
+ status: res.status,
360
+ });
361
+ }
362
+ }
363
+ // ── WebSocket events ─────────────────────────────────────────────────
364
+ connect(sinceSeq) {
365
+ if (this.ws)
366
+ return;
367
+ // Clear any pending reconnect timer to avoid duplicate connections
368
+ if (this.reconnectTimer) {
369
+ clearTimeout(this.reconnectTimer);
370
+ this.reconnectTimer = null;
371
+ }
372
+ this.sinceSeq = sinceSeq ?? this.sinceSeq;
373
+ this._connect();
374
+ }
375
+ _connect() {
376
+ this._intentionalClose = false;
377
+ const url = `${this.wsUrl}?sinceSeq=${this.sinceSeq}`;
378
+ const headers = {};
379
+ if (this.apiKey) {
380
+ headers['X-API-Key'] = this.apiKey;
381
+ }
382
+ this.ws = new WebSocket(url, { headers });
383
+ this.ws.on('open', () => {
384
+ this._connected = true;
385
+ if (this.reconnectTimer) {
386
+ clearTimeout(this.reconnectTimer);
387
+ this.reconnectTimer = null;
388
+ }
389
+ });
390
+ this.ws.on('message', (data) => {
391
+ try {
392
+ const event = JSON.parse(data.toString());
393
+ // Track sequence for replay on reconnect
394
+ if (typeof event.seq === 'number' && event.seq > this.sinceSeq) {
395
+ this.sinceSeq = event.seq;
396
+ }
397
+ // Buffer the event
398
+ this.eventBuffer.push(event);
399
+ if (this.eventBuffer.length > this.maxBufferSize) {
400
+ this.eventBuffer = this.eventBuffer.slice(-this.maxBufferSize);
401
+ }
402
+ // Notify listeners
403
+ for (const listener of this.eventListeners) {
404
+ try {
405
+ listener(event);
406
+ }
407
+ catch {
408
+ // don't let a bad listener break the stream
409
+ }
410
+ }
411
+ }
412
+ catch {
413
+ // ignore non-JSON frames (ping/pong)
414
+ }
415
+ });
416
+ this.ws.on('close', () => {
417
+ this._connected = false;
418
+ this.ws = null;
419
+ // Auto-reconnect after 2s unless intentionally closed
420
+ if (!this._intentionalClose) {
421
+ this.reconnectTimer = setTimeout(() => this._connect(), 2000);
422
+ }
423
+ });
424
+ this.ws.on('error', () => {
425
+ // error always followed by close
426
+ });
427
+ }
428
+ disconnect() {
429
+ this._intentionalClose = true;
430
+ if (this.reconnectTimer) {
431
+ clearTimeout(this.reconnectTimer);
432
+ this.reconnectTimer = null;
433
+ }
434
+ if (this.ws) {
435
+ this.ws.close();
436
+ this.ws = null;
437
+ }
438
+ this._connected = false;
439
+ }
440
+ openInputStream(name, options) {
441
+ return new PtyInputStream({
442
+ url: this.inputStreamUrl(name),
443
+ apiKey: this.apiKey,
444
+ ...options,
445
+ });
446
+ }
447
+ onEvent(listener) {
448
+ this.eventListeners.add(listener);
449
+ return () => {
450
+ this.eventListeners.delete(listener);
451
+ };
452
+ }
453
+ queryEvents(filter) {
454
+ let events = [...this.eventBuffer];
455
+ if (filter?.kind) {
456
+ events = events.filter((e) => e.kind === filter.kind);
457
+ }
458
+ if (filter?.name) {
459
+ events = events.filter((e) => 'name' in e && e.name === filter.name);
460
+ }
461
+ if (filter?.since !== undefined) {
462
+ const since = filter.since;
463
+ events = events.filter((e) => 'timestamp' in e && typeof e.timestamp === 'number' && e.timestamp >= since);
464
+ }
465
+ if (filter?.limit !== undefined) {
466
+ events = events.slice(-filter.limit);
467
+ }
468
+ return events;
469
+ }
470
+ getLastEvent(kind, name) {
471
+ for (let i = this.eventBuffer.length - 1; i >= 0; i -= 1) {
472
+ const event = this.eventBuffer[i];
473
+ if (event.kind === kind && (!name || ('name' in event && event.name === name))) {
474
+ return event;
475
+ }
476
+ }
477
+ return undefined;
478
+ }
479
+ }
480
+ function headersToRecord(headersInit) {
481
+ const headers = {};
482
+ if (!headersInit)
483
+ return headers;
484
+ if (headersInit instanceof Headers) {
485
+ headersInit.forEach((value, key) => {
486
+ headers[key] = value;
487
+ });
488
+ return headers;
489
+ }
490
+ if (Array.isArray(headersInit)) {
491
+ for (const [key, value] of headersInit) {
492
+ headers[key] = value;
493
+ }
494
+ return headers;
495
+ }
496
+ for (const [key, value] of Object.entries(headersInit)) {
497
+ headers[key] = value;
498
+ }
499
+ return headers;
500
+ }
501
+ function hasHeader(headers, name) {
502
+ const lowerName = name.toLowerCase();
503
+ return Object.keys(headers).some((key) => key.toLowerCase() === lowerName);
504
+ }
505
+ function setHeader(headers, name, value) {
506
+ const lowerName = name.toLowerCase();
507
+ for (const key of Object.keys(headers)) {
508
+ if (key.toLowerCase() === lowerName && key !== name) {
509
+ delete headers[key];
510
+ }
511
+ }
512
+ headers[name] = value;
513
+ }
514
+ function isEmptySuccessResponse(res) {
515
+ if (res.status === 204 || res.status === 205) {
516
+ return true;
517
+ }
518
+ return res.headers.get('content-length')?.trim() === '0';
519
+ }
520
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Shared input/output types for the broker SDK.
3
+ */
4
+ import type { AgentCurrentState, AgentRuntime, HeadlessProvider, MessageInjectionMode, RestartPolicy } from './protocol.js';
5
+ import type { ResolvedHarnessConfig } from './harness.js';
6
+ export type JsonSchema = Record<string, unknown> | boolean;
7
+ export interface SpawnPtyInput {
8
+ name: string;
9
+ cli: string;
10
+ args?: string[];
11
+ channels?: string[];
12
+ task?: string;
13
+ model?: string;
14
+ cwd?: string;
15
+ team?: string;
16
+ shadowOf?: string;
17
+ shadowMode?: string;
18
+ idleThresholdSecs?: number;
19
+ restartPolicy?: RestartPolicy;
20
+ continueFrom?: string;
21
+ harnessConfig?: ResolvedHarnessConfig;
22
+ skipRelayPrompt?: boolean;
23
+ agentResultSchema?: JsonSchema;
24
+ /** Optional pre-minted relaycast agent token (`at_live_<hex>`, from
25
+ * Relaycast agent registration). The
26
+ * broker plumbs this as `RELAY_AGENT_TOKEN`, which the relaycast MCP
27
+ * authenticates with. When omitted, the relaycast MCP auto-mints a token
28
+ * using `RELAY_WORKSPACE_KEY` + the spawn name; that is the recommended path.
29
+ * Note: this is a relaycast credential, NOT a relayfile/relayauth token —
30
+ * override `env.RELAYFILE_TOKEN` on the constructor for relayfile auth. */
31
+ agentToken?: string;
32
+ }
33
+ export interface SpawnHeadlessInput {
34
+ name: string;
35
+ cli: string;
36
+ args?: string[];
37
+ channels?: string[];
38
+ task?: string;
39
+ model?: string;
40
+ cwd?: string;
41
+ team?: string;
42
+ shadowOf?: string;
43
+ shadowMode?: string;
44
+ idleThresholdSecs?: number;
45
+ restartPolicy?: RestartPolicy;
46
+ continueFrom?: string;
47
+ harnessConfig?: ResolvedHarnessConfig;
48
+ skipRelayPrompt?: boolean;
49
+ agentResultSchema?: JsonSchema;
50
+ /** Optional pre-minted relaycast agent token (`at_live_<hex>`, from
51
+ * Relaycast agent registration). The
52
+ * broker plumbs this as `RELAY_AGENT_TOKEN`, which the relaycast MCP
53
+ * authenticates with. When omitted, the relaycast MCP auto-mints a token
54
+ * using `RELAY_WORKSPACE_KEY` + the spawn name; that is the recommended path.
55
+ * Note: this is a relaycast credential, NOT a relayfile/relayauth token —
56
+ * override `env.RELAYFILE_TOKEN` on the constructor for relayfile auth. */
57
+ agentToken?: string;
58
+ }
59
+ export type AgentTransport = 'pty' | 'headless';
60
+ export interface SpawnAgentResult {
61
+ name: string;
62
+ runtime: AgentRuntime;
63
+ sessionId?: string;
64
+ pid?: number;
65
+ }
66
+ export interface SpawnCliInput {
67
+ name: string;
68
+ cli: string;
69
+ transport?: AgentTransport;
70
+ args?: string[];
71
+ channels?: string[];
72
+ task?: string;
73
+ model?: string;
74
+ cwd?: string;
75
+ team?: string;
76
+ shadowOf?: string;
77
+ shadowMode?: string;
78
+ idleThresholdSecs?: number;
79
+ restartPolicy?: RestartPolicy;
80
+ continueFrom?: string;
81
+ harnessConfig?: ResolvedHarnessConfig;
82
+ skipRelayPrompt?: boolean;
83
+ agentResultSchema?: JsonSchema;
84
+ /** Optional pre-minted relaycast agent token (`at_live_<hex>`, from
85
+ * Relaycast agent registration). The
86
+ * broker plumbs this as `RELAY_AGENT_TOKEN`, which the relaycast MCP
87
+ * authenticates with. When omitted, the relaycast MCP auto-mints a token
88
+ * using `RELAY_WORKSPACE_KEY` + the spawn name; that is the recommended path.
89
+ * Note: this is a relaycast credential, NOT a relayfile/relayauth token —
90
+ * override `env.RELAYFILE_TOKEN` on the constructor for relayfile auth. */
91
+ agentToken?: string;
92
+ }
93
+ export interface SendMessageInput {
94
+ to: string;
95
+ text: string;
96
+ from?: string;
97
+ threadId?: string;
98
+ workspaceId?: string;
99
+ workspaceAlias?: string;
100
+ priority?: number;
101
+ data?: Record<string, unknown>;
102
+ mode?: MessageInjectionMode;
103
+ }
104
+ export interface ListAgent {
105
+ name: string;
106
+ runtime: AgentRuntime;
107
+ provider?: HeadlessProvider;
108
+ cli?: string;
109
+ model?: string;
110
+ sessionId?: string;
111
+ team?: string;
112
+ channels: string[];
113
+ parent?: string;
114
+ pid?: number;
115
+ last_activity_at?: string;
116
+ last_activity_ms?: number;
117
+ context_budget_pct?: number | null;
118
+ current_state?: AgentCurrentState;
119
+ }
120
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared input/output types for the broker SDK.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map