@jmfederico/pi-web 1.202606.4 → 1.202606.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -8
- package/dist/cli.js +6 -4
- package/dist/cli.js.map +1 -1
- package/dist/client/assets/{CodeViewer-CIG4PxA9.js → CodeViewer-Bv8l_MFi.js} +1 -1
- package/dist/client/assets/{TerminalPanel-CKtvS-3H.js → TerminalPanel-BZKsaE9s.js} +12 -8
- package/dist/client/assets/{index-DDid7ddU.js → index-C9oPLpm7.js} +218 -188
- package/dist/client/assets/{vendor-editor-core-B4Sq6exx.js → vendor-editor-core-Bc1A7SO7.js} +4 -4
- package/dist/client/assets/{vendor-editor-languages-DznYbTkJ.js → vendor-editor-languages-D0CnB2js.js} +3 -3
- package/dist/client/index.html +3 -3
- package/dist/config.js +40 -0
- package/dist/config.js.map +1 -1
- package/dist/server/app.js +14 -10
- package/dist/server/app.js.map +1 -1
- package/dist/server/configRoutes.js +35 -0
- package/dist/server/configRoutes.js.map +1 -1
- package/dist/server/sessiond.js +4 -3
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/authProviderOptions.js +1 -5
- package/dist/server/sessions/authProviderOptions.js.map +1 -1
- package/dist/server/sessions/piSessionManagerGateway.js +2 -2
- package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +191 -4
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/sessionNameGenerator.js +39 -2
- package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
- package/dist/server/sessions/spawnSubsessionTool.js +166 -0
- package/dist/server/sessions/spawnSubsessionTool.js.map +1 -0
- package/dist/server/sessions/subsessionTranscript.js +235 -0
- package/dist/server/sessions/subsessionTranscript.js.map +1 -0
- package/dist/server/workspaceExplorerRoutes.js +19 -4
- package/dist/server/workspaceExplorerRoutes.js.map +1 -1
- package/dist/server/workspaces/effectivePathAccess.js +27 -0
- package/dist/server/workspaces/effectivePathAccess.js.map +1 -0
- package/dist/server/workspaces/fileContentService.js +6 -6
- package/dist/server/workspaces/fileContentService.js.map +1 -1
- package/dist/server/workspaces/fileSuggestions.js +311 -23
- package/dist/server/workspaces/fileSuggestions.js.map +1 -1
- package/dist/server/workspaces/fileTreeService.js +16 -7
- package/dist/server/workspaces/fileTreeService.js.map +1 -1
- package/dist/server/workspaces/imagePreviewService.js +5 -5
- package/dist/server/workspaces/imagePreviewService.js.map +1 -1
- package/dist/server/workspaces/pathAccessPolicy.js +90 -0
- package/dist/server/workspaces/pathAccessPolicy.js.map +1 -0
- package/dist/server/workspaces/pathSafety.js +0 -15
- package/dist/server/workspaces/pathSafety.js.map +1 -1
- package/dist/server/workspaces/projectPiWebConfig.js +56 -0
- package/dist/server/workspaces/projectPiWebConfig.js.map +1 -0
- package/dist/shared/apiTypes.d.ts +14 -0
- package/dist/shared/apiTypes.js +1 -0
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/capabilities.js +2 -1
- package/dist/shared/capabilities.js.map +1 -1
- package/dist/shared/federatedRoutes.js +2 -0
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/docs/assets/pi-web-desktop.png +0 -0
- package/docs/assets/pi-web-mobile.png +0 -0
- package/docs/assets/pi-web-tablet.png +0 -0
- package/docs/config.md +166 -0
- package/package.json +3 -1
- package/docs/assets/pi-web-demo.gif +0 -0
- package/docs/assets/pi-web-demo.webm +0 -0
|
@@ -1,41 +1,200 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
1
|
+
import { execFile, spawn } from "node:child_process";
|
|
2
2
|
import { readdir, stat } from "node:fs/promises";
|
|
3
|
-
import {
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { basename, dirname, isAbsolute, join, relative, sep, win32 } from "node:path";
|
|
4
5
|
import { promisify } from "node:util";
|
|
5
6
|
import { sanitizedGitEnv } from "../git/gitEnv.js";
|
|
7
|
+
import { createPathAccessPolicy, isAbsoluteishPath, resolvePathAccessTarget } from "./pathAccessPolicy.js";
|
|
6
8
|
const execFileAsync = promisify(execFile);
|
|
7
9
|
const commandMaxBuffer = 1024 * 1024 * 8;
|
|
8
10
|
const maxFilesystemFallbackPaths = 20_000;
|
|
9
11
|
const maxFileSuggestions = 80;
|
|
12
|
+
class CommandExitError extends Error {
|
|
13
|
+
constructor(file, code, stderr) {
|
|
14
|
+
const codeText = code === null ? "unknown" : String(code);
|
|
15
|
+
super(`${file} exited with code ${codeText}${stderr === "" ? "" : `: ${stderr}`}`);
|
|
16
|
+
this.name = "CommandExitError";
|
|
17
|
+
if (code !== null)
|
|
18
|
+
this.exitCode = code;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function isAbsoluteishFileSuggestionQuery(query = "") {
|
|
22
|
+
return isAbsoluteishPath(fileQueryText(query));
|
|
23
|
+
}
|
|
10
24
|
export async function listFileSuggestions(cwd, query = "", options = {}, deps = {}) {
|
|
25
|
+
const queryText = fileQueryText(query);
|
|
26
|
+
if (isAbsoluteishFileSuggestionQuery(query)) {
|
|
27
|
+
return (await listPathSuggestions(cwd, queryText, options.pathAccess, deps))
|
|
28
|
+
.filter((file) => options.kind === undefined || file.kind === options.kind)
|
|
29
|
+
.slice(0, maxFileSuggestions);
|
|
30
|
+
}
|
|
11
31
|
const normalizedQuery = normalizeFileQuery(query);
|
|
12
|
-
const
|
|
13
|
-
const files = await listFilesForScope(cwd, options.scope,
|
|
14
|
-
return
|
|
32
|
+
const command = deps.execFile ?? runCommand;
|
|
33
|
+
const files = await listFilesForScope(cwd, options.scope, command);
|
|
34
|
+
return (await rankFileSuggestionsWithOptionalFzf(cwd, files.filter((file) => options.kind === undefined || file.kind === options.kind), normalizedQuery, fzfRunnerForDependencies(deps))).slice(0, maxFileSuggestions);
|
|
15
35
|
}
|
|
16
|
-
export async function listPathSuggestions(cwd, prefix = "") {
|
|
17
|
-
const
|
|
36
|
+
export async function listPathSuggestions(cwd, prefix = "", pathAccess, deps = {}) {
|
|
37
|
+
const query = fileQueryText(prefix);
|
|
38
|
+
const fzf = fzfRunnerForDependencies(deps);
|
|
39
|
+
if (isAbsoluteishPath(query))
|
|
40
|
+
return listAllowedPathSuggestions(cwd, query, pathAccess, fzf);
|
|
41
|
+
const normalizedPrefix = query.replace(/\\/g, "/");
|
|
18
42
|
const directoryPrefix = normalizedPrefix.endsWith("/") ? normalizedPrefix : dirname(normalizedPrefix) === "." ? "" : `${dirname(normalizedPrefix)}/`;
|
|
19
43
|
const searchPrefix = normalizedPrefix.endsWith("/") ? "" : basename(normalizedPrefix);
|
|
20
|
-
const
|
|
44
|
+
const candidates = await listDirectoryEntrySuggestions(cwd, directoryPrefix);
|
|
45
|
+
return (await rankPathSuggestionsWithOptionalFzf(cwd, candidates, searchPrefix, () => prefixPathSuggestions(candidates, searchPrefix), fzf)).slice(0, maxFileSuggestions);
|
|
46
|
+
}
|
|
47
|
+
async function listDirectoryEntrySuggestions(cwd, directoryPrefix) {
|
|
48
|
+
const policy = await createPathAccessPolicy(cwd, undefined);
|
|
49
|
+
const resolved = await resolveWorkspaceSuggestionDirectory(policy, directoryPrefix);
|
|
50
|
+
if (resolved === undefined)
|
|
51
|
+
return [];
|
|
52
|
+
const entries = await readdir(resolved.target, { withFileTypes: true });
|
|
21
53
|
const suggestions = [];
|
|
22
|
-
for (const entry of entries) {
|
|
23
|
-
|
|
54
|
+
for (const entry of entries.sort(compareDirectoryEntries)) {
|
|
55
|
+
const childPath = appendRequestPath(resolved.displayPath, entry.name);
|
|
56
|
+
const isDirectory = await suggestionEntryIsDirectory(policy, childPath, entry);
|
|
57
|
+
if (isDirectory === undefined)
|
|
24
58
|
continue;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
59
|
+
suggestions.push({ path: `${childPath}${isDirectory ? "/" : ""}`, kind: "other" });
|
|
60
|
+
}
|
|
61
|
+
return suggestions;
|
|
62
|
+
}
|
|
63
|
+
async function resolveWorkspaceSuggestionDirectory(policy, directoryPrefix) {
|
|
64
|
+
try {
|
|
65
|
+
const resolved = await resolvePathAccessTarget(policy, directoryPrefix);
|
|
66
|
+
return resolved.kind === "workspace" ? resolved : undefined;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (isPathSuggestionMiss(error))
|
|
70
|
+
return undefined;
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function listAllowedPathSuggestions(cwd, query, pathAccess, fzf) {
|
|
75
|
+
const policy = await createPathAccessPolicy(cwd, pathAccess);
|
|
76
|
+
if (policy.allowedRoots.length === 0)
|
|
77
|
+
throw new Error("Absolute paths are not allowed");
|
|
78
|
+
const rootCandidates = allowedRootSuggestionCandidates(policy, query);
|
|
79
|
+
const directoryCandidates = await listAllowedDirectoryEntryCandidates(policy, query);
|
|
80
|
+
return (await rankPathSuggestionsWithOptionalFzf(cwd, mergeSuggestions(rootCandidates, directoryCandidates), query, () => mergeSuggestions(allowedRootPrefixSuggestions(policy, query), prefixPathSuggestions(directoryCandidates, pathSuggestionPrefix(query).searchPrefix)).sort(compareFileSuggestions), fzf)).slice(0, maxFileSuggestions);
|
|
81
|
+
}
|
|
82
|
+
function allowedRootPrefixSuggestions(policy, query) {
|
|
83
|
+
return allowedRootSuggestionCandidates(policy, query).filter((suggestion) => pathStartsWith(suggestion.path, query));
|
|
84
|
+
}
|
|
85
|
+
function allowedRootSuggestionCandidates(policy, query) {
|
|
86
|
+
const suggestions = [];
|
|
87
|
+
const seen = new Set();
|
|
88
|
+
for (const root of policy.allowedRoots) {
|
|
89
|
+
for (const displayPath of allowedRootDisplayPaths(root.path, query)) {
|
|
90
|
+
const path = ensureTrailingPathSeparator(displayPath);
|
|
91
|
+
if (hasTrailingPathSeparator(query) && stripTrailingPathSeparators(path) === stripTrailingPathSeparators(query))
|
|
92
|
+
continue;
|
|
93
|
+
if (seen.has(path))
|
|
94
|
+
continue;
|
|
95
|
+
seen.add(path);
|
|
96
|
+
suggestions.push({ path, kind: "other" });
|
|
33
97
|
}
|
|
34
|
-
suggestions.push({ path: `${directoryPrefix}${entry.name}${isDirectory ? "/" : ""}`, kind: "other" });
|
|
35
98
|
}
|
|
36
|
-
return suggestions
|
|
37
|
-
|
|
38
|
-
|
|
99
|
+
return suggestions;
|
|
100
|
+
}
|
|
101
|
+
function allowedRootDisplayPaths(rootPath, query) {
|
|
102
|
+
if (query !== "~" && !query.startsWith("~/") && !query.startsWith("~\\"))
|
|
103
|
+
return [rootPath];
|
|
104
|
+
const home = homedir();
|
|
105
|
+
const homeRelativePath = relative(home, rootPath);
|
|
106
|
+
if (!isInsideRelativePath(homeRelativePath))
|
|
107
|
+
return [rootPath];
|
|
108
|
+
const separator = query.startsWith("~\\") ? "\\" : "/";
|
|
109
|
+
const tildePath = homeRelativePath === "" ? "~" : `~${separator}${homeRelativePath.split(/[\\/]+/u).join(separator)}`;
|
|
110
|
+
return [tildePath, rootPath];
|
|
111
|
+
}
|
|
112
|
+
async function listAllowedDirectoryEntryCandidates(policy, query) {
|
|
113
|
+
const { directoryPrefix } = pathSuggestionPrefix(query);
|
|
114
|
+
const resolved = await resolveSuggestionDirectory(policy, directoryPrefix);
|
|
115
|
+
if (resolved === undefined)
|
|
116
|
+
return [];
|
|
117
|
+
const entries = await readdir(resolved.target, { withFileTypes: true });
|
|
118
|
+
const suggestions = [];
|
|
119
|
+
for (const entry of entries.sort(compareDirectoryEntries)) {
|
|
120
|
+
const childPath = appendRequestPath(directoryPrefix, entry.name);
|
|
121
|
+
const isDirectory = await suggestionEntryIsDirectory(policy, childPath, entry);
|
|
122
|
+
if (isDirectory === undefined)
|
|
123
|
+
continue;
|
|
124
|
+
suggestions.push({ path: `${childPath}${isDirectory ? "/" : ""}`, kind: "other" });
|
|
125
|
+
}
|
|
126
|
+
return suggestions;
|
|
127
|
+
}
|
|
128
|
+
async function resolveSuggestionDirectory(policy, directoryPrefix) {
|
|
129
|
+
try {
|
|
130
|
+
const resolved = await resolvePathAccessTarget(policy, directoryPrefix);
|
|
131
|
+
return resolved.kind === "allowed" ? resolved : undefined;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (isPathSuggestionMiss(error))
|
|
135
|
+
return undefined;
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async function suggestionEntryIsDirectory(policy, childPath, entry) {
|
|
140
|
+
if (!entry.isSymbolicLink())
|
|
141
|
+
return entry.isDirectory();
|
|
142
|
+
try {
|
|
143
|
+
const resolved = await resolvePathAccessTarget(policy, childPath);
|
|
144
|
+
const result = await stat(resolved.target);
|
|
145
|
+
if (result.isDirectory())
|
|
146
|
+
return true;
|
|
147
|
+
if (result.isFile())
|
|
148
|
+
return false;
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
if (isPathSuggestionMiss(error))
|
|
153
|
+
return undefined;
|
|
154
|
+
throw error;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function pathSuggestionPrefix(query) {
|
|
158
|
+
if (query === "~" || hasTrailingPathSeparator(query))
|
|
159
|
+
return { directoryPrefix: query, searchPrefix: "" };
|
|
160
|
+
const directory = dirname(query);
|
|
161
|
+
return { directoryPrefix: directory === "." ? "" : directory, searchPrefix: basename(query) };
|
|
162
|
+
}
|
|
163
|
+
function appendRequestPath(base, name) {
|
|
164
|
+
if (base === "")
|
|
165
|
+
return name;
|
|
166
|
+
if (isAbsolute(base) || win32.isAbsolute(base))
|
|
167
|
+
return join(base, name);
|
|
168
|
+
if (hasTrailingPathSeparator(base))
|
|
169
|
+
return `${base}${name}`;
|
|
170
|
+
return `${base}/${name}`;
|
|
171
|
+
}
|
|
172
|
+
function pathStartsWith(path, query) {
|
|
173
|
+
return path.toLowerCase().startsWith(query.toLowerCase());
|
|
174
|
+
}
|
|
175
|
+
function ensureTrailingPathSeparator(path) {
|
|
176
|
+
return hasTrailingPathSeparator(path) ? path : `${path}/`;
|
|
177
|
+
}
|
|
178
|
+
function hasTrailingPathSeparator(path) {
|
|
179
|
+
return path.endsWith("/") || path.endsWith("\\");
|
|
180
|
+
}
|
|
181
|
+
function stripTrailingPathSeparators(path) {
|
|
182
|
+
let end = path.length;
|
|
183
|
+
while (end > 1 && (path[end - 1] === "/" || path[end - 1] === "\\"))
|
|
184
|
+
end -= 1;
|
|
185
|
+
return path.slice(0, end);
|
|
186
|
+
}
|
|
187
|
+
function isInsideRelativePath(path) {
|
|
188
|
+
return path === "" || (path !== ".." && !path.startsWith(`..${sep}`) && !isAbsolute(path));
|
|
189
|
+
}
|
|
190
|
+
function isPathSuggestionMiss(error) {
|
|
191
|
+
if (!(error instanceof Error))
|
|
192
|
+
return false;
|
|
193
|
+
return error.message === "Path is outside allowed paths"
|
|
194
|
+
|| error.message === "Path does not exist"
|
|
195
|
+
|| error.message === "Path traversal is not allowed"
|
|
196
|
+
|| error.message === "Path escapes workspace"
|
|
197
|
+
|| error.message.startsWith("Path is not absolute:");
|
|
39
198
|
}
|
|
40
199
|
async function listFilesForScope(cwd, scope, exec) {
|
|
41
200
|
if (scope === "all")
|
|
@@ -122,7 +281,65 @@ async function git(cwd, args, exec) {
|
|
|
122
281
|
return stdout;
|
|
123
282
|
}
|
|
124
283
|
function normalizeFileQuery(query) {
|
|
125
|
-
return query
|
|
284
|
+
return fileQueryText(query).toLowerCase();
|
|
285
|
+
}
|
|
286
|
+
function fileQueryText(query) {
|
|
287
|
+
return query.replace(/^!@/, "").replace(/^@\s?/, "").replace(/^"/, "");
|
|
288
|
+
}
|
|
289
|
+
function fzfRunnerForDependencies(deps) {
|
|
290
|
+
return deps.fzf ?? (deps.execFile === undefined ? runCommand : undefined);
|
|
291
|
+
}
|
|
292
|
+
async function rankFileSuggestionsWithOptionalFzf(cwd, files, normalizedQuery, fzf) {
|
|
293
|
+
return rankSuggestionsWithOptionalFzf(cwd, files, normalizedQuery, () => rankFileSuggestions(files, normalizedQuery), fzf);
|
|
294
|
+
}
|
|
295
|
+
async function rankPathSuggestionsWithOptionalFzf(cwd, candidates, query, fallback, fzf) {
|
|
296
|
+
return rankSuggestionsWithOptionalFzf(cwd, candidates, query, fallback, fzf);
|
|
297
|
+
}
|
|
298
|
+
async function rankSuggestionsWithOptionalFzf(cwd, candidates, query, fallback, fzf) {
|
|
299
|
+
if (fzf === undefined || query === "" || candidates.length === 0)
|
|
300
|
+
return fallback();
|
|
301
|
+
try {
|
|
302
|
+
return await fzfFilterSuggestions(cwd, candidates, query, fzf);
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
return fallback();
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
async function fzfFilterSuggestions(cwd, candidates, query, fzf) {
|
|
309
|
+
const byPath = new Map(candidates.map((suggestion) => [suggestion.path, suggestion]));
|
|
310
|
+
const { stdout } = await runFzf(cwd, [...byPath.keys()], query, fzf);
|
|
311
|
+
const suggestions = [];
|
|
312
|
+
const seen = new Set();
|
|
313
|
+
for (const path of nulRecords(stdout)) {
|
|
314
|
+
const suggestion = byPath.get(path);
|
|
315
|
+
if (suggestion === undefined || seen.has(suggestion.path))
|
|
316
|
+
continue;
|
|
317
|
+
seen.add(suggestion.path);
|
|
318
|
+
suggestions.push(suggestion);
|
|
319
|
+
}
|
|
320
|
+
if (suggestions.length === 0 && stdout !== "")
|
|
321
|
+
throw new Error("fzf returned paths outside the gathered suggestions");
|
|
322
|
+
return suggestions;
|
|
323
|
+
}
|
|
324
|
+
async function runFzf(cwd, candidates, query, fzf) {
|
|
325
|
+
try {
|
|
326
|
+
return await fzf("fzf", ["--filter", query, "--read0", "--print0"], { cwd, maxBuffer: commandMaxBuffer, input: `${candidates.join("\0")}\0` });
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
if (errorExitCode(error) === 1)
|
|
330
|
+
return { stdout: "" };
|
|
331
|
+
throw error;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
function prefixPathSuggestions(candidates, searchPrefix) {
|
|
335
|
+
const normalizedSearchPrefix = searchPrefix.toLowerCase();
|
|
336
|
+
return candidates
|
|
337
|
+
.filter((suggestion) => pathSuggestionName(suggestion.path).toLowerCase().startsWith(normalizedSearchPrefix))
|
|
338
|
+
.sort(compareFileSuggestions);
|
|
339
|
+
}
|
|
340
|
+
function pathSuggestionName(path) {
|
|
341
|
+
const stripped = stripTrailingPathSeparators(path);
|
|
342
|
+
return stripped.split(/[\\/]+/u).filter(Boolean).at(-1) ?? stripped;
|
|
126
343
|
}
|
|
127
344
|
function rankFileSuggestions(files, normalizedQuery) {
|
|
128
345
|
if (normalizedQuery === "")
|
|
@@ -174,6 +391,9 @@ function isSubsequence(needle, haystack) {
|
|
|
174
391
|
function compareFileSuggestions(a, b) {
|
|
175
392
|
return Number(!a.path.endsWith("/")) - Number(!b.path.endsWith("/")) || a.path.localeCompare(b.path);
|
|
176
393
|
}
|
|
394
|
+
function compareDirectoryEntries(a, b) {
|
|
395
|
+
return Number(!a.isDirectory()) - Number(!b.isDirectory()) || a.name.localeCompare(b.name);
|
|
396
|
+
}
|
|
177
397
|
function kindRank(kind) {
|
|
178
398
|
switch (kind) {
|
|
179
399
|
case "tracked": return 0;
|
|
@@ -184,6 +404,74 @@ function kindRank(kind) {
|
|
|
184
404
|
function pathDepth(path) {
|
|
185
405
|
return path.split("/").filter(Boolean).length;
|
|
186
406
|
}
|
|
407
|
+
async function runCommand(file, args, options) {
|
|
408
|
+
const { input, ...execOptions } = options;
|
|
409
|
+
if (input === undefined)
|
|
410
|
+
return execFileAsync(file, args, execOptions);
|
|
411
|
+
return runCommandWithInput(file, args, { ...execOptions, input });
|
|
412
|
+
}
|
|
413
|
+
async function runCommandWithInput(file, args, options) {
|
|
414
|
+
return await new Promise((resolve, reject) => {
|
|
415
|
+
const child = spawn(file, args, {
|
|
416
|
+
cwd: options.cwd,
|
|
417
|
+
...(options.env === undefined ? {} : { env: options.env }),
|
|
418
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
419
|
+
});
|
|
420
|
+
let settled = false;
|
|
421
|
+
let stdout = "";
|
|
422
|
+
let stderr = "";
|
|
423
|
+
let stdoutBytes = 0;
|
|
424
|
+
let stderrBytes = 0;
|
|
425
|
+
const rejectOnce = (error) => {
|
|
426
|
+
if (settled)
|
|
427
|
+
return;
|
|
428
|
+
settled = true;
|
|
429
|
+
reject(error);
|
|
430
|
+
};
|
|
431
|
+
child.stdout.on("data", (chunk) => {
|
|
432
|
+
stdoutBytes += chunk.length;
|
|
433
|
+
if (stdoutBytes > options.maxBuffer) {
|
|
434
|
+
child.kill();
|
|
435
|
+
rejectOnce(new Error(`${file} stdout exceeded maxBuffer`));
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
stdout += chunk.toString("utf8");
|
|
439
|
+
});
|
|
440
|
+
child.stderr.on("data", (chunk) => {
|
|
441
|
+
stderrBytes += chunk.length;
|
|
442
|
+
if (stderrBytes > options.maxBuffer) {
|
|
443
|
+
child.kill();
|
|
444
|
+
rejectOnce(new Error(`${file} stderr exceeded maxBuffer`));
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
stderr += chunk.toString("utf8");
|
|
448
|
+
});
|
|
449
|
+
child.on("error", rejectOnce);
|
|
450
|
+
child.on("close", (code) => {
|
|
451
|
+
if (settled)
|
|
452
|
+
return;
|
|
453
|
+
settled = true;
|
|
454
|
+
if (code === 0) {
|
|
455
|
+
resolve({ stdout });
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
reject(new CommandExitError(file, code, stderr));
|
|
459
|
+
});
|
|
460
|
+
child.stdin.on("error", () => undefined);
|
|
461
|
+
child.stdin.end(options.input);
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
function errorExitCode(error) {
|
|
465
|
+
if (error instanceof CommandExitError)
|
|
466
|
+
return error.exitCode;
|
|
467
|
+
if (!(error instanceof Error))
|
|
468
|
+
return undefined;
|
|
469
|
+
if ("exitCode" in error && typeof error.exitCode === "number")
|
|
470
|
+
return error.exitCode;
|
|
471
|
+
if ("code" in error && typeof error.code === "number")
|
|
472
|
+
return error.code;
|
|
473
|
+
return undefined;
|
|
474
|
+
}
|
|
187
475
|
function textLines(text) {
|
|
188
476
|
return text.split("\n").map((line) => line.endsWith("\r") ? line.slice(0, -1) : line).filter((line) => line !== "");
|
|
189
477
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileSuggestions.js","sourceRoot":"","sources":["../../../src/server/workspaces/fileSuggestions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fileSuggestions.js","sourceRoot":"","sources":["../../../src/server/workspaces/fileSuggestions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { lstat, readdir } from "node:fs/promises";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import {
|
|
2
|
+
import { isAbsolute, join, win32 } from "node:path";
|
|
3
|
+
import { resolveWorkspacePathAccessTarget } from "./pathAccessPolicy.js";
|
|
4
4
|
const MAX_ENTRIES = 1000;
|
|
5
|
-
export async function listWorkspaceTree(rootPath, path) {
|
|
6
|
-
const { target,
|
|
5
|
+
export async function listWorkspaceTree(rootPath, path, pathAccess) {
|
|
6
|
+
const { target, displayPath } = await resolveWorkspacePathAccessTarget(rootPath, path, pathAccess);
|
|
7
7
|
const stat = await lstat(target);
|
|
8
8
|
if (!stat.isDirectory())
|
|
9
9
|
throw new Error("Path is not a directory");
|
|
@@ -16,11 +16,20 @@ export async function listWorkspaceTree(rootPath, path) {
|
|
|
16
16
|
const selected = sorted.slice(0, MAX_ENTRIES);
|
|
17
17
|
const entries = await Promise.all(selected.map(async (entry) => {
|
|
18
18
|
const absolute = join(target, entry.name);
|
|
19
|
-
const
|
|
19
|
+
const childPath = appendRequestPath(displayPath, entry.name);
|
|
20
20
|
const childStat = await lstat(absolute);
|
|
21
21
|
const type = entry.isDirectory() ? "directory" : entry.isSymbolicLink() ? "symlink" : "file";
|
|
22
|
-
return { name: entry.name, path:
|
|
22
|
+
return { name: entry.name, path: childPath, type, size: childStat.size, modifiedAt: childStat.mtime.toISOString() };
|
|
23
23
|
}));
|
|
24
|
-
return { path:
|
|
24
|
+
return { path: displayPath, entries, scannedAt: new Date().toISOString(), truncated: sorted.length > selected.length };
|
|
25
|
+
}
|
|
26
|
+
function appendRequestPath(base, name) {
|
|
27
|
+
if (base === "")
|
|
28
|
+
return name;
|
|
29
|
+
if (isAbsolute(base) || win32.isAbsolute(base))
|
|
30
|
+
return join(base, name);
|
|
31
|
+
if (base.endsWith("/") || base.endsWith("\\"))
|
|
32
|
+
return `${base}${name}`;
|
|
33
|
+
return `${base}/${name}`;
|
|
25
34
|
}
|
|
26
35
|
//# sourceMappingURL=fileTreeService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileTreeService.js","sourceRoot":"","sources":["../../../src/server/workspaces/fileTreeService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"fileTreeService.js","sourceRoot":"","sources":["../../../src/server/workspaces/fileTreeService.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { createReadStream } from "node:fs";
|
|
|
2
2
|
import { stat } from "node:fs/promises";
|
|
3
3
|
import { extname } from "node:path";
|
|
4
4
|
import { MAX_IMAGE_PREVIEW_BYTES, MAX_IMAGE_PREVIEW_LABEL } from "../../shared/workspaceFiles.js";
|
|
5
|
-
import {
|
|
5
|
+
import { resolveWorkspacePathAccessTarget } from "./pathAccessPolicy.js";
|
|
6
6
|
const IMAGE_MIME_TYPES = {
|
|
7
7
|
".avif": "image/avif",
|
|
8
8
|
".bmp": "image/bmp",
|
|
@@ -17,20 +17,20 @@ const IMAGE_MIME_TYPES = {
|
|
|
17
17
|
export function imageMimeTypeForPath(path) {
|
|
18
18
|
return IMAGE_MIME_TYPES[extname(path).toLowerCase()];
|
|
19
19
|
}
|
|
20
|
-
export async function readWorkspaceImagePreview(rootPath, path) {
|
|
20
|
+
export async function readWorkspaceImagePreview(rootPath, path, pathAccess) {
|
|
21
21
|
if (path === undefined || path === "")
|
|
22
22
|
throw new Error("path query parameter is required");
|
|
23
|
-
const { target,
|
|
23
|
+
const { target, displayPath } = await resolveWorkspacePathAccessTarget(rootPath, path, pathAccess);
|
|
24
24
|
const s = await stat(target);
|
|
25
25
|
if (!s.isFile())
|
|
26
26
|
throw new Error("Path is not a file");
|
|
27
|
-
const mimeType = imageMimeTypeForPath(
|
|
27
|
+
const mimeType = imageMimeTypeForPath(displayPath);
|
|
28
28
|
if (mimeType === undefined)
|
|
29
29
|
throw new Error("Image preview is not supported for this file type");
|
|
30
30
|
if (s.size > MAX_IMAGE_PREVIEW_BYTES)
|
|
31
31
|
throw new Error(`Image is too large to preview (limit ${MAX_IMAGE_PREVIEW_LABEL})`);
|
|
32
32
|
return {
|
|
33
|
-
path:
|
|
33
|
+
path: displayPath,
|
|
34
34
|
mimeType,
|
|
35
35
|
size: s.size,
|
|
36
36
|
modifiedAt: s.mtime.toISOString(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imagePreviewService.js","sourceRoot":"","sources":["../../../src/server/workspaces/imagePreviewService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"imagePreviewService.js","sourceRoot":"","sources":["../../../src/server/workspaces/imagePreviewService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC;AAEzE,MAAM,gBAAgB,GAAuC;IAC3D,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,YAAY;CACtB,CAAC;AAUF,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,QAAgB,EAAE,IAAwB,EAAE,UAAkC;IAC5H,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC3F,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,gCAAgC,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IACnG,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACjG,IAAI,CAAC,CAAC,IAAI,GAAG,uBAAuB;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,uBAAuB,GAAG,CAAC,CAAC;IAC1H,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,QAAQ;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;QACjC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;KACjC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { realpath, stat } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { isAbsolute, relative, resolve, sep, win32 } from "node:path";
|
|
4
|
+
import { normalizeRelativePath } from "./pathSafety.js";
|
|
5
|
+
export async function createPathAccessPolicy(workspaceRootPath, pathAccess, options = {}) {
|
|
6
|
+
return {
|
|
7
|
+
workspaceRoot: await canonicalDirectory(workspaceRootPath, "Workspace path"),
|
|
8
|
+
allowedRoots: await resolveAllowedRoots(pathAccess?.allowedPaths ?? [], options),
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export async function resolveWorkspacePathAccessTarget(rootPath, requestedPath, pathAccess, options = {}) {
|
|
12
|
+
const request = requestedPath ?? "";
|
|
13
|
+
const workspaceRoot = await canonicalDirectory(rootPath, "Workspace path");
|
|
14
|
+
const allowedRoots = isAbsoluteishPath(request) ? await resolveAllowedRoots(pathAccess?.allowedPaths ?? [], options) : [];
|
|
15
|
+
return resolvePathAccessTarget({ workspaceRoot, allowedRoots }, requestedPath, options);
|
|
16
|
+
}
|
|
17
|
+
export async function resolvePathAccessTarget(policy, requestedPath, options = {}) {
|
|
18
|
+
const request = requestedPath ?? "";
|
|
19
|
+
if (isAbsoluteishPath(request))
|
|
20
|
+
return resolveAllowedTarget(policy, request, options);
|
|
21
|
+
const displayPath = normalizeRelativePath(request);
|
|
22
|
+
const target = await canonicalExistingPath(resolve(policy.workspaceRoot, displayPath));
|
|
23
|
+
ensureInside(policy.workspaceRoot, target, "Path escapes workspace");
|
|
24
|
+
return { kind: "workspace", root: policy.workspaceRoot, target, displayPath };
|
|
25
|
+
}
|
|
26
|
+
export function isAbsoluteishPath(path) {
|
|
27
|
+
return path === "~" || path.startsWith("~/") || path.startsWith("~\\") || isAbsolute(path) || win32.isAbsolute(path);
|
|
28
|
+
}
|
|
29
|
+
async function resolveAllowedRoots(allowedPaths, options) {
|
|
30
|
+
const roots = [];
|
|
31
|
+
for (const source of allowedPaths) {
|
|
32
|
+
const expanded = expandAbsoluteishPath(source, options, `Allowed path must be absolute or start with ~: ${source}`);
|
|
33
|
+
const realPath = await canonicalDirectory(expanded, `Allowed path ${source}`);
|
|
34
|
+
if (roots.some((root) => root.realPath === realPath))
|
|
35
|
+
continue;
|
|
36
|
+
roots.push({ source, path: expanded, realPath });
|
|
37
|
+
}
|
|
38
|
+
return roots;
|
|
39
|
+
}
|
|
40
|
+
async function resolveAllowedTarget(policy, request, options) {
|
|
41
|
+
if (policy.allowedRoots.length === 0)
|
|
42
|
+
throw new Error("Absolute paths are not allowed");
|
|
43
|
+
const displayPath = expandAbsoluteishPath(request, options, `Path is not absolute: ${request}`);
|
|
44
|
+
const target = await canonicalExistingPath(displayPath);
|
|
45
|
+
const root = policy.allowedRoots.find((allowedRoot) => isInsideOrSame(allowedRoot.realPath, target));
|
|
46
|
+
if (root === undefined)
|
|
47
|
+
throw new Error("Path is outside allowed paths");
|
|
48
|
+
return { kind: "allowed", root: root.realPath, target, displayPath };
|
|
49
|
+
}
|
|
50
|
+
function expandAbsoluteishPath(path, options, relativeMessage) {
|
|
51
|
+
const home = options.homeDir ?? homedir();
|
|
52
|
+
if (path === "~")
|
|
53
|
+
return home;
|
|
54
|
+
if (path.startsWith("~/") || path.startsWith("~\\"))
|
|
55
|
+
return resolve(home, path.slice(2));
|
|
56
|
+
if (isAbsolute(path))
|
|
57
|
+
return resolve(path);
|
|
58
|
+
if (win32.isAbsolute(path))
|
|
59
|
+
throw new Error(`Absolute path is not valid on this host: ${path}`);
|
|
60
|
+
throw new Error(relativeMessage);
|
|
61
|
+
}
|
|
62
|
+
async function canonicalDirectory(path, label) {
|
|
63
|
+
const canonical = await canonicalExistingPath(path, `${label} does not exist`);
|
|
64
|
+
const result = await stat(canonical);
|
|
65
|
+
if (!result.isDirectory())
|
|
66
|
+
throw new Error(`${label} must be a directory`);
|
|
67
|
+
return canonical;
|
|
68
|
+
}
|
|
69
|
+
async function canonicalExistingPath(path, missingMessage = "Path does not exist") {
|
|
70
|
+
try {
|
|
71
|
+
return await realpath(path);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
if (isNodeErrorWithCode(error, "ENOENT"))
|
|
75
|
+
throw new Error(missingMessage, { cause: error });
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function ensureInside(root, target, message) {
|
|
80
|
+
if (!isInsideOrSame(root, target))
|
|
81
|
+
throw new Error(message);
|
|
82
|
+
}
|
|
83
|
+
function isInsideOrSame(root, target) {
|
|
84
|
+
const rel = relative(root, target);
|
|
85
|
+
return rel === "" || (!rel.startsWith(`..${sep}`) && rel !== ".." && !isAbsolute(rel));
|
|
86
|
+
}
|
|
87
|
+
function isNodeErrorWithCode(error, code) {
|
|
88
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === code;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=pathAccessPolicy.js.map
|