@agent-relay/sdk 2.3.14 → 2.3.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 (182) hide show
  1. package/README.md +68 -838
  2. package/bin/agent-relay-broker-darwin-arm64 +0 -0
  3. package/bin/agent-relay-broker-darwin-x64 +0 -0
  4. package/bin/agent-relay-broker-linux-arm64 +0 -0
  5. package/bin/agent-relay-broker-linux-x64 +0 -0
  6. package/dist/__tests__/contract-fixtures.test.d.ts +2 -0
  7. package/dist/__tests__/contract-fixtures.test.d.ts.map +1 -0
  8. package/dist/__tests__/contract-fixtures.test.js +85 -0
  9. package/dist/__tests__/contract-fixtures.test.js.map +1 -0
  10. package/dist/__tests__/facade.test.d.ts +2 -0
  11. package/dist/__tests__/facade.test.d.ts.map +1 -0
  12. package/dist/__tests__/facade.test.js +305 -0
  13. package/dist/__tests__/facade.test.js.map +1 -0
  14. package/dist/__tests__/integration.test.d.ts +2 -0
  15. package/dist/__tests__/integration.test.d.ts.map +1 -0
  16. package/dist/__tests__/integration.test.js +169 -0
  17. package/dist/__tests__/integration.test.js.map +1 -0
  18. package/dist/__tests__/pty.test.d.ts +2 -0
  19. package/dist/__tests__/pty.test.d.ts.map +1 -0
  20. package/dist/__tests__/pty.test.js +20 -0
  21. package/dist/__tests__/pty.test.js.map +1 -0
  22. package/dist/__tests__/quickstart.test.d.ts +2 -0
  23. package/dist/__tests__/quickstart.test.d.ts.map +1 -0
  24. package/dist/__tests__/quickstart.test.js +176 -0
  25. package/dist/__tests__/quickstart.test.js.map +1 -0
  26. package/dist/__tests__/spawn-from-env.test.d.ts +2 -0
  27. package/dist/__tests__/spawn-from-env.test.d.ts.map +1 -0
  28. package/dist/__tests__/spawn-from-env.test.js +206 -0
  29. package/dist/__tests__/spawn-from-env.test.js.map +1 -0
  30. package/dist/__tests__/unit.test.d.ts +2 -0
  31. package/dist/__tests__/unit.test.d.ts.map +1 -0
  32. package/dist/__tests__/unit.test.js +347 -0
  33. package/dist/__tests__/unit.test.js.map +1 -0
  34. package/dist/browser.d.ts +16 -0
  35. package/dist/browser.d.ts.map +1 -0
  36. package/dist/browser.js +19 -0
  37. package/dist/browser.js.map +1 -0
  38. package/dist/client.d.ts +140 -526
  39. package/dist/client.d.ts.map +1 -1
  40. package/dist/client.js +430 -1509
  41. package/dist/client.js.map +1 -1
  42. package/dist/consensus-helpers.d.ts +103 -0
  43. package/dist/consensus-helpers.d.ts.map +1 -0
  44. package/dist/consensus-helpers.js +147 -0
  45. package/dist/consensus-helpers.js.map +1 -0
  46. package/dist/consensus.d.ts +72 -0
  47. package/dist/consensus.d.ts.map +1 -0
  48. package/dist/consensus.js +378 -0
  49. package/dist/consensus.js.map +1 -0
  50. package/dist/examples/demo.d.ts +2 -0
  51. package/dist/examples/demo.d.ts.map +1 -0
  52. package/dist/examples/demo.js +63 -0
  53. package/dist/examples/demo.js.map +1 -0
  54. package/dist/examples/example.d.ts +2 -0
  55. package/dist/examples/example.d.ts.map +1 -0
  56. package/dist/examples/example.js +80 -0
  57. package/dist/examples/example.js.map +1 -0
  58. package/dist/examples/quickstart.d.ts +2 -0
  59. package/dist/examples/quickstart.d.ts.map +1 -0
  60. package/dist/examples/quickstart.js +56 -0
  61. package/dist/examples/quickstart.js.map +1 -0
  62. package/dist/examples/ralph-loop.d.ts +2 -0
  63. package/dist/examples/ralph-loop.d.ts.map +1 -0
  64. package/dist/examples/ralph-loop.js +281 -0
  65. package/dist/examples/ralph-loop.js.map +1 -0
  66. package/dist/examples/workflow-superiority.d.ts +32 -0
  67. package/dist/examples/workflow-superiority.d.ts.map +1 -0
  68. package/dist/examples/workflow-superiority.js +1421 -0
  69. package/dist/examples/workflow-superiority.js.map +1 -0
  70. package/dist/index.d.ts +13 -20
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +12 -26
  73. package/dist/index.js.map +1 -1
  74. package/dist/logs.d.ts +70 -25
  75. package/dist/logs.d.ts.map +1 -1
  76. package/dist/logs.js +238 -42
  77. package/dist/logs.js.map +1 -1
  78. package/dist/models.d.ts +9 -0
  79. package/dist/models.d.ts.map +1 -0
  80. package/dist/models.js +17 -0
  81. package/dist/models.js.map +1 -0
  82. package/dist/protocol.d.ts +366 -0
  83. package/dist/protocol.d.ts.map +1 -0
  84. package/dist/protocol.js +2 -0
  85. package/dist/protocol.js.map +1 -0
  86. package/dist/pty.d.ts +8 -0
  87. package/dist/pty.d.ts.map +1 -0
  88. package/dist/pty.js +26 -0
  89. package/dist/pty.js.map +1 -0
  90. package/dist/relay-adapter.d.ts +139 -0
  91. package/dist/relay-adapter.d.ts.map +1 -0
  92. package/dist/relay-adapter.js +210 -0
  93. package/dist/relay-adapter.js.map +1 -0
  94. package/dist/relay.d.ts +304 -0
  95. package/dist/relay.d.ts.map +1 -0
  96. package/dist/relay.js +910 -0
  97. package/dist/relay.js.map +1 -0
  98. package/dist/shadow.d.ts +101 -0
  99. package/dist/shadow.d.ts.map +1 -0
  100. package/dist/shadow.js +174 -0
  101. package/dist/shadow.js.map +1 -0
  102. package/dist/spawn-from-env.d.ts +77 -0
  103. package/dist/spawn-from-env.d.ts.map +1 -0
  104. package/dist/spawn-from-env.js +172 -0
  105. package/dist/spawn-from-env.js.map +1 -0
  106. package/dist/workflows/barrier.d.ts +72 -0
  107. package/dist/workflows/barrier.d.ts.map +1 -0
  108. package/dist/workflows/barrier.js +162 -0
  109. package/dist/workflows/barrier.js.map +1 -0
  110. package/dist/workflows/builder.d.ts +114 -0
  111. package/dist/workflows/builder.d.ts.map +1 -0
  112. package/dist/workflows/builder.js +201 -0
  113. package/dist/workflows/builder.js.map +1 -0
  114. package/dist/workflows/cli.d.ts +11 -0
  115. package/dist/workflows/cli.d.ts.map +1 -0
  116. package/dist/workflows/cli.js +144 -0
  117. package/dist/workflows/cli.js.map +1 -0
  118. package/dist/workflows/coordinator.d.ts +73 -0
  119. package/dist/workflows/coordinator.d.ts.map +1 -0
  120. package/dist/workflows/coordinator.js +647 -0
  121. package/dist/workflows/coordinator.js.map +1 -0
  122. package/dist/workflows/custom-steps.d.ts +73 -0
  123. package/dist/workflows/custom-steps.d.ts.map +1 -0
  124. package/dist/workflows/custom-steps.js +321 -0
  125. package/dist/workflows/custom-steps.js.map +1 -0
  126. package/dist/workflows/dry-run-format.d.ts +6 -0
  127. package/dist/workflows/dry-run-format.d.ts.map +1 -0
  128. package/dist/workflows/dry-run-format.js +68 -0
  129. package/dist/workflows/dry-run-format.js.map +1 -0
  130. package/dist/workflows/file-db.d.ts +33 -0
  131. package/dist/workflows/file-db.d.ts.map +1 -0
  132. package/dist/workflows/file-db.js +108 -0
  133. package/dist/workflows/file-db.js.map +1 -0
  134. package/dist/workflows/index.d.ts +15 -0
  135. package/dist/workflows/index.d.ts.map +1 -0
  136. package/dist/workflows/index.js +15 -0
  137. package/dist/workflows/index.js.map +1 -0
  138. package/dist/workflows/memory-db.d.ts +17 -0
  139. package/dist/workflows/memory-db.d.ts.map +1 -0
  140. package/dist/workflows/memory-db.js +33 -0
  141. package/dist/workflows/memory-db.js.map +1 -0
  142. package/dist/workflows/run.d.ts +38 -0
  143. package/dist/workflows/run.d.ts.map +1 -0
  144. package/dist/workflows/run.js +25 -0
  145. package/dist/workflows/run.js.map +1 -0
  146. package/dist/workflows/runner.d.ts +320 -0
  147. package/dist/workflows/runner.d.ts.map +1 -0
  148. package/dist/workflows/runner.js +2821 -0
  149. package/dist/workflows/runner.js.map +1 -0
  150. package/dist/workflows/state.d.ts +77 -0
  151. package/dist/workflows/state.d.ts.map +1 -0
  152. package/dist/workflows/state.js +140 -0
  153. package/dist/workflows/state.js.map +1 -0
  154. package/dist/workflows/templates.d.ts +47 -0
  155. package/dist/workflows/templates.d.ts.map +1 -0
  156. package/dist/workflows/templates.js +405 -0
  157. package/dist/workflows/templates.js.map +1 -0
  158. package/dist/workflows/trajectory.d.ts +87 -0
  159. package/dist/workflows/trajectory.d.ts.map +1 -0
  160. package/dist/workflows/trajectory.js +441 -0
  161. package/dist/workflows/trajectory.js.map +1 -0
  162. package/dist/workflows/types.d.ts +306 -0
  163. package/dist/workflows/types.d.ts.map +1 -0
  164. package/dist/workflows/types.js +23 -0
  165. package/dist/workflows/types.js.map +1 -0
  166. package/dist/workflows/validator.d.ts +11 -0
  167. package/dist/workflows/validator.d.ts.map +1 -0
  168. package/dist/workflows/validator.js +128 -0
  169. package/dist/workflows/validator.js.map +1 -0
  170. package/package.json +59 -53
  171. package/dist/discovery.d.ts +0 -10
  172. package/dist/discovery.d.ts.map +0 -1
  173. package/dist/discovery.js +0 -22
  174. package/dist/discovery.js.map +0 -1
  175. package/dist/errors.d.ts +0 -9
  176. package/dist/errors.d.ts.map +0 -1
  177. package/dist/errors.js +0 -9
  178. package/dist/errors.js.map +0 -1
  179. package/dist/protocol/index.d.ts +0 -8
  180. package/dist/protocol/index.d.ts.map +0 -1
  181. package/dist/protocol/index.js +0 -8
  182. package/dist/protocol/index.js.map +0 -1
package/dist/client.d.ts CHANGED
@@ -1,538 +1,152 @@
1
- /**
2
- * RelayClient - Agent Relay SDK Client
3
- * @agent-relay/sdk
4
- *
5
- * Lightweight client for agent-to-agent communication via Agent Relay daemon.
6
- */
7
- import { type Envelope, type SendPayload, type SendMeta, type AckPayload, type PayloadKind, type SpeakOnTrigger, type EntityType, type ChannelMessagePayload, type MessageAttachment, type SpawnResultPayload, type ReleaseResultPayload, type SendInputResultPayload, type SetModelResultPayload, type ListWorkersResultPayload, type StatusResponsePayload, type InboxMessage, type MessagesResponsePayload, type AgentInfo, type RemoveAgentResponsePayload, type HealthResponsePayload, type MetricsResponsePayload, type CreateProposalOptions, type VoteOptions, type AgentReadyPayload } from '@agent-relay/protocol';
8
- export type ClientState = 'DISCONNECTED' | 'CONNECTING' | 'HANDSHAKING' | 'READY' | 'BACKOFF';
9
- export interface SyncOptions {
10
- timeoutMs?: number;
11
- kind?: PayloadKind;
12
- data?: Record<string, unknown>;
13
- thread?: string;
1
+ import { type AgentRuntime, type BrokerEvent, type BrokerStats, type BrokerStatus, type CrashInsightsResponse, type ProtocolError, type RestartPolicy } from './protocol.js';
2
+ export interface AgentRelayClientOptions {
3
+ binaryPath?: string;
4
+ binaryArgs?: string[];
5
+ brokerName?: string;
6
+ channels?: string[];
7
+ cwd?: string;
8
+ env?: NodeJS.ProcessEnv;
9
+ requestTimeoutMs?: number;
10
+ shutdownTimeoutMs?: number;
11
+ clientName?: string;
12
+ clientVersion?: string;
14
13
  }
15
- /**
16
- * Options for the request() method.
17
- */
18
- export interface RequestOptions {
19
- /** Timeout in milliseconds (default: 30000) */
20
- timeout?: number;
21
- /** Optional structured data to include with the request */
22
- data?: Record<string, unknown>;
23
- /** Optional thread identifier for grouping related messages */
24
- thread?: string;
25
- /** Message kind (default: 'message') */
26
- kind?: PayloadKind;
14
+ export interface SpawnPtyInput {
15
+ name: string;
16
+ cli: string;
17
+ args?: string[];
18
+ channels?: string[];
19
+ task?: string;
20
+ model?: string;
21
+ cwd?: string;
22
+ team?: string;
23
+ shadowOf?: string;
24
+ shadowMode?: string;
25
+ /** Silence duration in seconds before emitting agent_idle (0 = disabled, default: 30). */
26
+ idleThresholdSecs?: number;
27
+ /** Auto-restart policy for crashed agents. */
28
+ restartPolicy?: RestartPolicy;
29
+ /** Name of a previously released agent whose continuity context should be injected. */
30
+ continueFrom?: string;
27
31
  }
28
- /**
29
- * Response from the request() method.
30
- */
31
- export interface RequestResponse {
32
- /** Sender of the response */
33
- from: string;
34
- /** Response body text */
35
- body: string;
36
- /** Optional structured data from the response */
37
- data?: Record<string, unknown>;
38
- /** The correlation ID used for this request/response */
39
- correlationId: string;
40
- /** Thread identifier if set */
41
- thread?: string;
42
- /** The full payload for advanced use cases */
43
- payload: SendPayload;
32
+ export interface SpawnHeadlessClaudeInput {
33
+ name: string;
34
+ args?: string[];
35
+ channels?: string[];
36
+ task?: string;
44
37
  }
45
- /**
46
- * Extended spawn result with optional readiness information.
47
- * When `waitForReady` is true, the spawn will wait for the agent to complete
48
- * its HELLO/WELCOME handshake before resolving.
49
- */
50
- export interface SpawnResult extends SpawnResultPayload {
51
- /** Whether the agent is ready to receive messages (only set when waitForReady is true) */
52
- ready?: boolean;
53
- /** Agent ready details (only set when waitForReady is true and spawn succeeded) */
54
- readyInfo?: AgentReadyPayload;
38
+ export interface SendMessageInput {
39
+ to: string;
40
+ text: string;
41
+ from?: string;
42
+ threadId?: string;
43
+ priority?: number;
44
+ data?: Record<string, unknown>;
55
45
  }
56
- export interface ClientConfig {
57
- /** Daemon socket path (default: /tmp/agent-relay.sock) */
58
- socketPath: string;
59
- /** Agent name */
60
- agentName: string;
61
- /** Entity type: 'agent' (default) or 'user' */
62
- entityType?: EntityType;
63
- /** CLI identifier (claude, codex, gemini, etc.) */
46
+ export interface ListAgent {
47
+ name: string;
48
+ runtime: AgentRuntime;
64
49
  cli?: string;
65
- /** Program identifier */
66
- program?: string;
67
- /** Model identifier */
68
50
  model?: string;
69
- /** Task description */
70
- task?: string;
71
- /** Working directory */
72
- workingDirectory?: string;
73
- /** Team name */
74
51
  team?: string;
75
- /** Display name for human users */
76
- displayName?: string;
77
- /** Avatar URL for human users */
78
- avatarUrl?: string;
79
- /** Suppress console logging */
80
- quiet?: boolean;
81
- /** Auto-reconnect on disconnect */
82
- reconnect: boolean;
83
- /** Max reconnect attempts */
84
- maxReconnectAttempts: number;
85
- /** Initial reconnect delay (ms) */
86
- reconnectDelayMs: number;
87
- /** Max reconnect delay (ms) */
88
- reconnectMaxDelayMs: number;
89
- /**
90
- * Mark this client as a system component.
91
- * Allows using reserved agent names (Dashboard, cli, system).
92
- * Should only be set by trusted system components.
93
- */
94
- _isSystemComponent?: boolean;
52
+ channels: string[];
53
+ parent?: string;
54
+ pid?: number;
95
55
  }
96
- /**
97
- * RelayClient for agent-to-agent communication.
98
- */
99
- export declare class RelayClient {
100
- private config;
101
- private socket?;
102
- private parser;
103
- private _state;
104
- private sessionId?;
105
- private resumeToken?;
106
- private reconnectAttempts;
107
- private reconnectDelay;
108
- private reconnectTimer?;
109
- private _destroyed;
110
- private dedupeCache;
111
- private writeQueue;
112
- private writeScheduled;
113
- private pendingSyncAcks;
114
- private pendingSpawns;
115
- private pendingReleases;
116
- private pendingSendInputs;
117
- private pendingSetModels;
118
- private pendingListWorkers;
119
- private pendingQueries;
120
- private pendingRequests;
121
- private pendingAgentReady;
122
- onMessage?: (from: string, payload: SendPayload, messageId: string, meta?: SendMeta, originalTo?: string) => void;
123
- /**
124
- * Callback for channel messages.
125
- */
126
- onChannelMessage?: (from: string, channel: string, body: string, envelope: Envelope<ChannelMessagePayload>) => void;
127
- onStateChange?: (state: ClientState) => void;
128
- onError?: (error: Error) => void;
129
- /**
130
- * Callback when an agent becomes ready (completes HELLO/WELCOME handshake).
131
- * This is broadcast by the daemon when any agent connects.
132
- * Useful for knowing when a spawned agent is ready to receive messages.
133
- */
134
- onAgentReady?: (info: AgentReadyPayload) => void;
135
- constructor(config?: Partial<ClientConfig>);
136
- get state(): ClientState;
137
- get agentName(): string;
138
- get currentSessionId(): string | undefined;
139
- /**
140
- * Connect to the relay daemon.
141
- */
142
- connect(): Promise<void>;
143
- /**
144
- * Disconnect from the relay daemon.
145
- */
146
- disconnect(): void;
147
- /**
148
- * Permanently destroy the client.
149
- */
150
- destroy(): void;
151
- /**
152
- * Send a message to another agent.
153
- */
154
- sendMessage(to: string, body: string, kind?: PayloadKind, data?: Record<string, unknown>, thread?: string, meta?: SendMeta): boolean;
155
- /**
156
- * Send an ACK for a delivered message.
157
- */
158
- sendAck(payload: AckPayload): boolean;
159
- /**
160
- * Send a message and wait for ACK response.
161
- */
162
- sendAndWait(to: string, body: string, options?: SyncOptions): Promise<AckPayload>;
163
- /**
164
- * Send a request to another agent and wait for their response.
165
- *
166
- * This implements a request/response pattern where the message is sent with
167
- * a correlation ID, and the method waits for the target agent to respond
168
- * with a message containing that correlation ID.
169
- *
170
- * @example
171
- * ```typescript
172
- * // Simple request
173
- * const response = await client.request('Worker', 'Process this task');
174
- * console.log(response.body); // Worker's response
175
- *
176
- * // With options
177
- * const response = await client.request('Worker', 'Process task', {
178
- * timeout: 60000,
179
- * data: { taskId: '123', priority: 'high' },
180
- * thread: 'task-thread-1',
181
- * });
182
- * ```
183
- *
184
- * @param to - Target agent name
185
- * @param body - Request message body
186
- * @param options - Request options (timeout, data, thread, kind)
187
- * @returns Promise that resolves with the response from the target agent
188
- * @throws Error if client is not ready, send fails, timeout occurs, or agent disconnects
189
- */
190
- request(to: string, body: string, options?: RequestOptions): Promise<RequestResponse>;
191
- /**
192
- * Respond to a request from another agent.
193
- *
194
- * This is a convenience method for responding to messages that have a
195
- * correlation ID. The response will be routed back to the requesting agent.
196
- *
197
- * @param correlationId - The correlation ID from the original request (from data._correlationId or meta.replyTo)
198
- * @param to - Target agent (the one who sent the original request)
199
- * @param body - Response body
200
- * @param data - Optional structured data to include in the response
201
- * @returns true if the message was sent
202
- */
203
- respond(correlationId: string, to: string, body: string, data?: Record<string, unknown>): boolean;
204
- /**
205
- * Broadcast a message to all agents.
206
- */
207
- broadcast(body: string, kind?: PayloadKind, data?: Record<string, unknown>): boolean;
208
- /**
209
- * Subscribe to a topic.
210
- */
211
- subscribe(topic: string): boolean;
212
- /**
213
- * Unsubscribe from a topic.
214
- */
215
- unsubscribe(topic: string): boolean;
216
- /**
217
- * Bind as a shadow to a primary agent.
218
- */
219
- bindAsShadow(primaryAgent: string, options?: {
220
- speakOn?: SpeakOnTrigger[];
221
- receiveIncoming?: boolean;
222
- receiveOutgoing?: boolean;
223
- }): boolean;
224
- /**
225
- * Unbind from a primary agent.
226
- */
227
- unbindAsShadow(primaryAgent: string): boolean;
228
- /**
229
- * Send log output to the daemon for dashboard streaming.
230
- */
231
- sendLog(data: string): boolean;
232
- /**
233
- * Spawn a new agent via the relay daemon.
234
- * @param options - Spawn options
235
- * @param options.name - Name for the new agent
236
- * @param options.cli - CLI to use (claude, codex, gemini, etc.)
237
- * @param options.task - Task description
238
- * @param options.cwd - Working directory
239
- * @param options.team - Team name
240
- * @param options.interactive - Interactive mode
241
- * @param options.shadowMode - Shadow execution mode ('subagent' or 'process')
242
- * @param options.shadowOf - Spawn as shadow of this agent
243
- * @param options.shadowAgent - Shadow agent profile to use (for subagent mode)
244
- * @param options.shadowTriggers - When to trigger the shadow (for subagent mode)
245
- * @param options.shadowSpeakOn - Shadow speak-on triggers
246
- * @param options.waitForReady - Wait for the agent to be ready before resolving (default: false)
247
- * @param options.readyTimeoutMs - Timeout for agent to become ready (default: 60000ms)
248
- * @param timeoutMs - Timeout for spawn operation (default: 60000ms)
249
- * @returns Spawn result. When waitForReady is true, includes `ready` and `readyInfo` fields.
250
- */
251
- spawn(options: {
56
+ export declare class AgentRelayProtocolError extends Error {
57
+ code: string;
58
+ retryable: boolean;
59
+ data?: unknown;
60
+ constructor(payload: ProtocolError);
61
+ }
62
+ export declare class AgentRelayProcessError extends Error {
63
+ constructor(message: string);
64
+ }
65
+ export declare class AgentRelayClient {
66
+ private readonly options;
67
+ private child?;
68
+ private stdoutRl?;
69
+ private stderrRl?;
70
+ private lastStderrLine?;
71
+ private requestSeq;
72
+ private pending;
73
+ private startingPromise?;
74
+ private eventListeners;
75
+ private stderrListeners;
76
+ private eventBuffer;
77
+ private maxBufferSize;
78
+ private exitPromise?;
79
+ /** The workspace key returned by the broker in its hello_ack response. */
80
+ workspaceKey?: string;
81
+ constructor(options?: AgentRelayClientOptions);
82
+ static start(options?: AgentRelayClientOptions): Promise<AgentRelayClient>;
83
+ onEvent(listener: (event: BrokerEvent) => void): () => void;
84
+ queryEvents(filter?: {
85
+ kind?: string;
86
+ name?: string;
87
+ since?: number;
88
+ limit?: number;
89
+ }): BrokerEvent[];
90
+ getLastEvent(kind: string, name?: string): BrokerEvent | undefined;
91
+ onBrokerStderr(listener: (line: string) => void): () => void;
92
+ start(): Promise<void>;
93
+ /**
94
+ * Pre-register a batch of agents with Relaycast before their steps execute.
95
+ * The broker warms its token cache in parallel; subsequent spawn_agent calls
96
+ * hit the cache rather than waiting on individual HTTP registrations.
97
+ * Fire-and-forget from the caller's perspective — broker responds immediately
98
+ * and registers in the background.
99
+ */
100
+ preflightAgents(agents: Array<{
252
101
  name: string;
253
- cli: string;
254
- task?: string;
255
- cwd?: string;
256
- team?: string;
257
- /** Model override (e.g., 'opus', 'sonnet', 'haiku'). Takes precedence over agent profile. */
258
- model?: string;
259
- interactive?: boolean;
260
- shadowMode?: 'subagent' | 'process';
261
- shadowOf?: string;
262
- shadowAgent?: string;
263
- shadowTriggers?: SpeakOnTrigger[];
264
- shadowSpeakOn?: SpeakOnTrigger[];
265
- /** User ID for cloud persistence */
266
- userId?: string;
267
- /** Include ACK/DONE workflow conventions in agent instructions */
268
- includeWorkflowConventions?: boolean;
269
- /** Override the spawner name (defaults to this client's agentName) */
270
- spawnerName?: string;
271
- /** Wait for the agent to complete connection before resolving */
272
- waitForReady?: boolean;
273
- /** Timeout for agent to become ready (default: 60000ms). Only used when waitForReady is true. */
274
- readyTimeoutMs?: number;
275
- }, timeoutMs?: number): Promise<SpawnResult>;
276
- /**
277
- * Wait for an agent to become ready (complete HELLO/WELCOME handshake).
278
- * This is useful when you want to wait for an agent that was spawned through
279
- * another mechanism, or to verify an agent is connected before sending messages.
280
- *
281
- * @example
282
- * ```typescript
283
- * // Wait for an agent that might be spawning
284
- * try {
285
- * const readyInfo = await client.waitForAgentReady('Worker', 30000);
286
- * console.log(`Worker is ready: ${readyInfo.cli}`);
287
- * } catch (err) {
288
- * console.error('Worker did not become ready in time');
289
- * }
290
- * ```
291
- *
292
- * @param name - Agent name to wait for
293
- * @param timeoutMs - Timeout in milliseconds (default: 60000ms)
294
- * @returns Promise that resolves with AgentReadyPayload when the agent connects
295
- * @throws Error if the agent doesn't become ready within the timeout
296
- */
297
- waitForAgentReady(name: string, timeoutMs?: number): Promise<AgentReadyPayload>;
298
- /**
299
- * Release (terminate) an agent via the relay daemon.
300
- * @param name - Agent name to release
301
- * @param timeoutMs - Timeout for release operation (default: 10000ms)
302
- */
303
- release(name: string, reason?: string, timeoutMs?: number): Promise<ReleaseResultPayload>;
304
- /**
305
- * Send input data to a spawned agent's PTY.
306
- * @param name - Agent name to send input to
307
- * @param data - Input data to send
308
- * @param timeoutMs - Timeout for the operation (default: 10000ms)
309
- */
310
- sendWorkerInput(name: string, data: string, timeoutMs?: number): Promise<SendInputResultPayload>;
311
- /**
312
- * Change the model of a running spawned agent.
313
- * The command waits for the agent to be idle before sending the model switch command.
314
- *
315
- * @param name - Agent name to switch model for
316
- * @param model - Target model (e.g., 'opus', 'sonnet', 'haiku')
317
- * @param options - Options including idle wait timeout
318
- * @param operationTimeoutMs - Timeout for the overall protocol operation (default: 45000ms)
319
- */
320
- setWorkerModel(name: string, model: string, options?: {
102
+ cli: string | AgentRuntime;
103
+ }>): Promise<void>;
104
+ spawnPty(input: SpawnPtyInput): Promise<{
105
+ name: string;
106
+ runtime: AgentRuntime;
107
+ }>;
108
+ spawnHeadlessClaude(input: SpawnHeadlessClaudeInput): Promise<{
109
+ name: string;
110
+ runtime: AgentRuntime;
111
+ }>;
112
+ release(name: string, reason?: string): Promise<{
113
+ name: string;
114
+ }>;
115
+ sendInput(name: string, data: string): Promise<{
116
+ name: string;
117
+ bytes_written: number;
118
+ }>;
119
+ setModel(name: string, model: string, opts?: {
321
120
  timeoutMs?: number;
322
- }, operationTimeoutMs?: number): Promise<SetModelResultPayload>;
323
- /**
324
- * List active spawned workers.
325
- * @param timeoutMs - Timeout for the operation (default: 10000ms)
326
- */
327
- listWorkers(timeoutMs?: number): Promise<ListWorkersResultPayload>;
328
- /**
329
- * Join a channel.
330
- * @param channel - Channel name (e.g., '#general', 'dm:alice:bob')
331
- * @param displayName - Optional display name for this member
332
- */
333
- joinChannel(channel: string, displayName?: string): boolean;
334
- /**
335
- * Admin join: Add any member to a channel (does not require member to be connected).
336
- * @param channel - Channel name
337
- * @param member - Name of the member to add
338
- */
339
- adminJoinChannel(channel: string, member: string): boolean;
340
- /**
341
- * Leave a channel.
342
- * @param channel - Channel name to leave
343
- * @param reason - Optional reason for leaving
344
- */
345
- leaveChannel(channel: string, reason?: string): boolean;
346
- /**
347
- * Admin remove: Remove any member from a channel.
348
- * @param channel - Channel name
349
- * @param member - Name of the member to remove
350
- */
351
- adminRemoveMember(channel: string, member: string): boolean;
352
- /**
353
- * Send a message to a channel.
354
- * @param channel - Channel name
355
- * @param body - Message content
356
- * @param options - Optional thread, mentions, attachments
357
- */
358
- sendChannelMessage(channel: string, body: string, options?: {
359
- thread?: string;
360
- mentions?: string[];
361
- attachments?: MessageAttachment[];
362
- data?: Record<string, unknown>;
363
- }): boolean;
364
- /**
365
- * Create a consensus proposal.
366
- *
367
- * The proposal will be broadcast to all participants. They can vote using
368
- * the `vote()` method. Results are delivered via `onMessage` callback.
369
- *
370
- * @example
371
- * ```typescript
372
- * client.createProposal({
373
- * title: 'Approve API design',
374
- * description: 'Should we proceed with the REST API design?',
375
- * participants: ['Developer', 'Reviewer', 'Lead'],
376
- * consensusType: 'majority',
377
- * });
378
- * ```
379
- *
380
- * @param options - Proposal options
381
- * @returns true if the message was sent
382
- */
383
- createProposal(options: CreateProposalOptions): boolean;
384
- /**
385
- * Vote on a consensus proposal.
386
- *
387
- * @example
388
- * ```typescript
389
- * // Approve with a reason
390
- * client.vote({
391
- * proposalId: 'prop_123',
392
- * value: 'approve',
393
- * reason: 'Looks good to me',
394
- * });
395
- *
396
- * // Reject without reason
397
- * client.vote({ proposalId: 'prop_123', value: 'reject' });
398
- * ```
399
- *
400
- * @param options - Vote options
401
- * @returns true if the message was sent
402
- */
403
- vote(options: VoteOptions): boolean;
404
- /**
405
- * Send a query to the daemon and wait for a response.
406
- * @internal
407
- */
408
- private query;
409
- /**
410
- * Get daemon status information.
411
- * @returns Daemon status including version, uptime, and counts
412
- */
413
- getStatus(): Promise<StatusResponsePayload>;
414
- /**
415
- * Get messages from the inbox.
416
- * @param options - Filter options
417
- * @param options.limit - Maximum number of messages to return
418
- * @param options.unreadOnly - Only return unread messages
419
- * @param options.from - Filter by sender
420
- * @param options.channel - Filter by channel
421
- * @returns Array of inbox messages
422
- */
423
- getInbox(options?: {
424
- limit?: number;
425
- unreadOnly?: boolean;
426
- from?: string;
427
- channel?: string;
428
- }): Promise<InboxMessage[]>;
429
- /**
430
- * Query all messages (not filtered by recipient).
431
- * Used by dashboard to get message history.
432
- * @param options - Query options
433
- * @param options.limit - Maximum number of messages to return (default: 100)
434
- * @param options.sinceTs - Only return messages after this timestamp
435
- * @param options.from - Filter by sender
436
- * @param options.to - Filter by recipient
437
- * @param options.thread - Filter by thread ID
438
- * @param options.order - Sort order ('asc' or 'desc', default: 'desc')
439
- * @returns Array of messages
440
- */
441
- queryMessages(options?: {
442
- limit?: number;
443
- sinceTs?: number;
444
- from?: string;
445
- to?: string;
446
- thread?: string;
447
- order?: 'asc' | 'desc';
448
- }): Promise<MessagesResponsePayload['messages']>;
449
- /**
450
- * List online agents.
451
- * @param options - Filter options
452
- * @param options.includeIdle - Include idle agents (default: true)
453
- * @param options.project - Filter by project
454
- * @returns Array of agent info
455
- */
456
- listAgents(options?: {
457
- includeIdle?: boolean;
458
- project?: string;
459
- }): Promise<AgentInfo[]>;
460
- /**
461
- * Get system health information.
462
- * @param options - Include options
463
- * @param options.includeCrashes - Include crash history (default: true)
464
- * @param options.includeAlerts - Include alerts (default: true)
465
- * @returns Health information including score, issues, and recommendations
466
- */
467
- getHealth(options?: {
468
- includeCrashes?: boolean;
469
- includeAlerts?: boolean;
470
- }): Promise<HealthResponsePayload>;
471
- /**
472
- * Get resource metrics for agents.
473
- * @param options - Filter options
474
- * @param options.agent - Filter to a specific agent
475
- * @returns Metrics including memory, CPU, and system info
476
- */
477
- getMetrics(options?: {
478
- agent?: string;
479
- }): Promise<MetricsResponsePayload>;
480
- /**
481
- * List only currently connected agents (not historical/registered agents).
482
- * Use this instead of listAgents() when you need accurate liveness information.
483
- * @param options - Filter options
484
- * @param options.project - Filter by project
485
- * @returns Array of currently connected agent info
486
- */
487
- listConnectedAgents(options?: {
488
- project?: string;
489
- }): Promise<AgentInfo[]>;
490
- /**
491
- * Remove an agent from the registry (sessions, agents.json).
492
- * Use this to clean up stale agents that are no longer needed.
493
- * @param name - Agent name to remove
494
- * @param options - Removal options
495
- * @param options.removeMessages - Also remove all messages from/to this agent (default: false)
496
- * @returns Result indicating if the agent was removed
497
- */
498
- removeAgent(name: string, options?: {
499
- removeMessages?: boolean;
500
- }): Promise<RemoveAgentResponsePayload>;
501
- private setState;
502
- private sendHello;
503
- private send;
504
- private flushWrites;
505
- private handleData;
506
- private processFrame;
507
- private handleWelcome;
508
- private handleDeliver;
509
- /**
510
- * Extract correlation ID from a delivered message.
511
- * Checks both payload_meta.replyTo and payload.data._correlationId
512
- */
513
- private extractCorrelationId;
514
- private handleChannelMessage;
515
- private handleAck;
516
- private handleSpawnResult;
517
- private handleReleaseResult;
518
- private handleSendInputResult;
519
- private handleSetModelResult;
520
- private handleListWorkersResult;
521
- private handleAgentReady;
522
- private handleQueryResponse;
523
- private handlePing;
524
- private handleErrorFrame;
525
- private handleDisconnect;
526
- private handleError;
527
- private rejectPendingSyncAcks;
528
- private rejectPendingSpawns;
529
- private rejectPendingReleases;
530
- private rejectPendingSendInputs;
531
- private rejectPendingSetModels;
532
- private rejectPendingListWorkers;
533
- private rejectPendingQueries;
534
- private rejectPendingRequests;
535
- private rejectPendingAgentReady;
536
- private scheduleReconnect;
121
+ }): Promise<{
122
+ name: string;
123
+ model: string;
124
+ success: boolean;
125
+ }>;
126
+ getMetrics(agent?: string): Promise<{
127
+ agents: Array<{
128
+ name: string;
129
+ pid: number;
130
+ memory_bytes: number;
131
+ uptime_secs: number;
132
+ }>;
133
+ broker?: BrokerStats;
134
+ }>;
135
+ getCrashInsights(): Promise<CrashInsightsResponse>;
136
+ sendMessage(input: SendMessageInput): Promise<{
137
+ event_id: string;
138
+ targets: string[];
139
+ }>;
140
+ listAgents(): Promise<ListAgent[]>;
141
+ getStatus(): Promise<BrokerStatus>;
142
+ shutdown(): Promise<void>;
143
+ waitForExit(): Promise<void>;
144
+ private startInternal;
145
+ private disposeProcessHandles;
146
+ private failAllPending;
147
+ private handleStdoutLine;
148
+ private requestHello;
149
+ private requestOk;
150
+ private sendRequest;
537
151
  }
538
152
  //# sourceMappingURL=client.d.ts.map