@yadsh/dsh-session-scope 0.5.0
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/LICENSE +22 -0
- package/README.md +110 -0
- package/compatibility.json +20 -0
- package/cordis.patch.yml +7 -0
- package/lib/client.d.ts +1 -0
- package/lib/client.d.ts.map +1 -0
- package/lib/client.js +716 -0
- package/lib/client.js.map +1 -0
- package/lib/core.d.ts +204 -0
- package/lib/core.d.ts.map +1 -0
- package/lib/core.js +375 -0
- package/lib/core.js.map +1 -0
- package/lib/host-api.d.ts +23 -0
- package/lib/host-api.d.ts.map +1 -0
- package/lib/host-api.js +40 -0
- package/lib/host-api.js.map +1 -0
- package/lib/index.d.ts +32 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +594 -0
- package/lib/index.js.map +1 -0
- package/lib/scope-context.d.ts +3 -0
- package/lib/scope-context.d.ts.map +1 -0
- package/lib/scope-context.js +29 -0
- package/lib/scope-context.js.map +1 -0
- package/lib/scope-delegation.d.ts +23 -0
- package/lib/scope-delegation.d.ts.map +1 -0
- package/lib/scope-delegation.js +49 -0
- package/lib/scope-delegation.js.map +1 -0
- package/lib/scope-fs.d.ts +47 -0
- package/lib/scope-fs.d.ts.map +1 -0
- package/lib/scope-fs.js +150 -0
- package/lib/scope-fs.js.map +1 -0
- package/lib/scope-processes.d.ts +31 -0
- package/lib/scope-processes.d.ts.map +1 -0
- package/lib/scope-processes.js +71 -0
- package/lib/scope-processes.js.map +1 -0
- package/lib/scope-sandbox-linux.d.ts +35 -0
- package/lib/scope-sandbox-linux.d.ts.map +1 -0
- package/lib/scope-sandbox-linux.js +177 -0
- package/lib/scope-sandbox-linux.js.map +1 -0
- package/lib/scope-visibility.d.ts +14 -0
- package/lib/scope-visibility.d.ts.map +1 -0
- package/lib/scope-visibility.js +62 -0
- package/lib/scope-visibility.js.map +1 -0
- package/lib/session-scope.d.ts +54 -0
- package/lib/session-scope.d.ts.map +1 -0
- package/lib/session-scope.js +200 -0
- package/lib/session-scope.js.map +1 -0
- package/lib/tool-guard.d.ts +52 -0
- package/lib/tool-guard.d.ts.map +1 -0
- package/lib/tool-guard.js +233 -0
- package/lib/tool-guard.js.map +1 -0
- package/package.json +150 -0
package/lib/index.js
ADDED
|
@@ -0,0 +1,594 @@
|
|
|
1
|
+
// @ts-nocheck -- DSH service types are not published by the upstream packages.
|
|
2
|
+
// dsh-session-scope — host half.
|
|
3
|
+
//
|
|
4
|
+
// Mounted as a normal plugin row in the profile composition. Scope is a
|
|
5
|
+
// durable per-session policy axis, independent from sandbox/permission mode.
|
|
6
|
+
//
|
|
7
|
+
// The host registers the `session-scope/set` event, projection, `/scope`
|
|
8
|
+
// command and model-facing context. An AsyncLocalStorage execution carrier
|
|
9
|
+
// connects concurrent tool calls to the correct session; the filesystem seam
|
|
10
|
+
// then gates reads and mutations and filters navigation listings. A monotonic
|
|
11
|
+
// `tools.guard()` covers known path-aware tools before permission/approval can
|
|
12
|
+
// run. Legacy selected-workspace-write patches remain below only to resume old
|
|
13
|
+
// upstream session logs during migration; they are no longer advertised as a
|
|
14
|
+
// permission preset.
|
|
15
|
+
import { FsError } from "@deepseek-ai/dsh-fs";
|
|
16
|
+
import { WIDER_MODES } from "@deepseek-ai/dsh-sandbox";
|
|
17
|
+
import { KNOWN_SESSION_EVENT_TYPES } from "@deepseek-ai/dsh-session";
|
|
18
|
+
import { MODE, SELECTION_EVENT, ancestryCrumbs, augmentConfinedArgv, canonicalPath, isPathUnder, listDirectoryLevel, normalizeRoots, normalizeSelectionRoots, renderSelectedPolicyText, selectionOf, tempWritableRoots, } from "./core.js";
|
|
19
|
+
import { getScope, getScopeCapabilities, listScopeDirectory, setScope, } from "./host-api.js";
|
|
20
|
+
import { SESSION_SCOPE_EVENT, effectiveSessionScope, } from "./session-scope.js";
|
|
21
|
+
import { renderSessionScopeContext } from "./scope-context.js";
|
|
22
|
+
import { initializeDelegatedSessionScope } from "./scope-delegation.js";
|
|
23
|
+
import { SessionScopeRuntime } from "./scope-fs.js";
|
|
24
|
+
import { SESSION_SCOPE_PROCESS_ACTIVE_MESSAGE, SessionScopeProcessActivity, } from "./scope-processes.js";
|
|
25
|
+
import { attachSessionScopePolicy, confineIsolatedBwrap, detectBwrapIsolation, sessionScopeFromPolicy, } from "./scope-sandbox-linux.js";
|
|
26
|
+
import { ScopeToolAdapterRegistry, dispatchScopedSearchExecution, guardScopeToolExecution, } from "./tool-guard.js";
|
|
27
|
+
export * from "./host-api.js";
|
|
28
|
+
export * from "./scope-context.js";
|
|
29
|
+
export * from "./scope-delegation.js";
|
|
30
|
+
export * from "./scope-fs.js";
|
|
31
|
+
export * from "./scope-processes.js";
|
|
32
|
+
export * from "./scope-sandbox-linux.js";
|
|
33
|
+
export * from "./scope-visibility.js";
|
|
34
|
+
export * from "./session-scope.js";
|
|
35
|
+
export * from "./tool-guard.js";
|
|
36
|
+
/** Cordis plugin name used by loader diagnostics. */
|
|
37
|
+
export const name = "dsh-session-scope";
|
|
38
|
+
/** Required host services (cordis fiber inject). */
|
|
39
|
+
export const inject = [
|
|
40
|
+
"sandboxPolicy",
|
|
41
|
+
"sandbox",
|
|
42
|
+
"fs",
|
|
43
|
+
"tools",
|
|
44
|
+
"systemPrompt",
|
|
45
|
+
"commands",
|
|
46
|
+
"sessionProjections",
|
|
47
|
+
"sessions",
|
|
48
|
+
];
|
|
49
|
+
/**
|
|
50
|
+
* The session's workspace root: its immutable header cwd, or the deployment
|
|
51
|
+
* fallback for sessions without one.
|
|
52
|
+
* @param session - the live session.
|
|
53
|
+
* @param fallback - `ctx.sandboxPolicy.workspaceRoot`.
|
|
54
|
+
* @returns the workspace root for the session.
|
|
55
|
+
*/
|
|
56
|
+
function workspaceRootOf(session, fallback) {
|
|
57
|
+
const cwd = session?.header?.cwd;
|
|
58
|
+
return typeof cwd === "string" && cwd.length > 0 ? cwd : fallback;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Patch `ctx.sandboxPolicy.resolve`: when the resolved mode is the new mode,
|
|
62
|
+
* attach the session's selected roots as `extraWritableRoots` so every
|
|
63
|
+
* enforcing consumer (fs fence, bash provider, terminal) sees them. Core
|
|
64
|
+
* modes pass through untouched.
|
|
65
|
+
* @param service - the sandbox-policy service instance.
|
|
66
|
+
* @returns the restore disposer.
|
|
67
|
+
*/
|
|
68
|
+
function patchResolve(service) {
|
|
69
|
+
const original = service.resolve.bind(service);
|
|
70
|
+
service.resolve = (request = {}) => {
|
|
71
|
+
const resolved = original(request);
|
|
72
|
+
const session = request.session;
|
|
73
|
+
let patched = resolved;
|
|
74
|
+
if (resolved.mode === MODE) {
|
|
75
|
+
if (session === void 0) {
|
|
76
|
+
patched = { ...resolved, extraWritableRoots: [resolved.workspaceRoot] };
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const selection = selectionOf(session.events);
|
|
80
|
+
// The workspace is an ORDINARY member of the selection: it is writable
|
|
81
|
+
// exactly when it is in the list. With no recorded selection the default
|
|
82
|
+
// is workspace-writable.
|
|
83
|
+
const roots = selection.workspace && !selection.roots.includes(resolved.workspaceRoot)
|
|
84
|
+
? [resolved.workspaceRoot, ...selection.roots]
|
|
85
|
+
: selection.roots;
|
|
86
|
+
patched = { ...resolved, extraWritableRoots: roots };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return session === void 0
|
|
90
|
+
? patched
|
|
91
|
+
: attachSessionScopePolicy(patched, getScope(session, resolved.workspaceRoot));
|
|
92
|
+
};
|
|
93
|
+
return () => {
|
|
94
|
+
service.resolve = original;
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Patch the `sandbox:policy` prompt contribution: the core renderer throws
|
|
99
|
+
* on the new mode ("unreachable sandbox mode"), so the global layer's entry
|
|
100
|
+
* text is swapped for one that renders the new mode and delegates to the
|
|
101
|
+
* original text for every core mode. The entry object is mutated in place
|
|
102
|
+
* (the layer's NamedEntries table is read by `Map` merge, so a replaced
|
|
103
|
+
* `text` is what every request sees) and restored on dispose.
|
|
104
|
+
* @param systemPrompt - the system-prompt service instance.
|
|
105
|
+
* @param resolvePolicy - the patched policy resolver.
|
|
106
|
+
* @returns the restore disposer.
|
|
107
|
+
*/
|
|
108
|
+
function patchPolicyContext(systemPrompt, resolvePolicy) {
|
|
109
|
+
const contexts = systemPrompt?.layers?.global?.contexts;
|
|
110
|
+
const entry = contexts?.data?.get("sandbox:policy");
|
|
111
|
+
if (entry === void 0 || typeof entry.text !== "function")
|
|
112
|
+
return () => { };
|
|
113
|
+
const originalText = entry.text;
|
|
114
|
+
entry.text = (context) => {
|
|
115
|
+
const session = context.agent?.session;
|
|
116
|
+
if (session === void 0)
|
|
117
|
+
return "";
|
|
118
|
+
const policy = resolvePolicy({ session });
|
|
119
|
+
return policy.mode === MODE ? renderSelectedPolicyText(policy) : originalText(context);
|
|
120
|
+
};
|
|
121
|
+
return () => {
|
|
122
|
+
entry.text = originalText;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Patch the fs fence (`ctx.fs.checkedTarget`): under the new mode the core
|
|
127
|
+
* allow-list is empty (unknown mode), so containment is checked against the
|
|
128
|
+
* platform temp areas PLUS the selected roots — the writable set IS the
|
|
129
|
+
* selection (the workspace root included when selected), mirroring the core
|
|
130
|
+
* fence's canonicalize-then-contain sequence and its structured
|
|
131
|
+
* `FS_SANDBOX_DENIED` refusal. Core modes delegate to the original fence.
|
|
132
|
+
* @param fs - the sandboxed filesystem service instance.
|
|
133
|
+
* @param resolvePolicy - the patched policy resolver.
|
|
134
|
+
* @returns the restore disposer.
|
|
135
|
+
*/
|
|
136
|
+
function patchFsFence(fs, resolvePolicy) {
|
|
137
|
+
if (fs === void 0 || typeof fs.checkedTarget !== "function")
|
|
138
|
+
return () => { };
|
|
139
|
+
const original = fs.checkedTarget.bind(fs);
|
|
140
|
+
fs.checkedTarget = async (target, sandboxPolicy) => {
|
|
141
|
+
const policy = sandboxPolicy ?? resolvePolicy();
|
|
142
|
+
if (policy.mode !== MODE)
|
|
143
|
+
return original(target, sandboxPolicy);
|
|
144
|
+
const fresh = await fs.resolve(target.displayPath);
|
|
145
|
+
const roots = tempWritableRoots();
|
|
146
|
+
for (const root of policy.extraWritableRoots ?? [])
|
|
147
|
+
roots.push(root);
|
|
148
|
+
for (const root of roots) {
|
|
149
|
+
if (await isPathUnder(fresh.targetKey, root))
|
|
150
|
+
return fresh;
|
|
151
|
+
}
|
|
152
|
+
throw new FsError(`cannot write "${target.displayPath}": file access denied under selected-workspace-write mode`, "FS_SANDBOX_DENIED");
|
|
153
|
+
};
|
|
154
|
+
return () => {
|
|
155
|
+
fs.checkedTarget = original;
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Patch `ctx.sandbox.confine`: under the new mode the writable set IS the
|
|
160
|
+
* selection — the base is a `read-only` translation and the platform temp
|
|
161
|
+
* areas plus every selected root (the workspace root included when
|
|
162
|
+
* selected) are spliced into the selected runner's dialect. Other modes
|
|
163
|
+
* delegate to the original provider untouched.
|
|
164
|
+
* @param provider - the local sandbox provider instance.
|
|
165
|
+
* @returns the restore disposer.
|
|
166
|
+
*/
|
|
167
|
+
function patchConfine(provider, scopeRuntime) {
|
|
168
|
+
if (provider === void 0 || typeof provider.confine !== "function")
|
|
169
|
+
return () => { };
|
|
170
|
+
const original = provider.confine.bind(provider);
|
|
171
|
+
provider.confine = (argv, policy) => {
|
|
172
|
+
const runtimeSession = scopeRuntime.currentSession();
|
|
173
|
+
const scope = sessionScopeFromPolicy(policy)
|
|
174
|
+
?? (runtimeSession === void 0 ? void 0 : getScope(runtimeSession, policy.workspaceRoot));
|
|
175
|
+
if (scope?.mode === "isolated") {
|
|
176
|
+
if (policy.mode !== "read-only" && policy.mode !== "workspace-write") {
|
|
177
|
+
throw new Error("SESSION_SCOPE_ISOLATION_UNAVAILABLE: isolated scope requires read-only or workspace-write permission");
|
|
178
|
+
}
|
|
179
|
+
const execution = scopeRuntime.currentExecution();
|
|
180
|
+
const args = execution?.arguments !== null && typeof execution?.arguments === "object"
|
|
181
|
+
? execution.arguments
|
|
182
|
+
: {};
|
|
183
|
+
const workdir = execution?.name === "bash"
|
|
184
|
+
? args.workdir
|
|
185
|
+
: execution?.name === "terminal_open" ? args.cwd : void 0;
|
|
186
|
+
return confineIsolatedBwrap(original(argv, policy), policy, scope, workdir);
|
|
187
|
+
}
|
|
188
|
+
if (policy.mode !== MODE)
|
|
189
|
+
return original(argv, policy);
|
|
190
|
+
const extra = (policy.extraWritableRoots ?? []).filter((root) => typeof root === "string" && root.length > 0);
|
|
191
|
+
const base = original(argv, { ...policy, mode: "read-only" });
|
|
192
|
+
return augmentConfinedArgv(base, extra, tempWritableRoots());
|
|
193
|
+
};
|
|
194
|
+
return () => {
|
|
195
|
+
provider.confine = original;
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/** A session projection schema shaped like the core zod usage: a `parse` face. */
|
|
199
|
+
const workspaceScopeSchema = {
|
|
200
|
+
parse(value) {
|
|
201
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
202
|
+
throw new TypeError("workspace-scope projection must be an object");
|
|
203
|
+
}
|
|
204
|
+
const roots = Array.isArray(value.roots)
|
|
205
|
+
? value.roots.filter((root) => typeof root === "string")
|
|
206
|
+
: [];
|
|
207
|
+
return {
|
|
208
|
+
workspaceRoot: typeof value.workspaceRoot === "string" ? value.workspaceRoot : "",
|
|
209
|
+
roots,
|
|
210
|
+
workspace: value.workspace !== false,
|
|
211
|
+
};
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
/** Projection wire schema for the independent scope policy axis. */
|
|
215
|
+
const sessionScopeSchema = {
|
|
216
|
+
parse(value) {
|
|
217
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
218
|
+
throw new TypeError("session-scope projection must be an object");
|
|
219
|
+
}
|
|
220
|
+
const mode = value.mode === "focused" || value.mode === "isolated" ? value.mode : "full";
|
|
221
|
+
return {
|
|
222
|
+
mode,
|
|
223
|
+
workspaceRoot: typeof value.workspaceRoot === "string" ? value.workspaceRoot : "",
|
|
224
|
+
roots: Array.isArray(value.roots) ? value.roots.filter((root) => typeof root === "string") : [],
|
|
225
|
+
navigationRoots: Array.isArray(value.navigationRoots)
|
|
226
|
+
? value.navigationRoots.filter((root) => typeof root === "string")
|
|
227
|
+
: [],
|
|
228
|
+
hasSnapshot: value.hasSnapshot === true,
|
|
229
|
+
};
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
/** Host command for the independent session-scope axis. */
|
|
233
|
+
async function handleScope(invocation, ctx, capabilities, processActivity) {
|
|
234
|
+
const session = invocation.agent.session;
|
|
235
|
+
const raw = invocation.rawInput.trim();
|
|
236
|
+
const space = raw.indexOf(" ");
|
|
237
|
+
const verb = space === -1 ? raw : raw.slice(0, space);
|
|
238
|
+
const rest = space === -1 ? "" : raw.slice(space + 1).trim();
|
|
239
|
+
const fallbackWorkspaceRoot = ctx.sandboxPolicy?.workspaceRoot ?? "";
|
|
240
|
+
const current = getScope(session, fallbackWorkspaceRoot);
|
|
241
|
+
switch (verb) {
|
|
242
|
+
case "":
|
|
243
|
+
case "show":
|
|
244
|
+
return { kind: "success", text: JSON.stringify(current) };
|
|
245
|
+
case "full": {
|
|
246
|
+
if (processActivity.hasActive(invocation.agent, {
|
|
247
|
+
terminals: ctx.get("terminals"),
|
|
248
|
+
jobs: ctx.get("jobs"),
|
|
249
|
+
})) {
|
|
250
|
+
return { kind: "error", text: `${SESSION_SCOPE_PROCESS_ACTIVE_MESSAGE}.` };
|
|
251
|
+
}
|
|
252
|
+
const event = setScope(session, { mode: "full", roots: [], source: "command" }, fallbackWorkspaceRoot);
|
|
253
|
+
return { kind: "success", text: JSON.stringify(event) };
|
|
254
|
+
}
|
|
255
|
+
case "focused":
|
|
256
|
+
case "isolated": {
|
|
257
|
+
if (processActivity.hasActive(invocation.agent, {
|
|
258
|
+
terminals: ctx.get("terminals"),
|
|
259
|
+
jobs: ctx.get("jobs"),
|
|
260
|
+
})) {
|
|
261
|
+
return { kind: "error", text: `${SESSION_SCOPE_PROCESS_ACTIVE_MESSAGE}.` };
|
|
262
|
+
}
|
|
263
|
+
if (verb === "isolated" && !capabilities.isolated) {
|
|
264
|
+
return { kind: "error", text: "SESSION_SCOPE_ISOLATION_UNAVAILABLE: isolated scope is unavailable on this host." };
|
|
265
|
+
}
|
|
266
|
+
if (verb === "isolated" && ctx.sandboxPolicy.resolve({ session }).mode === "danger-full-access") {
|
|
267
|
+
return { kind: "error", text: "SESSION_SCOPE_ISOLATION_UNAVAILABLE: isolated scope is incompatible with danger-full-access permission." };
|
|
268
|
+
}
|
|
269
|
+
let roots = current.roots;
|
|
270
|
+
if (rest !== "") {
|
|
271
|
+
try {
|
|
272
|
+
roots = JSON.parse(rest);
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
return { kind: "error", text: `scope: "${verb}" expects an optional JSON array of directory paths` };
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
try {
|
|
279
|
+
const event = setScope(session, { mode: verb, roots, source: "command" }, fallbackWorkspaceRoot);
|
|
280
|
+
return { kind: "success", text: JSON.stringify(event) };
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
const code = typeof error?.code === "string" ? `${error.code}: ` : "";
|
|
284
|
+
return { kind: "error", text: `${code}${error instanceof Error ? error.message : String(error)}` };
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
case "list": {
|
|
288
|
+
if (rest === "")
|
|
289
|
+
return { kind: "error", text: "scope: list expects an absolute workspace path" };
|
|
290
|
+
try {
|
|
291
|
+
return { kind: "success", text: JSON.stringify(await listScopeDirectory(session, rest, fallbackWorkspaceRoot)) };
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
const code = typeof error?.code === "string" ? `${error.code}: ` : "";
|
|
295
|
+
return { kind: "error", text: `${code}${error instanceof Error ? error.message : String(error)}` };
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
case "capabilities":
|
|
299
|
+
return { kind: "success", text: JSON.stringify(capabilities) };
|
|
300
|
+
default:
|
|
301
|
+
return { kind: "error", text: `scope: unknown verb "${verb}" (verbs: full | focused | isolated | show)` };
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* One `/workspace-scope` command invocation: the write path for the
|
|
306
|
+
* selection (`set` / `clear`), the read face (`info`), and the host-side
|
|
307
|
+
* listing fallback (`list`) for compositions whose directory picker is the
|
|
308
|
+
* native capability rather than `browse`.
|
|
309
|
+
* @param invocation - the command invocation (agent + rawInput).
|
|
310
|
+
* @param ctx - the plugin context (for the policy fallback root).
|
|
311
|
+
* @returns the command result (a promise for the async `list` verb).
|
|
312
|
+
*/
|
|
313
|
+
async function handleWorkspaceScope(invocation, ctx) {
|
|
314
|
+
const session = invocation.agent.session;
|
|
315
|
+
const raw = invocation.rawInput.trim();
|
|
316
|
+
const space = raw.indexOf(" ");
|
|
317
|
+
const verb = space === -1 ? raw : raw.slice(0, space);
|
|
318
|
+
const rest = space === -1 ? "" : raw.slice(space + 1).trim();
|
|
319
|
+
const workspaceRoot = workspaceRootOf(session, ctx.sandboxPolicy?.workspaceRoot);
|
|
320
|
+
const selection = selectionOf(session.events);
|
|
321
|
+
const effectiveRoots = selection.workspace && !selection.roots.includes(workspaceRoot)
|
|
322
|
+
? [workspaceRoot, ...selection.roots]
|
|
323
|
+
: selection.roots;
|
|
324
|
+
// The workspace root is an ordinary member of the selection: the recorded
|
|
325
|
+
// `workspace` marker is derived from the roots themselves.
|
|
326
|
+
const appendSelection = (nextRoots) => {
|
|
327
|
+
session.append(SELECTION_EVENT, {
|
|
328
|
+
roots: nextRoots,
|
|
329
|
+
workspaceRoot,
|
|
330
|
+
workspace: nextRoots.includes(workspaceRoot),
|
|
331
|
+
});
|
|
332
|
+
};
|
|
333
|
+
switch (verb) {
|
|
334
|
+
case "":
|
|
335
|
+
return {
|
|
336
|
+
kind: "success",
|
|
337
|
+
text: `workspace-scope: ${effectiveRoots.length} selected root(s)${effectiveRoots.includes(workspaceRoot) ? " (workspace writable)" : " (workspace read-only)"}; verbs: set <json> | clear | info | list <path>`,
|
|
338
|
+
};
|
|
339
|
+
case "set": {
|
|
340
|
+
let parsed;
|
|
341
|
+
try {
|
|
342
|
+
parsed = JSON.parse(rest);
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
return { kind: "error", text: "workspace-scope: \"set\" expects a JSON array of absolute directory paths (the workspace root included when it should be writable)" };
|
|
346
|
+
}
|
|
347
|
+
try {
|
|
348
|
+
// Array form: the FULL selection — the workspace root included when
|
|
349
|
+
// it should be writable. Object form { roots, workspace } is
|
|
350
|
+
// accepted for compatibility and normalized to the same list.
|
|
351
|
+
let rootInput;
|
|
352
|
+
if (Array.isArray(parsed)) {
|
|
353
|
+
rootInput = parsed;
|
|
354
|
+
}
|
|
355
|
+
else if (parsed !== null && typeof parsed === "object" && Array.isArray(parsed.roots)) {
|
|
356
|
+
const rawRoots = normalizeRoots(parsed.roots, canonicalPath);
|
|
357
|
+
rootInput = parsed.workspace === false
|
|
358
|
+
? rawRoots.filter((root) => root !== workspaceRoot)
|
|
359
|
+
: rawRoots.includes(workspaceRoot) ? rawRoots : [workspaceRoot, ...rawRoots];
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
return { kind: "error", text: "workspace-scope: \"set\" expects a JSON array of absolute directory paths (the workspace root included when it should be writable)" };
|
|
363
|
+
}
|
|
364
|
+
const normalized = normalizeRoots(rootInput, canonicalPath);
|
|
365
|
+
appendSelection(normalized);
|
|
366
|
+
return {
|
|
367
|
+
kind: "success",
|
|
368
|
+
text: `workspace-scope: ${normalized.length} root(s) selected${normalized.includes(workspaceRoot) ? ", workspace writable" : ", workspace read-only"}`,
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
return { kind: "error", text: error instanceof Error ? error.message : String(error) };
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
case "clear":
|
|
376
|
+
appendSelection([]);
|
|
377
|
+
return { kind: "success", text: "workspace-scope: selection cleared (workspace read-only)" };
|
|
378
|
+
case "info":
|
|
379
|
+
return {
|
|
380
|
+
kind: "success",
|
|
381
|
+
text: JSON.stringify({ workspaceRoot, roots: effectiveRoots }),
|
|
382
|
+
};
|
|
383
|
+
case "list": {
|
|
384
|
+
if (rest === "" || !rest.startsWith("/") && !/^[A-Za-z]:[\\/]/.test(rest)) {
|
|
385
|
+
return { kind: "error", text: "workspace-scope: \"list\" expects an absolute directory path" };
|
|
386
|
+
}
|
|
387
|
+
try {
|
|
388
|
+
return {
|
|
389
|
+
kind: "success",
|
|
390
|
+
text: JSON.stringify(await listDirectoryLevel(rest)),
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
catch (error) {
|
|
394
|
+
return {
|
|
395
|
+
kind: "error",
|
|
396
|
+
text: `workspace-scope: cannot list ${rest}: ${error instanceof Error ? error.message : String(error)}`,
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
default:
|
|
401
|
+
return {
|
|
402
|
+
kind: "error",
|
|
403
|
+
text: `workspace-scope: unknown verb "${verb}" (verbs: set | clear | info | list)`,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Plugin body: extend the permission vocabulary and enforce it. Every patch
|
|
409
|
+
* is restored by the returned disposer, so unloading (or HMR) leaves the
|
|
410
|
+
* core services exactly as they were.
|
|
411
|
+
* @param ctx - the plugin context carrying the host services.
|
|
412
|
+
* @returns the combined disposer.
|
|
413
|
+
*/
|
|
414
|
+
export function apply(ctx) {
|
|
415
|
+
const disposers = [];
|
|
416
|
+
const resolvePolicy = (request = {}) => ctx.sandboxPolicy?.resolve(request);
|
|
417
|
+
const scopeRuntime = new SessionScopeRuntime();
|
|
418
|
+
const processActivity = new SessionScopeProcessActivity();
|
|
419
|
+
const toolAdapters = new ScopeToolAdapterRegistry();
|
|
420
|
+
const fallbackWorkspaceRoot = ctx.sandboxPolicy?.workspaceRoot ?? "";
|
|
421
|
+
const provider = ctx.get("sandbox");
|
|
422
|
+
const isolatedBackendReady = detectBwrapIsolation(provider, fallbackWorkspaceRoot);
|
|
423
|
+
const scopeCapabilities = getScopeCapabilities(process.platform, isolatedBackendReady);
|
|
424
|
+
// 1. The mode resolver: attach selected roots under the new mode.
|
|
425
|
+
const sandboxPolicy = ctx.get("sandboxPolicy");
|
|
426
|
+
if (sandboxPolicy !== void 0)
|
|
427
|
+
disposers.push(patchResolve(sandboxPolicy));
|
|
428
|
+
// 2. The prompt contribution: render the new mode instead of throwing.
|
|
429
|
+
const systemPrompt = ctx.get("systemPrompt");
|
|
430
|
+
if (systemPrompt !== void 0 && sandboxPolicy !== void 0) {
|
|
431
|
+
disposers.push(patchPolicyContext(systemPrompt, (request) => sandboxPolicy.resolve(request)));
|
|
432
|
+
}
|
|
433
|
+
if (systemPrompt !== void 0 && typeof systemPrompt.context === "function") {
|
|
434
|
+
disposers.push(systemPrompt.context({
|
|
435
|
+
name: "session:scope",
|
|
436
|
+
order: 50,
|
|
437
|
+
text: (context) => {
|
|
438
|
+
const session = context.scope?.session ?? context.agent?.session;
|
|
439
|
+
return session === void 0 ? "" : renderSessionScopeContext(getScope(session, fallbackWorkspaceRoot));
|
|
440
|
+
},
|
|
441
|
+
}));
|
|
442
|
+
}
|
|
443
|
+
// 3. The fs fence: contain writes under workspace + selected roots.
|
|
444
|
+
const fs = ctx.get("fs");
|
|
445
|
+
if (fs !== void 0) {
|
|
446
|
+
disposers.push(patchFsFence(fs, resolvePolicy));
|
|
447
|
+
disposers.push(scopeRuntime.patchFileSystem(fs, fallbackWorkspaceRoot));
|
|
448
|
+
}
|
|
449
|
+
// Workspace instruction and project-skill discovery happen during
|
|
450
|
+
// agent/pre-step rather than inside a filesystem tool. Run every downstream
|
|
451
|
+
// pre-step contributor under the same per-session filesystem carrier; the
|
|
452
|
+
// prepended listener must remain outermost so later plugins cannot escape it.
|
|
453
|
+
disposers.push(ctx.on("agent/pre-step", ({ agent }, next) => scopeRuntime.run(agent?.session, next), { global: true, prepend: true }));
|
|
454
|
+
// The final tool guard cannot be widened by later permission listeners. The
|
|
455
|
+
// around stage carries the calling session through async filesystem work so
|
|
456
|
+
// concurrent sessions never share scope state.
|
|
457
|
+
ctx.inject(["tools"], (toolCtx) => {
|
|
458
|
+
let searchSplitterActive = false;
|
|
459
|
+
disposers.push(toolCtx.tools.guard((execution) => {
|
|
460
|
+
const session = execution.agent?.session;
|
|
461
|
+
if (processActivity.isProcessTool(execution.name) && execution.agent !== void 0) {
|
|
462
|
+
processActivity.ensureFence(execution.agent, {
|
|
463
|
+
terminals: ctx.get("terminals"),
|
|
464
|
+
jobs: ctx.get("jobs"),
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
const sandboxMode = session === void 0 ? void 0 : resolvePolicy({ session })?.mode;
|
|
468
|
+
return guardScopeToolExecution(execution, toolAdapters, fallbackWorkspaceRoot, {
|
|
469
|
+
splitBroadSearches: searchSplitterActive,
|
|
470
|
+
isolatedBackendReady,
|
|
471
|
+
sandboxMode,
|
|
472
|
+
});
|
|
473
|
+
}));
|
|
474
|
+
const disposeSearchSplitter = toolCtx.on("tools/execute", (execution, next) => processActivity.run(execution.agent, execution.name, () => scopeRuntime.run(execution.agent?.session, () => dispatchScopedSearchExecution(execution, toolCtx.tools, next, fallbackWorkspaceRoot), execution)));
|
|
475
|
+
searchSplitterActive = true;
|
|
476
|
+
disposers.push(() => {
|
|
477
|
+
// Disable the guard exception before removing the matching dispatcher.
|
|
478
|
+
searchSplitterActive = false;
|
|
479
|
+
disposeSearchSplitter();
|
|
480
|
+
});
|
|
481
|
+
});
|
|
482
|
+
// 4. The process sandbox: grant the extra roots in each runner dialect.
|
|
483
|
+
if (provider !== void 0)
|
|
484
|
+
disposers.push(patchConfine(provider, scopeRuntime));
|
|
485
|
+
// 5. The escalation ladder: under the new mode a denial may still escalate
|
|
486
|
+
// to full access through the ordinary approval flow.
|
|
487
|
+
if (WIDER_MODES[MODE] === void 0) {
|
|
488
|
+
WIDER_MODES[MODE] = ["danger-full-access"];
|
|
489
|
+
disposers.push(() => {
|
|
490
|
+
delete WIDER_MODES[MODE];
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
// 6. The persistence vocabulary: `Session.append` offers no way to stamp
|
|
494
|
+
// the envelope's `ignorable` marker, so a recorded selection event is a
|
|
495
|
+
// required event — a harness build that does not recognize the type
|
|
496
|
+
// refuses to reconstruct the log (SessionFormatUnsupportedError on
|
|
497
|
+
// history load). Register the type while the plugin is loaded; the
|
|
498
|
+
// exported set is the same instance the persistence read path consults.
|
|
499
|
+
for (const eventType of [SELECTION_EVENT, SESSION_SCOPE_EVENT]) {
|
|
500
|
+
if (KNOWN_SESSION_EVENT_TYPES.has(eventType))
|
|
501
|
+
continue;
|
|
502
|
+
KNOWN_SESSION_EVENT_TYPES.add(eventType);
|
|
503
|
+
disposers.push(() => {
|
|
504
|
+
KNOWN_SESSION_EVENT_TYPES.delete(eventType);
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
// Child publication is synchronous and rollback-covered by DSH. Initialize
|
|
508
|
+
// subagent scope here so a missing parent rejects the child before its first
|
|
509
|
+
// model request or tool execution. Forked ordinary sessions already inherit
|
|
510
|
+
// their event prefix directly through the session seed.
|
|
511
|
+
const sessions = ctx.get("sessions");
|
|
512
|
+
if (sessions !== void 0) {
|
|
513
|
+
disposers.push(ctx.on("session/created", (session) => {
|
|
514
|
+
initializeDelegatedSessionScope(session, (id) => sessions.get(id));
|
|
515
|
+
}, { global: true }));
|
|
516
|
+
}
|
|
517
|
+
// 7. Independent scope command plus the legacy compatibility command.
|
|
518
|
+
ctx.inject(["commands"], (commandCtx) => {
|
|
519
|
+
commandCtx.commands.register({
|
|
520
|
+
name: "scope",
|
|
521
|
+
description: "Manage the independent workspace visibility scope for this session",
|
|
522
|
+
input: { hint: "<full|focused|isolated|show>" },
|
|
523
|
+
handler: (invocation) => handleScope(invocation, ctx, scopeCapabilities, processActivity),
|
|
524
|
+
});
|
|
525
|
+
commandCtx.commands.register({
|
|
526
|
+
name: "workspace-scope",
|
|
527
|
+
description: "Manage the selected-workspace-write directory selection",
|
|
528
|
+
input: { hint: "<set|clear|info|list>" },
|
|
529
|
+
handler: (invocation) => handleWorkspaceScope(invocation, ctx),
|
|
530
|
+
});
|
|
531
|
+
});
|
|
532
|
+
ctx.inject(["sessionProjections"], (projectionCtx) => {
|
|
533
|
+
projectionCtx.sessionProjections.register({
|
|
534
|
+
key: "session-scope",
|
|
535
|
+
schema: sessionScopeSchema,
|
|
536
|
+
init: () => ({
|
|
537
|
+
mode: "full",
|
|
538
|
+
workspaceRoot: "",
|
|
539
|
+
roots: [],
|
|
540
|
+
navigationRoots: [],
|
|
541
|
+
hasSnapshot: false,
|
|
542
|
+
}),
|
|
543
|
+
apply: (state, event) => {
|
|
544
|
+
if (event.type === SESSION_SCOPE_EVENT) {
|
|
545
|
+
return {
|
|
546
|
+
...effectiveSessionScope([event], { cwd: event.data?.workspaceRoot }),
|
|
547
|
+
hasSnapshot: true,
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
if (event.type === SELECTION_EVENT && !state.hasSnapshot) {
|
|
551
|
+
return {
|
|
552
|
+
...effectiveSessionScope([event], { cwd: event.data?.workspaceRoot }),
|
|
553
|
+
hasSnapshot: false,
|
|
554
|
+
};
|
|
555
|
+
}
|
|
556
|
+
return state;
|
|
557
|
+
},
|
|
558
|
+
view: ({ hasSnapshot: _hasSnapshot, ...state }) => state,
|
|
559
|
+
stateVersion: 1,
|
|
560
|
+
});
|
|
561
|
+
projectionCtx.sessionProjections.register({
|
|
562
|
+
key: "workspace-scope",
|
|
563
|
+
schema: workspaceScopeSchema,
|
|
564
|
+
init: () => ({ workspaceRoot: "", roots: [], workspace: true }),
|
|
565
|
+
apply: (state, event) => {
|
|
566
|
+
if (event.type !== SELECTION_EVENT)
|
|
567
|
+
return state;
|
|
568
|
+
const workspaceRoot = typeof event.data?.workspaceRoot === "string" ? event.data.workspaceRoot : state.workspaceRoot;
|
|
569
|
+
const workspace = event.data?.workspace !== false;
|
|
570
|
+
return {
|
|
571
|
+
workspaceRoot,
|
|
572
|
+
// Normalize so the folded roots ARE the writable set: the session
|
|
573
|
+
// workspace root is a member exactly when the workspace is writable.
|
|
574
|
+
roots: normalizeSelectionRoots(event.data?.roots, workspaceRoot, workspace),
|
|
575
|
+
workspace,
|
|
576
|
+
};
|
|
577
|
+
},
|
|
578
|
+
view: (state) => state,
|
|
579
|
+
stateVersion: 1,
|
|
580
|
+
});
|
|
581
|
+
});
|
|
582
|
+
return () => {
|
|
583
|
+
for (let index = disposers.length - 1; index >= 0; index -= 1) {
|
|
584
|
+
try {
|
|
585
|
+
disposers[index]();
|
|
586
|
+
}
|
|
587
|
+
catch {
|
|
588
|
+
/* restore is best-effort on teardown */
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
};
|
|
592
|
+
}
|
|
593
|
+
export { ancestryCrumbs, listDirectoryLevel, workspaceRootOf };
|
|
594
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-context.d.ts","sourceRoot":"","sources":["../src/scope-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CA2B9E"}
|