@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.
Files changed (53) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +110 -0
  3. package/compatibility.json +20 -0
  4. package/cordis.patch.yml +7 -0
  5. package/lib/client.d.ts +1 -0
  6. package/lib/client.d.ts.map +1 -0
  7. package/lib/client.js +716 -0
  8. package/lib/client.js.map +1 -0
  9. package/lib/core.d.ts +204 -0
  10. package/lib/core.d.ts.map +1 -0
  11. package/lib/core.js +375 -0
  12. package/lib/core.js.map +1 -0
  13. package/lib/host-api.d.ts +23 -0
  14. package/lib/host-api.d.ts.map +1 -0
  15. package/lib/host-api.js +40 -0
  16. package/lib/host-api.js.map +1 -0
  17. package/lib/index.d.ts +32 -0
  18. package/lib/index.d.ts.map +1 -0
  19. package/lib/index.js +594 -0
  20. package/lib/index.js.map +1 -0
  21. package/lib/scope-context.d.ts +3 -0
  22. package/lib/scope-context.d.ts.map +1 -0
  23. package/lib/scope-context.js +29 -0
  24. package/lib/scope-context.js.map +1 -0
  25. package/lib/scope-delegation.d.ts +23 -0
  26. package/lib/scope-delegation.d.ts.map +1 -0
  27. package/lib/scope-delegation.js +49 -0
  28. package/lib/scope-delegation.js.map +1 -0
  29. package/lib/scope-fs.d.ts +47 -0
  30. package/lib/scope-fs.d.ts.map +1 -0
  31. package/lib/scope-fs.js +150 -0
  32. package/lib/scope-fs.js.map +1 -0
  33. package/lib/scope-processes.d.ts +31 -0
  34. package/lib/scope-processes.d.ts.map +1 -0
  35. package/lib/scope-processes.js +71 -0
  36. package/lib/scope-processes.js.map +1 -0
  37. package/lib/scope-sandbox-linux.d.ts +35 -0
  38. package/lib/scope-sandbox-linux.d.ts.map +1 -0
  39. package/lib/scope-sandbox-linux.js +177 -0
  40. package/lib/scope-sandbox-linux.js.map +1 -0
  41. package/lib/scope-visibility.d.ts +14 -0
  42. package/lib/scope-visibility.d.ts.map +1 -0
  43. package/lib/scope-visibility.js +62 -0
  44. package/lib/scope-visibility.js.map +1 -0
  45. package/lib/session-scope.d.ts +54 -0
  46. package/lib/session-scope.d.ts.map +1 -0
  47. package/lib/session-scope.js +200 -0
  48. package/lib/session-scope.js.map +1 -0
  49. package/lib/tool-guard.d.ts +52 -0
  50. package/lib/tool-guard.d.ts.map +1 -0
  51. package/lib/tool-guard.js +233 -0
  52. package/lib/tool-guard.js.map +1 -0
  53. 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