@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.
- package/README.md +182 -23
- package/bin/factory.mjs +7 -0
- package/dist/cli/fleet.d.ts +81 -0
- package/dist/cli/fleet.d.ts.map +1 -0
- package/dist/cli/fleet.js +571 -0
- package/dist/cli/fleet.js.map +1 -0
- package/dist/config/schema.d.ts +1313 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +320 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/constants/linear.d.ts +6 -0
- package/dist/constants/linear.d.ts.map +1 -0
- package/dist/constants/linear.js +21 -0
- package/dist/constants/linear.js.map +1 -0
- package/dist/constants/slack.d.ts +3 -0
- package/dist/constants/slack.d.ts.map +1 -0
- package/dist/constants/slack.js +3 -0
- package/dist/constants/slack.js.map +1 -0
- package/dist/dispatch/templates.d.ts +52 -0
- package/dist/dispatch/templates.d.ts.map +1 -0
- package/dist/dispatch/templates.js +118 -0
- package/dist/dispatch/templates.js.map +1 -0
- package/dist/fleet/create-fleet.d.ts +14 -0
- package/dist/fleet/create-fleet.d.ts.map +1 -0
- package/dist/fleet/create-fleet.js +15 -0
- package/dist/fleet/create-fleet.js.map +1 -0
- package/dist/fleet/ensure-relay-broker.d.ts +24 -0
- package/dist/fleet/ensure-relay-broker.d.ts.map +1 -0
- package/dist/fleet/ensure-relay-broker.js +56 -0
- package/dist/fleet/ensure-relay-broker.js.map +1 -0
- package/dist/fleet/internal-fleet-client.d.ts +90 -0
- package/dist/fleet/internal-fleet-client.d.ts.map +1 -0
- package/dist/fleet/internal-fleet-client.js +602 -0
- package/dist/fleet/internal-fleet-client.js.map +1 -0
- package/dist/fleet/relay-fleet-client.d.ts +105 -0
- package/dist/fleet/relay-fleet-client.d.ts.map +1 -0
- package/dist/fleet/relay-fleet-client.js +509 -0
- package/dist/fleet/relay-fleet-client.js.map +1 -0
- package/dist/github/index.d.ts +5 -0
- package/dist/github/index.d.ts.map +1 -0
- package/dist/github/index.js +3 -0
- package/dist/github/index.js.map +1 -0
- package/dist/github/merge-gate.d.ts +47 -0
- package/dist/github/merge-gate.d.ts.map +1 -0
- package/dist/github/merge-gate.js +147 -0
- package/dist/github/merge-gate.js.map +1 -0
- package/dist/github/probe-closer.d.ts +15 -0
- package/dist/github/probe-closer.d.ts.map +1 -0
- package/dist/github/probe-closer.js +67 -0
- package/dist/github/probe-closer.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/issue-key-match.d.ts +3 -0
- package/dist/issue-key-match.d.ts.map +1 -0
- package/dist/issue-key-match.js +22 -0
- package/dist/issue-key-match.js.map +1 -0
- package/dist/linear/state-resolver.d.ts +26 -0
- package/dist/linear/state-resolver.d.ts.map +1 -0
- package/dist/linear/state-resolver.js +285 -0
- package/dist/linear/state-resolver.js.map +1 -0
- package/dist/mount/local-mount-preflight.d.ts +9 -0
- package/dist/mount/local-mount-preflight.d.ts.map +1 -0
- package/dist/mount/local-mount-preflight.js +149 -0
- package/dist/mount/local-mount-preflight.js.map +1 -0
- package/dist/mount/relayfile-binary.d.ts +9 -0
- package/dist/mount/relayfile-binary.d.ts.map +1 -0
- package/dist/mount/relayfile-binary.js +177 -0
- package/dist/mount/relayfile-binary.js.map +1 -0
- package/dist/mount/relayfile-cloud-mount-client.d.ts +123 -0
- package/dist/mount/relayfile-cloud-mount-client.d.ts.map +1 -0
- package/dist/mount/relayfile-cloud-mount-client.js +427 -0
- package/dist/mount/relayfile-cloud-mount-client.js.map +1 -0
- package/dist/node/factory-node.d.ts +59 -0
- package/dist/node/factory-node.d.ts.map +1 -0
- package/dist/node/factory-node.js +351 -0
- package/dist/node/factory-node.js.map +1 -0
- package/dist/node/factory.node.d.ts +3 -0
- package/dist/node/factory.node.d.ts.map +1 -0
- package/dist/node/factory.node.js +5 -0
- package/dist/node/factory.node.js.map +1 -0
- package/dist/orchestrator/batch-tracker.d.ts +42 -0
- package/dist/orchestrator/batch-tracker.d.ts.map +1 -0
- package/dist/orchestrator/batch-tracker.js +125 -0
- package/dist/orchestrator/batch-tracker.js.map +1 -0
- package/dist/orchestrator/factory.d.ts +58 -0
- package/dist/orchestrator/factory.d.ts.map +1 -0
- package/dist/orchestrator/factory.js +4372 -0
- package/dist/orchestrator/factory.js.map +1 -0
- package/dist/orchestrator/index.d.ts +5 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +4 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/process-identity.d.ts +23 -0
- package/dist/orchestrator/process-identity.d.ts.map +1 -0
- package/dist/orchestrator/process-identity.js +122 -0
- package/dist/orchestrator/process-identity.js.map +1 -0
- package/dist/orchestrator/reaper.d.ts +60 -0
- package/dist/orchestrator/reaper.d.ts.map +1 -0
- package/dist/orchestrator/reaper.js +293 -0
- package/dist/orchestrator/reaper.js.map +1 -0
- package/dist/ports/fleet.d.ts +101 -0
- package/dist/ports/fleet.d.ts.map +1 -0
- package/dist/ports/fleet.js +2 -0
- package/dist/ports/fleet.js.map +1 -0
- package/dist/ports/index.d.ts +5 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +2 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/ports/mount.d.ts +56 -0
- package/dist/ports/mount.d.ts.map +1 -0
- package/dist/ports/mount.js +2 -0
- package/dist/ports/mount.js.map +1 -0
- package/dist/ports/state.d.ts +61 -0
- package/dist/ports/state.d.ts.map +1 -0
- package/dist/ports/state.js +2 -0
- package/dist/ports/state.js.map +1 -0
- package/dist/ports/system.d.ts +15 -0
- package/dist/ports/system.d.ts.map +1 -0
- package/dist/ports/system.js +2 -0
- package/dist/ports/system.js.map +1 -0
- package/dist/ports/writeback.d.ts +25 -0
- package/dist/ports/writeback.d.ts.map +1 -0
- package/dist/ports/writeback.js +2 -0
- package/dist/ports/writeback.js.map +1 -0
- package/dist/safety/factory-scope.d.ts +16 -0
- package/dist/safety/factory-scope.d.ts.map +1 -0
- package/dist/safety/factory-scope.js +107 -0
- package/dist/safety/factory-scope.js.map +1 -0
- package/dist/state/in-memory-state-store.d.ts +31 -0
- package/dist/state/in-memory-state-store.d.ts.map +1 -0
- package/dist/state/in-memory-state-store.js +115 -0
- package/dist/state/in-memory-state-store.js.map +1 -0
- package/dist/state/index.d.ts +3 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +2 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/store.d.ts +29 -0
- package/dist/state/store.d.ts.map +1 -0
- package/dist/state/store.js +26 -0
- package/dist/state/store.js.map +1 -0
- package/dist/subscriptions/common.d.ts +7 -0
- package/dist/subscriptions/common.d.ts.map +1 -0
- package/dist/subscriptions/common.js +59 -0
- package/dist/subscriptions/common.js.map +1 -0
- package/dist/subscriptions/event-client.d.ts +40 -0
- package/dist/subscriptions/event-client.d.ts.map +1 -0
- package/dist/subscriptions/event-client.js +234 -0
- package/dist/subscriptions/event-client.js.map +1 -0
- package/dist/subscriptions/globs.d.ts +5 -0
- package/dist/subscriptions/globs.d.ts.map +1 -0
- package/dist/subscriptions/globs.js +50 -0
- package/dist/subscriptions/globs.js.map +1 -0
- package/dist/subscriptions/index.d.ts +8 -0
- package/dist/subscriptions/index.d.ts.map +1 -0
- package/dist/subscriptions/index.js +5 -0
- package/dist/subscriptions/index.js.map +1 -0
- package/dist/subscriptions/linear-filter.d.ts +26 -0
- package/dist/subscriptions/linear-filter.d.ts.map +1 -0
- package/dist/subscriptions/linear-filter.js +143 -0
- package/dist/subscriptions/linear-filter.js.map +1 -0
- package/dist/subscriptions/specs.d.ts +44 -0
- package/dist/subscriptions/specs.d.ts.map +1 -0
- package/dist/subscriptions/specs.js +195 -0
- package/dist/subscriptions/specs.js.map +1 -0
- package/dist/testing/fakes.d.ts +114 -0
- package/dist/testing/fakes.d.ts.map +1 -0
- package/dist/testing/fakes.js +219 -0
- package/dist/testing/fakes.js.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +2 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/triage/heuristic.d.ts +42 -0
- package/dist/triage/heuristic.d.ts.map +1 -0
- package/dist/triage/heuristic.js +326 -0
- package/dist/triage/heuristic.js.map +1 -0
- package/dist/triage/index.d.ts +7 -0
- package/dist/triage/index.d.ts.map +1 -0
- package/dist/triage/index.js +5 -0
- package/dist/triage/index.js.map +1 -0
- package/dist/triage/llm.d.ts +11 -0
- package/dist/triage/llm.d.ts.map +1 -0
- package/dist/triage/llm.js +48 -0
- package/dist/triage/llm.js.map +1 -0
- package/dist/triage/schema.d.ts +344 -0
- package/dist/triage/schema.d.ts.map +1 -0
- package/dist/triage/schema.js +37 -0
- package/dist/triage/schema.js.map +1 -0
- package/dist/triage/tiered.d.ts +8 -0
- package/dist/triage/tiered.d.ts.map +1 -0
- package/dist/triage/tiered.js +47 -0
- package/dist/triage/tiered.js.map +1 -0
- package/dist/types.d.ts +212 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/webhook/handler.d.ts +22 -0
- package/dist/webhook/handler.d.ts.map +1 -0
- package/dist/webhook/handler.js +57 -0
- package/dist/webhook/handler.js.map +1 -0
- package/dist/webhook/index.d.ts +5 -0
- package/dist/webhook/index.d.ts.map +1 -0
- package/dist/webhook/index.js +3 -0
- package/dist/webhook/index.js.map +1 -0
- package/dist/webhook/registrar.d.ts +16 -0
- package/dist/webhook/registrar.d.ts.map +1 -0
- package/dist/webhook/registrar.js +50 -0
- package/dist/webhook/registrar.js.map +1 -0
- package/dist/writeback/github.d.ts +6 -0
- package/dist/writeback/github.d.ts.map +1 -0
- package/dist/writeback/github.js +48 -0
- package/dist/writeback/github.js.map +1 -0
- package/dist/writeback/index.d.ts +6 -0
- package/dist/writeback/index.d.ts.map +1 -0
- package/dist/writeback/index.js +4 -0
- package/dist/writeback/index.js.map +1 -0
- package/dist/writeback/linear.d.ts +41 -0
- package/dist/writeback/linear.d.ts.map +1 -0
- package/dist/writeback/linear.js +286 -0
- package/dist/writeback/linear.js.map +1 -0
- package/dist/writeback/shared.d.ts +7 -0
- package/dist/writeback/shared.d.ts.map +1 -0
- package/dist/writeback/shared.js +29 -0
- package/dist/writeback/shared.js.map +1 -0
- package/dist/writeback/slack.d.ts +16 -0
- package/dist/writeback/slack.d.ts.map +1 -0
- package/dist/writeback/slack.js +104 -0
- package/dist/writeback/slack.js.map +1 -0
- package/package.json +54 -9
- package/scripts/com.agentrelay.factory-canary.plist.example +53 -0
- package/scripts/factory-canary.sh +89 -0
- package/index.d.ts +0 -2
- 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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"}
|