agent-relay 3.1.14 → 3.1.16
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/dist/index.cjs +126 -11
- package/dist/src/cli/commands/core.d.ts +3 -0
- package/dist/src/cli/commands/core.d.ts.map +1 -1
- package/dist/src/cli/commands/core.js +17 -0
- package/dist/src/cli/commands/core.js.map +1 -1
- package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -1
- package/dist/src/cli/lib/broker-lifecycle.js +47 -81
- package/dist/src/cli/lib/broker-lifecycle.js.map +1 -1
- package/dist/src/cli/lib/core-maintenance.js +1 -1
- package/dist/src/cli/lib/core-maintenance.js.map +1 -1
- package/package.json +8 -8
- package/packages/acp-bridge/package.json +2 -2
- package/packages/config/package.json +1 -1
- package/packages/hooks/package.json +4 -4
- package/packages/memory/package.json +2 -2
- package/packages/openclaw/README.md +4 -7
- package/packages/openclaw/dist/setup.d.ts.map +1 -1
- package/packages/openclaw/dist/setup.js +10 -3
- package/packages/openclaw/dist/setup.js.map +1 -1
- package/packages/openclaw/package.json +2 -2
- package/packages/openclaw/skill/SKILL.md +27 -5
- package/packages/openclaw/src/setup.ts +10 -3
- package/packages/policy/package.json +2 -2
- package/packages/sdk/dist/client.d.ts +1 -0
- package/packages/sdk/dist/client.d.ts.map +1 -1
- package/packages/sdk/dist/client.js +9 -1
- package/packages/sdk/dist/client.js.map +1 -1
- package/packages/sdk/dist/workflows/runner.d.ts +20 -0
- package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/runner.js +130 -11
- package/packages/sdk/dist/workflows/runner.js.map +1 -1
- package/packages/sdk/dist/workflows/types.d.ts +26 -0
- package/packages/sdk/dist/workflows/types.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/types.js.map +1 -1
- package/packages/sdk/package.json +2 -2
- package/packages/sdk/src/client.ts +10 -1
- package/packages/sdk/src/workflows/runner.ts +158 -11
- package/packages/sdk/src/workflows/schema.json +219 -40
- package/packages/sdk/src/workflows/types.ts +29 -0
- package/packages/sdk-py/pyproject.toml +1 -1
- package/packages/sdk-py/src/agent_relay/__init__.py +2 -0
- package/packages/sdk-py/src/agent_relay/types.py +33 -0
- package/packages/telemetry/package.json +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +2 -2
- package/bin/agent-relay-broker-linux-arm64 +0 -0
package/dist/index.cjs
CHANGED
|
@@ -9052,6 +9052,9 @@ var AgentRelayClient = class _AgentRelayClient {
|
|
|
9052
9052
|
this.stderrListeners.delete(listener);
|
|
9053
9053
|
};
|
|
9054
9054
|
}
|
|
9055
|
+
get brokerPid() {
|
|
9056
|
+
return this.child?.pid;
|
|
9057
|
+
}
|
|
9055
9058
|
async start() {
|
|
9056
9059
|
if (this.child) {
|
|
9057
9060
|
return;
|
|
@@ -9279,7 +9282,7 @@ var AgentRelayClient = class _AgentRelayClient {
|
|
|
9279
9282
|
}
|
|
9280
9283
|
});
|
|
9281
9284
|
this.exitPromise = new Promise((resolve3) => {
|
|
9282
|
-
child.once("
|
|
9285
|
+
child.once("close", (code, signal) => {
|
|
9283
9286
|
const detail = this.lastStderrLine ? `: ${this.lastStderrLine}` : "";
|
|
9284
9287
|
const error95 = new AgentRelayProcessError(`broker exited (code=${code ?? "null"}, signal=${signal ?? "null"})${detail}`);
|
|
9285
9288
|
this.failAllPending(error95);
|
|
@@ -47610,6 +47613,8 @@ var WorkflowRunner = class _WorkflowRunner {
|
|
|
47610
47613
|
lastIdleLog = /* @__PURE__ */ new Map();
|
|
47611
47614
|
/** Tracks last logged activity type per agent to avoid duplicate status lines. */
|
|
47612
47615
|
lastActivity = /* @__PURE__ */ new Map();
|
|
47616
|
+
/** Resolved named paths from the top-level `paths` config, keyed by name → absolute directory. */
|
|
47617
|
+
resolvedPaths = /* @__PURE__ */ new Map();
|
|
47613
47618
|
constructor(options = {}) {
|
|
47614
47619
|
this.db = options.db ?? new InMemoryWorkflowDb();
|
|
47615
47620
|
this.workspaceId = options.workspaceId ?? "local";
|
|
@@ -47619,6 +47624,75 @@ var WorkflowRunner = class _WorkflowRunner {
|
|
|
47619
47624
|
this.workersPath = import_node_path8.default.join(this.cwd, ".agent-relay", "team", "workers.json");
|
|
47620
47625
|
this.executor = options.executor;
|
|
47621
47626
|
}
|
|
47627
|
+
// ── Path resolution ─────────────────────────────────────────────────────
|
|
47628
|
+
/** Expand environment variables like $HOME or $VAR in a path string. */
|
|
47629
|
+
static resolveEnvVars(p) {
|
|
47630
|
+
return p.replace(/\$([A-Za-z_][A-Za-z0-9_]*)/g, (_match, varName) => {
|
|
47631
|
+
return process.env[varName] ?? _match;
|
|
47632
|
+
});
|
|
47633
|
+
}
|
|
47634
|
+
/**
|
|
47635
|
+
* Resolve and validate the top-level `paths` definitions from the config.
|
|
47636
|
+
* Returns a map of name → absolute directory path.
|
|
47637
|
+
* Throws if a required path does not exist.
|
|
47638
|
+
*/
|
|
47639
|
+
resolvePathDefinitions(pathDefs, baseCwd) {
|
|
47640
|
+
const resolved = /* @__PURE__ */ new Map();
|
|
47641
|
+
const errors = [];
|
|
47642
|
+
const warnings = [];
|
|
47643
|
+
if (!pathDefs || pathDefs.length === 0)
|
|
47644
|
+
return { resolved, errors, warnings };
|
|
47645
|
+
const seenNames = /* @__PURE__ */ new Set();
|
|
47646
|
+
for (const pd of pathDefs) {
|
|
47647
|
+
if (seenNames.has(pd.name)) {
|
|
47648
|
+
errors.push(`Duplicate path name "${pd.name}"`);
|
|
47649
|
+
continue;
|
|
47650
|
+
}
|
|
47651
|
+
seenNames.add(pd.name);
|
|
47652
|
+
const expanded = _WorkflowRunner.resolveEnvVars(pd.path);
|
|
47653
|
+
const abs = import_node_path8.default.resolve(baseCwd, expanded);
|
|
47654
|
+
resolved.set(pd.name, abs);
|
|
47655
|
+
const isRequired = pd.required !== false;
|
|
47656
|
+
if (!(0, import_node_fs4.existsSync)(abs)) {
|
|
47657
|
+
if (isRequired) {
|
|
47658
|
+
errors.push(`Path "${pd.name}" resolves to "${abs}" which does not exist (required)`);
|
|
47659
|
+
} else {
|
|
47660
|
+
warnings.push(`Path "${pd.name}" resolves to "${abs}" which does not exist (optional)`);
|
|
47661
|
+
}
|
|
47662
|
+
}
|
|
47663
|
+
}
|
|
47664
|
+
return { resolved, errors, warnings };
|
|
47665
|
+
}
|
|
47666
|
+
/**
|
|
47667
|
+
* Resolve an agent's effective working directory, considering `workdir` (named path reference)
|
|
47668
|
+
* and `cwd` (explicit path). `workdir` takes precedence when both are set.
|
|
47669
|
+
*/
|
|
47670
|
+
resolveAgentCwd(agent) {
|
|
47671
|
+
if (agent.workdir) {
|
|
47672
|
+
const resolved = this.resolvedPaths.get(agent.workdir);
|
|
47673
|
+
if (!resolved) {
|
|
47674
|
+
throw new Error(`Agent "${agent.name}" references workdir "${agent.workdir}" which is not defined in paths`);
|
|
47675
|
+
}
|
|
47676
|
+
return resolved;
|
|
47677
|
+
}
|
|
47678
|
+
if (agent.cwd) {
|
|
47679
|
+
return import_node_path8.default.resolve(this.cwd, agent.cwd);
|
|
47680
|
+
}
|
|
47681
|
+
return this.cwd;
|
|
47682
|
+
}
|
|
47683
|
+
/**
|
|
47684
|
+
* Resolve a step's working directory from its `workdir` field (named path reference).
|
|
47685
|
+
* Returns undefined if no workdir is set.
|
|
47686
|
+
*/
|
|
47687
|
+
resolveStepWorkdir(step) {
|
|
47688
|
+
if (!step.workdir)
|
|
47689
|
+
return void 0;
|
|
47690
|
+
const resolved = this.resolvedPaths.get(step.workdir);
|
|
47691
|
+
if (!resolved) {
|
|
47692
|
+
throw new Error(`Step "${step.name}" references workdir "${step.workdir}" which is not defined in paths`);
|
|
47693
|
+
}
|
|
47694
|
+
return resolved;
|
|
47695
|
+
}
|
|
47622
47696
|
// ── Progress logging ────────────────────────────────────────────────────
|
|
47623
47697
|
/** Log a progress message with elapsed time since run start. */
|
|
47624
47698
|
log(msg) {
|
|
@@ -47852,6 +47926,15 @@ var WorkflowRunner = class _WorkflowRunner {
|
|
|
47852
47926
|
estimatedWaves: 0
|
|
47853
47927
|
};
|
|
47854
47928
|
}
|
|
47929
|
+
const pathResult = this.resolvePathDefinitions(resolved.paths, this.cwd);
|
|
47930
|
+
errors.push(...pathResult.errors);
|
|
47931
|
+
warnings.push(...pathResult.warnings);
|
|
47932
|
+
const dryRunPaths = pathResult.resolved;
|
|
47933
|
+
for (const agent of resolved.agents) {
|
|
47934
|
+
if (agent.workdir && !dryRunPaths.has(agent.workdir)) {
|
|
47935
|
+
errors.push(`Agent "${agent.name}" references workdir "${agent.workdir}" which is not defined in paths`);
|
|
47936
|
+
}
|
|
47937
|
+
}
|
|
47855
47938
|
const workflows = resolved.workflows ?? [];
|
|
47856
47939
|
const workflow2 = workflowName ? workflows.find((w) => w.name === workflowName) : workflows[0];
|
|
47857
47940
|
if (!workflow2) {
|
|
@@ -47909,6 +47992,11 @@ ${err.suggestion}`);
|
|
|
47909
47992
|
stepAgentCounts.set(step.agent, (stepAgentCounts.get(step.agent) ?? 0) + 1);
|
|
47910
47993
|
}
|
|
47911
47994
|
}
|
|
47995
|
+
for (const step of resolvedSteps) {
|
|
47996
|
+
if (step.workdir && !dryRunPaths.has(step.workdir)) {
|
|
47997
|
+
errors.push(`Step "${step.name}" references workdir "${step.workdir}" which is not defined in paths`);
|
|
47998
|
+
}
|
|
47999
|
+
}
|
|
47912
48000
|
for (const agent of resolved.agents) {
|
|
47913
48001
|
if (agent.cwd) {
|
|
47914
48002
|
const resolvedCwd = import_node_path8.default.resolve(this.cwd, agent.cwd);
|
|
@@ -47989,7 +48077,7 @@ ${err.suggestion}`);
|
|
|
47989
48077
|
name: a.name,
|
|
47990
48078
|
cli: a.cli,
|
|
47991
48079
|
role: a.role,
|
|
47992
|
-
cwd: a.cwd,
|
|
48080
|
+
cwd: a.workdir ? dryRunPaths.get(a.workdir) : a.cwd,
|
|
47993
48081
|
stepCount: stepAgentCounts.get(a.name) ?? 0
|
|
47994
48082
|
}));
|
|
47995
48083
|
const waves = [];
|
|
@@ -48235,6 +48323,17 @@ ${err.suggestion}`);
|
|
|
48235
48323
|
/** Execute a named workflow from a validated config. */
|
|
48236
48324
|
async execute(config3, workflowName, vars) {
|
|
48237
48325
|
const resolved = vars ? this.resolveVariables(config3, vars) : config3;
|
|
48326
|
+
const pathResult = this.resolvePathDefinitions(resolved.paths, this.cwd);
|
|
48327
|
+
if (pathResult.errors.length > 0) {
|
|
48328
|
+
throw new Error(`Path validation failed:
|
|
48329
|
+
${pathResult.errors.join("\n ")}`);
|
|
48330
|
+
}
|
|
48331
|
+
this.resolvedPaths = pathResult.resolved;
|
|
48332
|
+
if (this.resolvedPaths.size > 0) {
|
|
48333
|
+
for (const [name, abs] of this.resolvedPaths) {
|
|
48334
|
+
console.log(`[workflow] path "${name}" \u2192 ${abs}`);
|
|
48335
|
+
}
|
|
48336
|
+
}
|
|
48238
48337
|
const workflows = resolved.workflows ?? [];
|
|
48239
48338
|
const workflow2 = workflowName ? workflows.find((w) => w.name === workflowName) : workflows[0];
|
|
48240
48339
|
if (!workflow2) {
|
|
@@ -48294,6 +48393,12 @@ ${err.suggestion}`);
|
|
|
48294
48393
|
throw new Error(`Run "${runId}" is in status "${run.status}" and cannot be resumed`);
|
|
48295
48394
|
}
|
|
48296
48395
|
const config3 = vars ? this.resolveVariables(run.config, vars) : run.config;
|
|
48396
|
+
const pathResult = this.resolvePathDefinitions(config3.paths, this.cwd);
|
|
48397
|
+
if (pathResult.errors.length > 0) {
|
|
48398
|
+
throw new Error(`Path validation failed:
|
|
48399
|
+
${pathResult.errors.join("\n ")}`);
|
|
48400
|
+
}
|
|
48401
|
+
this.resolvedPaths = pathResult.resolved;
|
|
48297
48402
|
const workflows = config3.workflows ?? [];
|
|
48298
48403
|
const workflow2 = workflows.find((w) => w.name === run.workflowName);
|
|
48299
48404
|
if (!workflow2) {
|
|
@@ -48769,9 +48874,10 @@ ${trimmedOutput.slice(0, 200)}`);
|
|
|
48769
48874
|
const value = this.resolveDotPath(key, stepOutputContext);
|
|
48770
48875
|
return value !== void 0 ? String(value) : _match;
|
|
48771
48876
|
});
|
|
48877
|
+
const stepCwd = this.resolveStepWorkdir(step) ?? this.cwd;
|
|
48772
48878
|
try {
|
|
48773
48879
|
if (this.executor?.executeDeterministicStep) {
|
|
48774
|
-
const result = await this.executor.executeDeterministicStep(step, resolvedCommand,
|
|
48880
|
+
const result = await this.executor.executeDeterministicStep(step, resolvedCommand, stepCwd);
|
|
48775
48881
|
const failOnError = step.failOnError !== false;
|
|
48776
48882
|
if (failOnError && result.exitCode !== 0) {
|
|
48777
48883
|
throw new Error(`Command failed with exit code ${result.exitCode}: ${result.output.slice(0, 500)}`);
|
|
@@ -48793,7 +48899,7 @@ ${trimmedOutput.slice(0, 200)}`);
|
|
|
48793
48899
|
const output = await new Promise((resolve3, reject) => {
|
|
48794
48900
|
const child = (0, import_node_child_process3.spawn)("sh", ["-c", resolvedCommand], {
|
|
48795
48901
|
stdio: "pipe",
|
|
48796
|
-
cwd:
|
|
48902
|
+
cwd: stepCwd,
|
|
48797
48903
|
env: { ...process.env }
|
|
48798
48904
|
});
|
|
48799
48905
|
const stdoutChunks = [];
|
|
@@ -48896,19 +49002,20 @@ ${trimmedOutput.slice(0, 200)}`);
|
|
|
48896
49002
|
const baseBranch = step.baseBranch ? this.interpolateStepTask(step.baseBranch, stepOutputContext) : "HEAD";
|
|
48897
49003
|
const worktreePath = step.path ? this.interpolateStepTask(step.path, stepOutputContext) : import_node_path8.default.join(".worktrees", step.name);
|
|
48898
49004
|
const createBranch = step.createBranch !== false;
|
|
49005
|
+
const stepCwd = this.resolveStepWorkdir(step) ?? this.cwd;
|
|
48899
49006
|
if (!branch) {
|
|
48900
49007
|
const errorMsg = 'Worktree step missing required "branch" field';
|
|
48901
49008
|
await this.markStepFailed(state, errorMsg, runId);
|
|
48902
49009
|
throw new Error(`Step "${step.name}" failed: ${errorMsg}`);
|
|
48903
49010
|
}
|
|
48904
49011
|
try {
|
|
48905
|
-
const absoluteWorktreePath = import_node_path8.default.resolve(
|
|
49012
|
+
const absoluteWorktreePath = import_node_path8.default.resolve(stepCwd, worktreePath);
|
|
48906
49013
|
const checkBranchCmd = `git rev-parse --verify --quiet ${branch} 2>/dev/null`;
|
|
48907
49014
|
let branchExists = false;
|
|
48908
49015
|
await new Promise((resolve3) => {
|
|
48909
49016
|
const checkChild = (0, import_node_child_process3.spawn)("sh", ["-c", checkBranchCmd], {
|
|
48910
49017
|
stdio: "pipe",
|
|
48911
|
-
cwd:
|
|
49018
|
+
cwd: stepCwd,
|
|
48912
49019
|
env: { ...process.env }
|
|
48913
49020
|
});
|
|
48914
49021
|
checkChild.on("close", (code) => {
|
|
@@ -48930,7 +49037,7 @@ ${trimmedOutput.slice(0, 200)}`);
|
|
|
48930
49037
|
const output = await new Promise((resolve3, reject) => {
|
|
48931
49038
|
const child = (0, import_node_child_process3.spawn)("sh", ["-c", worktreeCmd], {
|
|
48932
49039
|
stdio: "pipe",
|
|
48933
|
-
cwd:
|
|
49040
|
+
cwd: stepCwd,
|
|
48934
49041
|
env: { ...process.env }
|
|
48935
49042
|
});
|
|
48936
49043
|
const stdoutChunks = [];
|
|
@@ -49061,9 +49168,16 @@ ${trimmedOutput.slice(0, 200)}`);
|
|
|
49061
49168
|
resolvedTask += nonInteractiveInfo;
|
|
49062
49169
|
}
|
|
49063
49170
|
}
|
|
49064
|
-
|
|
49171
|
+
let effectiveAgentDef = agentDef;
|
|
49172
|
+
if (step.workdir) {
|
|
49173
|
+
const stepWorkdir = this.resolveStepWorkdir(step);
|
|
49174
|
+
if (stepWorkdir) {
|
|
49175
|
+
effectiveAgentDef = { ...agentDef, cwd: stepWorkdir, workdir: void 0 };
|
|
49176
|
+
}
|
|
49177
|
+
}
|
|
49178
|
+
this.log(`[${step.name}] Spawning agent "${effectiveAgentDef.name}" (cli: ${effectiveAgentDef.cli})${step.workdir ? ` [workdir: ${step.workdir}]` : ""}`);
|
|
49065
49179
|
const resolvedStep = { ...step, task: resolvedTask };
|
|
49066
|
-
const output = this.executor ? await this.executor.executeAgentStep(resolvedStep,
|
|
49180
|
+
const output = this.executor ? await this.executor.executeAgentStep(resolvedStep, effectiveAgentDef, resolvedTask, timeoutMs) : await this.spawnAndWait(effectiveAgentDef, resolvedStep, timeoutMs);
|
|
49067
49181
|
this.log(`[${step.name}] Agent "${agentDef.name}" exited`);
|
|
49068
49182
|
if (step.verification) {
|
|
49069
49183
|
this.runVerification(step.verification, output, step.name, resolvedTask);
|
|
@@ -49206,7 +49320,7 @@ DO NOT:
|
|
|
49206
49320
|
const output = await new Promise((resolve3, reject) => {
|
|
49207
49321
|
const child = (0, import_node_child_process3.spawn)(cmd, args, {
|
|
49208
49322
|
stdio: ["ignore", "pipe", "pipe"],
|
|
49209
|
-
cwd:
|
|
49323
|
+
cwd: this.resolveAgentCwd(agentDef),
|
|
49210
49324
|
env: this.getRelayEnv() ?? { ...process.env }
|
|
49211
49325
|
});
|
|
49212
49326
|
this.registerWorker(agentName, agentDef.cli, step.task ?? "", child.pid, false);
|
|
@@ -49320,6 +49434,7 @@ DO NOT:
|
|
|
49320
49434
|
let stopHeartbeat;
|
|
49321
49435
|
let ptyChunks = [];
|
|
49322
49436
|
try {
|
|
49437
|
+
const agentCwd = this.resolveAgentCwd(agentDef);
|
|
49323
49438
|
agent = await this.relay.spawnPty({
|
|
49324
49439
|
name: agentName,
|
|
49325
49440
|
cli: agentDef.cli,
|
|
@@ -49328,7 +49443,7 @@ DO NOT:
|
|
|
49328
49443
|
channels: agentChannels,
|
|
49329
49444
|
task: taskWithExit,
|
|
49330
49445
|
idleThresholdSecs: agentDef.constraints?.idleThresholdSecs,
|
|
49331
|
-
cwd:
|
|
49446
|
+
cwd: agentCwd !== this.cwd ? agentCwd : void 0
|
|
49332
49447
|
});
|
|
49333
49448
|
if (agent.name !== agentName) {
|
|
49334
49449
|
const oldName = agentName;
|
|
@@ -47,6 +47,8 @@ export interface CoreRelay {
|
|
|
47
47
|
onBrokerStderr?: (listener: (line: string) => void) => () => void;
|
|
48
48
|
/** Relaycast workspace API key, available after the hello handshake. */
|
|
49
49
|
workspaceKey?: string;
|
|
50
|
+
/** PID of the underlying broker process, when available. */
|
|
51
|
+
brokerPid?: number;
|
|
50
52
|
}
|
|
51
53
|
export interface CoreFileSystem {
|
|
52
54
|
existsSync: (path: string) => boolean;
|
|
@@ -99,6 +101,7 @@ export interface CoreDependencies {
|
|
|
99
101
|
onSignal: (signal: NodeJS.Signals, handler: () => void | Promise<void>) => void;
|
|
100
102
|
holdOpen: () => Promise<void>;
|
|
101
103
|
resolveTemplatesDir: () => string;
|
|
104
|
+
isPortInUse: (port: number) => Promise<boolean>;
|
|
102
105
|
log: (...args: unknown[]) => void;
|
|
103
106
|
error: (...args: unknown[]) => void;
|
|
104
107
|
warn: (...args: unknown[]) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/core.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/core.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;AAEtC,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,CAAC,KAAK,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;KACrC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvB,SAAS,EAAE,MAAM,OAAO,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAClE,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,KAAK,MAAM,CAAC;IACjE,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/E,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACxC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACrE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD;AAED,KAAK,UAAU,GAAG;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,gBAAgB,CAAC;IACxC,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,eAAe,GAAG,IAAI,CAAC;IACjE,qBAAqB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,aAAa,EAAE,CAAC;IACjF,qBAAqB,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK;QACpD,KAAK,EAAE,aAAa,EAAE,CAAC;QACvB,OAAO,EAAE,aAAa,EAAE,CAAC;KAC1B,CAAC;IACF,sBAAsB,EAAE,MAAM,MAAM,CAAC;IACrC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC;IAC1D,mBAAmB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACzC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,cAAc,CAAC;IACrG,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9E,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;IACrE,EAAE,EAAE,cAAc,CAAC;IACnB,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1D,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAChF,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,mBAAmB,EAAE,MAAM,MAAM,CAAC;IAClC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AA+OD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,GAAE,OAAO,CAAC,gBAAgB,CAAM,GAAG,IAAI,CAyItG"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
|
+
import net from 'node:net';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
import { fileURLToPath } from 'node:url';
|
|
4
5
|
import { exec, spawn as spawnProcess } from 'node:child_process';
|
|
@@ -118,6 +119,7 @@ function createDefaultRelay(cwd, apiPort = 0) {
|
|
|
118
119
|
shutdown: () => client.shutdown(),
|
|
119
120
|
onBrokerStderr: (listener) => client.onBrokerStderr(listener),
|
|
120
121
|
get workspaceKey() { return client.workspaceKey; },
|
|
122
|
+
get brokerPid() { return client.brokerPid; },
|
|
121
123
|
};
|
|
122
124
|
return relay;
|
|
123
125
|
}
|
|
@@ -159,6 +161,21 @@ function withDefaults(overrides = {}) {
|
|
|
159
161
|
execPath: process.execPath,
|
|
160
162
|
cliScript: process.argv[1] || 'dist/src/cli/bootstrap.js',
|
|
161
163
|
pid: process.pid,
|
|
164
|
+
isPortInUse: (port) => new Promise((resolve) => {
|
|
165
|
+
// Use a connect probe instead of a bind probe. On macOS,
|
|
166
|
+
// net.createServer().listen() sets SO_REUSEADDR which can succeed
|
|
167
|
+
// even when another process is already listening on the port.
|
|
168
|
+
// A connect() call reliably detects whether something is listening.
|
|
169
|
+
const socket = net.createConnection({ port, host: '127.0.0.1' });
|
|
170
|
+
socket.once('connect', () => {
|
|
171
|
+
socket.destroy();
|
|
172
|
+
resolve(true); // something is listening → port is in use
|
|
173
|
+
});
|
|
174
|
+
socket.once('error', () => {
|
|
175
|
+
socket.destroy();
|
|
176
|
+
resolve(false); // nothing listening → port is free
|
|
177
|
+
});
|
|
178
|
+
}),
|
|
162
179
|
now: () => Date.now(),
|
|
163
180
|
sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
|
|
164
181
|
onSignal: (signal, handler) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/cli/commands/core.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/cli/commands/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAExF,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAClC,MAAM,sBAAsB,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,MAAM,CAAC;AA+GhF,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB,EAAE,UAA0B;IACnE,IAAI,OAAO,GAAG,QAAQ,CAAC;IACvB,OAAO,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACrD,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,iBAAiB,CAAC,UAA0B;IACnD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACnD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAE/E,CAAC;QACF,OAAO,WAAW,CAAC,OAAO,IAAI,SAAS,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CAAC,UAA0B;IAC5D,8DAA8D;IAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACvD,IAAI,WAAW,IAAI,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACtD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,yFAAyF;IACzF,MAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,CACxC,OAAO,CAAC,GAAG,EAAE,EACb,IAAI,EACJ,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,MAAM,EACN,UAAU,CACX,CAAC;IACF,IAAI,UAAU,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACjD,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,qFAAqF;IACrF,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC;YAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAEnE,CAAC;YACF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,CAAC;YACzD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC/C,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnC,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gEAAgE;QAClE,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,wBAAwB,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAElE,MAAM,WAAW,GAAG;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;KACxC,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,SAAS;YACX,CAAC;YACD,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACpD,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,SAAS;YACX,CAAC;YACD,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACpD,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,OAAO,GAAG,CAAC;IAClD,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAChG,MAAM,gBAAgB,GACpB,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3F,MAAM,MAAM,GAAG,sBAAsB,CAAC;QACpC,GAAG;QACH,UAAU,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAC3E,gBAAgB;KACjB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAc;QACvB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC;QACrD,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE;QACnC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE;QACjC,cAAc,EAAE,CAAC,QAAgC,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC;QACrF,IAAI,YAAY,KAAK,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;KAC7C,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,YAAuC,EAAE;IAC7D,MAAM,UAAU,GAAmB,SAAS,CAAC,EAAE,IAAI;QACjD,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACzE,aAAa,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC;QACvF,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC;QACjD,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;QAC/D,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;QAC/D,UAAU,EAAE,EAAE,CAAC,UAAU;KAC1B,CAAC;IAEF,MAAM,cAAc,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAErD,OAAO;QACL,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe,EAAiC;QACvE,eAAe,EAAE,CAAC,WAAmB,EAAE,EAAE,CACtC,eAAe,CAAC,WAAW,CAAuC,IAAI,IAAI;QAC7E,qBAAqB,EAAE,CAAC,YAAsB,EAAE,GAAY,EAAE,EAAE,CAC9D,eAAe,CAAC,YAAY,EAAE,GAAG,CAA+B;QAClE,qBAAqB,EAAE,CAAC,QAAyB,EAAE,EAAE,CACnD,eAAe,CAAC,QAA4D,CAG3E;QACH,sBAAsB;QACtB,WAAW,EAAE,kBAAkB;QAC/B,mBAAmB,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC,UAAU,CAAC;QACjE,YAAY,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CACvC,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,OAA6C,CAA8B;QACzG,WAAW,EAAE,KAAK,EAAE,OAAe,EAAE,EAAE;YACrC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;aAC5B,CAAC;QACJ,CAAC;QACD,WAAW,EAAE,OAAO,CAAC,IAAI;QACzB,EAAE,EAAE,UAAU;QACd,iBAAiB;QACjB,eAAe,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAwB;QACrF,UAAU,EAAE,GAAG,EAAE,CAAC,cAAc;QAChC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,2BAA2B;QACzD,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,WAAW,EAAE,CAAC,IAAY,EAAE,EAAE,CAC5B,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACtB,0DAA0D;YAC1D,kEAAkE;YAClE,8DAA8D;YAC9D,oEAAoE;YACpE,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;gBAC1B,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,0CAA0C;YAC3D,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;gBACxB,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,mCAAmC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACJ,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QACrB,KAAK,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACxE,QAAQ,EAAE,CAAC,MAAsB,EAAE,OAAmC,EAAE,EAAE;YACxE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACtB,KAAK,OAAO,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QAC5C,mBAAmB,EAAE,GAAG,EAAE;YACxB,yEAAyE;YACzE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,IAAI,GAAG,GAAG,OAAO,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC;gBAC7F,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;oBAAE,OAAO,SAAS,CAAC;gBAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC;gBAClG,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;oBAAE,OAAO,aAAa,CAAC;gBACvD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QACjD,CAAC;QACD,GAAG,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACjD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACrD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACnD,IAAI,EAAE,WAAW;QACjB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAgB;IACjD,MAAM,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO;QAAE,OAAO,gBAAgB,CAAC;IAEtC,OAAO,uBAAuB,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAc;IAChD,OAAO,MAAM,KAAK,cAAc,IAAI,MAAM,KAAK,WAAW,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,YAAuC,EAAE;IAC9F,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAErC,OAAO;SACJ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;SACjD,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,sBAAsB,CAAC;SACjE,MAAM,CAAC,SAAS,EAAE,wCAAwC,CAAC;SAC3D,MAAM,CAAC,YAAY,EAAE,8CAA8C,CAAC;SACpE,MAAM,CAAC,cAAc,EAAE,yCAAyC,CAAC;SACjE,MAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC;SAC7C,MAAM,CACL,KAAK,EAAE,OAMN,EAAE,EAAE;QACH,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC,CACF,CAAC;IAEJ,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,uEAAuE,CAAC;SACpF,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;SAC3C,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC;SAC/C,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,sBAAsB,CAAC;SACjE,MAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC;SAC7C,MAAM,CACL,KAAK,EAAE,MAAc,EAAE,GAAuB,EAAE,OAA6C,EAAE,EAAE;QAC/F,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,KAAK,CAAC,yBAAyB,MAAM,oCAAoC,CAAC,CAAC;YAChF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;QAED,MAAM,YAAY,CAChB;YACE,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU,EAAE,KAAK;YACjB,aAAa,EAAE,yBAAyB,CAAC,GAAG,CAAC;YAC7C,mBAAmB,EAAE,IAAI;SAC1B,EACD,IAAI,CACL,CAAC;IACJ,CAAC,CACF,CAAC;IAEJ,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,aAAa,CAAC;SAC1B,MAAM,CAAC,SAAS,EAAE,wCAAwC,CAAC;SAC3D,MAAM,CAAC,OAAO,EAAE,4CAA4C,CAAC;SAC7D,MAAM,CAAC,gBAAgB,EAAE,uCAAuC,EAAE,MAAM,CAAC;SACzE,MAAM,CAAC,KAAK,EAAE,OAA6D,EAAE,EAAE;QAC9E,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,aAAa,EAAE,+DAA+D,CAAC;SACtF,MAAM,CAAC,OAAO,EAAE,sCAAsC,CAAC;SACvD,MAAM,CAAC,mBAAmB,EAAE,qEAAqE,CAAC;SAClG,MAAM,CAAC,YAAY,EAAE,uEAAuE,CAAC;SAC7F,MAAM,CAAC,SAAS,EAAE,0BAA0B,CAAC;SAC7C,MAAM,CAAC,WAAW,EAAE,sDAAsD,CAAC;SAC3E,MAAM,CACL,KAAK,EAAE,OAON,EAAE,EAAE;QACH,MAAM,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC,CACF,CAAC;IAEJ,OAAO;SACJ,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACpC,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,SAAS,EAAE,wCAAwC,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC7C,MAAM,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0CAA0C,CAAC;SACvD,QAAQ,CAAC,eAAe,EAAE,yBAAyB,CAAC;SACpD,MAAM,CAAC,cAAc,EAAE,oCAAoC,CAAC;SAC5D,MAAM,CAAC,mBAAmB,EAAE,uEAAuE,CAAC;SACpG,MAAM,CAAC,KAAK,EAAE,YAAsB,EAAE,OAAuD,EAAE,EAAE;QAChG,MAAM,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEL,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC;IAEtG,YAAY;SACT,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACnF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker-lifecycle.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/broker-lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"broker-lifecycle.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/broker-lifecycle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAA+C,MAAM,qBAAqB,CAAC;AAEzG,KAAK,SAAS,GAAG;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAgBF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG7D;AAkqBD,wBAAsB,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuS5F;AAGD,wBAAsB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwHhG;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwD5E"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import net from 'node:net';
|
|
3
2
|
const MAX_API_PORT_ATTEMPTS = 25;
|
|
4
3
|
const MAX_DASHBOARD_PORT_ATTEMPTS = 25;
|
|
5
4
|
const MAX_PORT = 65535;
|
|
@@ -23,95 +22,43 @@ export function brokerPidFilename(projectRoot) {
|
|
|
23
22
|
function toErrorMessage(err) {
|
|
24
23
|
return err instanceof Error ? err.message : String(err);
|
|
25
24
|
}
|
|
26
|
-
function
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
const parsed = Number.parseInt(match[1], 10);
|
|
32
|
-
return Number.isNaN(parsed) ? null : parsed;
|
|
33
|
-
}
|
|
34
|
-
function isAddressInUseError(message) {
|
|
35
|
-
return /Address already in use/i.test(message) || /EADDRINUSE/i.test(message);
|
|
36
|
-
}
|
|
37
|
-
function isApiPortBindingError(message, attemptedApiPort, detectedApiPort) {
|
|
38
|
-
if (detectedApiPort === attemptedApiPort) {
|
|
39
|
-
return true;
|
|
40
|
-
}
|
|
41
|
-
const extracted = parseApiPortFromLog(message);
|
|
42
|
-
if (extracted !== null) {
|
|
43
|
-
return extracted === attemptedApiPort;
|
|
44
|
-
}
|
|
45
|
-
return isAddressInUseError(message);
|
|
46
|
-
}
|
|
47
|
-
async function startBrokerWithPortFallback(paths, dashboardPort, wantsDashboard, deps, verbose) {
|
|
48
|
-
const startApiPort = wantsDashboard ? dashboardPort + 1 : 0;
|
|
49
|
-
let apiPort = startApiPort;
|
|
50
|
-
let relay = null;
|
|
51
|
-
const attempts = wantsDashboard ? Math.max(1, MAX_API_PORT_ATTEMPTS) : 1;
|
|
52
|
-
for (let attempt = 0; attempt < attempts; attempt += 1) {
|
|
53
|
-
const currentApiPort = startApiPort + attempt;
|
|
54
|
-
let detectedBindPort = null;
|
|
55
|
-
const candidate = deps.createRelay(paths.projectRoot, currentApiPort);
|
|
56
|
-
candidate.onBrokerStderr?.((line) => {
|
|
57
|
-
const parsedPort = parseApiPortFromLog(line);
|
|
58
|
-
if (parsedPort !== null) {
|
|
59
|
-
detectedBindPort = parsedPort;
|
|
60
|
-
}
|
|
61
|
-
if (verbose) {
|
|
62
|
-
deps.error(`[broker] ${line}`);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
try {
|
|
66
|
-
await candidate.getStatus();
|
|
67
|
-
relay = candidate;
|
|
25
|
+
async function resolveApiPortWithFallback(startApiPort, maxAttempts, deps) {
|
|
26
|
+
for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
|
|
27
|
+
const candidatePort = startApiPort + attempt;
|
|
28
|
+
if (candidatePort > MAX_PORT) {
|
|
68
29
|
break;
|
|
69
30
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
75
|
-
const message = toErrorMessage(error);
|
|
76
|
-
const shouldRetryApiPort = wantsDashboard &&
|
|
77
|
-
currentApiPort > 0 &&
|
|
78
|
-
currentApiPort < MAX_PORT &&
|
|
79
|
-
attempt + 1 < attempts &&
|
|
80
|
-
isApiPortBindingError(message, currentApiPort, detectedBindPort);
|
|
81
|
-
if (!shouldRetryApiPort) {
|
|
82
|
-
throw error;
|
|
31
|
+
const inUse = await deps.isPortInUse(candidatePort);
|
|
32
|
+
if (!inUse) {
|
|
33
|
+
if (attempt > 0) {
|
|
34
|
+
deps.warn(`API port ${startApiPort} is already in use; trying ${candidatePort}`);
|
|
83
35
|
}
|
|
84
|
-
|
|
85
|
-
deps.warn(`API port ${currentApiPort} is already in use; trying ${apiPort}`);
|
|
36
|
+
return candidatePort;
|
|
86
37
|
}
|
|
87
38
|
}
|
|
88
|
-
|
|
89
|
-
throw new Error('Failed to start broker on an available API port.');
|
|
90
|
-
}
|
|
91
|
-
return { relay, apiPort };
|
|
39
|
+
throw new Error(`Failed to find an available API port near ${startApiPort}.`);
|
|
92
40
|
}
|
|
93
|
-
function
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
server.listen(port);
|
|
41
|
+
async function startBrokerWithPortFallback(paths, dashboardPort, wantsDashboard, deps, verbose) {
|
|
42
|
+
// Resolve a free API port BEFORE spawning the broker. This avoids
|
|
43
|
+
// spawning (and flocking) multiple --persist brokers during retry,
|
|
44
|
+
// which caused stale-flock "already running" errors.
|
|
45
|
+
const startApiPort = wantsDashboard ? dashboardPort + 1 : 0;
|
|
46
|
+
const apiPort = wantsDashboard
|
|
47
|
+
? await resolveApiPortWithFallback(startApiPort, MAX_API_PORT_ATTEMPTS, deps)
|
|
48
|
+
: startApiPort;
|
|
49
|
+
const candidate = deps.createRelay(paths.projectRoot, apiPort);
|
|
50
|
+
candidate.onBrokerStderr?.((line) => {
|
|
51
|
+
if (verbose) {
|
|
52
|
+
deps.error(`[broker] ${line}`);
|
|
53
|
+
}
|
|
109
54
|
});
|
|
55
|
+
await candidate.getStatus();
|
|
56
|
+
return { relay: candidate, apiPort };
|
|
110
57
|
}
|
|
111
58
|
async function resolveDashboardPortWithFallback(dashboardPort, dashboardPortCandidates, deps) {
|
|
112
59
|
for (let attempt = 0; attempt < dashboardPortCandidates; attempt += 1) {
|
|
113
60
|
const candidatePort = dashboardPort + attempt;
|
|
114
|
-
const inUse = await isPortInUse(candidatePort);
|
|
61
|
+
const inUse = await deps.isPortInUse(candidatePort);
|
|
115
62
|
if (!inUse) {
|
|
116
63
|
if (attempt > 0) {
|
|
117
64
|
deps.warn(`Dashboard port ${dashboardPort} is already in use; trying ${candidatePort}`);
|
|
@@ -178,7 +125,24 @@ function isProcessRunning(pid, deps) {
|
|
|
178
125
|
async function killOrphanedBrokerProcesses(projectRoot, deps) {
|
|
179
126
|
try {
|
|
180
127
|
const shellQuote = (s) => "'" + s.replace(/'/g, "'\\''") + "'";
|
|
181
|
-
const
|
|
128
|
+
const brokerName = path.basename(projectRoot) || 'project';
|
|
129
|
+
let stdout = '';
|
|
130
|
+
try {
|
|
131
|
+
const byName = await deps.execCommand(`ps aux | grep '[a]gent-relay-broker' | grep -F ${shellQuote('--name ' + brokerName)}`);
|
|
132
|
+
stdout = byName.stdout;
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Name filter may not match older process invocations; try legacy path-based filter.
|
|
136
|
+
}
|
|
137
|
+
if (!stdout.trim()) {
|
|
138
|
+
try {
|
|
139
|
+
const byPath = await deps.execCommand(`ps aux | grep '[a]gent-relay-broker' | grep -F ${shellQuote(projectRoot)}`);
|
|
140
|
+
stdout = byPath.stdout;
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// Expected when no orphaned processes are matched by either strategy.
|
|
144
|
+
}
|
|
145
|
+
}
|
|
182
146
|
const lines = stdout.trim().split('\n').filter(Boolean);
|
|
183
147
|
for (const line of lines) {
|
|
184
148
|
const parts = line.trim().split(/\s+/);
|
|
@@ -722,7 +686,7 @@ export async function runUpCommand(options, deps) {
|
|
|
722
686
|
const started = await startBrokerWithPortFallback(paths, dashboardPort, wantsDashboard, deps, Boolean(options.verbose) || isDebugLikeLoggingEnabled(deps));
|
|
723
687
|
relay = started.relay;
|
|
724
688
|
apiPort = started.apiPort;
|
|
725
|
-
writeBrokerPid(brokerPidPath, deps.pid, deps);
|
|
689
|
+
writeBrokerPid(brokerPidPath, relay.brokerPid ?? deps.pid, deps);
|
|
726
690
|
const dashboardRelayUrl = resolveDashboardRelayUrl(apiPort, deps);
|
|
727
691
|
const expectedRelayUrl = getDefaultDashboardRelayUrl(apiPort);
|
|
728
692
|
if (deps.env.RELAY_DASHBOARD_RELAY_URL &&
|
|
@@ -876,6 +840,8 @@ export async function runDownCommand(options, deps) {
|
|
|
876
840
|
}
|
|
877
841
|
if (!deps.fs.existsSync(activePidPath)) {
|
|
878
842
|
if (options.force) {
|
|
843
|
+
// Also kill any orphaned broker processes that lost their PID files
|
|
844
|
+
await killOrphanedBrokerProcesses(paths.projectRoot, deps);
|
|
879
845
|
cleanupBrokerFiles(paths, deps);
|
|
880
846
|
deps.log('Cleaned up (was not running)');
|
|
881
847
|
}
|