zcode-acp-server 0.14.3 → 0.17.1
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 +109 -9
- package/README.zh-CN.md +91 -9
- package/dist/backend/index.d.ts +1 -0
- package/dist/backend/index.d.ts.map +1 -1
- package/dist/backend/index.js +1 -0
- package/dist/backend/index.js.map +1 -1
- package/dist/backend/sandbox.d.ts +92 -23
- package/dist/backend/sandbox.d.ts.map +1 -1
- package/dist/backend/sandbox.js +265 -70
- package/dist/backend/sandbox.js.map +1 -1
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/config/auto-compact.d.ts.map +1 -1
- package/dist/config/auto-compact.js +6 -4
- package/dist/config/auto-compact.js.map +1 -1
- package/dist/config/mcp-discovery.d.ts.map +1 -1
- package/dist/config/mcp-discovery.js +7 -5
- package/dist/config/mcp-discovery.js.map +1 -1
- package/dist/handlers/background-tasks.d.ts.map +1 -1
- package/dist/handlers/background-tasks.js +2 -2
- package/dist/handlers/background-tasks.js.map +1 -1
- package/dist/handlers/dispatch.d.ts.map +1 -1
- package/dist/handlers/dispatch.js +4 -4
- package/dist/handlers/dispatch.js.map +1 -1
- package/dist/handlers/replay.d.ts.map +1 -1
- package/dist/handlers/replay.js +11 -5
- package/dist/handlers/replay.js.map +1 -1
- package/dist/handlers/sandbox-allow.d.ts +71 -0
- package/dist/handlers/sandbox-allow.d.ts.map +1 -0
- package/dist/handlers/sandbox-allow.js +299 -0
- package/dist/handlers/sandbox-allow.js.map +1 -0
- package/dist/handlers/server-requests.d.ts.map +1 -1
- package/dist/handlers/server-requests.js +7 -5
- package/dist/handlers/server-requests.js.map +1 -1
- package/dist/handlers/session.d.ts +14 -1
- package/dist/handlers/session.d.ts.map +1 -1
- package/dist/handlers/session.js +193 -20
- package/dist/handlers/session.js.map +1 -1
- package/dist/handlers/slash.d.ts.map +1 -1
- package/dist/handlers/slash.js +15 -13
- package/dist/handlers/slash.js.map +1 -1
- package/dist/i18n.d.ts +111 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +222 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +114 -15
- package/dist/index.js.map +1 -1
- package/dist/interaction/adapter.d.ts.map +1 -1
- package/dist/interaction/adapter.js +10 -7
- package/dist/interaction/adapter.js.map +1 -1
- package/dist/remote/config.d.ts +7 -0
- package/dist/remote/config.d.ts.map +1 -1
- package/dist/remote/config.js +2 -0
- package/dist/remote/config.js.map +1 -1
- package/dist/remote/endpoint.d.ts.map +1 -1
- package/dist/remote/endpoint.js +66 -11
- package/dist/remote/endpoint.js.map +1 -1
- package/dist/remote/hub-server.d.ts +15 -0
- package/dist/remote/hub-server.d.ts.map +1 -1
- package/dist/remote/hub-server.js +205 -1
- package/dist/remote/hub-server.js.map +1 -1
- package/dist/repl/App.d.ts.map +1 -1
- package/dist/repl/App.js +3 -2
- package/dist/repl/App.js.map +1 -1
- package/dist/repl/model.d.ts +2 -0
- package/dist/repl/model.d.ts.map +1 -1
- package/dist/repl/model.js.map +1 -1
- package/dist/repl/run.d.ts.map +1 -1
- package/dist/repl/run.js +5 -0
- package/dist/repl/run.js.map +1 -1
- package/dist/server.d.ts +78 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +114 -3
- package/dist/server.js.map +1 -1
- package/dist/tasks-index.d.ts +27 -0
- package/dist/tasks-index.d.ts.map +1 -1
- package/dist/tasks-index.js +72 -3
- package/dist/tasks-index.js.map +1 -1
- package/docs/REMOTE-CLIENTS.md +43 -0
- package/docs/TROUBLESHOOTING.md +9 -3
- package/package.json +13 -12
- package/dist/remote/session-liveness.d.ts +0 -19
- package/dist/remote/session-liveness.d.ts.map +0 -1
- package/dist/remote/session-liveness.js +0 -70
- package/dist/remote/session-liveness.js.map +0 -1
- package/dist/repl/mouse.d.ts +0 -49
- package/dist/repl/mouse.d.ts.map +0 -1
- package/dist/repl/mouse.js +0 -165
- package/dist/repl/mouse.js.map +0 -1
package/dist/backend/sandbox.js
CHANGED
|
@@ -2,12 +2,20 @@
|
|
|
2
2
|
* Seatbelt sandbox for the zcode backend subprocess (ADR-0011).
|
|
3
3
|
*
|
|
4
4
|
* The backend runs every Bash/Edit/Write tool with the user's full
|
|
5
|
-
* privileges; one careless command destroys real data.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
5
|
+
* privileges; one careless command destroys real data. The bridge wraps the
|
|
6
|
+
* single backend spawn point with a generated `sandbox-exec` profile using a
|
|
7
|
+
* writes-only restriction model: reads and process execution stay open, file
|
|
8
|
+
* writes are denied everywhere except an explicit whitelist. Children inherit
|
|
9
|
+
* the sandbox, so one wrap covers the backend, its tool subprocesses, and
|
|
10
|
+
* model workers — deletion (rm/mv/truncate) is a write-class syscall, so it
|
|
11
|
+
* is stopped by the write denial regardless of which binary performs it
|
|
12
|
+
* (name-banning executables would be trivially bypassed and is deliberately
|
|
13
|
+
* not done).
|
|
14
|
+
*
|
|
15
|
+
* Arming is dual-switch (see sandboxActive): ZCODE_ACP_SANDBOX=1 forces it
|
|
16
|
+
* globally, or a workspace opts in via `enabled: true` in its own
|
|
17
|
+
* .zcode/acp/sandbox.json — the template is auto-created with enabled:false,
|
|
18
|
+
* so opting in is always an explicit user edit.
|
|
11
19
|
*
|
|
12
20
|
* Whitelist (frozen at spawn, rebuilt on backend restart):
|
|
13
21
|
* - workspace roots of all live sessions (union of server.sessionCwds)
|
|
@@ -16,6 +24,7 @@
|
|
|
16
24
|
* - system temp + regenerable cache dirs (zero-value targets, constant
|
|
17
25
|
* toolchain traffic)
|
|
18
26
|
* - each project's `.zcode/acp/sandbox.json` `allow` list
|
|
27
|
+
* - bridge-lifetime once-allows granted via the dynamic allow flow
|
|
19
28
|
*
|
|
20
29
|
* `<workspace>/.zcode/acp/` is a DENY island inside every allowed workspace:
|
|
21
30
|
* the sandbox forbids writes there while the bridge — outside the sandbox —
|
|
@@ -25,7 +34,7 @@
|
|
|
25
34
|
* macOS-only: Seatbelt is a macOS facility. Setting the env elsewhere warns
|
|
26
35
|
* once and runs unsandboxed (see sandboxActive()).
|
|
27
36
|
*/
|
|
28
|
-
import { mkdirSync, readFileSync, realpathSync, writeFileSync } from "node:fs";
|
|
37
|
+
import { lstatSync, mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync, writeFileSync, } from "node:fs";
|
|
29
38
|
import os from "node:os";
|
|
30
39
|
import path from "node:path";
|
|
31
40
|
import process from "node:process";
|
|
@@ -46,48 +55,180 @@ const ZCODE_STATE_DIRS = ["~/.zcode", "~/.zcode-beta", "~/.zcode-plugin"];
|
|
|
46
55
|
export function sandboxConfigPath(workspaceRoot) {
|
|
47
56
|
return path.join(workspaceRoot, ".zcode", "acp", "sandbox.json");
|
|
48
57
|
}
|
|
58
|
+
/** Roots whose template auto-creation already failed — warn once, not per call. */
|
|
59
|
+
const templateFailedRoots = new Set();
|
|
60
|
+
/** Config issues already warned — once per root(+issue), not per read. */
|
|
61
|
+
const warnedConfigIssues = new Set();
|
|
62
|
+
/**
|
|
63
|
+
* Last enabled value successfully parsed per config file. A config that
|
|
64
|
+
* becomes unreadable (EACCES/ENOTDIR) or VANISHES after parsing enabled:true
|
|
65
|
+
* must fail closed: the sandboxed agent can produce all of those from inside
|
|
66
|
+
* the sandbox (chmod 0000 `.zcode`, replace `.zcode` with a file, rename it
|
|
67
|
+
* away) — falling back to the disabled template would silently disarm.
|
|
68
|
+
*/
|
|
69
|
+
const lastEnabledSeen = new Map();
|
|
70
|
+
function defaultConfig(enabled) {
|
|
71
|
+
return { enabled, allow: [], deny: [], strictGit: false };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The config file must be a REGULAR file whose real location is exactly
|
|
75
|
+
* <root>/.zcode/acp/sandbox.json. A symlinked or hardlinked-away config
|
|
76
|
+
* pierces the deny island: the agent writes the link target inside the
|
|
77
|
+
* allowed workspace and thereby edits its own allowlist. Missing files are
|
|
78
|
+
* fine — that is the auto-create path.
|
|
79
|
+
*/
|
|
80
|
+
function configIntegrityOk(workspaceRoot, file) {
|
|
81
|
+
try {
|
|
82
|
+
const st = lstatSync(file);
|
|
83
|
+
if (!st.isFile() || st.nlink > 1)
|
|
84
|
+
return false;
|
|
85
|
+
return realpathSync(file) === sandboxConfigPath(resolveReal(workspaceRoot));
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return true; // missing (or unreadable parents) → template path
|
|
89
|
+
}
|
|
90
|
+
}
|
|
49
91
|
/**
|
|
50
|
-
* Read the project sandbox config, auto-creating
|
|
51
|
-
*
|
|
52
|
-
*
|
|
92
|
+
* Read the project sandbox config, auto-creating the template (enabled:
|
|
93
|
+
* false) on first touch so the user finds the file and can flip the switch —
|
|
94
|
+
* the PRESENCE of the file is never the switch, only `enabled` is, so the
|
|
95
|
+
* auto-create cannot arm anything by itself. A malformed or non-object file
|
|
96
|
+
* falls back to enabled:true WITHOUT rewriting it: corruption must fail
|
|
97
|
+
* CLOSED (the user opted in; losing that to a half-saved file would silently
|
|
98
|
+
* disarm), and clobbering the user's mid-edit bytes with a template would be
|
|
99
|
+
* worse than the transient read. A symlinked/hardlinked config is treated
|
|
100
|
+
* the same way (armed, persistence disabled) — see configIntegrityOk. So is
|
|
101
|
+
* a config that was armed and then became unreadable or disappeared — only
|
|
102
|
+
* the agent could do that from inside the sandbox.
|
|
53
103
|
*/
|
|
54
104
|
export function readSandboxConfig(workspaceRoot) {
|
|
55
105
|
const file = sandboxConfigPath(workspaceRoot);
|
|
106
|
+
if (!configIntegrityOk(workspaceRoot, file)) {
|
|
107
|
+
if (!warnedConfigIssues.has(file)) {
|
|
108
|
+
warnedConfigIssues.add(file);
|
|
109
|
+
warn(`sandbox: ${file} is symlinked/hardlinked outside the deny island — reading as armed; fix the link (persistence stays disabled until then)`);
|
|
110
|
+
}
|
|
111
|
+
return defaultConfig(true);
|
|
112
|
+
}
|
|
113
|
+
let text;
|
|
56
114
|
try {
|
|
57
|
-
|
|
58
|
-
return {
|
|
59
|
-
allow: Array.isArray(parsed.allow) ? parsed.allow.filter((p) => typeof p === "string") : [],
|
|
60
|
-
strictGit: parsed.strictGit === true,
|
|
61
|
-
};
|
|
115
|
+
text = readFileSync(file, "utf8");
|
|
62
116
|
}
|
|
63
|
-
catch {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
117
|
+
catch (e) {
|
|
118
|
+
const code = e.code;
|
|
119
|
+
// ENOENT on a never-armed project is the normal pre-template state.
|
|
120
|
+
// Everything else — EACCES/ENOTDIR (agent tampered with `.zcode`), or a
|
|
121
|
+
// miss on a config this bridge already read as armed — fails closed.
|
|
122
|
+
if (code === "ENOENT" && lastEnabledSeen.get(file) !== true) {
|
|
123
|
+
// Write the discovery template (best-effort; a read-only workspace
|
|
124
|
+
// just never gets one — the sandbox can still be env-armed).
|
|
125
|
+
if (!templateFailedRoots.has(workspaceRoot)) {
|
|
126
|
+
try {
|
|
127
|
+
mkdirSync(path.dirname(file), { recursive: true });
|
|
128
|
+
writeFileSync(file, JSON.stringify(defaultConfig(false), null, 2) + "\n");
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
templateFailedRoots.add(workspaceRoot);
|
|
132
|
+
warn(`sandbox: could not create ${file}: ${err instanceof Error ? err.message : String(err)}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return defaultConfig(false);
|
|
68
136
|
}
|
|
69
|
-
|
|
70
|
-
|
|
137
|
+
const issue = code ?? "vanished";
|
|
138
|
+
if (!warnedConfigIssues.has(`${file}:${issue}`)) {
|
|
139
|
+
warnedConfigIssues.add(`${file}:${issue}`);
|
|
140
|
+
warn(`sandbox: ${file} unreadable (${issue}) — reading as armed`);
|
|
71
141
|
}
|
|
72
|
-
return
|
|
142
|
+
return defaultConfig(true);
|
|
143
|
+
}
|
|
144
|
+
let parsed;
|
|
145
|
+
try {
|
|
146
|
+
parsed = JSON.parse(text);
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
lastEnabledSeen.set(file, true);
|
|
150
|
+
return defaultConfig(true);
|
|
73
151
|
}
|
|
152
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
153
|
+
lastEnabledSeen.set(file, true);
|
|
154
|
+
return defaultConfig(true);
|
|
155
|
+
}
|
|
156
|
+
const cfg = parsed;
|
|
157
|
+
const allow = Array.isArray(cfg.allow) ? cfg.allow.filter((p) => typeof p === "string") : [];
|
|
158
|
+
const deny = Array.isArray(cfg.deny) ? cfg.deny.filter((p) => typeof p === "string") : [];
|
|
159
|
+
// Relative (or `~user`) entries would silently anchor to the BRIDGE's cwd —
|
|
160
|
+
// a committed config must speak in absolute paths or `~/` only.
|
|
161
|
+
const absoluteAllow = allow.filter((p) => p.startsWith("/") || p.startsWith("~/"));
|
|
162
|
+
const absoluteDeny = deny.filter((p) => p.startsWith("/") || p.startsWith("~/"));
|
|
163
|
+
if (absoluteAllow.length !== allow.length && !warnedConfigIssues.has(`${file}:relative`)) {
|
|
164
|
+
warnedConfigIssues.add(`${file}:relative`);
|
|
165
|
+
warn(`sandbox: dropped ${allow.length - absoluteAllow.length} non-absolute allow entries in ${file}`);
|
|
166
|
+
}
|
|
167
|
+
if (absoluteDeny.length !== deny.length && !warnedConfigIssues.has(`${file}:relative-deny`)) {
|
|
168
|
+
warnedConfigIssues.add(`${file}:relative-deny`);
|
|
169
|
+
warn(`sandbox: dropped ${deny.length - absoluteDeny.length} non-absolute deny entries in ${file}`);
|
|
170
|
+
}
|
|
171
|
+
lastEnabledSeen.set(file, cfg.enabled === true);
|
|
172
|
+
return {
|
|
173
|
+
enabled: cfg.enabled === true,
|
|
174
|
+
allow: absoluteAllow,
|
|
175
|
+
deny: absoluteDeny,
|
|
176
|
+
strictGit: cfg.strictGit === true,
|
|
177
|
+
};
|
|
74
178
|
}
|
|
75
179
|
/**
|
|
76
180
|
* Bridge-side persistence for "always allow" (the deny island keeps the
|
|
77
|
-
* agent from writing this file itself).
|
|
181
|
+
* agent from writing this file itself). Round-trips the whole config so the
|
|
182
|
+
* enabled flag survives the write. Dedupes by exact string. Returns false
|
|
183
|
+
* when persistence is impossible (symlinked config, unwritable path) — the
|
|
184
|
+
* caller then downgrades to a bridge-lifetime once-allow.
|
|
78
185
|
*/
|
|
79
186
|
export function appendSandboxAllow(workspaceRoot, allowedPath) {
|
|
187
|
+
const file = sandboxConfigPath(workspaceRoot);
|
|
188
|
+
if (!configIntegrityOk(workspaceRoot, file)) {
|
|
189
|
+
warn(`sandbox: refusing to persist through a symlinked/hardlinked ${file}`);
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
80
192
|
const cfg = readSandboxConfig(workspaceRoot);
|
|
81
193
|
if (cfg.allow.includes(allowedPath))
|
|
82
|
-
return;
|
|
194
|
+
return true;
|
|
83
195
|
cfg.allow.push(allowedPath);
|
|
84
196
|
try {
|
|
85
|
-
mkdirSync(path.dirname(
|
|
86
|
-
writeFileSync(
|
|
87
|
-
log(`sandbox: allowlisted ${allowedPath} in ${
|
|
197
|
+
mkdirSync(path.dirname(file), { recursive: true });
|
|
198
|
+
writeFileSync(file, JSON.stringify({ enabled: cfg.enabled, allow: cfg.allow, deny: cfg.deny, strictGit: cfg.strictGit }, null, 2) + "\n");
|
|
199
|
+
log(`sandbox: allowlisted ${allowedPath} in ${file}`);
|
|
200
|
+
return true;
|
|
88
201
|
}
|
|
89
202
|
catch (e) {
|
|
90
203
|
warn(`sandbox: could not persist allowlist: ${e instanceof Error ? e.message : String(e)}`);
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Bridge-side persistence for the popup's "永不放行" choice — the visible
|
|
209
|
+
* counterpart of appendSandboxAllow: a denied path is RECORDED in the
|
|
210
|
+
* config (never hidden in bridge memory), so the ask never resurfaces for
|
|
211
|
+
* it and the user can review or undo the decision by editing the file.
|
|
212
|
+
*/
|
|
213
|
+
export function appendSandboxDeny(workspaceRoot, deniedPath) {
|
|
214
|
+
const file = sandboxConfigPath(workspaceRoot);
|
|
215
|
+
if (!configIntegrityOk(workspaceRoot, file)) {
|
|
216
|
+
warn(`sandbox: refusing to persist through a symlinked/hardlinked ${file}`);
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
const cfg = readSandboxConfig(workspaceRoot);
|
|
220
|
+
if (cfg.deny.includes(deniedPath))
|
|
221
|
+
return true;
|
|
222
|
+
cfg.deny.push(deniedPath);
|
|
223
|
+
try {
|
|
224
|
+
mkdirSync(path.dirname(file), { recursive: true });
|
|
225
|
+
writeFileSync(file, JSON.stringify({ enabled: cfg.enabled, allow: cfg.allow, deny: cfg.deny, strictGit: cfg.strictGit }, null, 2) + "\n");
|
|
226
|
+
log(`sandbox: denylisted ${deniedPath} in ${file}`);
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
catch (e) {
|
|
230
|
+
warn(`sandbox: could not persist denylist: ${e instanceof Error ? e.message : String(e)}`);
|
|
231
|
+
return false;
|
|
91
232
|
}
|
|
92
233
|
}
|
|
93
234
|
/** Expand a leading `~` to the real home dir. */
|
|
@@ -130,36 +271,44 @@ function sb(p) {
|
|
|
130
271
|
return `"${p.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
|
|
131
272
|
}
|
|
132
273
|
/**
|
|
133
|
-
* Build the SBPL profile text.
|
|
134
|
-
* (verified empirically
|
|
135
|
-
*
|
|
274
|
+
* Build the SBPL profile text. SBPL resolves overlapping rules by LAST
|
|
275
|
+
* match (verified empirically: an allow emitted after a deny re-permits the
|
|
276
|
+
* write), so the layout is: base deny-all, then every allow, then the deny
|
|
277
|
+
* carve-outs (island, strictGit) LAST so nothing can override them.
|
|
136
278
|
*/
|
|
137
279
|
export function buildSandboxProfile(input) {
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
"(allow default)",
|
|
141
|
-
"(deny file-write*)",
|
|
142
|
-
];
|
|
280
|
+
const allows = [];
|
|
281
|
+
const denies = [];
|
|
143
282
|
for (const ws of input.workspaces) {
|
|
144
|
-
|
|
283
|
+
// Resolve here too (idempotent): direct callers may pass symlinked
|
|
284
|
+
// roots (/tmp → /private/tmp) that would silently fail subpath match.
|
|
285
|
+
const root = resolveReal(ws.root);
|
|
286
|
+
allows.push(`(allow file-write* (subpath ${sb(root)}))`);
|
|
145
287
|
// Deny island: the sandbox config lives INSIDE the writable workspace —
|
|
146
288
|
// without this carve-out the agent could grant itself permissions.
|
|
147
|
-
|
|
289
|
+
denies.push(`(deny file-write* (subpath ${sb(path.join(root, ".zcode", "acp"))}))`);
|
|
148
290
|
if (ws.config.strictGit) {
|
|
149
|
-
|
|
291
|
+
denies.push(`(deny file-write* (subpath ${sb(path.join(root, ".git"))}))`);
|
|
150
292
|
}
|
|
151
293
|
for (const allowed of ws.config.allow) {
|
|
152
|
-
|
|
294
|
+
allows.push(`(allow file-write* (subpath ${sb(resolveReal(allowed))}))`);
|
|
153
295
|
}
|
|
154
296
|
}
|
|
155
297
|
for (const p of [...ZCODE_STATE_DIRS, ...DEFAULT_CACHE_DIRS]) {
|
|
156
|
-
|
|
298
|
+
allows.push(`(allow file-write* (subpath ${sb(resolveReal(p))}))`);
|
|
157
299
|
}
|
|
158
300
|
for (const allowed of input.extraAllow) {
|
|
159
|
-
|
|
301
|
+
allows.push(`(allow file-write* (subpath ${sb(resolveReal(allowed))}))`);
|
|
160
302
|
}
|
|
161
|
-
|
|
162
|
-
|
|
303
|
+
allows.push(`(allow file-write* (subpath ${sb(resolveReal(process.env.TMPDIR ?? os.tmpdir()))}))`);
|
|
304
|
+
// /dev/null: git and idiom-level shell redirects write here constantly —
|
|
305
|
+
// without this allow, `git commit` and every `2>/dev/null` fail with
|
|
306
|
+
// "could not open '/dev/null'" (observed in review probes).
|
|
307
|
+
allows.push(`(allow file-write-data (literal "/dev/null"))`);
|
|
308
|
+
if (input.profileDir) {
|
|
309
|
+
denies.push(`(deny file-write* (subpath ${sb(input.profileDir)}))`);
|
|
310
|
+
}
|
|
311
|
+
return (["(version 1)", "(allow default)", "(deny file-write*)", ...allows, ...denies].join("\n") + "\n");
|
|
163
312
|
}
|
|
164
313
|
/** Resolved arm input for the CURRENT spawn: union of all live workspaces. */
|
|
165
314
|
export function collectSandboxWorkspaces(cwdRoots) {
|
|
@@ -186,44 +335,90 @@ export function collectSandboxWorkspaces(cwdRoots) {
|
|
|
186
335
|
extraAllow: [...new Set(extraAllow.map(resolveReal))].filter((p) => !own.has(p)),
|
|
187
336
|
};
|
|
188
337
|
}
|
|
189
|
-
let
|
|
338
|
+
let envDecision = null;
|
|
339
|
+
let platformWarned = false;
|
|
340
|
+
/** Raw env request, uncached — the non-macOS warn must fire even when the cached darwin decision is false. */
|
|
341
|
+
function envWanted() {
|
|
342
|
+
const raw = process.env[SANDBOX_ENV];
|
|
343
|
+
return raw === "1" || raw === "true";
|
|
344
|
+
}
|
|
345
|
+
/** Env arm decision (env wanted AND darwin), cached — env can't change mid-run. */
|
|
346
|
+
function sandboxEnvOn() {
|
|
347
|
+
if (envDecision === null)
|
|
348
|
+
envDecision = envWanted() && process.platform === "darwin";
|
|
349
|
+
return envDecision;
|
|
350
|
+
}
|
|
190
351
|
/**
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
352
|
+
* The project-level switch: `enabled: true` inside the workspace's sandbox
|
|
353
|
+
* config (auto-created on first touch, template ships false). Reading also
|
|
354
|
+
* materializes the template for discovery. Once the sandbox is armed the
|
|
355
|
+
* deny island keeps the agent from flipping the switch back off.
|
|
194
356
|
*/
|
|
195
|
-
export function
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
357
|
+
export function projectSandboxEnabled(workspaceRoot) {
|
|
358
|
+
return readSandboxConfig(workspaceRoot).enabled;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Whether the sandbox should arm for this bridge: ZCODE_ACP_SANDBOX=1
|
|
362
|
+
* (global, cached) OR any given workspace root opted in via
|
|
363
|
+
* sandbox.json `enabled` (project switch, re-checked per call so a flip
|
|
364
|
+
* mid-run is seen). macOS-only: elsewhere a requested sandbox warns once and
|
|
365
|
+
* runs unsandboxed.
|
|
366
|
+
*/
|
|
367
|
+
export function sandboxActive(roots = [process.cwd()]) {
|
|
368
|
+
if (sandboxEnvOn())
|
|
369
|
+
return true;
|
|
370
|
+
const wanted = envWanted() || [...roots].some(projectSandboxEnabled);
|
|
371
|
+
if (!wanted)
|
|
202
372
|
return false;
|
|
203
|
-
}
|
|
204
373
|
if (process.platform !== "darwin") {
|
|
205
|
-
|
|
206
|
-
|
|
374
|
+
if (!platformWarned) {
|
|
375
|
+
platformWarned = true;
|
|
376
|
+
warn(`sandbox: requested (${SANDBOX_ENV}=1 or project config) but Seatbelt is macOS-only — running WITHOUT sandbox`);
|
|
377
|
+
}
|
|
207
378
|
return false;
|
|
208
379
|
}
|
|
209
|
-
sandboxDecision = true;
|
|
210
380
|
return true;
|
|
211
381
|
}
|
|
212
|
-
/** Test hook: reset
|
|
382
|
+
/** Test hook: reset cached decisions and warn-once sets. */
|
|
213
383
|
export function resetSandboxDecisionForTest() {
|
|
214
|
-
|
|
384
|
+
envDecision = null;
|
|
385
|
+
platformWarned = false;
|
|
386
|
+
templateFailedRoots.clear();
|
|
387
|
+
warnedConfigIssues.clear();
|
|
388
|
+
lastEnabledSeen.clear();
|
|
215
389
|
}
|
|
390
|
+
/** Previous respawn's profile dir — removed once superseded (its backend is dead). */
|
|
391
|
+
let lastProfileDir = null;
|
|
216
392
|
/**
|
|
217
|
-
*
|
|
218
|
-
*
|
|
393
|
+
* Arm a backend argv: build the profile into a FRESH unpredictable dir and
|
|
394
|
+
* wrap with sandbox-exec. The dir sits DIRECTLY under $HOME with a
|
|
395
|
+
* `.zcode-acp-sbx-` prefix — OUTSIDE every whitelisted path (it is a SIBLING
|
|
396
|
+
* of `~/.zcode`, not inside it). That location is the load-bearing defense:
|
|
397
|
+
* $TMPDIR and the cache dirs are agent-writable, and a PRIOR sandboxed
|
|
398
|
+
* generation (a setsid survivor of the old process group) keeps its own
|
|
399
|
+
* profile's allows — so a profile placed there could be raced, symlinked,
|
|
400
|
+
* FIFO'd, or occupied no matter how fresh its name (reproduced across
|
|
401
|
+
* generations even with mkdtemp + O_EXCL + a self-deny, which each generation
|
|
402
|
+
* only applies to its own dir). The agent can also kill the backend at will
|
|
403
|
+
* (signals are not file-writes) to control respawn timing; with the profile
|
|
404
|
+
* unreachable from ANY generation, that primitive buys nothing. O_EXCL ("wx")
|
|
405
|
+
* additionally refuses pre-placed symlinks from a pre-arming process, and
|
|
406
|
+
* the profile still self-denies its own dir last (defense in depth for the
|
|
407
|
+
* workspace-root-is-$HOME edge, where home itself is writable).
|
|
219
408
|
*/
|
|
220
|
-
export function
|
|
221
|
-
const
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
409
|
+
export function armSandboxArgv(argv, input) {
|
|
410
|
+
const dir = mkdtempSync(path.join(os.homedir(), ".zcode-acp-sbx-"));
|
|
411
|
+
const file = path.join(dir, "profile.sb");
|
|
412
|
+
writeFileSync(file, buildSandboxProfile({ ...input, profileDir: dir }), { flag: "wx" });
|
|
413
|
+
if (lastProfileDir && lastProfileDir !== dir) {
|
|
414
|
+
try {
|
|
415
|
+
rmSync(lastProfileDir, { recursive: true, force: true });
|
|
416
|
+
}
|
|
417
|
+
catch {
|
|
418
|
+
// best-effort cleanup of a superseded profile
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
lastProfileDir = dir;
|
|
227
422
|
log(`sandbox: backend wrapped with sandbox-exec (profile: ${file})`);
|
|
228
423
|
return ["sandbox-exec", "-f", file, ...argv];
|
|
229
424
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/backend/sandbox.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/backend/sandbox.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAWH,sFAAsF;AACtF,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAWH,sFAAsF;AACtF,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAoBxF"}
|
package/dist/cli.js
CHANGED
|
@@ -14,7 +14,7 @@ import { basename } from "node:path";
|
|
|
14
14
|
import process from "node:process";
|
|
15
15
|
import { main as runHub } from "./bin/hub.js";
|
|
16
16
|
import { main as runQuota } from "./bin/quota.js";
|
|
17
|
-
import { main as runServer } from "./index.js";
|
|
17
|
+
import { main as runServer, runHeadless } from "./index.js";
|
|
18
18
|
import { runRepl } from "./repl/run.js";
|
|
19
19
|
import { AGENT_INFO } from "./utils.js";
|
|
20
20
|
/**
|
|
@@ -38,6 +38,8 @@ export function resolveInvocation(invokedAs, argv) {
|
|
|
38
38
|
switch (sub) {
|
|
39
39
|
case "server":
|
|
40
40
|
return { kind: "server" };
|
|
41
|
+
case "serve":
|
|
42
|
+
return { kind: "serve" };
|
|
41
43
|
case "hub":
|
|
42
44
|
return { kind: "hub" };
|
|
43
45
|
case "quota":
|
|
@@ -58,6 +60,10 @@ Commands:
|
|
|
58
60
|
-i <sec>, -d detail, -p plain, provider glm|go.
|
|
59
61
|
hub Run the remote-access hub daemon (was zcode-acp-hub;
|
|
60
62
|
usually auto-spawned by bridges, rarely run by hand).
|
|
63
|
+
serve Headless bridge for remote session-create (ADR-0014):
|
|
64
|
+
no stdio editor, lives for remote WS clients until idle.
|
|
65
|
+
Normally spawned by the hub, not run by hand (needs
|
|
66
|
+
ZCODE_ACP_REMOTE=1 + ZCODE_ACP_REMOTE_TOKEN).
|
|
61
67
|
server The editor-facing ACP bridge over stdio (was
|
|
62
68
|
zcode-acp-server; editors normally launch it via the bin
|
|
63
69
|
alias without this subcommand).
|
|
@@ -96,6 +102,9 @@ async function main() {
|
|
|
96
102
|
case "server":
|
|
97
103
|
await runServer();
|
|
98
104
|
return;
|
|
105
|
+
case "serve":
|
|
106
|
+
await runHeadless();
|
|
107
|
+
return;
|
|
99
108
|
case "hub":
|
|
100
109
|
await runHub();
|
|
101
110
|
return;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-compact.d.ts","sourceRoot":"","sources":["../../src/config/auto-compact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-compact.d.ts","sourceRoot":"","sources":["../../src/config/auto-compact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAIrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,qFAAqF;AACrF,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,EAAE,EAAE,GAAG,CAAC,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAuDf"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { randomUUID } from "node:crypto";
|
|
14
14
|
import { compact } from "../handlers/extensions.js";
|
|
15
|
+
import { messages } from "../i18n.js";
|
|
15
16
|
import { log, warn } from "../utils.js";
|
|
16
17
|
import { sendTextChunk } from "../handlers/io.js";
|
|
17
18
|
/** ENV: `ZCODE_ACP_AUTO_COMPACT_THRESHOLD` — absolute token count (0 = disabled). */
|
|
@@ -47,20 +48,21 @@ export async function maybeAutoCompact(server, cx, acpSid, zcodeSid) {
|
|
|
47
48
|
if (used < threshold)
|
|
48
49
|
return;
|
|
49
50
|
log(`auto-compact: contextUsed=${used} >= threshold=${threshold}, compacting…`);
|
|
50
|
-
|
|
51
|
+
const m = messages();
|
|
52
|
+
await sendTextChunk(cx, acpSid, m.autoCompactStart(used.toLocaleString(), threshold.toLocaleString()), msgId);
|
|
51
53
|
// compact() handles: session/compact → waitForTurnIdle → emitInitialUsage.
|
|
52
54
|
const result = (await compact(server, { sessionId: acpSid }, cx));
|
|
53
55
|
if (result.__lockTimeout) {
|
|
54
|
-
await sendTextChunk(cx, acpSid,
|
|
56
|
+
await sendTextChunk(cx, acpSid, m.autoCompactTimeout, msgId);
|
|
55
57
|
}
|
|
56
58
|
else {
|
|
57
|
-
await sendTextChunk(cx, acpSid,
|
|
59
|
+
await sendTextChunk(cx, acpSid, m.autoCompactDone, msgId);
|
|
58
60
|
}
|
|
59
61
|
log("auto-compact: done");
|
|
60
62
|
}
|
|
61
63
|
catch (e) {
|
|
62
64
|
warn(`auto-compact: compact failed (${e instanceof Error ? e.message : String(e)})`);
|
|
63
|
-
await sendTextChunk(cx, acpSid,
|
|
65
|
+
await sendTextChunk(cx, acpSid, messages().autoCompactFailed(e instanceof Error ? e.message : String(e)), msgId);
|
|
64
66
|
// Best-effort: never break the prompt response.
|
|
65
67
|
}
|
|
66
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-compact.js","sourceRoot":"","sources":["../../src/config/auto-compact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-compact.js","sourceRoot":"","sources":["../../src/config/auto-compact.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-discovery.d.ts","sourceRoot":"","sources":["../../src/config/mcp-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"mcp-discovery.d.ts","sourceRoot":"","sources":["../../src/config/mcp-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,iDAAiD;AACjD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAsBD;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,aAAa,EAAE,CAmFhD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CA4BjE"}
|