zcode-acp-server 0.14.2 → 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 +160 -0
- package/dist/backend/sandbox.d.ts.map +1 -0
- package/dist/backend/sandbox.js +425 -0
- package/dist/backend/sandbox.js.map +1 -0
- package/dist/backend/types.d.ts +4 -0
- package/dist/backend/types.d.ts.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 +245 -60
- 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/ARCHITECTURE.md +19 -10
- 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
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seatbelt sandbox for the zcode backend subprocess (ADR-0011).
|
|
3
|
+
*
|
|
4
|
+
* The backend runs every Bash/Edit/Write tool with the user's full
|
|
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.
|
|
19
|
+
*
|
|
20
|
+
* Whitelist (frozen at spawn, rebuilt on backend restart):
|
|
21
|
+
* - workspace roots of all live sessions (union of server.sessionCwds)
|
|
22
|
+
* - `~/.zcode*` (the backend's own sessions/db/logs — not agent privilege;
|
|
23
|
+
* denying it breaks session/create itself)
|
|
24
|
+
* - system temp + regenerable cache dirs (zero-value targets, constant
|
|
25
|
+
* toolchain traffic)
|
|
26
|
+
* - each project's `.zcode/acp/sandbox.json` `allow` list
|
|
27
|
+
* - bridge-lifetime once-allows granted via the dynamic allow flow
|
|
28
|
+
*
|
|
29
|
+
* `<workspace>/.zcode/acp/` is a DENY island inside every allowed workspace:
|
|
30
|
+
* the sandbox forbids writes there while the bridge — outside the sandbox —
|
|
31
|
+
* persists "always allow" entries on the user's behalf. The agent cannot
|
|
32
|
+
* edit its own allowlist.
|
|
33
|
+
*
|
|
34
|
+
* macOS-only: Seatbelt is a macOS facility. Setting the env elsewhere warns
|
|
35
|
+
* once and runs unsandboxed (see sandboxActive()).
|
|
36
|
+
*/
|
|
37
|
+
import { lstatSync, mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync, writeFileSync, } from "node:fs";
|
|
38
|
+
import os from "node:os";
|
|
39
|
+
import path from "node:path";
|
|
40
|
+
import process from "node:process";
|
|
41
|
+
import { log, warn } from "../utils.js";
|
|
42
|
+
/** The one and only env switch. Every other knob is project config. */
|
|
43
|
+
export const SANDBOX_ENV = "ZCODE_ACP_SANDBOX";
|
|
44
|
+
/** Regenerable cache dirs trusted as default-writable (ADR-0011). */
|
|
45
|
+
const DEFAULT_CACHE_DIRS = [
|
|
46
|
+
"~/Library/Caches",
|
|
47
|
+
"~/.cache",
|
|
48
|
+
"~/.npm",
|
|
49
|
+
"~/Library/pnpm",
|
|
50
|
+
"~/.node-gyp",
|
|
51
|
+
];
|
|
52
|
+
/** Backend state roots that must stay writable for the bridge to function. */
|
|
53
|
+
const ZCODE_STATE_DIRS = ["~/.zcode", "~/.zcode-beta", "~/.zcode-plugin"];
|
|
54
|
+
/** Path of the per-project sandbox config inside a workspace root. */
|
|
55
|
+
export function sandboxConfigPath(workspaceRoot) {
|
|
56
|
+
return path.join(workspaceRoot, ".zcode", "acp", "sandbox.json");
|
|
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
|
+
}
|
|
91
|
+
/**
|
|
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.
|
|
103
|
+
*/
|
|
104
|
+
export function readSandboxConfig(workspaceRoot) {
|
|
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;
|
|
114
|
+
try {
|
|
115
|
+
text = readFileSync(file, "utf8");
|
|
116
|
+
}
|
|
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);
|
|
136
|
+
}
|
|
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`);
|
|
141
|
+
}
|
|
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);
|
|
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
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Bridge-side persistence for "always allow" (the deny island keeps the
|
|
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.
|
|
185
|
+
*/
|
|
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
|
+
}
|
|
192
|
+
const cfg = readSandboxConfig(workspaceRoot);
|
|
193
|
+
if (cfg.allow.includes(allowedPath))
|
|
194
|
+
return true;
|
|
195
|
+
cfg.allow.push(allowedPath);
|
|
196
|
+
try {
|
|
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;
|
|
201
|
+
}
|
|
202
|
+
catch (e) {
|
|
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;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/** Expand a leading `~` to the real home dir. */
|
|
235
|
+
function expandHome(p) {
|
|
236
|
+
return p.startsWith("~/") ? path.join(os.homedir(), p.slice(2)) : p;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Resolve a path to its filesystem truth. Seatbelt matches real paths, so a
|
|
240
|
+
* symlinked prefix (/tmp → /private/tmp) would silently fail to match —
|
|
241
|
+
* resolve what exists and append the (possibly not-yet-created) remainder.
|
|
242
|
+
*/
|
|
243
|
+
export function resolveReal(p) {
|
|
244
|
+
const expanded = expandHome(p);
|
|
245
|
+
try {
|
|
246
|
+
return realpathSync(expanded);
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// Deepest existing ancestor + remainder, so not-yet-created cache dirs
|
|
250
|
+
// still land on their real location once created under a real parent.
|
|
251
|
+
let dir = expanded;
|
|
252
|
+
const tail = [];
|
|
253
|
+
for (;;) {
|
|
254
|
+
const parent = path.dirname(dir);
|
|
255
|
+
if (parent === dir)
|
|
256
|
+
return expanded;
|
|
257
|
+
tail.unshift(path.basename(dir));
|
|
258
|
+
dir = parent;
|
|
259
|
+
try {
|
|
260
|
+
const real = realpathSync(dir);
|
|
261
|
+
return path.join(real, ...tail);
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
// keep walking up
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/** Escape a path into an SBPL string literal. */
|
|
270
|
+
function sb(p) {
|
|
271
|
+
return `"${p.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
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.
|
|
278
|
+
*/
|
|
279
|
+
export function buildSandboxProfile(input) {
|
|
280
|
+
const allows = [];
|
|
281
|
+
const denies = [];
|
|
282
|
+
for (const ws of input.workspaces) {
|
|
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)}))`);
|
|
287
|
+
// Deny island: the sandbox config lives INSIDE the writable workspace —
|
|
288
|
+
// without this carve-out the agent could grant itself permissions.
|
|
289
|
+
denies.push(`(deny file-write* (subpath ${sb(path.join(root, ".zcode", "acp"))}))`);
|
|
290
|
+
if (ws.config.strictGit) {
|
|
291
|
+
denies.push(`(deny file-write* (subpath ${sb(path.join(root, ".git"))}))`);
|
|
292
|
+
}
|
|
293
|
+
for (const allowed of ws.config.allow) {
|
|
294
|
+
allows.push(`(allow file-write* (subpath ${sb(resolveReal(allowed))}))`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
for (const p of [...ZCODE_STATE_DIRS, ...DEFAULT_CACHE_DIRS]) {
|
|
298
|
+
allows.push(`(allow file-write* (subpath ${sb(resolveReal(p))}))`);
|
|
299
|
+
}
|
|
300
|
+
for (const allowed of input.extraAllow) {
|
|
301
|
+
allows.push(`(allow file-write* (subpath ${sb(resolveReal(allowed))}))`);
|
|
302
|
+
}
|
|
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");
|
|
312
|
+
}
|
|
313
|
+
/** Resolved arm input for the CURRENT spawn: union of all live workspaces. */
|
|
314
|
+
export function collectSandboxWorkspaces(cwdRoots) {
|
|
315
|
+
const seen = new Set();
|
|
316
|
+
const workspaces = [];
|
|
317
|
+
const extraAllow = [];
|
|
318
|
+
for (const root of cwdRoots) {
|
|
319
|
+
const real = resolveReal(root);
|
|
320
|
+
if (seen.has(real))
|
|
321
|
+
continue;
|
|
322
|
+
seen.add(real);
|
|
323
|
+
const config = readSandboxConfig(real);
|
|
324
|
+
workspaces.push({ root: real, config });
|
|
325
|
+
// Allowlists from OTHER workspaces still apply when they share this
|
|
326
|
+
// backend: the agent may hop projects in one bridge lifetime.
|
|
327
|
+
for (const allowed of config.allow)
|
|
328
|
+
extraAllow.push(allowed);
|
|
329
|
+
}
|
|
330
|
+
// A workspace's own allow entries are emitted with its block above; drop
|
|
331
|
+
// them from extraAllow so they don't appear twice (harmless, but noisy).
|
|
332
|
+
const own = new Set(workspaces.flatMap((ws) => ws.config.allow.map(resolveReal)));
|
|
333
|
+
return {
|
|
334
|
+
workspaces,
|
|
335
|
+
extraAllow: [...new Set(extraAllow.map(resolveReal))].filter((p) => !own.has(p)),
|
|
336
|
+
};
|
|
337
|
+
}
|
|
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
|
+
}
|
|
351
|
+
/**
|
|
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.
|
|
356
|
+
*/
|
|
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)
|
|
372
|
+
return false;
|
|
373
|
+
if (process.platform !== "darwin") {
|
|
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
|
+
}
|
|
378
|
+
return false;
|
|
379
|
+
}
|
|
380
|
+
return true;
|
|
381
|
+
}
|
|
382
|
+
/** Test hook: reset cached decisions and warn-once sets. */
|
|
383
|
+
export function resetSandboxDecisionForTest() {
|
|
384
|
+
envDecision = null;
|
|
385
|
+
platformWarned = false;
|
|
386
|
+
templateFailedRoots.clear();
|
|
387
|
+
warnedConfigIssues.clear();
|
|
388
|
+
lastEnabledSeen.clear();
|
|
389
|
+
}
|
|
390
|
+
/** Previous respawn's profile dir — removed once superseded (its backend is dead). */
|
|
391
|
+
let lastProfileDir = null;
|
|
392
|
+
/**
|
|
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).
|
|
408
|
+
*/
|
|
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;
|
|
422
|
+
log(`sandbox: backend wrapped with sandbox-exec (profile: ${file})`);
|
|
423
|
+
return ["sandbox-exec", "-f", file, ...argv];
|
|
424
|
+
}
|
|
425
|
+
//# sourceMappingURL=sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/backend/sandbox.ts"],"names":[],"mappings":"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"}
|
package/dist/backend/types.d.ts
CHANGED
|
@@ -71,6 +71,10 @@ export interface ZcodeProjection {
|
|
|
71
71
|
contextUsed?: number;
|
|
72
72
|
contextWindow?: number;
|
|
73
73
|
totalTokenCount?: number;
|
|
74
|
+
/** Turns completed in this session (observed in app-server projections). */
|
|
75
|
+
turnCount?: number;
|
|
76
|
+
/** Id of the turn the projection considers current, if any. */
|
|
77
|
+
currentTurnId?: string;
|
|
74
78
|
}
|
|
75
79
|
export interface ZcodeMessage {
|
|
76
80
|
info: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/backend/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACvE;AAED,qDAAqD;AACrD,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,GAC9C,OAAO,CAAC,aAAa,CAAC,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAI7B,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAID,MAAM,MAAM,cAAc,GACtB,cAAc,GACd,iBAAiB,GACjB,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,iBAAiB,GAIjB,eAAe,GAIf,kBAAkB,GAClB,mBAAmB,GACnB,eAAe,CAAC;AAEpB,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/backend/types.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"}
|