@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/lib/core.d.ts
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import type { BigIntStats, Dir, Stats } from "node:fs";
|
|
2
|
+
export interface SessionEvent {
|
|
3
|
+
type?: string;
|
|
4
|
+
data?: Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
export interface LegacySelection {
|
|
7
|
+
roots: string[];
|
|
8
|
+
workspace: boolean;
|
|
9
|
+
workspaceRoot: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ConfinedCommand {
|
|
12
|
+
argv: string[];
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
export interface SandboxPolicyView {
|
|
16
|
+
workspaceRoot: string;
|
|
17
|
+
extraWritableRoots?: string[];
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
export interface DirectoryCrumb {
|
|
21
|
+
name: string;
|
|
22
|
+
path: string;
|
|
23
|
+
}
|
|
24
|
+
export interface DirectoryEntry {
|
|
25
|
+
name: string;
|
|
26
|
+
path: string;
|
|
27
|
+
hidden: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface DirectoryListing {
|
|
30
|
+
path: string;
|
|
31
|
+
home: string;
|
|
32
|
+
crumbs: DirectoryCrumb[];
|
|
33
|
+
entries: DirectoryEntry[];
|
|
34
|
+
truncated: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface DirectoryListingOptions {
|
|
37
|
+
maxEntries?: number;
|
|
38
|
+
opendir?: (path: string) => Promise<Dir>;
|
|
39
|
+
stat?: (path: string) => Promise<Pick<Stats, "isDirectory">>;
|
|
40
|
+
}
|
|
41
|
+
type IdentityStat = (path: string, options: {
|
|
42
|
+
bigint: true;
|
|
43
|
+
}) => Promise<Pick<BigIntStats, "dev" | "ino">>;
|
|
44
|
+
/** The fourth sandbox mode this plugin adds. */
|
|
45
|
+
export declare const MODE = "selected-workspace-write";
|
|
46
|
+
/** Session event carrying the whole selection (last one wins). */
|
|
47
|
+
export declare const SELECTION_EVENT = "workspace-scope/selection";
|
|
48
|
+
/** Upper bound on how many roots one session selection may name. */
|
|
49
|
+
export declare const MAX_ROOTS = 128;
|
|
50
|
+
/** Upper bound on one fallback directory listing level. */
|
|
51
|
+
export declare const MAX_LISTING_ENTRIES = 500;
|
|
52
|
+
/**
|
|
53
|
+
* Resolve a granted root to the path enforcement actually compares:
|
|
54
|
+
* canonical (symlinks resolved), or the spelling as-is when the path does
|
|
55
|
+
* not exist yet (a missing root matches nothing until it exists — the
|
|
56
|
+
* conservative outcome; inventing a fallback would grant a path the caller
|
|
57
|
+
* never named). Mirrors `canonicalPath` in @deepseek-ai/dsh-sandbox.
|
|
58
|
+
* @param path - the root as selected by the user.
|
|
59
|
+
* @returns the canonical path, or the spelling as-is when resolution fails.
|
|
60
|
+
*/
|
|
61
|
+
export declare function canonicalPath(path: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Normalize one selection's roots against the session workspace: the
|
|
64
|
+
* workspace root is an ORDINARY member of the selection — present exactly
|
|
65
|
+
* when the workspace is writable. `workspace` is the explicit membership
|
|
66
|
+
* marker the write path records (it also distinguishes legacy events, which
|
|
67
|
+
* kept the workspace writable implicitly): `false` removes the workspace
|
|
68
|
+
* root from the list, anything else ensures it is present.
|
|
69
|
+
* @param roots - the raw selected roots from the event or command.
|
|
70
|
+
* @param workspaceRoot - the session workspace root (may be unknown/empty).
|
|
71
|
+
* @param workspace - the recorded workspace membership marker.
|
|
72
|
+
* @returns the normalized full selection (workspace root included iff writable).
|
|
73
|
+
*/
|
|
74
|
+
export declare function normalizeSelectionRoots(roots: unknown, workspaceRoot: string, workspace: unknown): string[];
|
|
75
|
+
/**
|
|
76
|
+
* The session's selected scope: the `workspace-scope/selection` event with
|
|
77
|
+
* the highest seq, or the defaults when the session never recorded one. The
|
|
78
|
+
* event carries the WHOLE post-change state (never a delta), so this fold is
|
|
79
|
+
* a plain last-wins scan. The folded roots are the normalized selection —
|
|
80
|
+
* the session workspace root is included exactly when the workspace is
|
|
81
|
+
* writable (an absent `workspace` marker means a legacy event, which kept
|
|
82
|
+
* the workspace writable).
|
|
83
|
+
* @param events - session events in log order.
|
|
84
|
+
* @returns `{ roots, workspace, workspaceRoot }` — the normalized selected
|
|
85
|
+
* roots (the session workspace first when writable), the explicit
|
|
86
|
+
* workspace membership marker (true by default), and the workspace root
|
|
87
|
+
* recorded with the event (may be empty when none was recorded).
|
|
88
|
+
*/
|
|
89
|
+
export declare function selectionOf(events: readonly SessionEvent[]): LegacySelection;
|
|
90
|
+
/**
|
|
91
|
+
* The session's selected roots only (see {@link selectionOf}).
|
|
92
|
+
* @param events - session events in log order.
|
|
93
|
+
* @returns the selected roots (canonical absolute paths).
|
|
94
|
+
*/
|
|
95
|
+
export declare function selectedRootsOf(events: readonly SessionEvent[]): string[];
|
|
96
|
+
/**
|
|
97
|
+
* Validate and normalize one `/workspace-scope set` payload: an array of
|
|
98
|
+
* absolute directory paths, deduplicated after canonicalization, sorted for
|
|
99
|
+
* stable logs, bounded by {@link MAX_ROOTS}. Throws on malformed input so
|
|
100
|
+
* the command handler can report a precise error.
|
|
101
|
+
* @param input - the raw JSON-parsed roots value.
|
|
102
|
+
* @param canonical - path canonicalizer (defaults to {@link canonicalPath}).
|
|
103
|
+
* @returns the normalized roots.
|
|
104
|
+
*/
|
|
105
|
+
export declare function normalizeRoots(input: unknown, canonical?: (path: string) => string): string[];
|
|
106
|
+
/**
|
|
107
|
+
* Lexical containment: whether `path` equals `root` or lies beneath it by
|
|
108
|
+
* separator-aware prefix comparison. Case handling follows the host
|
|
109
|
+
* filesystem convention (case-insensitive on Windows).
|
|
110
|
+
* @param path - the (canonical) target path.
|
|
111
|
+
* @param root - the (canonical) writable root.
|
|
112
|
+
* @param caseSensitive - whether lexical comparison preserves case.
|
|
113
|
+
* @returns whether the path is the root or a descendant of it.
|
|
114
|
+
*/
|
|
115
|
+
export declare function isLexicallyUnder(path: string, root: string, caseSensitive?: boolean): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Containment with a filesystem-identity fallback: the lexical fast path
|
|
118
|
+
* covers normal canonical spellings; when spellings differ (Windows aliases,
|
|
119
|
+
* casing), walk the target's existing ancestors and compare device/inode
|
|
120
|
+
* identity with the root. Same algorithm as the core fs fence so the plugin
|
|
121
|
+
* grants and the core grants cannot drift.
|
|
122
|
+
* @param path - the canonical target path.
|
|
123
|
+
* @param root - the canonical writable root.
|
|
124
|
+
* @param caseSensitive - lexical case handling (see {@link isLexicallyUnder}).
|
|
125
|
+
* @param stat - `node:fs/promises` stat (injectable for tests).
|
|
126
|
+
* @returns whether the target is the root or a descendant of it.
|
|
127
|
+
*/
|
|
128
|
+
export declare function isPathUnder(path: string, root: string, caseSensitive?: boolean, stat?: IdentityStat): Promise<boolean>;
|
|
129
|
+
/** Quote one path as an SBPL string literal (Seatbelt profile syntax). */
|
|
130
|
+
export declare function sbplString(path: string): string;
|
|
131
|
+
/**
|
|
132
|
+
* Splice extra writable-root grants into a confined argv produced for a
|
|
133
|
+
* `workspace-write` policy, in the runner dialect detected from `argv[0]`:
|
|
134
|
+
* - bwrap: `--bind <root> <root>` pairs before the `--` separator;
|
|
135
|
+
* - Landlock launcher: `--rw <root>` flags before the `--` separator;
|
|
136
|
+
* - sandbox-exec (Seatbelt): `(subpath …)` forms spliced into the existing
|
|
137
|
+
* `(allow file-write* …)` SBPL form (the LAST such form — the literal
|
|
138
|
+
* `/dev/null` form comes first);
|
|
139
|
+
* - anything else (a custom `runnerCommand`, the Windows ACL runner): the
|
|
140
|
+
* argv is returned unchanged, so extra roots fail closed (denied) rather
|
|
141
|
+
* than being silently granted or silently ignored.
|
|
142
|
+
*
|
|
143
|
+
* The base confined result for `workspace-write` already grants the workspace
|
|
144
|
+
* root and platform temp areas; the base for `read-only` grants nothing, so
|
|
145
|
+
* the caller passes `tmpRoots` (the platform temp areas) alongside the
|
|
146
|
+
* selected roots when the workspace itself is excluded. An unrecognized
|
|
147
|
+
* dialect degrades to the base grants, never to full access.
|
|
148
|
+
*
|
|
149
|
+
* @param confined - the provider's confined result (workspace-write or
|
|
150
|
+
* read-only translation of the policy).
|
|
151
|
+
* @param extraRoots - the additional canonical writable roots to grant.
|
|
152
|
+
* @param tmpRoots - canonical platform temp roots to grant (empty when the
|
|
153
|
+
* base already grants them).
|
|
154
|
+
* @returns the confined result with the extra grants spliced in.
|
|
155
|
+
*/
|
|
156
|
+
export declare function augmentConfinedArgv(confined: ConfinedCommand, extraRoots: readonly string[], tmpRoots?: readonly string[]): ConfinedCommand;
|
|
157
|
+
/**
|
|
158
|
+
* The model-facing policy text for the new mode, phrased like the core
|
|
159
|
+
* `sandbox:policy` contribution so the model reads one consistent voice.
|
|
160
|
+
* The writable set is exactly `extraWritableRoots` plus platform temp areas;
|
|
161
|
+
* the session workspace is writable exactly when it is a member of that list.
|
|
162
|
+
* @param policy - the resolved policy (mode + workspaceRoot + extraWritableRoots).
|
|
163
|
+
* @returns the context line, exactly as the model sees it.
|
|
164
|
+
*/
|
|
165
|
+
export declare function renderSelectedPolicyText(policy: SandboxPolicyView): string;
|
|
166
|
+
/**
|
|
167
|
+
* Ancestor chain from the filesystem root to `target` inclusive — the
|
|
168
|
+
* breadcrumb rows of a listing, every one a jump target (mirrors the core
|
|
169
|
+
* browse picker's crumbs).
|
|
170
|
+
* @param target - the listed directory.
|
|
171
|
+
* @returns crumb rows `{name, path}`.
|
|
172
|
+
*/
|
|
173
|
+
export declare function ancestryCrumbs(target: string): DirectoryCrumb[];
|
|
174
|
+
/**
|
|
175
|
+
* One-level host-side directory listing (the fallback when the composition
|
|
176
|
+
* serves the NATIVE directory-picker capability instead of `browse`, so
|
|
177
|
+
* `host.listDirectory` is unavailable). Directories only, symlinks followed
|
|
178
|
+
* to directories, bounded by `maxEntries` with the truncation flag set when
|
|
179
|
+
* the level was cut.
|
|
180
|
+
* @param path - the directory to list.
|
|
181
|
+
* @param options - `{ maxEntries, opendir, stat }` seams (defaults for tests).
|
|
182
|
+
* @returns `{ path, home, crumbs, entries, truncated }`, the same wire shape
|
|
183
|
+
* as the browse capability.
|
|
184
|
+
*/
|
|
185
|
+
export declare function listDirectoryLevel(path: string, options?: DirectoryListingOptions): Promise<DirectoryListing>;
|
|
186
|
+
/**
|
|
187
|
+
* Build the writable-root allow-list for the new mode WITHOUT the dsh-sandbox
|
|
188
|
+
* import: the workspace root plus the platform temp areas, canonicalized and
|
|
189
|
+
* deduplicated — the same set the core `writableRoots` derives for
|
|
190
|
+
* `workspace-write`. Kept here so tests cover the exact set the fs fence
|
|
191
|
+
* checks.
|
|
192
|
+
* @param workspaceRoot - the resolved policy workspace root.
|
|
193
|
+
* @returns the canonical writable roots (workspace + temp areas).
|
|
194
|
+
*/
|
|
195
|
+
export declare function workspaceWritableRoots(workspaceRoot: string): string[];
|
|
196
|
+
/**
|
|
197
|
+
* The platform temp areas alone, canonicalized and deduplicated — the
|
|
198
|
+
* writable set when the session workspace itself is excluded from the
|
|
199
|
+
* selection (workspace read-only).
|
|
200
|
+
* @returns the canonical temp writable roots.
|
|
201
|
+
*/
|
|
202
|
+
export declare function tempWritableRoots(): string[];
|
|
203
|
+
export {};
|
|
204
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
|
package/lib/core.js
ADDED
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
// dsh-session-scope — shared pure helpers (host half).
|
|
2
|
+
//
|
|
3
|
+
// This module is deliberately free of @deepseek-ai imports: everything here
|
|
4
|
+
// is plain Node + plain logic, so the unit tests in test/core.test.mjs can
|
|
5
|
+
// import it without the harness module graph. The Cordis plugin body
|
|
6
|
+
// (lib/index.js) composes these helpers with the live host services.
|
|
7
|
+
//
|
|
8
|
+
// What lives here:
|
|
9
|
+
// - the mode/event vocabulary (the fourth sandbox mode and the session event
|
|
10
|
+
// that carries the selected roots);
|
|
11
|
+
// - the durable fold of the selection from a session log;
|
|
12
|
+
// - root validation/canonicalization for the `/workspace-scope set` verb;
|
|
13
|
+
// - the containment check the fs fence uses for the new mode;
|
|
14
|
+
// - the argv augmentation that grants the extra roots in each sandbox
|
|
15
|
+
// runner dialect (bwrap / Landlock / Seatbelt);
|
|
16
|
+
// - the model-facing policy text for the new mode;
|
|
17
|
+
// - the host-side directory listing fallback (one level).
|
|
18
|
+
import { realpathSync } from "node:fs";
|
|
19
|
+
import { tmpdir } from "node:os";
|
|
20
|
+
import { basename, dirname, isAbsolute, join, sep } from "node:path";
|
|
21
|
+
/** The fourth sandbox mode this plugin adds. */
|
|
22
|
+
export const MODE = "selected-workspace-write";
|
|
23
|
+
/** Session event carrying the whole selection (last one wins). */
|
|
24
|
+
export const SELECTION_EVENT = "workspace-scope/selection";
|
|
25
|
+
/** Upper bound on how many roots one session selection may name. */
|
|
26
|
+
export const MAX_ROOTS = 128;
|
|
27
|
+
/** Upper bound on one fallback directory listing level. */
|
|
28
|
+
export const MAX_LISTING_ENTRIES = 500;
|
|
29
|
+
/**
|
|
30
|
+
* Resolve a granted root to the path enforcement actually compares:
|
|
31
|
+
* canonical (symlinks resolved), or the spelling as-is when the path does
|
|
32
|
+
* not exist yet (a missing root matches nothing until it exists — the
|
|
33
|
+
* conservative outcome; inventing a fallback would grant a path the caller
|
|
34
|
+
* never named). Mirrors `canonicalPath` in @deepseek-ai/dsh-sandbox.
|
|
35
|
+
* @param path - the root as selected by the user.
|
|
36
|
+
* @returns the canonical path, or the spelling as-is when resolution fails.
|
|
37
|
+
*/
|
|
38
|
+
export function canonicalPath(path) {
|
|
39
|
+
try {
|
|
40
|
+
return realpathSync.native(path);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return path;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Normalize one selection's roots against the session workspace: the
|
|
48
|
+
* workspace root is an ORDINARY member of the selection — present exactly
|
|
49
|
+
* when the workspace is writable. `workspace` is the explicit membership
|
|
50
|
+
* marker the write path records (it also distinguishes legacy events, which
|
|
51
|
+
* kept the workspace writable implicitly): `false` removes the workspace
|
|
52
|
+
* root from the list, anything else ensures it is present.
|
|
53
|
+
* @param roots - the raw selected roots from the event or command.
|
|
54
|
+
* @param workspaceRoot - the session workspace root (may be unknown/empty).
|
|
55
|
+
* @param workspace - the recorded workspace membership marker.
|
|
56
|
+
* @returns the normalized full selection (workspace root included iff writable).
|
|
57
|
+
*/
|
|
58
|
+
export function normalizeSelectionRoots(roots, workspaceRoot, workspace) {
|
|
59
|
+
const list = Array.isArray(roots) ? roots.filter((root) => typeof root === "string") : [];
|
|
60
|
+
if (workspace === false) {
|
|
61
|
+
return list.filter((root) => root !== workspaceRoot);
|
|
62
|
+
}
|
|
63
|
+
return workspaceRoot && !list.includes(workspaceRoot) ? [workspaceRoot, ...list] : list;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The session's selected scope: the `workspace-scope/selection` event with
|
|
67
|
+
* the highest seq, or the defaults when the session never recorded one. The
|
|
68
|
+
* event carries the WHOLE post-change state (never a delta), so this fold is
|
|
69
|
+
* a plain last-wins scan. The folded roots are the normalized selection —
|
|
70
|
+
* the session workspace root is included exactly when the workspace is
|
|
71
|
+
* writable (an absent `workspace` marker means a legacy event, which kept
|
|
72
|
+
* the workspace writable).
|
|
73
|
+
* @param events - session events in log order.
|
|
74
|
+
* @returns `{ roots, workspace, workspaceRoot }` — the normalized selected
|
|
75
|
+
* roots (the session workspace first when writable), the explicit
|
|
76
|
+
* workspace membership marker (true by default), and the workspace root
|
|
77
|
+
* recorded with the event (may be empty when none was recorded).
|
|
78
|
+
*/
|
|
79
|
+
export function selectionOf(events) {
|
|
80
|
+
for (let index = events.length - 1; index >= 0; index -= 1) {
|
|
81
|
+
const event = events[index];
|
|
82
|
+
if (event.type === SELECTION_EVENT) {
|
|
83
|
+
const workspaceRoot = typeof event.data?.workspaceRoot === "string" ? event.data.workspaceRoot : "";
|
|
84
|
+
const workspace = event.data?.workspace !== false;
|
|
85
|
+
return {
|
|
86
|
+
roots: normalizeSelectionRoots(event.data?.roots, workspaceRoot, workspace),
|
|
87
|
+
workspace,
|
|
88
|
+
workspaceRoot,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return { roots: [], workspace: true, workspaceRoot: "" };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The session's selected roots only (see {@link selectionOf}).
|
|
96
|
+
* @param events - session events in log order.
|
|
97
|
+
* @returns the selected roots (canonical absolute paths).
|
|
98
|
+
*/
|
|
99
|
+
export function selectedRootsOf(events) {
|
|
100
|
+
return selectionOf(events).roots;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Validate and normalize one `/workspace-scope set` payload: an array of
|
|
104
|
+
* absolute directory paths, deduplicated after canonicalization, sorted for
|
|
105
|
+
* stable logs, bounded by {@link MAX_ROOTS}. Throws on malformed input so
|
|
106
|
+
* the command handler can report a precise error.
|
|
107
|
+
* @param input - the raw JSON-parsed roots value.
|
|
108
|
+
* @param canonical - path canonicalizer (defaults to {@link canonicalPath}).
|
|
109
|
+
* @returns the normalized roots.
|
|
110
|
+
*/
|
|
111
|
+
export function normalizeRoots(input, canonical = canonicalPath) {
|
|
112
|
+
if (!Array.isArray(input)) {
|
|
113
|
+
throw new Error(`workspace-scope: "set" expects a JSON array of absolute directory paths`);
|
|
114
|
+
}
|
|
115
|
+
if (input.length > MAX_ROOTS) {
|
|
116
|
+
throw new Error(`workspace-scope: at most ${MAX_ROOTS} directories may be selected, got ${input.length}`);
|
|
117
|
+
}
|
|
118
|
+
const seen = new Set();
|
|
119
|
+
const roots = [];
|
|
120
|
+
for (const candidate of input) {
|
|
121
|
+
if (typeof candidate !== "string" || candidate.trim() === "" || !isAbsolute(candidate)) {
|
|
122
|
+
throw new Error(`workspace-scope: ${JSON.stringify(candidate)} is not an absolute directory path`);
|
|
123
|
+
}
|
|
124
|
+
const resolved = canonical(candidate);
|
|
125
|
+
if (resolved.length === 0 || seen.has(resolved))
|
|
126
|
+
continue;
|
|
127
|
+
seen.add(resolved);
|
|
128
|
+
roots.push(resolved);
|
|
129
|
+
}
|
|
130
|
+
return roots.sort();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Lexical containment: whether `path` equals `root` or lies beneath it by
|
|
134
|
+
* separator-aware prefix comparison. Case handling follows the host
|
|
135
|
+
* filesystem convention (case-insensitive on Windows).
|
|
136
|
+
* @param path - the (canonical) target path.
|
|
137
|
+
* @param root - the (canonical) writable root.
|
|
138
|
+
* @param caseSensitive - whether lexical comparison preserves case.
|
|
139
|
+
* @returns whether the path is the root or a descendant of it.
|
|
140
|
+
*/
|
|
141
|
+
export function isLexicallyUnder(path, root, caseSensitive = process.platform !== "win32") {
|
|
142
|
+
const comparableTarget = caseSensitive ? path : path.toLowerCase();
|
|
143
|
+
const comparableRoot = caseSensitive ? root : root.toLowerCase();
|
|
144
|
+
if (comparableTarget === comparableRoot)
|
|
145
|
+
return true;
|
|
146
|
+
const prefix = comparableRoot.endsWith(sep) ? comparableRoot : comparableRoot + sep;
|
|
147
|
+
return comparableTarget.startsWith(prefix);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Containment with a filesystem-identity fallback: the lexical fast path
|
|
151
|
+
* covers normal canonical spellings; when spellings differ (Windows aliases,
|
|
152
|
+
* casing), walk the target's existing ancestors and compare device/inode
|
|
153
|
+
* identity with the root. Same algorithm as the core fs fence so the plugin
|
|
154
|
+
* grants and the core grants cannot drift.
|
|
155
|
+
* @param path - the canonical target path.
|
|
156
|
+
* @param root - the canonical writable root.
|
|
157
|
+
* @param caseSensitive - lexical case handling (see {@link isLexicallyUnder}).
|
|
158
|
+
* @param stat - `node:fs/promises` stat (injectable for tests).
|
|
159
|
+
* @returns whether the target is the root or a descendant of it.
|
|
160
|
+
*/
|
|
161
|
+
export async function isPathUnder(path, root, caseSensitive = process.platform !== "win32", stat) {
|
|
162
|
+
if (isLexicallyUnder(path, root, caseSensitive))
|
|
163
|
+
return true;
|
|
164
|
+
const statFn = stat ?? (await import("node:fs/promises")).stat;
|
|
165
|
+
let rootInfo;
|
|
166
|
+
try {
|
|
167
|
+
rootInfo = await statFn(root, { bigint: true });
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
let ancestor = path;
|
|
173
|
+
for (;;) {
|
|
174
|
+
let ancestorInfo;
|
|
175
|
+
try {
|
|
176
|
+
ancestorInfo = await statFn(ancestor, { bigint: true });
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
ancestorInfo = void 0;
|
|
180
|
+
}
|
|
181
|
+
if (ancestorInfo !== void 0 && ancestorInfo.dev === rootInfo.dev && ancestorInfo.ino === rootInfo.ino) {
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
const parent = dirname(ancestor);
|
|
185
|
+
if (parent === ancestor)
|
|
186
|
+
return false;
|
|
187
|
+
ancestor = parent;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/** Quote one path as an SBPL string literal (Seatbelt profile syntax). */
|
|
191
|
+
export function sbplString(path) {
|
|
192
|
+
return `"${path.replaceAll("\\", String.raw `\\`).replaceAll("\"", String.raw `\"`)}"`;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Splice extra writable-root grants into a confined argv produced for a
|
|
196
|
+
* `workspace-write` policy, in the runner dialect detected from `argv[0]`:
|
|
197
|
+
* - bwrap: `--bind <root> <root>` pairs before the `--` separator;
|
|
198
|
+
* - Landlock launcher: `--rw <root>` flags before the `--` separator;
|
|
199
|
+
* - sandbox-exec (Seatbelt): `(subpath …)` forms spliced into the existing
|
|
200
|
+
* `(allow file-write* …)` SBPL form (the LAST such form — the literal
|
|
201
|
+
* `/dev/null` form comes first);
|
|
202
|
+
* - anything else (a custom `runnerCommand`, the Windows ACL runner): the
|
|
203
|
+
* argv is returned unchanged, so extra roots fail closed (denied) rather
|
|
204
|
+
* than being silently granted or silently ignored.
|
|
205
|
+
*
|
|
206
|
+
* The base confined result for `workspace-write` already grants the workspace
|
|
207
|
+
* root and platform temp areas; the base for `read-only` grants nothing, so
|
|
208
|
+
* the caller passes `tmpRoots` (the platform temp areas) alongside the
|
|
209
|
+
* selected roots when the workspace itself is excluded. An unrecognized
|
|
210
|
+
* dialect degrades to the base grants, never to full access.
|
|
211
|
+
*
|
|
212
|
+
* @param confined - the provider's confined result (workspace-write or
|
|
213
|
+
* read-only translation of the policy).
|
|
214
|
+
* @param extraRoots - the additional canonical writable roots to grant.
|
|
215
|
+
* @param tmpRoots - canonical platform temp roots to grant (empty when the
|
|
216
|
+
* base already grants them).
|
|
217
|
+
* @returns the confined result with the extra grants spliced in.
|
|
218
|
+
*/
|
|
219
|
+
export function augmentConfinedArgv(confined, extraRoots, tmpRoots = []) {
|
|
220
|
+
const argv = confined.argv;
|
|
221
|
+
const program = argv[0];
|
|
222
|
+
const sepIndex = argv.indexOf("--");
|
|
223
|
+
const at = sepIndex === -1 ? argv.length : sepIndex;
|
|
224
|
+
if (program === "bwrap") {
|
|
225
|
+
const grants = [];
|
|
226
|
+
for (const root of tmpRoots)
|
|
227
|
+
grants.push("--tmpfs", root);
|
|
228
|
+
for (const root of extraRoots)
|
|
229
|
+
grants.push("--bind", root, root);
|
|
230
|
+
return { ...confined, argv: [...argv.slice(0, at), ...grants, ...argv.slice(at)] };
|
|
231
|
+
}
|
|
232
|
+
if (typeof program === "string" && program.includes("landlock-run")) {
|
|
233
|
+
const grants = [];
|
|
234
|
+
for (const root of tmpRoots)
|
|
235
|
+
grants.push("--rw", root);
|
|
236
|
+
for (const root of extraRoots)
|
|
237
|
+
grants.push("--rw", root);
|
|
238
|
+
return { ...confined, argv: [...argv.slice(0, at), ...grants, ...argv.slice(at)] };
|
|
239
|
+
}
|
|
240
|
+
if (program === "sandbox-exec") {
|
|
241
|
+
const pIndex = argv.indexOf("-p");
|
|
242
|
+
if (pIndex !== -1 && pIndex + 1 < argv.length) {
|
|
243
|
+
const forms = argv[pIndex + 1];
|
|
244
|
+
const marker = "(allow file-write*";
|
|
245
|
+
const last = forms.lastIndexOf(marker);
|
|
246
|
+
if (last !== -1) {
|
|
247
|
+
const extra = [...tmpRoots, ...extraRoots].map((root) => `(subpath ${sbplString(root)})`).join(" ");
|
|
248
|
+
const next = `${forms.slice(0, last + marker.length)} ${extra}${forms.slice(last + marker.length)}`;
|
|
249
|
+
const copy = argv.slice();
|
|
250
|
+
copy[pIndex + 1] = next;
|
|
251
|
+
return { ...confined, argv: copy };
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return confined;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* The model-facing policy text for the new mode, phrased like the core
|
|
259
|
+
* `sandbox:policy` contribution so the model reads one consistent voice.
|
|
260
|
+
* The writable set is exactly `extraWritableRoots` plus platform temp areas;
|
|
261
|
+
* the session workspace is writable exactly when it is a member of that list.
|
|
262
|
+
* @param policy - the resolved policy (mode + workspaceRoot + extraWritableRoots).
|
|
263
|
+
* @returns the context line, exactly as the model sees it.
|
|
264
|
+
*/
|
|
265
|
+
export function renderSelectedPolicyText(policy) {
|
|
266
|
+
const workspaceRoot = policy.workspaceRoot;
|
|
267
|
+
const roots = (policy.extraWritableRoots ?? []).filter((root) => typeof root === "string");
|
|
268
|
+
const workspaceSelected = roots.includes(workspaceRoot);
|
|
269
|
+
const others = roots.filter((root) => root !== workspaceRoot);
|
|
270
|
+
if (workspaceSelected) {
|
|
271
|
+
if (others.length === 0) {
|
|
272
|
+
return `Current DSH file policy: selected-workspace-write. Any available operation enforced by the DSH file sandbox may modify files under the session workspace: ${JSON.stringify(workspaceRoot)}. Some platform temporary areas may also be writable.`;
|
|
273
|
+
}
|
|
274
|
+
return `Current DSH file policy: selected-workspace-write. Any available operation enforced by the DSH file sandbox may modify files under the session workspace: ${JSON.stringify(workspaceRoot)} and the selected directories: ${JSON.stringify(others)}. Some platform temporary areas may also be writable.`;
|
|
275
|
+
}
|
|
276
|
+
if (roots.length === 0) {
|
|
277
|
+
return `Current DSH file policy: selected-workspace-write. Any available operation enforced by the DSH file sandbox may modify files under the selected directories: none, and the session workspace is read-only. Only some platform temporary areas may be writable.`;
|
|
278
|
+
}
|
|
279
|
+
return `Current DSH file policy: selected-workspace-write. Any available operation enforced by the DSH file sandbox may modify files under the selected directories: ${JSON.stringify(roots)}; the session workspace is read-only. Some platform temporary areas may also be writable.`;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Ancestor chain from the filesystem root to `target` inclusive — the
|
|
283
|
+
* breadcrumb rows of a listing, every one a jump target (mirrors the core
|
|
284
|
+
* browse picker's crumbs).
|
|
285
|
+
* @param target - the listed directory.
|
|
286
|
+
* @returns crumb rows `{name, path}`.
|
|
287
|
+
*/
|
|
288
|
+
export function ancestryCrumbs(target) {
|
|
289
|
+
const crumbs = [];
|
|
290
|
+
let current = target;
|
|
291
|
+
for (;;) {
|
|
292
|
+
const parent = dirname(current);
|
|
293
|
+
crumbs.unshift({ name: parent === current ? current : basename(current), path: current });
|
|
294
|
+
if (parent === current)
|
|
295
|
+
return crumbs;
|
|
296
|
+
current = parent;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* One-level host-side directory listing (the fallback when the composition
|
|
301
|
+
* serves the NATIVE directory-picker capability instead of `browse`, so
|
|
302
|
+
* `host.listDirectory` is unavailable). Directories only, symlinks followed
|
|
303
|
+
* to directories, bounded by `maxEntries` with the truncation flag set when
|
|
304
|
+
* the level was cut.
|
|
305
|
+
* @param path - the directory to list.
|
|
306
|
+
* @param options - `{ maxEntries, opendir, stat }` seams (defaults for tests).
|
|
307
|
+
* @returns `{ path, home, crumbs, entries, truncated }`, the same wire shape
|
|
308
|
+
* as the browse capability.
|
|
309
|
+
*/
|
|
310
|
+
export async function listDirectoryLevel(path, options = {}) {
|
|
311
|
+
const { opendir, stat, maxEntries = MAX_LISTING_ENTRIES } = options;
|
|
312
|
+
const opendirFn = opendir ?? (await import("node:fs/promises")).opendir;
|
|
313
|
+
const statFn = stat ?? (await import("node:fs/promises")).stat;
|
|
314
|
+
const home = process.platform === "win32" ? (process.env.USERPROFILE ?? "") : "/";
|
|
315
|
+
const entries = [];
|
|
316
|
+
let truncated = false;
|
|
317
|
+
let handle;
|
|
318
|
+
try {
|
|
319
|
+
handle = await opendirFn(path);
|
|
320
|
+
for await (const dirent of handle) {
|
|
321
|
+
if (!dirent.isDirectory() && !dirent.isSymbolicLink())
|
|
322
|
+
continue;
|
|
323
|
+
let enterable = dirent.isDirectory();
|
|
324
|
+
if (!enterable) {
|
|
325
|
+
try {
|
|
326
|
+
enterable = (await statFn(join(path, dirent.name))).isDirectory();
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
if (!enterable)
|
|
333
|
+
continue;
|
|
334
|
+
entries.push({ name: dirent.name, path: join(path, dirent.name), hidden: dirent.name.startsWith(".") });
|
|
335
|
+
if (entries.length >= maxEntries) {
|
|
336
|
+
truncated = true;
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
finally {
|
|
342
|
+
if (handle !== void 0) {
|
|
343
|
+
try {
|
|
344
|
+
await handle.close();
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
/* listing is best-effort; a close failure is not worth surfacing */
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
entries.sort((left, right) => (left.name < right.name ? -1 : left.name > right.name ? 1 : 0));
|
|
352
|
+
return { path, home, crumbs: ancestryCrumbs(path), entries, truncated };
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Build the writable-root allow-list for the new mode WITHOUT the dsh-sandbox
|
|
356
|
+
* import: the workspace root plus the platform temp areas, canonicalized and
|
|
357
|
+
* deduplicated — the same set the core `writableRoots` derives for
|
|
358
|
+
* `workspace-write`. Kept here so tests cover the exact set the fs fence
|
|
359
|
+
* checks.
|
|
360
|
+
* @param workspaceRoot - the resolved policy workspace root.
|
|
361
|
+
* @returns the canonical writable roots (workspace + temp areas).
|
|
362
|
+
*/
|
|
363
|
+
export function workspaceWritableRoots(workspaceRoot) {
|
|
364
|
+
return [...new Set([workspaceRoot, "/tmp", tmpdir()].map(canonicalPath))];
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* The platform temp areas alone, canonicalized and deduplicated — the
|
|
368
|
+
* writable set when the session workspace itself is excluded from the
|
|
369
|
+
* selection (workspace read-only).
|
|
370
|
+
* @returns the canonical temp writable roots.
|
|
371
|
+
*/
|
|
372
|
+
export function tempWritableRoots() {
|
|
373
|
+
return [...new Set(["/tmp", tmpdir()].map(canonicalPath))];
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=core.js.map
|