@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,571 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { dirname, join, resolve } from 'node:path';
4
+ import { ensureLocalMount } from '../mount/local-mount-preflight.js';
5
+ import { FactoryConfigSchema, RelayfileCloudMountClient, checkFactoryLoopLiveness, closeProbePr, createFactory, createFleet, ensureRelayBroker, defaultGhRunner, isInFactoryScope, readLinearIssueWithCanonicalFallback, reapFactoryOrphansOnce, readFactoryLoopHeartbeat, resolveFactoryStates, resolveFactoryWorkspace, } from '../index.js';
6
+ import { FakeFleetClient, FakeMountClient } from '../testing/index.js';
7
+ export async function runFleetCli(argv, deps = {}) {
8
+ const out = deps.stdout ?? process.stdout;
9
+ const err = deps.stderr ?? process.stderr;
10
+ let fleet;
11
+ try {
12
+ const { globals, args } = parseGlobalOptions(argv);
13
+ const command = parseFleetCommand(args);
14
+ if (command.kind === 'factory-close-probe') {
15
+ // Manual close-probe remains strict; the daemon relaxes the title marker only after issue-synthetic classification.
16
+ const result = await (deps.probeCloser ?? closeProbePr)({
17
+ repo: command.repo,
18
+ prNumber: command.prNumber,
19
+ expectedIssueKey: command.issue,
20
+ });
21
+ writeJson(out, result);
22
+ return 0;
23
+ }
24
+ const loaded = command.kind.startsWith('factory') ? await loadConfig(globals.config) : undefined;
25
+ fleet = await buildFleet(globals, loaded, deps);
26
+ switch (command.kind) {
27
+ case 'spawn': {
28
+ const name = command.input.name ?? defaultAgentName(command.input.capability, deps.now?.() ?? Date.now());
29
+ if (command.input.sessionRef) {
30
+ writeJson(out, await fleet.resume({
31
+ name,
32
+ sessionRef: command.input.sessionRef,
33
+ node: command.input.node,
34
+ capability: command.input.capability,
35
+ }));
36
+ return 0;
37
+ }
38
+ writeJson(out, await fleet.spawn({
39
+ name,
40
+ capability: command.input.capability,
41
+ node: command.input.node ?? 'self',
42
+ task: command.input.task,
43
+ model: command.input.model,
44
+ cwd: command.input.cwd,
45
+ }));
46
+ return 0;
47
+ }
48
+ case 'roster':
49
+ writeJson(out, await fleet.roster());
50
+ return 0;
51
+ case 'release':
52
+ await fleet.release(command.name, command.reason);
53
+ writeJson(out, { released: command.name });
54
+ return 0;
55
+ case 'factory':
56
+ case 'factory-canary':
57
+ case 'factory-triage':
58
+ case 'factory-dispatch': {
59
+ if (!loaded)
60
+ throw new Error('factory command requires config');
61
+ if (command.kind === 'factory' && command.action === 'reap-orphans') {
62
+ writeJson(out, await reapFactoryOrphansOnce({
63
+ heartbeatPath: loaded.config.loop.heartbeatPath,
64
+ registryPath: loaded.config.loop.registryPath,
65
+ staleMs: loaded.config.loop.heartbeatStaleMs,
66
+ fleet,
67
+ }));
68
+ return 0;
69
+ }
70
+ // Derive the workspace from the cloud session when it isn't pinned in
71
+ // config. resolveFactoryWorkspace() returns the relayfile handle plus
72
+ // the cloud UUID for the same workspace; the UUID is forwarded to the
73
+ // mount staleness check as an accepted alias.
74
+ let acceptableMountIds;
75
+ if (!loaded.config.workspaceId) {
76
+ const workspace = await (deps.resolveWorkspace ?? resolveFactoryWorkspace)();
77
+ loaded.config.workspaceId = workspace.workspaceId;
78
+ if (workspace.cloudWorkspaceId)
79
+ acceptableMountIds = [workspace.cloudWorkspaceId];
80
+ }
81
+ const workspaceId = loaded.config.workspaceId;
82
+ if (!workspaceId)
83
+ throw new Error('factory command could not resolve a workspaceId');
84
+ const mount = await buildMount(loaded, deps);
85
+ // Resolve the factory's Linear states (role <-> UUID, per team) from
86
+ // /linear/states by name, with config.stateIds as an explicit-UUID
87
+ // fallback. Nothing about state names/ids is hardcoded.
88
+ const stateResolution = await (deps.resolveStates ?? defaultResolveStates)(mount, loaded.config);
89
+ const factory = (deps.createFactory ?? createFactory)(loaded.config, {
90
+ mount,
91
+ fleet,
92
+ stateResolution,
93
+ probePrGhRunner: deps.probePrGhRunner ?? defaultGhRunner,
94
+ });
95
+ return await runFactoryCommand(command, factory, mount, fleet, loaded.config, globals, out, deps, workspaceId, acceptableMountIds);
96
+ }
97
+ }
98
+ return 1;
99
+ }
100
+ catch (error) {
101
+ err.write(`${error instanceof Error ? error.message : String(error)}\n`);
102
+ return 1;
103
+ }
104
+ finally {
105
+ await fleet?.dispose();
106
+ }
107
+ }
108
+ export function parseFleetCommand(args) {
109
+ const [verb, ...rest] = args;
110
+ if (!verb) {
111
+ throw new Error(usage());
112
+ }
113
+ if (verb === 'spawn') {
114
+ const [capability, ...flags] = rest;
115
+ if (!isCapability(capability)) {
116
+ throw new Error('fleet spawn requires capability spawn:codex, spawn:claude, or workflow:run');
117
+ }
118
+ const parsed = parseFlags(flags);
119
+ return {
120
+ kind: 'spawn',
121
+ input: {
122
+ capability,
123
+ name: parsed.name,
124
+ node: parsed.node,
125
+ task: parsed.task,
126
+ model: parsed.model,
127
+ sessionRef: parsed.resume,
128
+ cwd: parsed.cwd,
129
+ },
130
+ };
131
+ }
132
+ if (verb === 'roster' || verb === 'ls') {
133
+ return { kind: 'roster' };
134
+ }
135
+ if (verb === 'release') {
136
+ const [name, ...flags] = rest;
137
+ if (!name)
138
+ throw new Error('fleet release requires agent name');
139
+ return { kind: 'release', name, reason: parseFlags(flags).reason };
140
+ }
141
+ if (verb === 'factory') {
142
+ return parseFactoryCommand(rest);
143
+ }
144
+ throw new Error(`Unknown fleet command: ${verb}`);
145
+ }
146
+ export function parseGlobalOptions(argv) {
147
+ const args = [];
148
+ const globals = { backend: 'internal', dryRun: false };
149
+ for (let index = 0; index < argv.length; index += 1) {
150
+ const arg = argv[index];
151
+ if (arg === '--backend') {
152
+ const backend = argv[++index];
153
+ if (backend !== 'internal' && backend !== 'relay')
154
+ throw new Error(`Invalid --backend ${backend ?? ''}`);
155
+ globals.backend = backend;
156
+ }
157
+ else if (arg === '--config') {
158
+ globals.config = requireValue(argv, ++index, '--config');
159
+ }
160
+ else if (arg === '--dry-run') {
161
+ globals.dryRun = true;
162
+ }
163
+ else {
164
+ args.push(arg);
165
+ }
166
+ }
167
+ return { globals, args };
168
+ }
169
+ async function runFactoryCommand(command, factory, mount, fleet, config, globals, out, deps = {}, workspaceId = config.workspaceId ?? '', acceptableMountIds) {
170
+ if (command.kind === 'factory') {
171
+ if (command.action === 'start') {
172
+ await (deps.ensureLocalMount ?? ensureLocalMount)(workspaceId, process.cwd(), {
173
+ acceptableWorkspaceIds: acceptableMountIds,
174
+ });
175
+ const waiter = createStopSignalWaiter();
176
+ let stoppedBySignal = false;
177
+ const flushAndExit = async (code) => {
178
+ try {
179
+ await (deps.flushDaemonOutput ?? flushProcessOutput)();
180
+ }
181
+ finally {
182
+ const daemonExit = deps.daemonExit ?? ((exitCode) => process.exit(exitCode));
183
+ daemonExit(code);
184
+ waiter.resolve(code);
185
+ }
186
+ };
187
+ const removeSignalHandlers = installFactoryStopSignalHandlers(factory, {
188
+ exit: (code) => {
189
+ stoppedBySignal = true;
190
+ void flushAndExit(code);
191
+ },
192
+ processLike: deps.stopSignalProcessLike,
193
+ });
194
+ try {
195
+ await factory.start({ mode: command.mode });
196
+ const code = await (deps.waitForStopSignal?.() ?? waiter.promise);
197
+ return typeof code === 'number' ? code : 0;
198
+ }
199
+ finally {
200
+ removeSignalHandlers();
201
+ if (!stoppedBySignal) {
202
+ await factory.stop();
203
+ }
204
+ }
205
+ }
206
+ if (command.action === 'run-once') {
207
+ writeJson(out, await factory.runOnce({ dryRun: globals.dryRun }));
208
+ return 0;
209
+ }
210
+ if (command.action === 'status') {
211
+ writeJson(out, factory.status());
212
+ return 0;
213
+ }
214
+ if (command.action === 'loop-status') {
215
+ const heartbeat = await readFactoryLoopHeartbeat(config.loop.heartbeatPath);
216
+ writeJson(out, checkFactoryLoopLiveness(heartbeat, { staleMs: config.loop.heartbeatStaleMs }));
217
+ return 0;
218
+ }
219
+ if (command.action === 'kill-loop') {
220
+ const heartbeat = await readFactoryLoopHeartbeat(config.loop.heartbeatPath);
221
+ if (!heartbeat?.pid) {
222
+ throw new Error(`No factory loop heartbeat at ${config.loop.heartbeatPath}`);
223
+ }
224
+ process.kill(heartbeat.pid, 'SIGTERM');
225
+ writeJson(out, { killed: heartbeat.pid, signal: 'SIGTERM' });
226
+ return 0;
227
+ }
228
+ if (command.action === 'reap-orphans') {
229
+ writeJson(out, await reapFactoryOrphansOnce({
230
+ heartbeatPath: config.loop.heartbeatPath,
231
+ registryPath: config.loop.registryPath,
232
+ staleMs: config.loop.heartbeatStaleMs,
233
+ fleet,
234
+ }));
235
+ return 0;
236
+ }
237
+ const removeSignalHandlers = installFactoryStopSignalHandlers(factory, {
238
+ processLike: deps.stopSignalProcessLike,
239
+ });
240
+ try {
241
+ const reports = await factory.runLoop({ dryRun: globals.dryRun });
242
+ writeJson(out, { reports, status: factory.status() });
243
+ }
244
+ finally {
245
+ removeSignalHandlers();
246
+ await factory.stop();
247
+ }
248
+ return 0;
249
+ }
250
+ if (command.kind === 'factory-canary') {
251
+ const report = await factory.runOnce({ dryRun: true });
252
+ const result = evaluateFactoryCanary(report, command.issue);
253
+ writeJson(out, result);
254
+ return result.ok ? 0 : 1;
255
+ }
256
+ const issue = await readIssueArg(mount, command.issue);
257
+ const decision = await factory.triageIssue(issue);
258
+ if (command.kind === 'factory-triage') {
259
+ writeJson(out, decision);
260
+ return 0;
261
+ }
262
+ writeJson(out, await factory.dispatch(decision, { dryRun: globals.dryRun }));
263
+ return 0;
264
+ }
265
+ function parseFactoryCommand(args) {
266
+ const [action, issueOrPr, ...flags] = args;
267
+ if (action === 'start') {
268
+ return { kind: 'factory', action, ...parseFactoryStartFlags([issueOrPr, ...flags]) };
269
+ }
270
+ if (action === 'run-once' || action === 'loop' || action === 'status' || action === 'loop-status' || action === 'kill-loop' || action === 'reap-orphans') {
271
+ return { kind: 'factory', action };
272
+ }
273
+ if (action === 'canary') {
274
+ if (!issueOrPr)
275
+ throw new Error('fleet factory canary requires an issue key or path');
276
+ return { kind: 'factory-canary', issue: issueOrPr };
277
+ }
278
+ if (action === 'triage') {
279
+ if (!issueOrPr)
280
+ throw new Error('fleet factory triage requires an issue key or path');
281
+ return { kind: 'factory-triage', issue: issueOrPr };
282
+ }
283
+ if (action === 'dispatch') {
284
+ if (!issueOrPr)
285
+ throw new Error('fleet factory dispatch requires an issue key or path');
286
+ return { kind: 'factory-dispatch', issue: issueOrPr };
287
+ }
288
+ if (action === 'close-probe') {
289
+ const prNumber = Number(issueOrPr);
290
+ if (!Number.isInteger(prNumber) || prNumber <= 0)
291
+ throw new Error('fleet factory close-probe requires a PR number');
292
+ const parsed = parseFlags(flags);
293
+ if (!parsed.repo || !parsed.issue)
294
+ throw new Error('fleet factory close-probe requires --repo <owner/repo> --issue <KEY>');
295
+ return { kind: 'factory-close-probe', prNumber, repo: parsed.repo, issue: parsed.issue };
296
+ }
297
+ throw new Error(`Unknown fleet factory action: ${action ?? ''}`);
298
+ }
299
+ // Canary: assert a known "Ready for Agent" issue is classified dispatch-ready
300
+ // by the REAL triage path against the live mount. This is the regression
301
+ // detector for sync-fidelity drift (sparse records / stub primaries) — if it
302
+ // flips to skipped, the adapter/sync contract broke. Exits non-zero with the
303
+ // offending skip reason so CI/cron can alert.
304
+ function evaluateFactoryCanary(report, issueArg) {
305
+ const wantKey = issueArg.startsWith('/')
306
+ ? (issueArg.split('/').at(-1) ?? '').replace(/\.json$/u, '').split('__')[0]
307
+ : issueArg;
308
+ const matches = (ref) => ref.key === wantKey;
309
+ if (report.dispatched.some((d) => matches(d.issue))) {
310
+ return { ok: true, issue: wantKey, status: 'dispatched' };
311
+ }
312
+ if (report.triaged.some((t) => matches(t.issue))) {
313
+ return { ok: true, issue: wantKey, status: 'triaged' };
314
+ }
315
+ const skipped = report.skipped.find((s) => matches(s.issue));
316
+ if (skipped) {
317
+ return { ok: false, issue: wantKey, status: 'skipped', reason: skipped.reason };
318
+ }
319
+ if (!report.pulled.some(matches)) {
320
+ return {
321
+ ok: false,
322
+ issue: wantKey,
323
+ status: 'not-found',
324
+ reason: 'issue was not enumerated from the mount (sync may be missing it or it is in-flight)',
325
+ };
326
+ }
327
+ return {
328
+ ok: false,
329
+ issue: wantKey,
330
+ status: 'unknown',
331
+ reason: 'issue pulled but neither dispatched, triaged, nor skipped',
332
+ };
333
+ }
334
+ function parseFactoryStartFlags(args) {
335
+ let mode;
336
+ const flags = args.filter((arg) => Boolean(arg));
337
+ for (let index = 0; index < flags.length; index += 1) {
338
+ const flag = flags[index];
339
+ if (flag === '--mode') {
340
+ const value = requireValue(flags, ++index, '--mode');
341
+ if (value !== 'live')
342
+ throw new Error(`Invalid factory start mode: ${value}`);
343
+ mode = value;
344
+ continue;
345
+ }
346
+ throw new Error(`Unknown fleet factory start option: ${flag}`);
347
+ }
348
+ return { mode };
349
+ }
350
+ async function loadConfig(path) {
351
+ if (!path)
352
+ throw new Error('factory commands require --config <path>');
353
+ const raw = JSON.parse(await readFile(path, 'utf8'));
354
+ const record = asRecord(raw);
355
+ return {
356
+ config: FactoryConfigSchema.parse(record.factoryConfig ?? record),
357
+ fixtureFiles: record.fixtureFiles ? asRecord(record.fixtureFiles) : undefined,
358
+ };
359
+ }
360
+ async function buildFleet(globals, loaded, deps) {
361
+ if (deps.fleet)
362
+ return deps.fleet;
363
+ if (globals.backend === 'internal' && hasExplicitFixtureFiles(loaded))
364
+ return new FakeFleetClient();
365
+ const cwd = process.cwd();
366
+ const connectionPath = resolveBrokerConnectionPath(cwd);
367
+ // An injected createFleet owns fleet construction entirely (tests), so skip the
368
+ // real broker bootstrap.
369
+ if (deps.createFleet) {
370
+ return deps.createFleet({ backend: globals.backend, cwd, connectionPath });
371
+ }
372
+ // The internal backend talks to a relay broker. Reuse the one already running
373
+ // for this workspace, or start one if none is up, so `factory <run-once|loop>`
374
+ // works without a separately-started broker. The relay backend manages its own
375
+ // connection and needs no local broker.
376
+ if (globals.backend === 'internal') {
377
+ const stderr = deps.stderr ?? process.stderr;
378
+ const logger = {
379
+ info: (message, ...args) => stderr.write(`${message}${formatLogArgs(args)}\n`),
380
+ };
381
+ const { client, started } = await (deps.ensureRelayBroker ?? ensureRelayBroker)({ cwd, connectionPath, logger });
382
+ return createFleet({ backend: 'internal', cwd, connectionPath }, { harnessClient: client, ownsBroker: started });
383
+ }
384
+ return createFleet({ backend: globals.backend, cwd, connectionPath });
385
+ }
386
+ function formatLogArgs(args) {
387
+ if (args.length === 0)
388
+ return '';
389
+ try {
390
+ return ` ${args.map((arg) => (typeof arg === 'string' ? arg : JSON.stringify(arg))).join(' ')}`;
391
+ }
392
+ catch {
393
+ return '';
394
+ }
395
+ }
396
+ export function resolveBrokerConnectionPath(startCwd = process.cwd()) {
397
+ let current = resolve(startCwd);
398
+ for (;;) {
399
+ const candidate = join(current, '.agentworkforce', 'relay', 'connection.json');
400
+ if (existsSync(candidate)) {
401
+ return candidate;
402
+ }
403
+ const parent = dirname(current);
404
+ if (parent === current) {
405
+ return undefined;
406
+ }
407
+ current = parent;
408
+ }
409
+ }
410
+ async function defaultResolveStates(mount, config) {
411
+ return resolveFactoryStates(mount, {
412
+ states: config.linear.states,
413
+ statesByTeam: config.linear.statesByTeam,
414
+ stateIds: config.stateIds,
415
+ teams: config.subscription.teams,
416
+ });
417
+ }
418
+ async function buildMount(loaded, deps) {
419
+ if (deps.mount)
420
+ return deps.mount;
421
+ if (hasExplicitFixtureFiles(loaded))
422
+ return new FakeMountClient(loaded.fixtureFiles);
423
+ let mount;
424
+ mount = await (deps.cloudMountFromConfig ?? RelayfileCloudMountClient.fromConfig)({
425
+ workspaceId: loaded.config.workspaceId,
426
+ isAllowedDraft: (path, content, opts) => isAllowedFactoryDraft(path, content, opts, mount, loaded.config),
427
+ });
428
+ return mount;
429
+ }
430
+ const hasExplicitFixtureFiles = (loaded) => loaded?.fixtureFiles !== undefined;
431
+ async function isAllowedFactoryDraft(path, content, opts, mount, config) {
432
+ if (!opts?.guarded)
433
+ return false;
434
+ // Comment writeback nested under its issue: /linear/issues/<ref>/comments/<draft>.json.
435
+ // Scope-check the owning issue (the draft content is a comment, not an issue).
436
+ const nestedComment = /^\/linear\/issues\/([^/]+)\/comments\/[^/]+$/u.exec(path);
437
+ if (nestedComment) {
438
+ const issuePath = `/linear/issues/${nestedComment[1]}.json`;
439
+ try {
440
+ const issue = await readLinearIssueWithCanonicalFallback(mount, issuePath);
441
+ return isInFactoryScope(issue, config.safety);
442
+ }
443
+ catch {
444
+ return false;
445
+ }
446
+ }
447
+ if (path.startsWith('/linear/issues/')) {
448
+ if (isInFactoryScope(scopeIssueFromDraftContent(content), config.safety))
449
+ return true;
450
+ try {
451
+ const issue = await readLinearIssueWithCanonicalFallback(mount, path);
452
+ return isInFactoryScope(issue, config.safety);
453
+ }
454
+ catch {
455
+ return false;
456
+ }
457
+ }
458
+ if (/^\/slack\/channels\/[^/]+\/messages\/.+/u.test(path)) {
459
+ return true;
460
+ }
461
+ return false;
462
+ }
463
+ const scopeIssueFromDraftContent = (content) => ({
464
+ title: typeof asRecord(content)?.title === 'string' ? asRecord(content)?.title : '',
465
+ team: typeof asRecord(asRecord(content)?.team)?.key === 'string'
466
+ ? asRecord(asRecord(content)?.team)?.key
467
+ : undefined,
468
+ raw: asRecord(content),
469
+ });
470
+ async function readIssueArg(mount, issueArg) {
471
+ const path = issueArg.startsWith('/') ? issueArg : await findIssuePath(mount, issueArg);
472
+ return readLinearIssueWithCanonicalFallback(mount, path);
473
+ }
474
+ async function findIssuePath(mount, key) {
475
+ const matches = (await mount.listTree('/linear/issues/'))
476
+ .filter((path) => path.startsWith(`/linear/issues/${key}__`) || path === `/linear/issues/${key}.json`);
477
+ if (matches.length !== 1) {
478
+ throw new Error(`Unable to resolve issue ${key}: found ${matches.length} matches`);
479
+ }
480
+ return matches[0];
481
+ }
482
+ function parseFlags(args) {
483
+ const flags = {};
484
+ for (let index = 0; index < args.length; index += 1) {
485
+ const arg = args[index];
486
+ if (!arg.startsWith('--'))
487
+ throw new Error(`Unexpected argument ${arg}`);
488
+ const key = arg.slice(2);
489
+ flags[key] = requireValue(args, ++index, arg);
490
+ }
491
+ return flags;
492
+ }
493
+ function requireValue(args, index, flag) {
494
+ const value = args[index];
495
+ if (!value || value.startsWith('--'))
496
+ throw new Error(`${flag} requires a value`);
497
+ return value;
498
+ }
499
+ function writeJson(out, value) {
500
+ out.write(`${JSON.stringify(value, null, 2)}\n`);
501
+ }
502
+ async function flushProcessOutput() {
503
+ await Promise.all([
504
+ flushWritable(process.stdout),
505
+ flushWritable(process.stderr),
506
+ ]);
507
+ }
508
+ function flushWritable(stream) {
509
+ if (stream.destroyed || stream.writableEnded || stream.writable === false) {
510
+ return Promise.resolve();
511
+ }
512
+ return new Promise((resolve) => {
513
+ stream.write('', () => resolve());
514
+ });
515
+ }
516
+ function isCapability(value) {
517
+ return value === 'spawn:codex' || value === 'spawn:claude' || value === 'workflow:run';
518
+ }
519
+ function defaultAgentName(capability, now) {
520
+ return `fleet-${capability.replace('spawn:', '').replace(':', '-')}-${now}`;
521
+ }
522
+ export function installFactoryStopSignalHandlers(factory, opts = {}) {
523
+ const exit = opts.exit ?? ((code) => process.exit(code));
524
+ const processLike = opts.processLike ?? process;
525
+ let stopping;
526
+ let installed = true;
527
+ const remove = () => {
528
+ if (!installed)
529
+ return;
530
+ installed = false;
531
+ processLike.off('SIGINT', onSigint);
532
+ processLike.off('SIGTERM', onSigterm);
533
+ };
534
+ const stopAndExit = () => {
535
+ if (!stopping) {
536
+ stopping = factory.stop();
537
+ }
538
+ void stopping.then(() => {
539
+ remove();
540
+ exit(0);
541
+ }, () => {
542
+ remove();
543
+ exit(1);
544
+ });
545
+ };
546
+ const onSigint = () => stopAndExit();
547
+ const onSigterm = () => stopAndExit();
548
+ processLike.once('SIGINT', onSigint);
549
+ processLike.once('SIGTERM', onSigterm);
550
+ return remove;
551
+ }
552
+ function createStopSignalWaiter() {
553
+ let resolve;
554
+ const promise = new Promise((innerResolve) => {
555
+ resolve = innerResolve;
556
+ });
557
+ return { promise, resolve };
558
+ }
559
+ function asRecord(value) {
560
+ return value !== null && typeof value === 'object' && !Array.isArray(value)
561
+ ? value
562
+ : {};
563
+ }
564
+ function usage() {
565
+ return 'usage: fleet <spawn|roster|ls|release|factory> [options]';
566
+ }
567
+ export async function main(argv = process.argv.slice(2)) {
568
+ const code = await runFleetCli(argv);
569
+ process.exitCode = code;
570
+ }
571
+ //# sourceMappingURL=fleet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../src/cli/fleet.ts"],"names":[],"mappings":"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"}