refactor: dedupe PATH prepend helpers

This commit is contained in:
Peter Steinberger
2026-02-15 03:48:13 +00:00
parent f33031bc9e
commit f1a76e1a36
3 changed files with 61 additions and 95 deletions

View File

@@ -1,5 +1,4 @@
import type { Command } from "commander";
import path from "node:path";
import type { NodesRpcOpts } from "./types.js";
import { resolveAgentConfig, resolveDefaultAgentId } from "../../agents/agent-scope.js";
import { loadConfig } from "../../config/config.js";
@@ -14,6 +13,7 @@ import {
resolveExecApprovalsFromFile,
} from "../../infra/exec-approvals.js";
import { buildNodeShellCommand } from "../../infra/node-shell.js";
import { applyPathPrepend } from "../../infra/path-prepend.js";
import { defaultRuntime } from "../../runtime.js";
import { parseEnvPairs, parseTimeoutMs } from "../nodes-run.js";
import { getNodesTheme, runNodesCommand } from "./cli-utils.js";
@@ -58,43 +58,6 @@ function normalizeExecAsk(value?: string | null): ExecAsk | null {
return null;
}
function mergePathPrepend(existing: string | undefined, prepend: string[]) {
if (prepend.length === 0) {
return existing;
}
const partsExisting = (existing ?? "")
.split(path.delimiter)
.map((part) => part.trim())
.filter(Boolean);
const merged: string[] = [];
const seen = new Set<string>();
for (const part of [...prepend, ...partsExisting]) {
if (seen.has(part)) {
continue;
}
seen.add(part);
merged.push(part);
}
return merged.join(path.delimiter);
}
function applyPathPrepend(
env: Record<string, string>,
prepend: string[] | undefined,
options?: { requireExisting?: boolean },
) {
if (!Array.isArray(prepend) || prepend.length === 0) {
return;
}
if (options?.requireExisting && !env.PATH) {
return;
}
const merged = mergePathPrepend(env.PATH, prepend);
if (merged) {
env.PATH = merged;
}
}
function resolveExecDefaults(
cfg: ReturnType<typeof loadConfig>,
agentId: string | undefined,