@agent-relay/factory 0.0.0 → 0.1.2

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 (235) hide show
  1. package/README.md +182 -23
  2. package/bin/factory.mjs +7 -0
  3. package/dist/cli/fleet.d.ts +81 -0
  4. package/dist/cli/fleet.d.ts.map +1 -0
  5. package/dist/cli/fleet.js +571 -0
  6. package/dist/cli/fleet.js.map +1 -0
  7. package/dist/config/schema.d.ts +1313 -0
  8. package/dist/config/schema.d.ts.map +1 -0
  9. package/dist/config/schema.js +320 -0
  10. package/dist/config/schema.js.map +1 -0
  11. package/dist/constants/linear.d.ts +6 -0
  12. package/dist/constants/linear.d.ts.map +1 -0
  13. package/dist/constants/linear.js +21 -0
  14. package/dist/constants/linear.js.map +1 -0
  15. package/dist/constants/slack.d.ts +3 -0
  16. package/dist/constants/slack.d.ts.map +1 -0
  17. package/dist/constants/slack.js +3 -0
  18. package/dist/constants/slack.js.map +1 -0
  19. package/dist/dispatch/templates.d.ts +52 -0
  20. package/dist/dispatch/templates.d.ts.map +1 -0
  21. package/dist/dispatch/templates.js +118 -0
  22. package/dist/dispatch/templates.js.map +1 -0
  23. package/dist/fleet/create-fleet.d.ts +14 -0
  24. package/dist/fleet/create-fleet.d.ts.map +1 -0
  25. package/dist/fleet/create-fleet.js +15 -0
  26. package/dist/fleet/create-fleet.js.map +1 -0
  27. package/dist/fleet/ensure-relay-broker.d.ts +24 -0
  28. package/dist/fleet/ensure-relay-broker.d.ts.map +1 -0
  29. package/dist/fleet/ensure-relay-broker.js +56 -0
  30. package/dist/fleet/ensure-relay-broker.js.map +1 -0
  31. package/dist/fleet/internal-fleet-client.d.ts +90 -0
  32. package/dist/fleet/internal-fleet-client.d.ts.map +1 -0
  33. package/dist/fleet/internal-fleet-client.js +602 -0
  34. package/dist/fleet/internal-fleet-client.js.map +1 -0
  35. package/dist/fleet/relay-fleet-client.d.ts +105 -0
  36. package/dist/fleet/relay-fleet-client.d.ts.map +1 -0
  37. package/dist/fleet/relay-fleet-client.js +509 -0
  38. package/dist/fleet/relay-fleet-client.js.map +1 -0
  39. package/dist/github/index.d.ts +5 -0
  40. package/dist/github/index.d.ts.map +1 -0
  41. package/dist/github/index.js +3 -0
  42. package/dist/github/index.js.map +1 -0
  43. package/dist/github/merge-gate.d.ts +47 -0
  44. package/dist/github/merge-gate.d.ts.map +1 -0
  45. package/dist/github/merge-gate.js +147 -0
  46. package/dist/github/merge-gate.js.map +1 -0
  47. package/dist/github/probe-closer.d.ts +15 -0
  48. package/dist/github/probe-closer.d.ts.map +1 -0
  49. package/dist/github/probe-closer.js +67 -0
  50. package/dist/github/probe-closer.js.map +1 -0
  51. package/dist/index.d.ts +36 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +20 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/issue-key-match.d.ts +3 -0
  56. package/dist/issue-key-match.d.ts.map +1 -0
  57. package/dist/issue-key-match.js +22 -0
  58. package/dist/issue-key-match.js.map +1 -0
  59. package/dist/linear/state-resolver.d.ts +26 -0
  60. package/dist/linear/state-resolver.d.ts.map +1 -0
  61. package/dist/linear/state-resolver.js +285 -0
  62. package/dist/linear/state-resolver.js.map +1 -0
  63. package/dist/mount/local-mount-preflight.d.ts +9 -0
  64. package/dist/mount/local-mount-preflight.d.ts.map +1 -0
  65. package/dist/mount/local-mount-preflight.js +149 -0
  66. package/dist/mount/local-mount-preflight.js.map +1 -0
  67. package/dist/mount/relayfile-binary.d.ts +9 -0
  68. package/dist/mount/relayfile-binary.d.ts.map +1 -0
  69. package/dist/mount/relayfile-binary.js +177 -0
  70. package/dist/mount/relayfile-binary.js.map +1 -0
  71. package/dist/mount/relayfile-cloud-mount-client.d.ts +123 -0
  72. package/dist/mount/relayfile-cloud-mount-client.d.ts.map +1 -0
  73. package/dist/mount/relayfile-cloud-mount-client.js +427 -0
  74. package/dist/mount/relayfile-cloud-mount-client.js.map +1 -0
  75. package/dist/node/factory-node.d.ts +59 -0
  76. package/dist/node/factory-node.d.ts.map +1 -0
  77. package/dist/node/factory-node.js +351 -0
  78. package/dist/node/factory-node.js.map +1 -0
  79. package/dist/node/factory.node.d.ts +3 -0
  80. package/dist/node/factory.node.d.ts.map +1 -0
  81. package/dist/node/factory.node.js +5 -0
  82. package/dist/node/factory.node.js.map +1 -0
  83. package/dist/orchestrator/batch-tracker.d.ts +42 -0
  84. package/dist/orchestrator/batch-tracker.d.ts.map +1 -0
  85. package/dist/orchestrator/batch-tracker.js +125 -0
  86. package/dist/orchestrator/batch-tracker.js.map +1 -0
  87. package/dist/orchestrator/factory.d.ts +58 -0
  88. package/dist/orchestrator/factory.d.ts.map +1 -0
  89. package/dist/orchestrator/factory.js +4372 -0
  90. package/dist/orchestrator/factory.js.map +1 -0
  91. package/dist/orchestrator/index.d.ts +5 -0
  92. package/dist/orchestrator/index.d.ts.map +1 -0
  93. package/dist/orchestrator/index.js +4 -0
  94. package/dist/orchestrator/index.js.map +1 -0
  95. package/dist/orchestrator/process-identity.d.ts +23 -0
  96. package/dist/orchestrator/process-identity.d.ts.map +1 -0
  97. package/dist/orchestrator/process-identity.js +122 -0
  98. package/dist/orchestrator/process-identity.js.map +1 -0
  99. package/dist/orchestrator/reaper.d.ts +60 -0
  100. package/dist/orchestrator/reaper.d.ts.map +1 -0
  101. package/dist/orchestrator/reaper.js +293 -0
  102. package/dist/orchestrator/reaper.js.map +1 -0
  103. package/dist/ports/fleet.d.ts +101 -0
  104. package/dist/ports/fleet.d.ts.map +1 -0
  105. package/dist/ports/fleet.js +2 -0
  106. package/dist/ports/fleet.js.map +1 -0
  107. package/dist/ports/index.d.ts +5 -0
  108. package/dist/ports/index.d.ts.map +1 -0
  109. package/dist/ports/index.js +2 -0
  110. package/dist/ports/index.js.map +1 -0
  111. package/dist/ports/mount.d.ts +56 -0
  112. package/dist/ports/mount.d.ts.map +1 -0
  113. package/dist/ports/mount.js +2 -0
  114. package/dist/ports/mount.js.map +1 -0
  115. package/dist/ports/state.d.ts +61 -0
  116. package/dist/ports/state.d.ts.map +1 -0
  117. package/dist/ports/state.js +2 -0
  118. package/dist/ports/state.js.map +1 -0
  119. package/dist/ports/system.d.ts +15 -0
  120. package/dist/ports/system.d.ts.map +1 -0
  121. package/dist/ports/system.js +2 -0
  122. package/dist/ports/system.js.map +1 -0
  123. package/dist/ports/writeback.d.ts +25 -0
  124. package/dist/ports/writeback.d.ts.map +1 -0
  125. package/dist/ports/writeback.js +2 -0
  126. package/dist/ports/writeback.js.map +1 -0
  127. package/dist/safety/factory-scope.d.ts +16 -0
  128. package/dist/safety/factory-scope.d.ts.map +1 -0
  129. package/dist/safety/factory-scope.js +107 -0
  130. package/dist/safety/factory-scope.js.map +1 -0
  131. package/dist/state/in-memory-state-store.d.ts +31 -0
  132. package/dist/state/in-memory-state-store.d.ts.map +1 -0
  133. package/dist/state/in-memory-state-store.js +115 -0
  134. package/dist/state/in-memory-state-store.js.map +1 -0
  135. package/dist/state/index.d.ts +3 -0
  136. package/dist/state/index.d.ts.map +1 -0
  137. package/dist/state/index.js +2 -0
  138. package/dist/state/index.js.map +1 -0
  139. package/dist/state/store.d.ts +29 -0
  140. package/dist/state/store.d.ts.map +1 -0
  141. package/dist/state/store.js +26 -0
  142. package/dist/state/store.js.map +1 -0
  143. package/dist/subscriptions/common.d.ts +7 -0
  144. package/dist/subscriptions/common.d.ts.map +1 -0
  145. package/dist/subscriptions/common.js +59 -0
  146. package/dist/subscriptions/common.js.map +1 -0
  147. package/dist/subscriptions/event-client.d.ts +40 -0
  148. package/dist/subscriptions/event-client.d.ts.map +1 -0
  149. package/dist/subscriptions/event-client.js +234 -0
  150. package/dist/subscriptions/event-client.js.map +1 -0
  151. package/dist/subscriptions/globs.d.ts +5 -0
  152. package/dist/subscriptions/globs.d.ts.map +1 -0
  153. package/dist/subscriptions/globs.js +50 -0
  154. package/dist/subscriptions/globs.js.map +1 -0
  155. package/dist/subscriptions/index.d.ts +8 -0
  156. package/dist/subscriptions/index.d.ts.map +1 -0
  157. package/dist/subscriptions/index.js +5 -0
  158. package/dist/subscriptions/index.js.map +1 -0
  159. package/dist/subscriptions/linear-filter.d.ts +26 -0
  160. package/dist/subscriptions/linear-filter.d.ts.map +1 -0
  161. package/dist/subscriptions/linear-filter.js +143 -0
  162. package/dist/subscriptions/linear-filter.js.map +1 -0
  163. package/dist/subscriptions/specs.d.ts +44 -0
  164. package/dist/subscriptions/specs.d.ts.map +1 -0
  165. package/dist/subscriptions/specs.js +195 -0
  166. package/dist/subscriptions/specs.js.map +1 -0
  167. package/dist/testing/fakes.d.ts +114 -0
  168. package/dist/testing/fakes.d.ts.map +1 -0
  169. package/dist/testing/fakes.js +219 -0
  170. package/dist/testing/fakes.js.map +1 -0
  171. package/dist/testing/index.d.ts +2 -0
  172. package/dist/testing/index.d.ts.map +1 -0
  173. package/dist/testing/index.js +2 -0
  174. package/dist/testing/index.js.map +1 -0
  175. package/dist/triage/heuristic.d.ts +42 -0
  176. package/dist/triage/heuristic.d.ts.map +1 -0
  177. package/dist/triage/heuristic.js +326 -0
  178. package/dist/triage/heuristic.js.map +1 -0
  179. package/dist/triage/index.d.ts +7 -0
  180. package/dist/triage/index.d.ts.map +1 -0
  181. package/dist/triage/index.js +5 -0
  182. package/dist/triage/index.js.map +1 -0
  183. package/dist/triage/llm.d.ts +11 -0
  184. package/dist/triage/llm.d.ts.map +1 -0
  185. package/dist/triage/llm.js +48 -0
  186. package/dist/triage/llm.js.map +1 -0
  187. package/dist/triage/schema.d.ts +344 -0
  188. package/dist/triage/schema.d.ts.map +1 -0
  189. package/dist/triage/schema.js +37 -0
  190. package/dist/triage/schema.js.map +1 -0
  191. package/dist/triage/tiered.d.ts +8 -0
  192. package/dist/triage/tiered.d.ts.map +1 -0
  193. package/dist/triage/tiered.js +47 -0
  194. package/dist/triage/tiered.js.map +1 -0
  195. package/dist/types.d.ts +212 -0
  196. package/dist/types.d.ts.map +1 -0
  197. package/dist/types.js +2 -0
  198. package/dist/types.js.map +1 -0
  199. package/dist/webhook/handler.d.ts +22 -0
  200. package/dist/webhook/handler.d.ts.map +1 -0
  201. package/dist/webhook/handler.js +57 -0
  202. package/dist/webhook/handler.js.map +1 -0
  203. package/dist/webhook/index.d.ts +5 -0
  204. package/dist/webhook/index.d.ts.map +1 -0
  205. package/dist/webhook/index.js +3 -0
  206. package/dist/webhook/index.js.map +1 -0
  207. package/dist/webhook/registrar.d.ts +16 -0
  208. package/dist/webhook/registrar.d.ts.map +1 -0
  209. package/dist/webhook/registrar.js +50 -0
  210. package/dist/webhook/registrar.js.map +1 -0
  211. package/dist/writeback/github.d.ts +6 -0
  212. package/dist/writeback/github.d.ts.map +1 -0
  213. package/dist/writeback/github.js +48 -0
  214. package/dist/writeback/github.js.map +1 -0
  215. package/dist/writeback/index.d.ts +6 -0
  216. package/dist/writeback/index.d.ts.map +1 -0
  217. package/dist/writeback/index.js +4 -0
  218. package/dist/writeback/index.js.map +1 -0
  219. package/dist/writeback/linear.d.ts +41 -0
  220. package/dist/writeback/linear.d.ts.map +1 -0
  221. package/dist/writeback/linear.js +286 -0
  222. package/dist/writeback/linear.js.map +1 -0
  223. package/dist/writeback/shared.d.ts +7 -0
  224. package/dist/writeback/shared.d.ts.map +1 -0
  225. package/dist/writeback/shared.js +29 -0
  226. package/dist/writeback/shared.js.map +1 -0
  227. package/dist/writeback/slack.d.ts +16 -0
  228. package/dist/writeback/slack.d.ts.map +1 -0
  229. package/dist/writeback/slack.js +104 -0
  230. package/dist/writeback/slack.js.map +1 -0
  231. package/package.json +54 -9
  232. package/scripts/com.agentrelay.factory-canary.plist.example +53 -0
  233. package/scripts/factory-canary.sh +89 -0
  234. package/index.d.ts +0 -2
  235. package/index.js +0 -7
@@ -0,0 +1,602 @@
1
+ import { HarnessDriverClient } from '@agent-relay/harness-driver';
2
+ import { accessSync, constants } from 'node:fs';
3
+ import { createRequire } from 'node:module';
4
+ import { readFile } from 'node:fs/promises';
5
+ import { dirname, join } from 'node:path';
6
+ const requireForResolve = createRequire(import.meta.url);
7
+ export const capabilityCli = {
8
+ 'spawn:claude': 'claude',
9
+ 'spawn:codex': 'codex',
10
+ 'workflow:run': 'relayflows',
11
+ };
12
+ const selfNode = {
13
+ name: 'self',
14
+ capabilities: ['spawn:claude', 'spawn:codex', 'workflow:run'],
15
+ live: true,
16
+ };
17
+ const PID_RESOLVE_ATTEMPTS = 3;
18
+ const PID_RESOLVE_BACKOFF_MS = 75;
19
+ export class InternalFleetClient {
20
+ #client;
21
+ #ownsBroker;
22
+ #cwd;
23
+ #connectionPath;
24
+ #resumeCapability;
25
+ #logger;
26
+ #resolveAgentRelayMcpCommand;
27
+ #agentExitListeners = new Set();
28
+ #deliveryFailedListeners = new Set();
29
+ #agentMessageListeners = new Set();
30
+ #eventUnsubscribers = [];
31
+ #seenEvents = [];
32
+ #seenEventKeys = new Set();
33
+ #pendingInjected = new Map();
34
+ #injectedEventIds = [];
35
+ #injectedEventIdSet = new Set();
36
+ #failedDeliveries = new Map();
37
+ #failedDeliveryIds = [];
38
+ #exitedAgentNames = new Set();
39
+ #suppressedDuplicateEvents = 0;
40
+ #suppressedDuplicateAgentExits = 0;
41
+ #missingIdentityEvents = 0;
42
+ #subscribed = false;
43
+ #disposed = false;
44
+ constructor(options = {}) {
45
+ this.#cwd = options.cwd;
46
+ this.#connectionPath = options.connectionPath;
47
+ this.#resumeCapability = options.resumeCapability ?? 'spawn:codex';
48
+ this.#logger = options.logger;
49
+ this.#resolveAgentRelayMcpCommand = options.resolveAgentRelayMcpCommand ?? resolveAgentRelayMcpCommand;
50
+ this.#client = options.client ?? HarnessDriverClient.connect({ cwd: options.cwd, connectionPath: options.connectionPath });
51
+ this.#ownsBroker = options.ownsBroker ?? false;
52
+ }
53
+ async spawn(input) {
54
+ assertSelfNode(input.node);
55
+ const spawnInput = this.#withAgentRelayMcpHarness({
56
+ name: input.name,
57
+ cli: capabilityCli[input.capability],
58
+ channels: input.channel ? [input.channel] : undefined,
59
+ task: input.task,
60
+ model: input.model,
61
+ cwd: input.cwd ?? this.#cwd,
62
+ restartPolicy: input.restartPolicy,
63
+ continueFrom: input.sessionRef,
64
+ });
65
+ const handle = await this.#client.spawnPty(spawnInput);
66
+ this.#clearAgentExitLatch(handle.name);
67
+ return spawnResultFrom(handle);
68
+ }
69
+ async resume(input) {
70
+ assertSelfNode(input.node);
71
+ const spawnInput = this.#withAgentRelayMcpHarness({
72
+ name: input.name ?? input.sessionRef,
73
+ // followups [fleet→W6]: W6 owns resume-vs-respawn and passes the per-agent capability.
74
+ cli: capabilityCli[input.capability ?? this.#resumeCapability],
75
+ cwd: this.#cwd,
76
+ continueFrom: input.sessionRef,
77
+ });
78
+ const handle = await this.#client.spawnPty(spawnInput);
79
+ this.#clearAgentExitLatch(handle.name);
80
+ return { ...spawnResultFrom(handle), sessionRef: sessionRefFrom(handle) ?? input.sessionRef };
81
+ }
82
+ #withAgentRelayMcpHarness(input) {
83
+ if (input.harnessConfig || (input.cli !== 'codex' && input.cli !== 'claude')) {
84
+ return input;
85
+ }
86
+ const command = this.#resolveAgentRelayMcpCommand();
87
+ if (!command) {
88
+ this.#logger?.warn?.('[factory-sdk] agent-relay MCP command not found; spawning without MCP injection', {
89
+ agent: input.name,
90
+ cli: input.cli,
91
+ });
92
+ return input;
93
+ }
94
+ return {
95
+ ...input,
96
+ harnessConfig: buildRelayMcpHarnessConfig(input, command),
97
+ };
98
+ }
99
+ async release(name, reason) {
100
+ await this.#client.release(name, reason);
101
+ }
102
+ async roster() {
103
+ const agents = await this.#client.listAgents();
104
+ return {
105
+ agents: agents.map((agent) => ({ name: agent.name })),
106
+ nodes: [selfNode],
107
+ };
108
+ }
109
+ async protectedPids() {
110
+ const pids = new Set();
111
+ if (Number.isInteger(this.#client.brokerPid) && this.#client.brokerPid > 0) {
112
+ pids.add(this.#client.brokerPid);
113
+ }
114
+ const connectionPid = await this.#connectionFilePid();
115
+ if (connectionPid) {
116
+ pids.add(connectionPid);
117
+ }
118
+ return [...pids].sort((a, b) => a - b);
119
+ }
120
+ async resolveAgentPid(name) {
121
+ try {
122
+ let sawAgent = false;
123
+ for (let attempt = 1; attempt <= PID_RESOLVE_ATTEMPTS; attempt += 1) {
124
+ const agent = (await this.#client.listAgents()).find((candidate) => candidate.name === name);
125
+ if (agent) {
126
+ sawAgent = true;
127
+ }
128
+ if (typeof agent?.pid === 'number') {
129
+ return { status: 'found', pid: agent.pid };
130
+ }
131
+ if (attempt < PID_RESOLVE_ATTEMPTS) {
132
+ await sleep(PID_RESOLVE_BACKOFF_MS);
133
+ }
134
+ }
135
+ return sawAgent ? { status: 'unresolved' } : { status: 'missing' };
136
+ }
137
+ catch (error) {
138
+ this.#logger?.warn?.('[factory-sdk] unable to resolve spawned agent pid from roster', error);
139
+ return { status: 'unresolved' };
140
+ }
141
+ }
142
+ async #connectionFilePid() {
143
+ const path = this.#connectionPath ?? connectionPathForCwd(this.#cwd);
144
+ if (!path)
145
+ return undefined;
146
+ try {
147
+ const parsed = JSON.parse(await readFile(path, 'utf8'));
148
+ const pid = parsed.pid;
149
+ return typeof pid === 'number' && Number.isInteger(pid) && pid > 0 ? pid : undefined;
150
+ }
151
+ catch {
152
+ return undefined;
153
+ }
154
+ }
155
+ async sendMessage(input) {
156
+ await this.#client.sendMessage(messageInputFrom(input));
157
+ }
158
+ async waitForInjected(input, opts) {
159
+ this.#ensureEventSubscription();
160
+ const result = await this.#client.sendMessage(messageInputFrom(input));
161
+ const eventId = result.event_id;
162
+ const targets = result.targets ?? [];
163
+ if (this.#injectedEventIdSet.has(eventId)) {
164
+ return { eventId, targets };
165
+ }
166
+ const priorFailure = this.#failedDeliveries.get(eventId);
167
+ if (priorFailure) {
168
+ throw priorFailure;
169
+ }
170
+ return await new Promise((resolve, reject) => {
171
+ const timeoutMs = opts?.timeoutMs ?? 30_000;
172
+ const timeout = setTimeout(() => {
173
+ this.#pendingInjected.delete(eventId);
174
+ reject(new Error(`Timed out waiting for delivery_injected for ${eventId}`));
175
+ }, timeoutMs);
176
+ this.#pendingInjected.set(eventId, {
177
+ targets,
178
+ timeout,
179
+ resolve,
180
+ reject,
181
+ });
182
+ });
183
+ }
184
+ async sendInput(name, data) {
185
+ await this.#client.sendInput(name, data);
186
+ }
187
+ onDeliveryFailed(listener) {
188
+ this.#ensureEventSubscription();
189
+ this.#deliveryFailedListeners.add(listener);
190
+ return () => {
191
+ this.#deliveryFailedListeners.delete(listener);
192
+ };
193
+ }
194
+ onAgentMessage(listener) {
195
+ this.#ensureEventSubscription();
196
+ this.#agentMessageListeners.add(listener);
197
+ return () => {
198
+ this.#agentMessageListeners.delete(listener);
199
+ };
200
+ }
201
+ onAgentExit(listener) {
202
+ this.#ensureEventSubscription();
203
+ this.#agentExitListeners.add(listener);
204
+ return () => {
205
+ this.#agentExitListeners.delete(listener);
206
+ };
207
+ }
208
+ async dispose() {
209
+ if (this.#disposed) {
210
+ return;
211
+ }
212
+ this.#disposed = true;
213
+ const pending = [...this.#pendingInjected.values()];
214
+ this.#pendingInjected.clear();
215
+ for (const entry of pending) {
216
+ clearTimeout(entry.timeout);
217
+ entry.reject(new Error('InternalFleetClient disposed before delivery was confirmed'));
218
+ }
219
+ for (const unsubscribe of this.#eventUnsubscribers.splice(0)) {
220
+ unsubscribe();
221
+ }
222
+ this.#agentExitListeners.clear();
223
+ this.#deliveryFailedListeners.clear();
224
+ this.#agentMessageListeners.clear();
225
+ this.#failedDeliveries.clear();
226
+ this.#failedDeliveryIds.length = 0;
227
+ // If we started the broker, shut it down so the process can exit cleanly
228
+ // (a spawned broker's owner-lease renewal otherwise keeps the event loop
229
+ // alive). A reused broker is only disconnected — never shut down — so we
230
+ // never take down the operator's running broker.
231
+ if (this.#ownsBroker && this.#client.shutdown) {
232
+ try {
233
+ await this.#client.shutdown();
234
+ }
235
+ catch (error) {
236
+ this.#logger?.warn?.('[factory-sdk] failed to shut down the spawned relay broker on dispose', error);
237
+ this.#client.disconnect?.();
238
+ }
239
+ }
240
+ else {
241
+ this.#client.disconnect?.();
242
+ }
243
+ this.#subscribed = false;
244
+ }
245
+ #ensureEventSubscription() {
246
+ if (this.#subscribed) {
247
+ return;
248
+ }
249
+ this.#subscribed = true;
250
+ const offEvent = this.#client.onEvent?.((event) => this.#handleBrokerEvent(event));
251
+ if (offEvent)
252
+ this.#eventUnsubscribers.push(offEvent);
253
+ const offDeliveryUpdate = this.#client.addListener?.('deliveryUpdate', (event) => this.#handleBrokerEvent(event));
254
+ if (offDeliveryUpdate)
255
+ this.#eventUnsubscribers.push(offDeliveryUpdate);
256
+ const offAgentExited = this.#client.addListener?.('agentExited', (agent) => this.#emitAgentExit(agent.name, 'exited', {
257
+ key: `agentExited:${JSON.stringify(agent)}`,
258
+ hasStableId: false,
259
+ }));
260
+ if (offAgentExited)
261
+ this.#eventUnsubscribers.push(offAgentExited);
262
+ this.#client.connectEvents?.();
263
+ }
264
+ #handleBrokerEvent(event) {
265
+ if (event.kind === 'delivery_injected') {
266
+ this.#resolveInjected(event.event_id);
267
+ return;
268
+ }
269
+ if (event.kind === 'delivery_failed') {
270
+ this.#rejectInjected(event.event_id, event.reason);
271
+ this.#emitDeliveryFailed({
272
+ to: event.name,
273
+ msgId: event.event_id,
274
+ reason: event.reason,
275
+ }, eventIdentity(event));
276
+ return;
277
+ }
278
+ if (event.kind === 'message_delivery_failed') {
279
+ if (event.event_id) {
280
+ this.#rejectInjected(event.event_id, event.lastError);
281
+ }
282
+ this.#emitDeliveryFailed({
283
+ to: event.to,
284
+ msgId: event.event_id,
285
+ reason: event.lastError,
286
+ }, eventIdentity(event));
287
+ return;
288
+ }
289
+ if (event.kind === 'relay_inbound') {
290
+ this.#emitAgentMessage({
291
+ from: event.from,
292
+ target: event.target,
293
+ body: event.body,
294
+ threadId: event.thread_id,
295
+ eventId: event.event_id,
296
+ }, eventIdentity(event));
297
+ return;
298
+ }
299
+ if (event.kind === 'agent_exit') {
300
+ this.#emitAgentExit(event.name, event.reason, eventIdentity(event));
301
+ return;
302
+ }
303
+ if (event.kind === 'agent_exited') {
304
+ this.#emitAgentExit(event.name, event.reason ?? exitReason(event), eventIdentity(event));
305
+ }
306
+ }
307
+ #resolveInjected(eventId) {
308
+ rememberRecent(eventId, this.#injectedEventIds, this.#injectedEventIdSet);
309
+ const pending = this.#pendingInjected.get(eventId);
310
+ if (!pending) {
311
+ return;
312
+ }
313
+ clearTimeout(pending.timeout);
314
+ this.#pendingInjected.delete(eventId);
315
+ pending.resolve({ eventId, targets: pending.targets });
316
+ }
317
+ #rejectInjected(eventId, reason) {
318
+ const error = new Error(reason ? `Delivery failed for ${eventId}: ${reason}` : `Delivery failed for ${eventId}`);
319
+ this.#failedDeliveries.set(eventId, error);
320
+ this.#failedDeliveryIds.push(eventId);
321
+ if (this.#failedDeliveryIds.length > 500) {
322
+ const oldest = this.#failedDeliveryIds.shift();
323
+ if (oldest) {
324
+ this.#failedDeliveries.delete(oldest);
325
+ }
326
+ }
327
+ const pending = this.#pendingInjected.get(eventId);
328
+ if (!pending) {
329
+ return;
330
+ }
331
+ clearTimeout(pending.timeout);
332
+ this.#pendingInjected.delete(eventId);
333
+ pending.reject(error);
334
+ }
335
+ #emitDeliveryFailed(info, identity) {
336
+ if (this.#rememberEvent(identity)) {
337
+ return;
338
+ }
339
+ for (const listener of this.#deliveryFailedListeners) {
340
+ listener(info);
341
+ }
342
+ }
343
+ #emitAgentMessage(message, identity) {
344
+ if (this.#rememberEvent(identity)) {
345
+ return;
346
+ }
347
+ for (const listener of this.#agentMessageListeners) {
348
+ listener(message);
349
+ }
350
+ }
351
+ #emitAgentExit(name, reason, identity) {
352
+ if (this.#rememberEvent(identity)) {
353
+ return;
354
+ }
355
+ if (this.#rememberAgentExit(name)) {
356
+ return;
357
+ }
358
+ for (const listener of this.#agentExitListeners) {
359
+ listener(name, reason);
360
+ }
361
+ }
362
+ #rememberAgentExit(name) {
363
+ if (this.#exitedAgentNames.has(name)) {
364
+ this.#suppressedDuplicateAgentExits += 1;
365
+ if (this.#suppressedDuplicateAgentExits <= 3 || this.#suppressedDuplicateAgentExits % 100 === 0) {
366
+ this.#logger?.debug?.('[factory-sdk] suppressed duplicate agent exit', {
367
+ count: this.#suppressedDuplicateAgentExits,
368
+ name,
369
+ });
370
+ }
371
+ return true;
372
+ }
373
+ this.#exitedAgentNames.add(name);
374
+ return false;
375
+ }
376
+ #clearAgentExitLatch(name) {
377
+ this.#exitedAgentNames.delete(name);
378
+ }
379
+ #rememberEvent(identity) {
380
+ const { key } = identity;
381
+ if (!identity.hasStableId) {
382
+ this.#missingIdentityEvents += 1;
383
+ if (this.#missingIdentityEvents === 1) {
384
+ this.#logger?.warn?.('[factory-sdk] broker event missing stable identity; deduping by full event content');
385
+ }
386
+ }
387
+ if (this.#seenEventKeys.has(key)) {
388
+ this.#suppressedDuplicateEvents += 1;
389
+ if (this.#suppressedDuplicateEvents <= 3 || this.#suppressedDuplicateEvents % 100 === 0) {
390
+ this.#logger?.debug?.('[factory-sdk] suppressed duplicate broker event', {
391
+ count: this.#suppressedDuplicateEvents,
392
+ key,
393
+ });
394
+ }
395
+ return true;
396
+ }
397
+ this.#seenEventKeys.add(key);
398
+ this.#seenEvents.push(key);
399
+ if (this.#seenEvents.length > 500) {
400
+ const oldest = this.#seenEvents.shift();
401
+ if (oldest) {
402
+ this.#seenEventKeys.delete(oldest);
403
+ }
404
+ }
405
+ return false;
406
+ }
407
+ }
408
+ function connectionPathForCwd(cwd) {
409
+ const stateDir = process.env.AGENT_RELAY_STATE_DIR;
410
+ if (stateDir)
411
+ return join(stateDir, 'connection.json');
412
+ return cwd ? join(cwd, '.agentworkforce', 'relay', 'connection.json') : undefined;
413
+ }
414
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
415
+ function assertSelfNode(node) {
416
+ if (node && node !== 'self') {
417
+ throw new Error(`InternalFleetClient only supports node 'self' tonight; received ${node}`);
418
+ }
419
+ }
420
+ function sessionRefFrom(handle) {
421
+ return handle.session_ref ?? handle.sessionRef ?? handle.sessionId;
422
+ }
423
+ function spawnResultFrom(handle, resolvedPid = handle.pid) {
424
+ const result = { name: handle.name };
425
+ const sessionRef = sessionRefFrom(handle);
426
+ if (sessionRef)
427
+ result.sessionRef = sessionRef;
428
+ if (typeof resolvedPid === 'number')
429
+ result.pid = resolvedPid;
430
+ return result;
431
+ }
432
+ export function resolveAgentRelayMcpCommand() {
433
+ try {
434
+ const packageJsonPath = requireForResolve.resolve('agent-relay/package.json');
435
+ const cliPath = join(dirname(packageJsonPath), 'dist', 'cli', 'index.js');
436
+ accessSync(cliPath, constants.R_OK);
437
+ return { command: process.execPath, args: [cliPath, 'mcp'] };
438
+ }
439
+ catch {
440
+ return undefined;
441
+ }
442
+ }
443
+ export function buildRelayMcpHarnessConfig(input, command) {
444
+ const relayEnv = relayMcpEnv(input.name, input.agentToken);
445
+ return {
446
+ runtime: 'pty',
447
+ command: input.cli,
448
+ args: input.cli === 'claude'
449
+ ? claudeHarnessArgs(input, command, relayEnv)
450
+ : codexHarnessArgs(input, command, relayEnv),
451
+ ...(input.cwd ? { cwd: input.cwd } : {}),
452
+ env: relayEnv,
453
+ metadata: {
454
+ factoryRelayMcp: true,
455
+ relayMcpCommand: command.command,
456
+ relayMcpArgs: command.args,
457
+ },
458
+ };
459
+ }
460
+ function claudeHarnessArgs(input, command, relayEnv) {
461
+ return [
462
+ ...modelArgs(input.model),
463
+ '--mcp-config',
464
+ JSON.stringify({
465
+ mcpServers: {
466
+ 'agent-relay': stdioMcpServer(command, relayEnv),
467
+ },
468
+ }),
469
+ '--strict-mcp-config',
470
+ ...(input.args ?? []),
471
+ ...taskArgs(input.task),
472
+ ];
473
+ }
474
+ function codexHarnessArgs(input, command, relayEnv) {
475
+ const prefix = 'mcp_servers.agent-relay';
476
+ return [
477
+ ...modelArgs(stripProviderPrefix(input.model)),
478
+ '--config',
479
+ `${prefix}.command=${tomlString(command.command)}`,
480
+ '--config',
481
+ `${prefix}.args=${tomlArray(command.args)}`,
482
+ '--config',
483
+ `${prefix}.env=${tomlInlineTable(relayEnv)}`,
484
+ ...(input.args ?? []),
485
+ ...taskArgs(input.task),
486
+ ];
487
+ }
488
+ function stdioMcpServer(command, relayEnv) {
489
+ return {
490
+ type: 'stdio',
491
+ command: command.command,
492
+ args: command.args,
493
+ env: relayEnv,
494
+ };
495
+ }
496
+ function relayMcpEnv(agentName, agentToken) {
497
+ const env = {
498
+ RELAY_AGENT_NAME: agentName,
499
+ RELAY_AGENT_TYPE: 'agent',
500
+ RELAY_STRICT_AGENT_NAME: '1',
501
+ };
502
+ const workspaceKey = nonEmpty(process.env.RELAY_WORKSPACE_KEY) ??
503
+ nonEmpty(process.env.AGENT_RELAY_WORKSPACE_KEY) ??
504
+ relayWorkspaceKeyFromApiKey(process.env.RELAY_API_KEY);
505
+ if (workspaceKey) {
506
+ env.RELAY_WORKSPACE_KEY = workspaceKey;
507
+ env.RELAY_API_KEY = workspaceKey;
508
+ }
509
+ else {
510
+ // No workspace key in the daemon env: the spawned agent's agent-relay MCP
511
+ // will boot WITHOUT credentials, so it joins a bare relaycast workspace and
512
+ // can't reach .integrations (no GitHub reads, no Slack/Linear writebacks).
513
+ // That silently breaks the whole dispatch — make it loud so it's diagnosable.
514
+ console.warn(`[factory] spawning ${agentName} with NO relay workspace key ` +
515
+ '(set RELAY_WORKSPACE_KEY / AGENT_RELAY_WORKSPACE_KEY / RELAY_API_KEY); ' +
516
+ 'its agent-relay MCP cannot reach .integrations — writebacks and GitHub reads will fail.');
517
+ }
518
+ const baseUrl = nonEmpty(process.env.RELAY_BASE_URL);
519
+ if (baseUrl)
520
+ env.RELAY_BASE_URL = baseUrl;
521
+ const defaultWorkspace = nonEmpty(process.env.RELAY_DEFAULT_WORKSPACE);
522
+ if (defaultWorkspace)
523
+ env.RELAY_DEFAULT_WORKSPACE = defaultWorkspace;
524
+ const workspacesJson = nonEmpty(process.env.RELAY_WORKSPACES_JSON);
525
+ if (workspacesJson)
526
+ env.RELAY_WORKSPACES_JSON = workspacesJson;
527
+ const relayAgentToken = nonEmpty(agentToken);
528
+ if (relayAgentToken)
529
+ env.RELAY_AGENT_TOKEN = relayAgentToken;
530
+ return env;
531
+ }
532
+ function modelArgs(model) {
533
+ return model ? ['--model', model] : [];
534
+ }
535
+ function taskArgs(task) {
536
+ return task ? [task] : [];
537
+ }
538
+ function stripProviderPrefix(model) {
539
+ if (!model)
540
+ return undefined;
541
+ const idx = model.indexOf('/');
542
+ return idx >= 0 ? model.slice(idx + 1) : model;
543
+ }
544
+ function tomlString(value) {
545
+ return JSON.stringify(value);
546
+ }
547
+ function tomlArray(values) {
548
+ return `[${values.map(tomlString).join(', ')}]`;
549
+ }
550
+ function tomlInlineTable(values) {
551
+ return `{ ${Object.entries(values)
552
+ .sort(([a], [b]) => a.localeCompare(b))
553
+ .map(([key, value]) => `${tomlString(key)} = ${tomlString(value)}`)
554
+ .join(', ')} }`;
555
+ }
556
+ function nonEmpty(value) {
557
+ const trimmed = value?.trim();
558
+ return trimmed || undefined;
559
+ }
560
+ function relayWorkspaceKeyFromApiKey(value) {
561
+ const trimmed = nonEmpty(value);
562
+ return trimmed?.startsWith('rk_live_') ? trimmed : undefined;
563
+ }
564
+ function messageInputFrom(input) {
565
+ return {
566
+ to: input.to,
567
+ text: input.text,
568
+ from: input.from,
569
+ data: input.data,
570
+ };
571
+ }
572
+ function eventIdentity(event) {
573
+ const record = event;
574
+ const stable = record.event_id ?? record.delivery_id;
575
+ return {
576
+ key: `${event.kind}:${stable ?? ''}:${JSON.stringify(event)}`,
577
+ hasStableId: Boolean(stable),
578
+ };
579
+ }
580
+ function rememberRecent(value, values, set) {
581
+ if (set.has(value)) {
582
+ return;
583
+ }
584
+ set.add(value);
585
+ values.push(value);
586
+ if (values.length > 500) {
587
+ const oldest = values.shift();
588
+ if (oldest) {
589
+ set.delete(oldest);
590
+ }
591
+ }
592
+ }
593
+ function exitReason(event) {
594
+ if (event.signal) {
595
+ return `signal:${event.signal}`;
596
+ }
597
+ if (typeof event.code === 'number') {
598
+ return `code:${event.code}`;
599
+ }
600
+ return 'exited';
601
+ }
602
+ //# sourceMappingURL=internal-fleet-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-fleet-client.js","sourceRoot":"","sources":["../../src/fleet/internal-fleet-client.ts"],"names":[],"mappings":"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"}