export const APPROVAL_EXTENSION_PATH = "/opt/chat-ui-agent/approval-gate.mjs"; /** Build deterministic Pi RPC arguments while loading the approval gate exactly once. */ export function buildPiArgs(prefixArgs, environment = {}) { const args = Array.isArray(prefixArgs) ? [...prefixArgs] : []; if (!hasExtension(args, APPROVAL_EXTENSION_PATH)) { args.push("--extension", APPROVAL_EXTENSION_PATH); } args.push("--mode", "rpc", "--approve"); if (environment.PI_PROVIDER) args.push("--provider", environment.PI_PROVIDER); if (environment.PI_MODEL) args.push("--model", environment.PI_MODEL); if (environment.PI_SESSION_DIR) args.push("--session-dir", environment.PI_SESSION_DIR); if (environment.PI_SESSION_NAME) args.push("--name", environment.PI_SESSION_NAME); if (environment.PI_CONTINUE === "1") args.push("--continue"); return args; } function hasExtension(args, expectedPath) { return args.some((argument, index) => { if (argument === "--extension" || argument === "-e") return args[index + 1] === expectedPath; return argument === `--extension=${expectedPath}`; }); }