File size: 1,090 Bytes
f27ecd9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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}`;
	});
}