frely-cli 0.23.1 → 0.23.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 +3 -0
- package/README.zh-CN.md +2 -0
- package/dist/agent-help.d.ts +48 -0
- package/dist/agent-help.js +7 -0
- package/dist/agent-help.js.map +1 -1
- package/dist/computer/command.js +9 -2
- package/dist/computer/command.js.map +1 -1
- package/dist/computer/ocu.d.ts +7 -0
- package/dist/computer/ocu.js +16 -0
- package/dist/computer/ocu.js.map +1 -1
- package/dist/computer/server.js +2 -2
- package/dist/computer/server.js.map +1 -1
- package/dist/computer/toolset.d.ts +9 -1
- package/dist/computer/toolset.js +19 -1
- package/dist/computer/toolset.js.map +1 -1
- package/dist/device/protocol.d.ts +2 -0
- package/dist/device/protocol.js +3 -1
- package/dist/device/protocol.js.map +1 -1
- package/dist/device/relay-client.js +8 -13
- package/dist/device/relay-client.js.map +1 -1
- package/dist/device/stream-coalesce.d.ts +18 -0
- package/dist/device/stream-coalesce.js +94 -0
- package/dist/device/stream-coalesce.js.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp-command.js +6 -1
- package/dist/mcp-command.js.map +1 -1
- package/dist/runtime/git-config-guard.d.ts +51 -0
- package/dist/runtime/git-config-guard.js +257 -0
- package/dist/runtime/git-config-guard.js.map +1 -0
- package/dist/runtime/process-manager.js +3 -0
- package/dist/runtime/process-manager.js.map +1 -1
- package/dist/runtime/process-tree.d.ts +7 -1
- package/dist/runtime/process-tree.js +9 -1
- package/dist/runtime/process-tree.js.map +1 -1
- package/dist/runtime/sandbox-proxy.d.ts +39 -0
- package/dist/runtime/sandbox-proxy.js +134 -0
- package/dist/runtime/sandbox-proxy.js.map +1 -0
- package/dist/runtime/sandbox.d.ts +48 -4
- package/dist/runtime/sandbox.js +165 -17
- package/dist/runtime/sandbox.js.map +1 -1
- package/dist/runtime/ssh-proxy.d.ts +1 -0
- package/dist/runtime/ssh-proxy.js +12 -3
- package/dist/runtime/ssh-proxy.js.map +1 -1
- package/dist/runtime/tunnel.d.ts +30 -0
- package/dist/runtime/tunnel.js +56 -0
- package/dist/runtime/tunnel.js.map +1 -0
- package/dist/runtime/workspace.js +25 -6
- package/dist/runtime/workspace.js.map +1 -1
- package/dist/update/auto-update.d.ts +52 -0
- package/dist/update/auto-update.js +133 -0
- package/dist/update/auto-update.js.map +1 -0
- package/dist/update/update.d.ts +2 -2
- package/dist/update/update.js +2 -2
- package/dist/update/update.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { mkdtemp, readdir, readFile, rm, stat, writeFile } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join, relative } from "node:path";
|
|
5
|
+
/**
|
|
6
|
+
* Guard for `.git/config` writes made by `run_command` (see allowGitConfig in sandbox.ts).
|
|
7
|
+
*
|
|
8
|
+
* The sandbox lets a command change the workspace `.git/config` so `git push -u`, `git remote add`, `git config user.name` and
|
|
9
|
+
* `git submodule` work. A git config can also make git run programs later, outside the sandbox (an fsmonitor, a credential helper, a
|
|
10
|
+
* `!` alias, a pager...). So the files are snapshotted before the command and compared after it exits: every key that makes git run a
|
|
11
|
+
* program and that the command added or changed is removed again, and the caller tells the model what was removed.
|
|
12
|
+
*
|
|
13
|
+
* All reading and writing goes through `git config --file`, so the formatting and comments of the file are kept. Includes are never
|
|
14
|
+
* followed. If git itself cannot be used, the file is put back byte for byte instead.
|
|
15
|
+
*/
|
|
16
|
+
/** How deep below the workspace root `.git` directories are looked for; matches the sandbox's own scan depth. */
|
|
17
|
+
const SCAN_DEPTH = 3;
|
|
18
|
+
const MAX_SCANNED_DIRECTORIES = 5000;
|
|
19
|
+
const GIT_TIMEOUT_MS = 10_000;
|
|
20
|
+
/**
|
|
21
|
+
* Whether a git config entry makes git run a program (or load configuration that can). `key` is `section.subsection.variable`
|
|
22
|
+
* as `git config --list` prints it; section and variable names are case-insensitive, the subsection is not.
|
|
23
|
+
*/
|
|
24
|
+
export function runsPrograms(key, value) {
|
|
25
|
+
const first = key.indexOf(".");
|
|
26
|
+
const last = key.lastIndexOf(".");
|
|
27
|
+
if (first < 1)
|
|
28
|
+
return false;
|
|
29
|
+
const section = key.slice(0, first).toLowerCase();
|
|
30
|
+
const variable = key.slice(last + 1).toLowerCase();
|
|
31
|
+
const hasSubsection = last > first;
|
|
32
|
+
switch (section) {
|
|
33
|
+
case "core": return !hasSubsection && ["fsmonitor", "sshcommand", "hookspath", "pager", "editor", "askpass", "gitproxy", "alternaterefscommand"].includes(variable);
|
|
34
|
+
case "credential": return variable === "helper";
|
|
35
|
+
case "filter": return hasSubsection && ["clean", "smudge", "process"].includes(variable);
|
|
36
|
+
case "diff": return hasSubsection ? ["textconv", "command"].includes(variable) : variable === "external";
|
|
37
|
+
case "merge": return hasSubsection && variable === "driver";
|
|
38
|
+
case "gpg": return variable === "program";
|
|
39
|
+
case "include":
|
|
40
|
+
case "includeif": return variable === "path";
|
|
41
|
+
case "uploadpack":
|
|
42
|
+
case "receivepack": return true;
|
|
43
|
+
case "remote": return hasSubsection && ["uploadpack", "receivepack", "vcs"].includes(variable);
|
|
44
|
+
case "sequence": return !hasSubsection && variable === "editor";
|
|
45
|
+
case "alias": return !hasSubsection && value.trimStart().startsWith("!");
|
|
46
|
+
case "submodule": return hasSubsection && variable === "update" && value.trimStart().startsWith("!");
|
|
47
|
+
case "pager": return true;
|
|
48
|
+
case "difftool":
|
|
49
|
+
case "mergetool":
|
|
50
|
+
case "trailer":
|
|
51
|
+
case "browser":
|
|
52
|
+
case "man": return hasSubsection && variable === "cmd";
|
|
53
|
+
case "web": return !hasSubsection && variable === "browser";
|
|
54
|
+
case "init": return !hasSubsection && variable === "templatedir";
|
|
55
|
+
case "protocol": return hasSubsection && variable === "allow" && key.slice(first + 1, last).toLowerCase() === "ext";
|
|
56
|
+
default: return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function git(args) {
|
|
60
|
+
return new Promise((resolve, reject) => {
|
|
61
|
+
execFile("git", args, { cwd: tmpdir(), timeout: GIT_TIMEOUT_MS, maxBuffer: 8 * 1024 * 1024, windowsHide: true, env: { ...process.env, GIT_TERMINAL_PROMPT: "0" } }, (error, stdout) => {
|
|
62
|
+
if (error)
|
|
63
|
+
reject(error);
|
|
64
|
+
else
|
|
65
|
+
resolve(stdout);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
let gitUsable;
|
|
70
|
+
/** Whether `git` can be run here. Without it the guard cannot do its job, so the sandbox keeps `.git/config` read-only. */
|
|
71
|
+
export function gitConfigGuardAvailable() {
|
|
72
|
+
gitUsable ??= git(["--version"]).then(() => true, () => false);
|
|
73
|
+
return gitUsable;
|
|
74
|
+
}
|
|
75
|
+
/** Test hook: forget the cached `git --version` answer. */
|
|
76
|
+
export function resetGitConfigGuardForTests() {
|
|
77
|
+
gitUsable = undefined;
|
|
78
|
+
}
|
|
79
|
+
/** All entries of one config file, in file order. Throws when git cannot parse the file. */
|
|
80
|
+
export async function listConfigEntries(file) {
|
|
81
|
+
const output = await git(["config", "--file", file, "--no-includes", "--list", "-z"]);
|
|
82
|
+
return output.split("\0").filter((item) => item !== "").map((item) => {
|
|
83
|
+
const newline = item.indexOf("\n");
|
|
84
|
+
// A key written without a value (`[core] fsmonitor`) is the boolean true.
|
|
85
|
+
return newline === -1 ? { key: item, value: "true" } : { key: item.slice(0, newline), value: item.slice(newline + 1) };
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/** Keys of `after` that run programs and whose entries are not all already present in `before`. */
|
|
89
|
+
export function addedProgramKeys(before, after) {
|
|
90
|
+
const remaining = new Map();
|
|
91
|
+
for (const { key, value } of before)
|
|
92
|
+
remaining.set(`${key}\0${value}`, (remaining.get(`${key}\0${value}`) ?? 0) + 1);
|
|
93
|
+
const keys = new Set();
|
|
94
|
+
for (const { key, value } of after) {
|
|
95
|
+
if (!runsPrograms(key, value))
|
|
96
|
+
continue;
|
|
97
|
+
const id = `${key}\0${value}`;
|
|
98
|
+
const count = remaining.get(id) ?? 0;
|
|
99
|
+
if (count > 0)
|
|
100
|
+
remaining.set(id, count - 1);
|
|
101
|
+
else
|
|
102
|
+
keys.add(key);
|
|
103
|
+
}
|
|
104
|
+
return [...keys];
|
|
105
|
+
}
|
|
106
|
+
/** Every `.git/config` (a real `.git` directory, not a worktree link) at most SCAN_DEPTH levels below `root`. */
|
|
107
|
+
export async function findGitConfigs(root) {
|
|
108
|
+
const found = [];
|
|
109
|
+
let scanned = 0;
|
|
110
|
+
const visit = async (dir, depth) => {
|
|
111
|
+
if (scanned++ >= MAX_SCANNED_DIRECTORIES)
|
|
112
|
+
return;
|
|
113
|
+
let entries;
|
|
114
|
+
try {
|
|
115
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
for (const entry of entries) {
|
|
121
|
+
if (!entry.isDirectory() || entry.isSymbolicLink() || entry.name === "node_modules")
|
|
122
|
+
continue;
|
|
123
|
+
const path = join(dir, entry.name);
|
|
124
|
+
if (entry.name === ".git")
|
|
125
|
+
found.push(join(path, "config"));
|
|
126
|
+
else if (depth < SCAN_DEPTH)
|
|
127
|
+
await visit(path, depth + 1);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
await visit(root, 0);
|
|
131
|
+
return found;
|
|
132
|
+
}
|
|
133
|
+
async function readRaw(file) {
|
|
134
|
+
try {
|
|
135
|
+
if (!(await stat(file)).isFile())
|
|
136
|
+
return null;
|
|
137
|
+
return await readFile(file, "utf8");
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
export class GitConfigGuard {
|
|
144
|
+
root;
|
|
145
|
+
before;
|
|
146
|
+
constructor(root, before) {
|
|
147
|
+
this.root = root;
|
|
148
|
+
this.before = before;
|
|
149
|
+
}
|
|
150
|
+
/** Record the content of every `.git/config` below `root`. */
|
|
151
|
+
static async snapshot(root) {
|
|
152
|
+
const files = await findGitConfigs(root);
|
|
153
|
+
return new GitConfigGuard(root, new Map(await Promise.all(files.map(async (file) => [file, await readRaw(file)]))));
|
|
154
|
+
}
|
|
155
|
+
/** Compare with the snapshot and undo every program-running key the command added or changed. Never throws. */
|
|
156
|
+
async restore() {
|
|
157
|
+
const result = { removed: [], restored: [], unreadable: [] };
|
|
158
|
+
let files;
|
|
159
|
+
try {
|
|
160
|
+
files = [...new Set([...this.before.keys(), ...(await findGitConfigs(this.root))])];
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
files = [...this.before.keys()];
|
|
164
|
+
}
|
|
165
|
+
for (const file of files) {
|
|
166
|
+
const previous = this.before.get(file) ?? null;
|
|
167
|
+
const now = await readRaw(file);
|
|
168
|
+
if (now === null || now === previous)
|
|
169
|
+
continue;
|
|
170
|
+
try {
|
|
171
|
+
const before = previous === null ? [] : await entriesOfText(previous, file);
|
|
172
|
+
const added = addedProgramKeys(before, await listConfigEntries(file));
|
|
173
|
+
for (const key of added) {
|
|
174
|
+
await git(["config", "--file", file, "--no-includes", "--unset-all", key]);
|
|
175
|
+
for (const entry of before.filter((item) => item.key === key))
|
|
176
|
+
await git(["config", "--file", file, "--no-includes", "--add", entry.key, entry.value]);
|
|
177
|
+
result.removed.push({ file: relative(this.root, file) || file, key });
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// git cannot parse one of the two versions: an existing file goes back byte for byte, a new unparseable file cannot be used by git either.
|
|
182
|
+
if (previous !== null) {
|
|
183
|
+
try {
|
|
184
|
+
await writeFile(file, previous);
|
|
185
|
+
result.restored.push(relative(this.root, file) || file);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
result.unreadable.push(relative(this.root, file) || file);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else
|
|
192
|
+
result.unreadable.push(relative(this.root, file) || file);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return result;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Entries of the snapshot text. The snapshot is raw text, so it is parsed by writing nothing: `git config --file` needs a path, and
|
|
200
|
+
* the file on disk has already changed. A stdin form exists (`--blob` or `-f -`) only for newer git, so the text goes through a
|
|
201
|
+
* temporary file instead.
|
|
202
|
+
*/
|
|
203
|
+
async function entriesOfText(text, label) {
|
|
204
|
+
const dir = await mkdtemp(join(tmpdir(), "frely-gitconfig-"));
|
|
205
|
+
try {
|
|
206
|
+
const copy = join(dir, "config");
|
|
207
|
+
await writeFile(copy, text, { mode: 0o600 });
|
|
208
|
+
return await listConfigEntries(copy);
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
throw new Error(`cannot parse the saved copy of ${label}: ${error instanceof Error ? error.message : String(error)}`);
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
214
|
+
await rm(dir, { recursive: true, force: true });
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/** One short note for the command result, or undefined when the guard changed nothing. */
|
|
218
|
+
export function guardNote(result) {
|
|
219
|
+
const parts = [];
|
|
220
|
+
if (result.removed.length > 0) {
|
|
221
|
+
parts.push(`removed ${result.removed.map(({ file, key }) => `${key} (${file})`).join(", ")}, because those settings make git run programs and the command sandbox does not allow commands to set them`);
|
|
222
|
+
}
|
|
223
|
+
if (result.restored.length > 0)
|
|
224
|
+
parts.push(`restored ${result.restored.join(", ")} to its content before the command, because it could no longer be parsed`);
|
|
225
|
+
if (result.unreadable.length > 0)
|
|
226
|
+
parts.push(`could not check ${result.unreadable.join(", ")}; look at it before running git there`);
|
|
227
|
+
return parts.length === 0 ? undefined : `[Frely sandbox] .git/config: ${parts.join("; ")}.`;
|
|
228
|
+
}
|
|
229
|
+
/** Per workspace, the state of its `.git/config` files right after the last guarded command's check. */
|
|
230
|
+
const lastChecked = new Map();
|
|
231
|
+
/** Remember the current state of the workspace's `.git/config` files as the reference for the next check. */
|
|
232
|
+
export async function rememberGitConfigs(root) {
|
|
233
|
+
lastChecked.set(root, await GitConfigGuard.snapshot(root));
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Run the guard against the state remembered after the previous guarded command in this workspace. It catches a write made between
|
|
237
|
+
* commands by a process that escaped the process-group kill (setsid, double fork). Does nothing for a workspace without a remembered state.
|
|
238
|
+
*/
|
|
239
|
+
export async function checkRememberedGitConfigs(root) {
|
|
240
|
+
const previous = lastChecked.get(root);
|
|
241
|
+
if (!previous)
|
|
242
|
+
return undefined;
|
|
243
|
+
const result = await previous.restore();
|
|
244
|
+
await rememberGitConfigs(root);
|
|
245
|
+
return result;
|
|
246
|
+
}
|
|
247
|
+
/** Test hook. */
|
|
248
|
+
export function forgetRememberedGitConfigsForTests() {
|
|
249
|
+
lastChecked.clear();
|
|
250
|
+
}
|
|
251
|
+
/** Joins notes, skipping empty ones. */
|
|
252
|
+
export const joinNotes = (...notes) => {
|
|
253
|
+
const present = notes.filter((note) => note !== undefined);
|
|
254
|
+
return present.length === 0 ? undefined : present.join("\n");
|
|
255
|
+
};
|
|
256
|
+
export const LEFTOVERS_NOTE = "[Frely sandbox] Background processes left running by this command were stopped (commands that may change .git/config cannot leave processes behind).";
|
|
257
|
+
//# sourceMappingURL=git-config-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-config-guard.js","sourceRoot":"","sources":["../../src/runtime/git-config-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { terminateProcessTree } from "./process-tree.js";
|
|
2
|
+
import { checkRememberedGitConfigs } from "./git-config-guard.js";
|
|
2
3
|
import { sandboxCommand } from "./sandbox.js";
|
|
3
4
|
import { spawn } from "node:child_process";
|
|
4
5
|
import { randomUUID } from "node:crypto";
|
|
@@ -16,6 +17,8 @@ export class ProcessManager {
|
|
|
16
17
|
this.pruneExited();
|
|
17
18
|
if (this.processes.size >= MAX_PROCESSES)
|
|
18
19
|
throw new Error(`At most ${MAX_PROCESSES} managed processes may exist in one MCP session.`);
|
|
20
|
+
// Same late check as run_command (the note has no place in a start result; the next run_command in this workspace reports new findings).
|
|
21
|
+
await checkRememberedGitConfigs(workspaceRoot).catch(() => undefined);
|
|
19
22
|
const sandboxed = await sandboxCommand(command, workspaceRoot, pathGrants);
|
|
20
23
|
const id = randomUUID();
|
|
21
24
|
const child = spawn(sandboxed, { cwd, env, shell: true, stdio: "pipe", detached: process.platform !== "win32", windowsHide: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../src/runtime/process-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../src/runtime/process-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,13 @@ export declare class CommandFailedError extends Error {
|
|
|
7
7
|
readonly stderr: string;
|
|
8
8
|
constructor(exitCode: number | null, stdout: string, stderr: string, hint?: string);
|
|
9
9
|
}
|
|
10
|
-
export
|
|
10
|
+
export interface RunShellOptions {
|
|
11
|
+
/** Kill the shell's process group once the shell has closed, so no background child outlives the command. */
|
|
12
|
+
killLeftovers?: boolean;
|
|
13
|
+
/** Called when that kill found processes still running. */
|
|
14
|
+
onLeftoversKilled?: () => void;
|
|
15
|
+
}
|
|
16
|
+
export declare function runShellCommand(command: string, cwd: string, env: NodeJS.ProcessEnv, timeoutMs: number, maxBytes: number, signal?: AbortSignal, options?: RunShellOptions): Promise<{
|
|
11
17
|
stdout: string;
|
|
12
18
|
stderr: string;
|
|
13
19
|
}>;
|
|
@@ -38,7 +38,7 @@ export class CommandFailedError extends Error {
|
|
|
38
38
|
this.stderr = stderr;
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
export function runShellCommand(command, cwd, env, timeoutMs, maxBytes, signal) {
|
|
41
|
+
export function runShellCommand(command, cwd, env, timeoutMs, maxBytes, signal, options = {}) {
|
|
42
42
|
signal?.throwIfAborted();
|
|
43
43
|
return new Promise((resolve, reject) => {
|
|
44
44
|
const child = spawn(command, { cwd, env, shell: true, stdio: "pipe", detached: process.platform !== "win32", windowsHide: true });
|
|
@@ -60,6 +60,14 @@ export function runShellCommand(command, cwd, env, timeoutMs, maxBytes, signal)
|
|
|
60
60
|
child.once("close", (code) => {
|
|
61
61
|
clearTimeout(timer);
|
|
62
62
|
signal?.removeEventListener("abort", abort);
|
|
63
|
+
if (options.killLeftovers && child.pid !== undefined && process.platform !== "win32") {
|
|
64
|
+
// The shell is gone; whatever is still in its process group was left running in the background by the command.
|
|
65
|
+
try {
|
|
66
|
+
process.kill(-child.pid, "SIGKILL");
|
|
67
|
+
options.onLeftoversKilled?.();
|
|
68
|
+
}
|
|
69
|
+
catch { /* ESRCH: nothing was left */ }
|
|
70
|
+
}
|
|
63
71
|
if (failure)
|
|
64
72
|
reject(failure);
|
|
65
73
|
else if (code !== 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-tree.js","sourceRoot":"","sources":["../../src/runtime/process-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAmB;IAC5D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO;IACvC,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;IAClE,IAAI,SAAwB,CAAC;IAC7B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,aAAa,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;QACjG,SAAS,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CACjD,QAAQ,EACR,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EACjC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,wBAAwB,EAAE,EACxD,GAAG,EAAE,CAAC,OAAO,EAAE,CAChB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACpD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjH,CAAC;QACD,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,6GAA6G;AAC7G,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC,6GAA6G;AAC7G,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACtB;IAAkC;IAAyB;IAAhF,YAAqB,QAAuB,EAAW,MAAc,EAAW,MAAc,EAAE,IAAa;QAC3G,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrK,KAAK,CAAC,kCAAkC,QAAQ,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAF3H,aAAQ,GAAR,QAAQ,CAAe;QAAW,WAAM,GAAN,MAAM,CAAQ;QAAW,WAAM,GAAN,MAAM,CAAQ;IAG9F,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"process-tree.js","sourceRoot":"","sources":["../../src/runtime/process-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The user's own HTTP(S) proxy (Clash and the like) as the upstream of the command sandbox's proxy.
|
|
3
|
+
*
|
|
4
|
+
* srt gives sandboxed commands its own proxy and dials the network from the CLI process. A user who reaches the internet only through
|
|
5
|
+
* a local proxy has that setting in their shell, which a background service never sees, so downloads inside the sandbox fail. The
|
|
6
|
+
* address is taken, first match wins, from: the value saved with `frely sandbox proxy <url>`, the proxy variables of this process,
|
|
7
|
+
* and on macOS the system proxy (`scutil --proxy`). The user's own proxy settings are only read, never changed.
|
|
8
|
+
*
|
|
9
|
+
* srt 0.0.77 (`network.parentProxy`) takes `{ http, https, noProxy }`, accepts http:// and https:// proxy URLs only (a bare host:port
|
|
10
|
+
* counts as http), always bypasses loopback destinations, and reads the value once, when the sandbox starts.
|
|
11
|
+
*/
|
|
12
|
+
export interface UpstreamProxy {
|
|
13
|
+
http?: string;
|
|
14
|
+
https?: string;
|
|
15
|
+
noProxy?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function sandboxSettingsPath(env?: NodeJS.ProcessEnv): string;
|
|
18
|
+
/** A proxy URL srt can use: http(s) scheme, or no scheme at all. Credentials in the URL are kept (srt sends them to the proxy). */
|
|
19
|
+
export declare function usableProxyUrl(value: string | undefined): string | undefined;
|
|
20
|
+
/** The value `frely sandbox proxy` saved, or undefined. */
|
|
21
|
+
export declare function readSavedProxy(path?: string): UpstreamProxy | undefined;
|
|
22
|
+
/** Save (or with `undefined` remove) the proxy to use for the sandbox. Takes effect when the MCP service restarts. */
|
|
23
|
+
export declare function saveProxy(proxy: {
|
|
24
|
+
url: string;
|
|
25
|
+
noProxy?: string;
|
|
26
|
+
} | undefined, path?: string): Promise<void>;
|
|
27
|
+
/** The proxy variables of a process, including ALL_PROXY when it is an http(s) proxy (srt reads only HTTP_PROXY / HTTPS_PROXY itself). */
|
|
28
|
+
export declare function proxyFromEnv(env: NodeJS.ProcessEnv): UpstreamProxy | undefined;
|
|
29
|
+
/** The HTTP/HTTPS proxy of the macOS network settings, from the text of `scutil --proxy`. SOCKS and auto-config (PAC) entries are ignored. */
|
|
30
|
+
export declare function parseScutilProxy(text: string): UpstreamProxy | undefined;
|
|
31
|
+
/** The upstream proxy for the sandbox: saved value, then this process's environment, then (macOS) the system proxy. */
|
|
32
|
+
export declare function resolveUpstreamProxy(options?: {
|
|
33
|
+
saved?: UpstreamProxy | undefined;
|
|
34
|
+
env?: NodeJS.ProcessEnv;
|
|
35
|
+
platform?: string;
|
|
36
|
+
system?: () => UpstreamProxy | undefined;
|
|
37
|
+
}): UpstreamProxy | undefined;
|
|
38
|
+
/** `frely sandbox proxy [<url> [--no-proxy <list>] | --clear]`: show, save or remove the proxy used by the command sandbox. */
|
|
39
|
+
export declare function runSandboxProxyCommand(args: readonly string[], write: (text: string) => void): Promise<void>;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { mkdir, rename, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { dirname, join } from "node:path";
|
|
6
|
+
const SETTINGS_FILE = "sandbox.json";
|
|
7
|
+
export function sandboxSettingsPath(env = process.env) {
|
|
8
|
+
return join(env.XDG_CONFIG_HOME || join(homedir(), ".config"), "frely", SETTINGS_FILE);
|
|
9
|
+
}
|
|
10
|
+
/** A proxy URL srt can use: http(s) scheme, or no scheme at all. Credentials in the URL are kept (srt sends them to the proxy). */
|
|
11
|
+
export function usableProxyUrl(value) {
|
|
12
|
+
const text = value?.trim();
|
|
13
|
+
if (!text)
|
|
14
|
+
return undefined;
|
|
15
|
+
const withScheme = /^[a-z][a-z0-9+.-]*:\/\//iu.test(text) ? text : `http://${text}`;
|
|
16
|
+
try {
|
|
17
|
+
const url = new URL(withScheme);
|
|
18
|
+
return (url.protocol === "http:" || url.protocol === "https:") && url.hostname ? text : undefined;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** The value `frely sandbox proxy` saved, or undefined. */
|
|
25
|
+
export function readSavedProxy(path = sandboxSettingsPath()) {
|
|
26
|
+
try {
|
|
27
|
+
const value = JSON.parse(readFileSync(path, "utf8")).proxy;
|
|
28
|
+
const url = typeof value?.url === "string" ? usableProxyUrl(value.url) : undefined;
|
|
29
|
+
if (!url)
|
|
30
|
+
return undefined;
|
|
31
|
+
return { http: url, https: url, ...(typeof value?.noProxy === "string" && value.noProxy.trim() ? { noProxy: value.noProxy.trim() } : {}) };
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Save (or with `undefined` remove) the proxy to use for the sandbox. Takes effect when the MCP service restarts. */
|
|
38
|
+
export async function saveProxy(proxy, path = sandboxSettingsPath()) {
|
|
39
|
+
if (!proxy) {
|
|
40
|
+
await rm(path, { force: true });
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const url = usableProxyUrl(proxy.url);
|
|
44
|
+
if (!url)
|
|
45
|
+
throw new Error("The proxy must be an http:// or https:// URL (or host:port). SOCKS proxies are not supported by the sandbox.");
|
|
46
|
+
await mkdir(dirname(path), { recursive: true, mode: 0o700 });
|
|
47
|
+
const temporary = `${path}.${process.pid}.tmp`;
|
|
48
|
+
await writeFile(temporary, `${JSON.stringify({ proxy: { url, ...(proxy.noProxy?.trim() ? { noProxy: proxy.noProxy.trim() } : {}) } }, null, 2)}\n`, { mode: 0o600 });
|
|
49
|
+
await rename(temporary, path);
|
|
50
|
+
}
|
|
51
|
+
/** The proxy variables of a process, including ALL_PROXY when it is an http(s) proxy (srt reads only HTTP_PROXY / HTTPS_PROXY itself). */
|
|
52
|
+
export function proxyFromEnv(env) {
|
|
53
|
+
const pick = (...names) => names.map((name) => usableProxyUrl(env[name])).find((value) => value !== undefined);
|
|
54
|
+
const all = pick("ALL_PROXY", "all_proxy");
|
|
55
|
+
const http = pick("HTTP_PROXY", "http_proxy") ?? all;
|
|
56
|
+
const https = pick("HTTPS_PROXY", "https_proxy") ?? all ?? http;
|
|
57
|
+
if (!http && !https)
|
|
58
|
+
return undefined;
|
|
59
|
+
const noProxy = (env.NO_PROXY ?? env.no_proxy ?? "").trim();
|
|
60
|
+
return { ...(http ? { http } : {}), ...(https ? { https } : {}), ...(noProxy ? { noProxy } : {}) };
|
|
61
|
+
}
|
|
62
|
+
/** The HTTP/HTTPS proxy of the macOS network settings, from the text of `scutil --proxy`. SOCKS and auto-config (PAC) entries are ignored. */
|
|
63
|
+
export function parseScutilProxy(text) {
|
|
64
|
+
const field = (name) => new RegExp(`^\\s*${name}\\s*:\\s*(.+?)\\s*$`, "mu").exec(text)?.[1];
|
|
65
|
+
const endpoint = (prefix) => {
|
|
66
|
+
const host = field(`${prefix}Proxy`);
|
|
67
|
+
const port = field(`${prefix}Port`);
|
|
68
|
+
return field(`${prefix}Enable`) === "1" && host && port ? usableProxyUrl(`http://${host.includes(":") ? `[${host}]` : host}:${port}`) : undefined;
|
|
69
|
+
};
|
|
70
|
+
const http = endpoint("HTTP");
|
|
71
|
+
const https = endpoint("HTTPS");
|
|
72
|
+
if (!http && !https)
|
|
73
|
+
return undefined;
|
|
74
|
+
const exceptions = /ExceptionsList\s*:\s*<array>\s*\{([^}]*)\}/u.exec(text)?.[1];
|
|
75
|
+
const noProxy = exceptions ? [...exceptions.matchAll(/^\s*\d+\s*:\s*(.+?)\s*$/gmu)].map((match) => match[1]).join(",") : "";
|
|
76
|
+
return { ...(http ? { http } : {}), ...(https ? { https } : {}), ...(noProxy ? { noProxy } : {}) };
|
|
77
|
+
}
|
|
78
|
+
function readSystemProxy() {
|
|
79
|
+
try {
|
|
80
|
+
return parseScutilProxy(execFileSync("scutil", ["--proxy"], { encoding: "utf8", timeout: 3000, stdio: ["ignore", "pipe", "ignore"] }));
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** The upstream proxy for the sandbox: saved value, then this process's environment, then (macOS) the system proxy. */
|
|
87
|
+
export function resolveUpstreamProxy(options = {}) {
|
|
88
|
+
const saved = "saved" in options ? options.saved : readSavedProxy();
|
|
89
|
+
if (saved)
|
|
90
|
+
return saved;
|
|
91
|
+
const fromEnv = proxyFromEnv(options.env ?? process.env);
|
|
92
|
+
if (fromEnv)
|
|
93
|
+
return fromEnv;
|
|
94
|
+
return (options.platform ?? process.platform) === "darwin" ? (options.system ?? readSystemProxy)() : undefined;
|
|
95
|
+
}
|
|
96
|
+
/** `frely sandbox proxy [<url> [--no-proxy <list>] | --clear]`: show, save or remove the proxy used by the command sandbox. */
|
|
97
|
+
export async function runSandboxProxyCommand(args, write) {
|
|
98
|
+
const noProxyIndex = args.indexOf("--no-proxy");
|
|
99
|
+
const noProxy = noProxyIndex === -1 ? undefined : args[noProxyIndex + 1];
|
|
100
|
+
if (noProxyIndex !== -1 && !noProxy)
|
|
101
|
+
throw new Error("--no-proxy needs a comma-separated list.");
|
|
102
|
+
const rest = noProxyIndex === -1 ? [...args] : args.filter((_, index) => index !== noProxyIndex && index !== noProxyIndex + 1);
|
|
103
|
+
if (rest.includes("--clear")) {
|
|
104
|
+
await saveProxy(undefined);
|
|
105
|
+
write("Saved sandbox proxy removed. Restart the MCP service (frely mcp stop, then frely mcp start) for it to take effect.\n");
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (rest.length === 0) {
|
|
109
|
+
const saved = readSavedProxy();
|
|
110
|
+
const effective = resolveUpstreamProxy();
|
|
111
|
+
write(saved ? `Saved sandbox proxy: ${redact(saved.http)}${saved.noProxy ? ` (no proxy for ${saved.noProxy})` : ""}\n` : "No sandbox proxy saved.\n");
|
|
112
|
+
write(effective ? `In use when the sandbox starts: ${redact(effective.https ?? effective.http)}${saved ? "" : " (from this environment or the system settings)"}\n` : "In use when the sandbox starts: none (direct connections).\n");
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (rest.length !== 1)
|
|
116
|
+
throw new Error("Usage: frely sandbox proxy [<http://host:port> [--no-proxy <list>] | --clear]");
|
|
117
|
+
await saveProxy({ url: rest[0], ...(noProxy ? { noProxy } : {}) });
|
|
118
|
+
write(`Sandbox proxy saved: ${redact(rest[0])}. Restart the MCP service (frely mcp stop, then frely mcp start) for it to take effect.\n`);
|
|
119
|
+
}
|
|
120
|
+
/** The proxy URL without its password, for display. */
|
|
121
|
+
function redact(value) {
|
|
122
|
+
if (!value)
|
|
123
|
+
return "none";
|
|
124
|
+
try {
|
|
125
|
+
const url = new URL(/^[a-z][a-z0-9+.-]*:\/\//iu.test(value) ? value : `http://${value}`);
|
|
126
|
+
if (url.password)
|
|
127
|
+
url.password = "***";
|
|
128
|
+
return url.toString().replace(/\/$/u, "");
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return "(invalid)";
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=sandbox-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-proxy.js","sourceRoot":"","sources":["../../src/runtime/sandbox-proxy.ts"],"names":[],"mappings":"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"}
|