@moxt-ai/mobius 0.0.322 → 0.0.324
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/dist/cli.js +445 -284
- package/dist/cli.js.map +4 -4
- package/dist/runtime/command/dispatcher.d.ts +1 -0
- package/dist/runtime/command/dispatcher.d.ts.map +1 -1
- package/dist/runtime/command/dispatcher.js.map +1 -1
- package/dist/runtime/command/registry/content-write/index.d.ts +10 -0
- package/dist/runtime/command/registry/content-write/index.d.ts.map +1 -0
- package/dist/runtime/command/registry/content-write/index.js +125 -0
- package/dist/runtime/command/registry/content-write/index.js.map +1 -0
- package/dist/runtime/command/registry/file-read/index.d.ts.map +1 -1
- package/dist/runtime/command/registry/file-read/index.js +2 -2
- package/dist/runtime/command/registry/file-read/index.js.map +1 -1
- package/dist/runtime/command/registry/index.d.ts +2 -1
- package/dist/runtime/command/registry/index.d.ts.map +1 -1
- package/dist/runtime/command/registry/index.js +9 -1
- package/dist/runtime/command/registry/index.js.map +1 -1
- package/dist/runtime/command/registry/prompt.d.ts.map +1 -1
- package/dist/runtime/command/registry/prompt.js +7 -2
- package/dist/runtime/command/registry/prompt.js.map +1 -1
- package/dist/runtime/command/registry/session.d.ts.map +1 -1
- package/dist/runtime/command/registry/session.js +10 -5
- package/dist/runtime/command/registry/session.js.map +1 -1
- package/dist/runtime/command/transport.d.ts +1 -0
- package/dist/runtime/command/transport.d.ts.map +1 -1
- package/dist/runtime/command/transport.js +7 -1
- package/dist/runtime/command/transport.js.map +1 -1
- package/dist/runtime/relay/connect.d.ts.map +1 -1
- package/dist/runtime/relay/connect.js +1 -0
- package/dist/runtime/relay/connect.js.map +1 -1
- package/dist/runtime/relay/run-relay-connection.d.ts.map +1 -1
- package/dist/runtime/relay/run-relay-connection.js +6 -1
- package/dist/runtime/relay/run-relay-connection.js.map +1 -1
- package/dist/runtime.js +418 -266
- package/dist/runtime.js.map +4 -4
- package/dist/session/api/session-api.d.ts +11 -4
- package/dist/session/api/session-api.d.ts.map +1 -1
- package/dist/session/api/session-api.js +3 -1
- package/dist/session/api/session-api.js.map +1 -1
- package/dist/session/content/external-content-store.d.ts +2 -0
- package/dist/session/content/external-content-store.d.ts.map +1 -1
- package/dist/session/content/external-content-store.js +5 -0
- package/dist/session/content/external-content-store.js.map +1 -1
- package/dist/session/content/session-files.d.ts +1 -1
- package/dist/session/content/session-files.d.ts.map +1 -1
- package/dist/session/content/session-files.js +4 -11
- package/dist/session/content/session-files.js.map +1 -1
- package/dist/session/live/agent-session.d.ts +2 -2
- package/dist/session/live/agent-session.d.ts.map +1 -1
- package/dist/session/live/agent-session.js +45 -13
- package/dist/session/live/agent-session.js.map +1 -1
- package/dist/session/manager/session-manager.d.ts +3 -3
- package/dist/session/manager/session-manager.d.ts.map +1 -1
- package/dist/session/manager/session-manager.js +2 -2
- package/dist/session/manager/session-manager.js.map +1 -1
- package/dist/session/prompt/apply-session-configuration.d.ts.map +1 -1
- package/dist/session/prompt/apply-session-configuration.js +2 -2
- package/dist/session/prompt/apply-session-configuration.js.map +1 -1
- package/dist/session/prompt/execute-prompt.d.ts +3 -3
- package/dist/session/prompt/execute-prompt.d.ts.map +1 -1
- package/dist/session/prompt/execute-prompt.js +2 -2
- package/dist/session/prompt/execute-prompt.js.map +1 -1
- package/dist/session/prompt/prompt-artifacts.d.ts +7 -22
- package/dist/session/prompt/prompt-artifacts.d.ts.map +1 -1
- package/dist/session/prompt/prompt-artifacts.js +22 -76
- package/dist/session/prompt/prompt-artifacts.js.map +1 -1
- package/dist/session/prompt/prompt-lifecycle.d.ts.map +1 -1
- package/dist/session/prompt/prompt-lifecycle.js +15 -12
- package/dist/session/prompt/prompt-lifecycle.js.map +1 -1
- package/dist/session/turn/session-turns.d.ts +5 -9
- package/dist/session/turn/session-turns.d.ts.map +1 -1
- package/dist/session/turn/session-turns.js +1 -2
- package/dist/session/turn/session-turns.js.map +1 -1
- package/dist/storage/files/scratch-directory.d.ts +2 -0
- package/dist/storage/files/scratch-directory.d.ts.map +1 -1
- package/dist/storage/files/scratch-directory.js +7 -1
- package/dist/storage/files/scratch-directory.js.map +1 -1
- package/dist/util/filesystem/private-path.js +2 -3
- package/dist/util/filesystem/private-path.js.map +2 -2
- package/dist/util/platform/windows.d.ts.map +1 -1
- package/dist/util/platform/windows.js +3 -5
- package/dist/util/platform/windows.js.map +1 -1
- package/dist/util/process/executable.js +2 -3
- package/dist/util/process/executable.js.map +2 -2
- package/package.json +2 -2
- package/dist/runtime/relay/artifact-download.d.ts +0 -5
- package/dist/runtime/relay/artifact-download.d.ts.map +0 -1
- package/dist/runtime/relay/artifact-download.js +0 -105
- package/dist/runtime/relay/artifact-download.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-turns.d.ts","sourceRoot":"","sources":["../../../src/session/turn/session-turns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAChH,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,0FAA0F;AAC1F,qBAAa,YAAY;;IAKrB,YAAY,UAAU,EAAE,iBAAiB,EAAE,QAAQ,sBAA4B,EAG9E;IAED,QAAQ,CAAC,cAAc,QAAO,OAAO,CAAoC;IAEzE,QAAQ,CAAC,OAAO,cAAe,MAAM,KAAG,qBAAqB,CAO3D;IAEF,QAAQ,CAAC,GAAG,cAAe,MAAM,aAAa,MAAM,KAAG,iBAAiB,GAAG,SAAS,CAC/B;IAErD,QAAQ,CAAC,KAAK,YAAa,oBAAoB,aAAa,MAAM,KAAG,iBAAiB,CAIpF;IAEF,QAAQ,CAAC,MAAM,SAAU,iBAAiB,KAAG,IAAI,CAI/C;IAEF,QAAQ,CAAC,WAAW,UAAW,oBAAoB,KAAG,oBAAoB,CAC+B;IAEzG,QAAQ,CAAC,kBAAkB,UAAW,gBAAgB,KAAG,IAAI,CAU3D;IAEF,QAAQ,CAAC,oBAAoB,YAAa,oBAAoB,KAAG,OAAO,CACa;IAErF,QAAQ,CAAC,iBAAiB,YAAmB,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC
|
|
1
|
+
{"version":3,"file":"session-turns.d.ts","sourceRoot":"","sources":["../../../src/session/turn/session-turns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAChH,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,0FAA0F;AAC1F,qBAAa,YAAY;;IAKrB,YAAY,UAAU,EAAE,iBAAiB,EAAE,QAAQ,sBAA4B,EAG9E;IAED,QAAQ,CAAC,cAAc,QAAO,OAAO,CAAoC;IAEzE,QAAQ,CAAC,OAAO,cAAe,MAAM,KAAG,qBAAqB,CAO3D;IAEF,QAAQ,CAAC,GAAG,cAAe,MAAM,aAAa,MAAM,KAAG,iBAAiB,GAAG,SAAS,CAC/B;IAErD,QAAQ,CAAC,KAAK,YAAa,oBAAoB,aAAa,MAAM,KAAG,iBAAiB,CAIpF;IAEF,QAAQ,CAAC,MAAM,SAAU,iBAAiB,KAAG,IAAI,CAI/C;IAEF,QAAQ,CAAC,WAAW,UAAW,oBAAoB,KAAG,oBAAoB,CAC+B;IAEzG,QAAQ,CAAC,kBAAkB,UAAW,gBAAgB,KAAG,IAAI,CAU3D;IAEF,QAAQ,CAAC,oBAAoB,YAAa,oBAAoB,KAAG,OAAO,CACa;IAErF,QAAQ,CAAC,iBAAiB,YAAmB,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiC9F;IAEF,QAAQ,CAAC,YAAY,SACX,iBAAiB,cACX,WAAW,YACb,MAAM,IAAI,KACrB,OAAO,CAAC,gBAAgB,CAAC,CAAkF;IAE9G,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,QAAO,IAAI,CAMvB;IAEF,QAAQ,CAAC,KAAK,QAAa,OAAO,CAAC,IAAI,CAAC,CAEtC;CACL"}
|
|
@@ -65,8 +65,7 @@ export class SessionTurns {
|
|
|
65
65
|
queued.push({
|
|
66
66
|
commandId: candidate.command.commandId,
|
|
67
67
|
prompt: candidate.command.prompt,
|
|
68
|
-
|
|
69
|
-
resources: candidate.command.resources,
|
|
68
|
+
attachments: candidate.command.attachments,
|
|
70
69
|
});
|
|
71
70
|
}
|
|
72
71
|
return { turn: turnSnapshot ?? null, queued };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-turns.js","sourceRoot":"","sources":["../../../src/session/turn/session-turns.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session-turns.js","sourceRoot":"","sources":["../../../src/session/turn/session-turns.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ export declare class ScratchDirectory {
|
|
|
12
12
|
readonly remove: (path: string) => Promise<void>;
|
|
13
13
|
/** The canonical path of a written file, or null when it is gone, is not a regular file, or escapes its directory. */
|
|
14
14
|
readonly resolveFile: (path: string) => Promise<string | null>;
|
|
15
|
+
/** Reads a regular file owned by this scratch directory after validating its canonical path. */
|
|
16
|
+
readonly read: (path: string, signal: AbortSignal) => Promise<Uint8Array | null>;
|
|
15
17
|
readonly removeAll: () => Promise<void>;
|
|
16
18
|
}
|
|
17
19
|
//# sourceMappingURL=scratch-directory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scratch-directory.d.ts","sourceRoot":"","sources":["../../../src/storage/files/scratch-directory.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,qBAAa,gBAAgB;;IAGzB,YAAY,MAAM,EAAE,MAAM,EAEzB;IAED,sHAAsH;IACtH,QAAQ,CAAC,YAAY,sBAA6B,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAqBtE;IAEF,sGAAsG;IACtG,QAAQ,CAAC,KAAK,UAAiB,MAAM,QAAQ,MAAM,SAAS,UAAU,UAAU,WAAW,KAAG,OAAO,CAAC,MAAM,CAAC,CAO3G;IAEF,QAAQ,CAAC,MAAM,SAAgB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAEnD;IAEF,sHAAsH;IACtH,QAAQ,CAAC,WAAW,SAAgB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAajE;IAEF,QAAQ,CAAC,SAAS,QAAa,OAAO,CAAC,IAAI,CAAC,CAE1C;CACL"}
|
|
1
|
+
{"version":3,"file":"scratch-directory.d.ts","sourceRoot":"","sources":["../../../src/storage/files/scratch-directory.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,qBAAa,gBAAgB;;IAGzB,YAAY,MAAM,EAAE,MAAM,EAEzB;IAED,sHAAsH;IACtH,QAAQ,CAAC,YAAY,sBAA6B,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAqBtE;IAEF,sGAAsG;IACtG,QAAQ,CAAC,KAAK,UAAiB,MAAM,QAAQ,MAAM,SAAS,UAAU,UAAU,WAAW,KAAG,OAAO,CAAC,MAAM,CAAC,CAO3G;IAEF,QAAQ,CAAC,MAAM,SAAgB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAEnD;IAEF,sHAAsH;IACtH,QAAQ,CAAC,WAAW,SAAgB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAajE;IAEF,gGAAgG;IAChG,QAAQ,CAAC,IAAI,SAAgB,MAAM,UAAU,WAAW,KAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAInF;IAEF,QAAQ,CAAC,SAAS,QAAa,OAAO,CAAC,IAAI,CAAC,CAE1C;CACL"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { lstat, mkdir, readdir, realpath, rename, rm, stat, utimes, writeFile } from "node:fs/promises";
|
|
2
|
+
import { lstat, mkdir, readdir, readFile, realpath, rename, rm, stat, utimes, writeFile } from "node:fs/promises";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
async function atomicWrite(path, bytes, signal) {
|
|
5
5
|
const temporary = `${path}.${randomUUID()}.tmp`;
|
|
@@ -69,6 +69,12 @@ export class ScratchDirectory {
|
|
|
69
69
|
return null;
|
|
70
70
|
}
|
|
71
71
|
};
|
|
72
|
+
/** Reads a regular file owned by this scratch directory after validating its canonical path. */
|
|
73
|
+
read = async (path, signal) => {
|
|
74
|
+
const resolved = await this.resolveFile(path);
|
|
75
|
+
signal.throwIfAborted();
|
|
76
|
+
return resolved === null ? null : new Uint8Array(await readFile(resolved, { signal }));
|
|
77
|
+
};
|
|
72
78
|
removeAll = async () => {
|
|
73
79
|
await rm(this.#root, { force: true, recursive: true });
|
|
74
80
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scratch-directory.js","sourceRoot":"","sources":["../../../src/storage/files/scratch-directory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"scratch-directory.js","sourceRoot":"","sources":["../../../src/storage/files/scratch-directory.ts"],"names":[],"mappings":"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"}
|
|
@@ -444,11 +444,10 @@ function terminateProcess2(child, signal) {
|
|
|
444
444
|
var windowsPermissions = `
|
|
445
445
|
$ErrorActionPreference = 'Stop'
|
|
446
446
|
$ProgressPreference = 'SilentlyContinue'
|
|
447
|
-
Import-Module (Join-Path $PSHOME 'Modules/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.psd1')
|
|
448
447
|
$item = Get-Item -LiteralPath $env:MOBIUS_PERMISSION_PATH -Force
|
|
449
448
|
if (($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Unsafe path' }
|
|
450
449
|
$sid = [Security.Principal.WindowsIdentity]::GetCurrent().User
|
|
451
|
-
$acl =
|
|
450
|
+
$acl = $item.GetAccessControl()
|
|
452
451
|
$owner = $acl.GetOwner([Security.Principal.SecurityIdentifier])
|
|
453
452
|
if ($owner -ne $sid -and -not ($owner.Value -eq 'S-1-5-32-544' -and ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))) { throw 'Path is not user-owned' }
|
|
454
453
|
if ($env:MOBIUS_PERMISSION_PRIVATE -eq '1') {
|
|
@@ -462,7 +461,7 @@ if ($env:MOBIUS_PERMISSION_PRIVATE -eq '1') {
|
|
|
462
461
|
$private.SetOwner($sid)
|
|
463
462
|
$private.SetAccessRuleProtection($true, $false)
|
|
464
463
|
$private.AddAccessRule($rule)
|
|
465
|
-
|
|
464
|
+
$item.SetAccessControl($private)
|
|
466
465
|
}
|
|
467
466
|
`;
|
|
468
467
|
var windowsPermissionsTimeoutMs = 3e4;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/util/filesystem/private-path.ts", "../../../src/util/platform/linux.ts", "../../../src/util/platform/posix.ts", "../../../src/util/filesystem/path-error.ts", "../../../src/util/platform/macos.ts", "../../../src/util/platform/claude-desktop.ts", "../../../src/util/platform/windows.ts", "../../../src/util/process/process-error.ts", "../../../src/util/platform/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { lstat } from \"node:fs/promises\";\nimport { platformSupportFor } from \"../platform/index.ts\";\nimport { LocalPathError } from \"./path-error.ts\";\n\nexport { LocalPathError } from \"./path-error.ts\";\n\nexport async function validateLocalPath(\n path: string,\n directory: boolean,\n privateAccess: boolean,\n signal: AbortSignal,\n): Promise<void> {\n signal.throwIfAborted();\n const metadata = await lstat(path);\n if (metadata.isSymbolicLink() || (directory ? !metadata.isDirectory() : !metadata.isFile())) {\n throw new LocalPathError(\"Unsafe local path\");\n }\n await platformSupportFor(process.platform).validatePathPermissions(path, directory, privateAccess, signal);\n}\n", "import { constants, readdirSync, readFileSync } from \"node:fs\";\nimport { access, readdir, readFile, realpath, stat } from \"node:fs/promises\";\nimport { isAbsolute, join } from \"node:path\";\nimport type { PlatformSupport, ProcessTableEntry } from \"./contracts.ts\";\nimport { posixOperations, processExists as posixProcessExists, readProcessTableWithPs } from \"./posix.ts\";\n\nfunction appendLinuxProcessTableEntry(entries: ProcessTableEntry[], processId: number, encoded: string): void {\n const closingParenthesis = encoded.lastIndexOf(\")\");\n if (!encoded.startsWith(`${processId.toString()} (`) || closingParenthesis < 0) {\n return;\n }\n const fields = encoded\n .slice(closingParenthesis + 1)\n .trim()\n .split(/\\s+/);\n const parentProcessId = Number(fields[1]);\n const processGroupId = Number(fields[2]);\n if (\n !Number.isSafeInteger(parentProcessId) ||\n parentProcessId < 0 ||\n !Number.isSafeInteger(processGroupId) ||\n processGroupId <= 0\n ) {\n return;\n }\n entries.push({ parentProcessId, processGroupId, processId });\n}\n\nasync function readLinuxProcessTable(): Promise<readonly ProcessTableEntry[]> {\n const entries: ProcessTableEntry[] = [];\n try {\n const directories = await readdir(\"/proc\", { withFileTypes: true });\n for (const directory of directories) {\n if (!directory.isDirectory() || !/^\\d+$/.test(directory.name)) {\n continue;\n }\n const processId = Number(directory.name);\n if (!Number.isSafeInteger(processId) || processId <= 0) {\n continue;\n }\n try {\n appendLinuxProcessTableEntry(\n entries,\n processId,\n await readFile(join(\"/proc\", directory.name, \"stat\"), \"utf8\"),\n );\n } catch {\n // Processes can exit while procfs is being enumerated.\n }\n }\n } catch {\n // A restricted Linux runtime may not mount procfs; the fixed ps fallback runs below.\n }\n return entries;\n}\n\nfunction readLinuxProcessTableSynchronously(): readonly ProcessTableEntry[] {\n const entries: ProcessTableEntry[] = [];\n try {\n const directories = readdirSync(\"/proc\", { withFileTypes: true });\n for (const directory of directories) {\n if (!directory.isDirectory() || !/^\\d+$/.test(directory.name)) {\n continue;\n }\n const processId = Number(directory.name);\n if (!Number.isSafeInteger(processId) || processId <= 0) {\n continue;\n }\n try {\n appendLinuxProcessTableEntry(\n entries,\n processId,\n readFileSync(join(\"/proc\", directory.name, \"stat\"), \"utf8\"),\n );\n } catch {\n // Processes can exit while procfs is being enumerated.\n }\n }\n } catch {\n // A restricted Linux runtime may not mount procfs; the asynchronous fallback runs below.\n }\n return entries;\n}\n\nasync function readLinuxProcessTableWithFallback(): Promise<readonly ProcessTableEntry[]> {\n const procfsEntries = await readLinuxProcessTable();\n if (procfsEntries.length > 0) {\n return procfsEntries;\n }\n for (const candidate of [\"/usr/bin/ps\", \"/bin/ps\", \"/run/current-system/sw/bin/ps\"]) {\n try {\n const resolvedPath = await realpath(candidate);\n if (!(await stat(resolvedPath)).isFile()) {\n continue;\n }\n await access(resolvedPath, constants.X_OK);\n } catch {\n continue;\n }\n const entries = await readProcessTableWithPs(candidate);\n if (entries.length > 0) {\n return entries;\n }\n }\n return [];\n}\n\nfunction processExists(processId: number): boolean {\n try {\n const encoded = readFileSync(join(\"/proc\", processId.toString(), \"stat\"), \"utf8\");\n const closingParenthesis = encoded.lastIndexOf(\")\");\n if (closingParenthesis >= 0) {\n const processState = encoded\n .slice(closingParenthesis + 1)\n .trimStart()\n .charAt(0);\n if (processState === \"Z\" || processState === \"X\") {\n return false;\n }\n }\n } catch {\n // Fall through so restricted procfs mounts still use the portable signal probe.\n }\n return posixProcessExists(processId);\n}\n\nexport const linuxPlatform: PlatformSupport = {\n ...posixOperations,\n readProcessTable: readLinuxProcessTableWithFallback,\n readProcessTableSynchronously: readLinuxProcessTableSynchronously,\n processExists,\n claudeCodeExecutablePaths: (environment) => {\n const homeDirectory = environment[\"HOME\"];\n return homeDirectory !== undefined && isAbsolute(homeDirectory)\n ? [join(homeDirectory, \".local\", \"bin\", \"claude\")]\n : [];\n },\n};\n", "import { type ChildProcess, execFile } from \"node:child_process\";\nimport { constants } from \"node:fs\";\nimport { access, chmod, lstat, realpath, unlink } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { LocalPathError } from \"../filesystem/path-error.ts\";\nimport type { PlatformSupport, ProcessTableEntry, ProcessTreeIdentity } from \"./contracts.ts\";\n\nconst PROCESS_TABLE_TIMEOUT_MILLISECONDS = 1_000;\nconst PROCESS_TABLE_OUTPUT_LIMIT_BYTES = 1024 * 1024;\n\nexport function parseProcessTable(output: string): readonly ProcessTableEntry[] {\n const entries: ProcessTableEntry[] = [];\n for (const line of output.split(\"\\n\")) {\n const groups = /^\\s*(?<pid>\\d+)\\s+(?<ppid>\\d+)\\s+(?<pgid>\\d+)\\s*$/.exec(line)?.groups;\n if (groups === undefined) {\n continue;\n }\n const processId = Number(groups[\"pid\"]);\n const parentProcessId = Number(groups[\"ppid\"]);\n const processGroupId = Number(groups[\"pgid\"]);\n if (\n !Number.isSafeInteger(processId) ||\n processId <= 0 ||\n !Number.isSafeInteger(parentProcessId) ||\n parentProcessId < 0 ||\n !Number.isSafeInteger(processGroupId) ||\n processGroupId <= 0\n ) {\n continue;\n }\n entries.push({ parentProcessId, processGroupId, processId });\n }\n return entries;\n}\n\nexport function readProcessTableWithPs(executable: string): Promise<readonly ProcessTableEntry[]> {\n return new Promise((resolveTable) => {\n execFile(\n executable,\n [\"-axo\", \"pid=,ppid=,pgid=\"],\n {\n encoding: \"utf8\",\n maxBuffer: PROCESS_TABLE_OUTPUT_LIMIT_BYTES,\n signal: AbortSignal.timeout(PROCESS_TABLE_TIMEOUT_MILLISECONDS),\n timeout: PROCESS_TABLE_TIMEOUT_MILLISECONDS,\n },\n (error, stdout) => {\n resolveTable(error === null ? parseProcessTable(stdout) : []);\n },\n );\n });\n}\n\nexport function processExists(processId: number): boolean {\n try {\n process.kill(processId, 0);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function signalCapturedProcesses(\n processes: readonly ProcessTreeIdentity[],\n rootProcessId: number,\n signal: number,\n): void {\n const processIds = new Set(processes.map((identity) => identity.processId));\n const signalledGroups = new Set<number>();\n for (const identity of processes) {\n const isRootProcessGroup = identity.processGroupId === rootProcessId;\n if (\n (!isRootProcessGroup && !processIds.has(identity.processGroupId)) ||\n signalledGroups.has(identity.processGroupId)\n ) {\n continue;\n }\n try {\n process.kill(-identity.processGroupId, signal);\n signalledGroups.add(identity.processGroupId);\n } catch {\n // A concurrently exited group no longer needs cleanup.\n }\n }\n for (const identity of processes) {\n if (\n identity.processId === rootProcessId ||\n identity.processGroupId === rootProcessId ||\n signalledGroups.has(identity.processGroupId)\n ) {\n continue;\n }\n try {\n process.kill(identity.processId, signal);\n } catch {\n // A concurrently exited process no longer needs cleanup.\n }\n }\n}\n\nfunction terminateProcess(child: ChildProcess, signal: NodeJS.Signals): void {\n if (child.exitCode !== null || child.signalCode !== null || child.pid === undefined) {\n return;\n }\n try {\n process.kill(-child.pid, signal);\n return;\n } catch {\n // Fall through when the child did not create a process group.\n }\n child.kill(signal);\n}\n\nasync function removeControlSocket(path: string): Promise<void> {\n try {\n await unlink(path);\n } catch (cause) {\n if (!(cause instanceof Error) || !(\"code\" in cause) || cause.code !== \"ENOENT\") {\n throw cause;\n }\n }\n}\n\nexport const posixOperations = {\n controlSocketPath: (installationHash: string) => join(tmpdir(), `mobius-${installationHash}.sock`),\n prepareControlSocket: removeControlSocket,\n secureControlSocket: async (path: string) => {\n await chmod(path, 0o600);\n },\n removeControlSocket,\n\n pathDelimiter: \":\",\n environmentValue: (environment: Readonly<NodeJS.ProcessEnv>, name: string) => environment[name],\n executableExtensions: () => [\"\"],\n resolveExecutableTarget: async (path: string) => {\n const target = await realpath(path);\n await access(target, constants.X_OK);\n return target;\n },\n executableLaunch: (command: string, args: readonly string[]) => ({ command, arguments: args }),\n spawnOptions: { detached: true, windowsHide: true },\n signalCapturedProcesses,\n terminateProcess,\n validatePathPermissions: async (path: string, directory: boolean, privateAccess: boolean, signal: AbortSignal) => {\n signal.throwIfAborted();\n const metadata = await lstat(path);\n if (process.getuid === undefined || metadata.uid !== process.getuid()) {\n throw new LocalPathError(\"Path is not user-owned\");\n }\n if (privateAccess) {\n await chmod(path, directory ? 0o700 : 0o600);\n }\n signal.throwIfAborted();\n },\n} satisfies Pick<\n PlatformSupport,\n | \"controlSocketPath\"\n | \"prepareControlSocket\"\n | \"secureControlSocket\"\n | \"removeControlSocket\"\n | \"pathDelimiter\"\n | \"environmentValue\"\n | \"executableExtensions\"\n | \"resolveExecutableTarget\"\n | \"executableLaunch\"\n | \"spawnOptions\"\n | \"signalCapturedProcesses\"\n | \"terminateProcess\"\n | \"validatePathPermissions\"\n>;\n", "export class LocalPathError extends Error {\n readonly code = \"unsafe_local_path\";\n\n constructor(message: string, options: ErrorOptions = {}) {\n super(message, options);\n this.name = \"LocalPathError\";\n }\n}\n", "import { isAbsolute, join } from \"node:path\";\nimport { claudeDesktopExecutablePaths } from \"./claude-desktop.ts\";\nimport type { PlatformSupport } from \"./contracts.ts\";\nimport { posixOperations, processExists, readProcessTableWithPs } from \"./posix.ts\";\n\nexport const macosPlatform: PlatformSupport = {\n ...posixOperations,\n readProcessTable: () => readProcessTableWithPs(\"/bin/ps\"),\n readProcessTableSynchronously: () => [],\n processExists,\n claudeCodeExecutablePaths: (environment) => {\n const paths = [\"/opt/homebrew/bin/claude\", \"/usr/local/bin/claude\"];\n const homeDirectory = environment[\"HOME\"];\n if (homeDirectory !== undefined && isAbsolute(homeDirectory)) {\n paths.unshift(join(homeDirectory, \".local\", \"bin\", \"claude\"));\n paths.push(\n ...claudeDesktopExecutablePaths(\n [join(homeDirectory, \"Library\", \"Application Support\", \"Claude\", \"claude-code\")],\n [[\"claude.app\", \"Contents\", \"MacOS\", \"claude\"], [\"claude\"]],\n ),\n );\n }\n return paths;\n },\n};\n", "import { readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport function installedDirectories(directory: string): readonly string[] {\n try {\n return readdirSync(directory, { withFileTypes: true })\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name);\n } catch (cause) {\n if (\n cause instanceof Error &&\n \"code\" in cause &&\n (cause.code === \"ENOENT\" || cause.code === \"ENOTDIR\" || cause.code === \"EACCES\")\n ) {\n return [];\n }\n throw cause;\n }\n}\n\nexport function claudeDesktopExecutablePaths(\n roots: readonly string[],\n executablePaths: readonly (readonly string[])[],\n): readonly string[] {\n const paths: string[] = [];\n for (const root of roots) {\n const versions = installedDirectories(root)\n .filter((version) => /^\\d+\\.\\d+\\.\\d+$/.test(version))\n .toSorted((left, right) => right.localeCompare(left, \"en\", { numeric: true }));\n for (const version of versions) {\n const directory = join(root, version);\n // Current Desktop builds use checksum directories; older versions install directly.\n const installations = [\n directory,\n ...installedDirectories(directory).map((build) => join(directory, build)),\n ];\n for (const installation of installations) {\n for (const executablePath of executablePaths) {\n paths.push(join(installation, ...executablePath));\n }\n }\n }\n }\n return paths;\n}\n", "import { type ChildProcess, execFile } from \"node:child_process\";\nimport { readFile, realpath } from \"node:fs/promises\";\nimport { dirname, extname, isAbsolute, join, resolve } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { LocalPathError } from \"../filesystem/path-error.ts\";\nimport { ProcessExecutionError } from \"../process/process-error.ts\";\nimport { claudeDesktopExecutablePaths, installedDirectories } from \"./claude-desktop.ts\";\nimport type { PlatformSupport, ProcessLaunch, ProcessTableEntry, ProcessTreeIdentity } from \"./contracts.ts\";\nimport { parseProcessTable, processExists } from \"./posix.ts\";\n\nconst execute = promisify(execFile);\n\nfunction environmentValue(environment: Readonly<NodeJS.ProcessEnv>, name: string): string | undefined {\n return Object.entries(environment).find(([key]) => key.toUpperCase() === name.toUpperCase())?.[1];\n}\n\nfunction desktopClaudeExecutablePaths(environment: Readonly<NodeJS.ProcessEnv>): readonly string[] {\n const roots: string[] = [];\n const localAppData = environmentValue(environment, \"LOCALAPPDATA\");\n if (localAppData !== undefined && isAbsolute(localAppData)) {\n const dataDirectory = join(localAppData, \"Claude-Data\");\n for (const installation of installedDirectories(dataDirectory)) {\n if (installation.startsWith(\"claude_\")) {\n roots.push(join(dataDirectory, installation, \"claude-code\"));\n }\n }\n }\n const appData = environmentValue(environment, \"APPDATA\");\n if (appData !== undefined && isAbsolute(appData)) {\n roots.push(join(appData, \"Claude\", \"claude-code\"));\n }\n return claudeDesktopExecutablePaths(roots, [[\"claude.exe\"]]);\n}\n\nfunction executableExtensions(executableName: string, environment: Readonly<NodeJS.ProcessEnv>): readonly string[] {\n if (/\\.[a-zA-Z0-9]+$/.test(executableName)) {\n return [\"\"];\n }\n const configured = environmentValue(environment, \"PATHEXT\") ?? \".COM;.EXE;.BAT;.CMD\";\n const extensions = configured\n .split(\";\")\n .map((extension) => extension.trim())\n .filter((extension) => extension.length > 0)\n .map((extension) => (extension.startsWith(\".\") ? extension : `.${extension}`));\n return extensions.length > 0 ? extensions : [\".EXE\"];\n}\n\nasync function resolveExecutableTarget(path: string): Promise<string> {\n let resolvedPath: string;\n try {\n resolvedPath = await realpath(extname(path) === \"\" ? `${path}.cmd` : path);\n } catch (cause) {\n if (extname(path) !== \"\" || !(cause instanceof Error) || !(\"code\" in cause) || cause.code !== \"ENOENT\") {\n throw cause;\n }\n resolvedPath = await realpath(path);\n }\n if (extname(resolvedPath).toLowerCase() === \".cmd\") {\n // npm cmd-shim entrypoints are Node scripts. Resolve the script instead of\n // handing untrusted arguments to cmd.exe's command language.\n const shim = await readFile(resolvedPath, \"utf8\");\n // Node's bundled npm uses its own shim format, not npm cmd-shim.\n if (\n shim.includes('SET \"NPM_CLI_JS=%~dp0\\\\node_modules\\\\npm\\\\bin\\\\npm-cli.js\"') &&\n shim.includes('\"%NODE_EXE%\" \"%NPM_CLI_JS%\" %*')\n ) {\n return await realpath(resolve(dirname(resolvedPath), \"node_modules/npm/bin/npm-cli.js\"));\n }\n const script = /\"%_prog%\"\\s+\"%dp0%[\\\\/]([^\"\\r\\n]+\\.(?:js|mjs|cjs))\"\\s+%\\*/iu.exec(shim)?.[1];\n if (script !== undefined && shim.includes(\"SET dp0=%~dp0\")) {\n resolvedPath = await realpath(resolve(dirname(resolvedPath), script));\n } else {\n const pnpmScript = /^\\s*node\\s+\"%~dp0[\\\\/]([^\"\\r\\n]+\\.(?:js|mjs|cjs))\"\\s+%\\*\\s*$/imu.exec(shim)?.[1];\n if (pnpmScript === undefined || !shim.includes(\"@SETLOCAL\")) {\n throw new ProcessExecutionError(\n \"process_unsupported_script\",\n \"Use a native executable or a verified Node entrypoint\",\n );\n }\n resolvedPath = await realpath(resolve(dirname(resolvedPath), pnpmScript));\n }\n }\n return resolvedPath;\n}\n\nfunction executableLaunch(command: string, args: readonly string[]): ProcessLaunch {\n if (/\\.(?:js|mjs|cjs)$/iu.test(command)) {\n return { command: process.execPath, arguments: [command, ...args] };\n }\n if (/\\.(?:cmd|bat)$/iu.test(command)) {\n throw new ProcessExecutionError(\n \"process_unsupported_script\",\n \"Use a native executable or a verified Node entrypoint\",\n );\n }\n return { command, arguments: args };\n}\n\nfunction readProcessTable(): Promise<readonly ProcessTableEntry[]> {\n const systemRoot = environmentValue(process.env, \"SystemRoot\");\n if (systemRoot === undefined) {\n return Promise.resolve([]);\n }\n return new Promise((resolveTable) => {\n execFile(\n join(systemRoot, \"System32\", \"WindowsPowerShell\", \"v1.0\", \"powershell.exe\"),\n [\n \"-NoLogo\",\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n \"Get-CimInstance Win32_Process | ForEach-Object { '{0} {1} {0}' -f $_.ProcessId, $_.ParentProcessId }\",\n ],\n {\n encoding: \"utf8\",\n windowsHide: true,\n timeout: 10000,\n signal: AbortSignal.timeout(10000),\n maxBuffer: 1024 * 1024,\n },\n (error, stdout) => resolveTable(error === null ? parseProcessTable(stdout) : []),\n );\n });\n}\n\nfunction signalCapturedProcesses(\n processes: readonly ProcessTreeIdentity[],\n _rootProcessId: number,\n signal: number,\n): void {\n for (const identity of [...processes].reverse()) {\n try {\n process.kill(identity.processId, signal);\n } catch {\n // A concurrently exited process no longer needs cleanup.\n }\n }\n}\n\nfunction terminateProcess(child: ChildProcess, signal: NodeJS.Signals): void {\n if (child.exitCode !== null || child.signalCode !== null || child.pid === undefined) {\n return;\n }\n child.kill(signal);\n}\n\n// The path is data in the environment, never interpolated into PowerShell source.\nconst windowsPermissions = `\n$ErrorActionPreference = 'Stop'\n$ProgressPreference = 'SilentlyContinue'\nImport-Module (Join-Path $PSHOME 'Modules/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.psd1')\n$item = Get-Item -LiteralPath $env:MOBIUS_PERMISSION_PATH -Force\nif (($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Unsafe path' }\n$sid = [Security.Principal.WindowsIdentity]::GetCurrent().User\n$acl = Get-Acl -LiteralPath $item.FullName\n$owner = $acl.GetOwner([Security.Principal.SecurityIdentifier])\nif ($owner -ne $sid -and -not ($owner.Value -eq 'S-1-5-32-544' -and ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))) { throw 'Path is not user-owned' }\nif ($env:MOBIUS_PERMISSION_PRIVATE -eq '1') {\n if ($item.PSIsContainer) {\n $private = New-Object Security.AccessControl.DirectorySecurity\n $rule = New-Object Security.AccessControl.FileSystemAccessRule($sid, 'FullControl', 'ContainerInherit,ObjectInherit', 'None', 'Allow')\n } else {\n $private = New-Object Security.AccessControl.FileSecurity\n $rule = New-Object Security.AccessControl.FileSystemAccessRule($sid, 'FullControl', 'Allow')\n }\n $private.SetOwner($sid)\n $private.SetAccessRuleProtection($true, $false)\n $private.AddAccessRule($rule)\n Set-Acl -LiteralPath $item.FullName -AclObject $private\n}\n`;\n\n// Windows PowerShell's first Security module import can exceed ten seconds on\n// a cold host. Keep ACL validation bounded without rejecting a healthy startup.\nconst windowsPermissionsTimeoutMs = 30_000;\n\nasync function validatePathPermissions(\n path: string,\n _directory: boolean,\n privateAccess: boolean,\n signal: AbortSignal,\n): Promise<void> {\n signal.throwIfAborted();\n const systemRoot = environmentValue(process.env, \"SystemRoot\");\n if (systemRoot === undefined) {\n throw new LocalPathError(\"Windows system directory is unavailable\");\n }\n try {\n await execute(\n join(systemRoot, \"System32\", \"WindowsPowerShell\", \"v1.0\", \"powershell.exe\"),\n [\n \"-NoLogo\",\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-EncodedCommand\",\n Buffer.from(windowsPermissions, \"utf16le\").toString(\"base64\"),\n ],\n {\n env: {\n ...process.env,\n MOBIUS_PERMISSION_PATH: path,\n MOBIUS_PERMISSION_PRIVATE: privateAccess ? \"1\" : \"0\",\n },\n windowsHide: true,\n signal: AbortSignal.any([signal, AbortSignal.timeout(windowsPermissionsTimeoutMs)]),\n timeout: windowsPermissionsTimeoutMs,\n maxBuffer: 16384,\n },\n );\n } catch (cause) {\n signal.throwIfAborted();\n throw new LocalPathError(\"The local path permissions could not be secured\", { cause });\n }\n}\n\nexport const windowsPlatform: PlatformSupport = {\n controlSocketPath: (installationHash) => `\\\\\\\\.\\\\pipe\\\\mobius-${installationHash}`,\n prepareControlSocket: async () => {},\n secureControlSocket: async () => {},\n removeControlSocket: async () => {},\n\n pathDelimiter: \";\",\n environmentValue,\n executableExtensions,\n resolveExecutableTarget,\n executableLaunch,\n spawnOptions: { detached: false, windowsHide: true },\n signalCapturedProcesses,\n terminateProcess,\n validatePathPermissions,\n readProcessTable,\n readProcessTableSynchronously: () => [],\n processExists,\n claudeCodeExecutablePaths: (environment) => {\n const paths: string[] = [];\n const userProfile = environmentValue(environment, \"USERPROFILE\");\n if (userProfile !== undefined && isAbsolute(userProfile)) {\n paths.push(join(userProfile, \".local\", \"bin\", \"claude.exe\"));\n }\n const localAppData = environmentValue(environment, \"LOCALAPPDATA\");\n if (localAppData !== undefined && isAbsolute(localAppData)) {\n paths.push(join(localAppData, \"Microsoft\", \"WinGet\", \"Links\", \"claude.exe\"));\n }\n paths.push(...desktopClaudeExecutablePaths(environment));\n return paths;\n },\n};\n", "export class ProcessExecutionError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string, options: ErrorOptions = {}) {\n super(message, options);\n this.code = code;\n this.name = \"ProcessExecutionError\";\n }\n}\n", "import type { PlatformSupport } from \"./contracts.ts\";\nimport { linuxPlatform } from \"./linux.ts\";\nimport { macosPlatform } from \"./macos.ts\";\nimport { posixOperations, processExists, readProcessTableWithPs } from \"./posix.ts\";\nimport { windowsPlatform } from \"./windows.ts\";\n\n// Preserve the existing fallback for other POSIX hosts.\nconst fallbackPlatform: PlatformSupport = {\n ...posixOperations,\n readProcessTable: () => readProcessTableWithPs(\"/usr/bin/ps\"),\n readProcessTableSynchronously: () => [],\n processExists,\n claudeCodeExecutablePaths: () => [],\n};\nconst platforms: ReadonlyMap<NodeJS.Platform, PlatformSupport> = new Map([\n [\"linux\", linuxPlatform],\n [\"darwin\", macosPlatform],\n [\"win32\", windowsPlatform],\n]);\n\nexport function platformSupportFor(platform: NodeJS.Platform): PlatformSupport {\n return platforms.get(platform) ?? fallbackPlatform;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { lstat } from \"node:fs/promises\";\nimport { platformSupportFor } from \"../platform/index.ts\";\nimport { LocalPathError } from \"./path-error.ts\";\n\nexport { LocalPathError } from \"./path-error.ts\";\n\nexport async function validateLocalPath(\n path: string,\n directory: boolean,\n privateAccess: boolean,\n signal: AbortSignal,\n): Promise<void> {\n signal.throwIfAborted();\n const metadata = await lstat(path);\n if (metadata.isSymbolicLink() || (directory ? !metadata.isDirectory() : !metadata.isFile())) {\n throw new LocalPathError(\"Unsafe local path\");\n }\n await platformSupportFor(process.platform).validatePathPermissions(path, directory, privateAccess, signal);\n}\n", "import { constants, readdirSync, readFileSync } from \"node:fs\";\nimport { access, readdir, readFile, realpath, stat } from \"node:fs/promises\";\nimport { isAbsolute, join } from \"node:path\";\nimport type { PlatformSupport, ProcessTableEntry } from \"./contracts.ts\";\nimport { posixOperations, processExists as posixProcessExists, readProcessTableWithPs } from \"./posix.ts\";\n\nfunction appendLinuxProcessTableEntry(entries: ProcessTableEntry[], processId: number, encoded: string): void {\n const closingParenthesis = encoded.lastIndexOf(\")\");\n if (!encoded.startsWith(`${processId.toString()} (`) || closingParenthesis < 0) {\n return;\n }\n const fields = encoded\n .slice(closingParenthesis + 1)\n .trim()\n .split(/\\s+/);\n const parentProcessId = Number(fields[1]);\n const processGroupId = Number(fields[2]);\n if (\n !Number.isSafeInteger(parentProcessId) ||\n parentProcessId < 0 ||\n !Number.isSafeInteger(processGroupId) ||\n processGroupId <= 0\n ) {\n return;\n }\n entries.push({ parentProcessId, processGroupId, processId });\n}\n\nasync function readLinuxProcessTable(): Promise<readonly ProcessTableEntry[]> {\n const entries: ProcessTableEntry[] = [];\n try {\n const directories = await readdir(\"/proc\", { withFileTypes: true });\n for (const directory of directories) {\n if (!directory.isDirectory() || !/^\\d+$/.test(directory.name)) {\n continue;\n }\n const processId = Number(directory.name);\n if (!Number.isSafeInteger(processId) || processId <= 0) {\n continue;\n }\n try {\n appendLinuxProcessTableEntry(\n entries,\n processId,\n await readFile(join(\"/proc\", directory.name, \"stat\"), \"utf8\"),\n );\n } catch {\n // Processes can exit while procfs is being enumerated.\n }\n }\n } catch {\n // A restricted Linux runtime may not mount procfs; the fixed ps fallback runs below.\n }\n return entries;\n}\n\nfunction readLinuxProcessTableSynchronously(): readonly ProcessTableEntry[] {\n const entries: ProcessTableEntry[] = [];\n try {\n const directories = readdirSync(\"/proc\", { withFileTypes: true });\n for (const directory of directories) {\n if (!directory.isDirectory() || !/^\\d+$/.test(directory.name)) {\n continue;\n }\n const processId = Number(directory.name);\n if (!Number.isSafeInteger(processId) || processId <= 0) {\n continue;\n }\n try {\n appendLinuxProcessTableEntry(\n entries,\n processId,\n readFileSync(join(\"/proc\", directory.name, \"stat\"), \"utf8\"),\n );\n } catch {\n // Processes can exit while procfs is being enumerated.\n }\n }\n } catch {\n // A restricted Linux runtime may not mount procfs; the asynchronous fallback runs below.\n }\n return entries;\n}\n\nasync function readLinuxProcessTableWithFallback(): Promise<readonly ProcessTableEntry[]> {\n const procfsEntries = await readLinuxProcessTable();\n if (procfsEntries.length > 0) {\n return procfsEntries;\n }\n for (const candidate of [\"/usr/bin/ps\", \"/bin/ps\", \"/run/current-system/sw/bin/ps\"]) {\n try {\n const resolvedPath = await realpath(candidate);\n if (!(await stat(resolvedPath)).isFile()) {\n continue;\n }\n await access(resolvedPath, constants.X_OK);\n } catch {\n continue;\n }\n const entries = await readProcessTableWithPs(candidate);\n if (entries.length > 0) {\n return entries;\n }\n }\n return [];\n}\n\nfunction processExists(processId: number): boolean {\n try {\n const encoded = readFileSync(join(\"/proc\", processId.toString(), \"stat\"), \"utf8\");\n const closingParenthesis = encoded.lastIndexOf(\")\");\n if (closingParenthesis >= 0) {\n const processState = encoded\n .slice(closingParenthesis + 1)\n .trimStart()\n .charAt(0);\n if (processState === \"Z\" || processState === \"X\") {\n return false;\n }\n }\n } catch {\n // Fall through so restricted procfs mounts still use the portable signal probe.\n }\n return posixProcessExists(processId);\n}\n\nexport const linuxPlatform: PlatformSupport = {\n ...posixOperations,\n readProcessTable: readLinuxProcessTableWithFallback,\n readProcessTableSynchronously: readLinuxProcessTableSynchronously,\n processExists,\n claudeCodeExecutablePaths: (environment) => {\n const homeDirectory = environment[\"HOME\"];\n return homeDirectory !== undefined && isAbsolute(homeDirectory)\n ? [join(homeDirectory, \".local\", \"bin\", \"claude\")]\n : [];\n },\n};\n", "import { type ChildProcess, execFile } from \"node:child_process\";\nimport { constants } from \"node:fs\";\nimport { access, chmod, lstat, realpath, unlink } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { LocalPathError } from \"../filesystem/path-error.ts\";\nimport type { PlatformSupport, ProcessTableEntry, ProcessTreeIdentity } from \"./contracts.ts\";\n\nconst PROCESS_TABLE_TIMEOUT_MILLISECONDS = 1_000;\nconst PROCESS_TABLE_OUTPUT_LIMIT_BYTES = 1024 * 1024;\n\nexport function parseProcessTable(output: string): readonly ProcessTableEntry[] {\n const entries: ProcessTableEntry[] = [];\n for (const line of output.split(\"\\n\")) {\n const groups = /^\\s*(?<pid>\\d+)\\s+(?<ppid>\\d+)\\s+(?<pgid>\\d+)\\s*$/.exec(line)?.groups;\n if (groups === undefined) {\n continue;\n }\n const processId = Number(groups[\"pid\"]);\n const parentProcessId = Number(groups[\"ppid\"]);\n const processGroupId = Number(groups[\"pgid\"]);\n if (\n !Number.isSafeInteger(processId) ||\n processId <= 0 ||\n !Number.isSafeInteger(parentProcessId) ||\n parentProcessId < 0 ||\n !Number.isSafeInteger(processGroupId) ||\n processGroupId <= 0\n ) {\n continue;\n }\n entries.push({ parentProcessId, processGroupId, processId });\n }\n return entries;\n}\n\nexport function readProcessTableWithPs(executable: string): Promise<readonly ProcessTableEntry[]> {\n return new Promise((resolveTable) => {\n execFile(\n executable,\n [\"-axo\", \"pid=,ppid=,pgid=\"],\n {\n encoding: \"utf8\",\n maxBuffer: PROCESS_TABLE_OUTPUT_LIMIT_BYTES,\n signal: AbortSignal.timeout(PROCESS_TABLE_TIMEOUT_MILLISECONDS),\n timeout: PROCESS_TABLE_TIMEOUT_MILLISECONDS,\n },\n (error, stdout) => {\n resolveTable(error === null ? parseProcessTable(stdout) : []);\n },\n );\n });\n}\n\nexport function processExists(processId: number): boolean {\n try {\n process.kill(processId, 0);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function signalCapturedProcesses(\n processes: readonly ProcessTreeIdentity[],\n rootProcessId: number,\n signal: number,\n): void {\n const processIds = new Set(processes.map((identity) => identity.processId));\n const signalledGroups = new Set<number>();\n for (const identity of processes) {\n const isRootProcessGroup = identity.processGroupId === rootProcessId;\n if (\n (!isRootProcessGroup && !processIds.has(identity.processGroupId)) ||\n signalledGroups.has(identity.processGroupId)\n ) {\n continue;\n }\n try {\n process.kill(-identity.processGroupId, signal);\n signalledGroups.add(identity.processGroupId);\n } catch {\n // A concurrently exited group no longer needs cleanup.\n }\n }\n for (const identity of processes) {\n if (\n identity.processId === rootProcessId ||\n identity.processGroupId === rootProcessId ||\n signalledGroups.has(identity.processGroupId)\n ) {\n continue;\n }\n try {\n process.kill(identity.processId, signal);\n } catch {\n // A concurrently exited process no longer needs cleanup.\n }\n }\n}\n\nfunction terminateProcess(child: ChildProcess, signal: NodeJS.Signals): void {\n if (child.exitCode !== null || child.signalCode !== null || child.pid === undefined) {\n return;\n }\n try {\n process.kill(-child.pid, signal);\n return;\n } catch {\n // Fall through when the child did not create a process group.\n }\n child.kill(signal);\n}\n\nasync function removeControlSocket(path: string): Promise<void> {\n try {\n await unlink(path);\n } catch (cause) {\n if (!(cause instanceof Error) || !(\"code\" in cause) || cause.code !== \"ENOENT\") {\n throw cause;\n }\n }\n}\n\nexport const posixOperations = {\n controlSocketPath: (installationHash: string) => join(tmpdir(), `mobius-${installationHash}.sock`),\n prepareControlSocket: removeControlSocket,\n secureControlSocket: async (path: string) => {\n await chmod(path, 0o600);\n },\n removeControlSocket,\n\n pathDelimiter: \":\",\n environmentValue: (environment: Readonly<NodeJS.ProcessEnv>, name: string) => environment[name],\n executableExtensions: () => [\"\"],\n resolveExecutableTarget: async (path: string) => {\n const target = await realpath(path);\n await access(target, constants.X_OK);\n return target;\n },\n executableLaunch: (command: string, args: readonly string[]) => ({ command, arguments: args }),\n spawnOptions: { detached: true, windowsHide: true },\n signalCapturedProcesses,\n terminateProcess,\n validatePathPermissions: async (path: string, directory: boolean, privateAccess: boolean, signal: AbortSignal) => {\n signal.throwIfAborted();\n const metadata = await lstat(path);\n if (process.getuid === undefined || metadata.uid !== process.getuid()) {\n throw new LocalPathError(\"Path is not user-owned\");\n }\n if (privateAccess) {\n await chmod(path, directory ? 0o700 : 0o600);\n }\n signal.throwIfAborted();\n },\n} satisfies Pick<\n PlatformSupport,\n | \"controlSocketPath\"\n | \"prepareControlSocket\"\n | \"secureControlSocket\"\n | \"removeControlSocket\"\n | \"pathDelimiter\"\n | \"environmentValue\"\n | \"executableExtensions\"\n | \"resolveExecutableTarget\"\n | \"executableLaunch\"\n | \"spawnOptions\"\n | \"signalCapturedProcesses\"\n | \"terminateProcess\"\n | \"validatePathPermissions\"\n>;\n", "export class LocalPathError extends Error {\n readonly code = \"unsafe_local_path\";\n\n constructor(message: string, options: ErrorOptions = {}) {\n super(message, options);\n this.name = \"LocalPathError\";\n }\n}\n", "import { isAbsolute, join } from \"node:path\";\nimport { claudeDesktopExecutablePaths } from \"./claude-desktop.ts\";\nimport type { PlatformSupport } from \"./contracts.ts\";\nimport { posixOperations, processExists, readProcessTableWithPs } from \"./posix.ts\";\n\nexport const macosPlatform: PlatformSupport = {\n ...posixOperations,\n readProcessTable: () => readProcessTableWithPs(\"/bin/ps\"),\n readProcessTableSynchronously: () => [],\n processExists,\n claudeCodeExecutablePaths: (environment) => {\n const paths = [\"/opt/homebrew/bin/claude\", \"/usr/local/bin/claude\"];\n const homeDirectory = environment[\"HOME\"];\n if (homeDirectory !== undefined && isAbsolute(homeDirectory)) {\n paths.unshift(join(homeDirectory, \".local\", \"bin\", \"claude\"));\n paths.push(\n ...claudeDesktopExecutablePaths(\n [join(homeDirectory, \"Library\", \"Application Support\", \"Claude\", \"claude-code\")],\n [[\"claude.app\", \"Contents\", \"MacOS\", \"claude\"], [\"claude\"]],\n ),\n );\n }\n return paths;\n },\n};\n", "import { readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport function installedDirectories(directory: string): readonly string[] {\n try {\n return readdirSync(directory, { withFileTypes: true })\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name);\n } catch (cause) {\n if (\n cause instanceof Error &&\n \"code\" in cause &&\n (cause.code === \"ENOENT\" || cause.code === \"ENOTDIR\" || cause.code === \"EACCES\")\n ) {\n return [];\n }\n throw cause;\n }\n}\n\nexport function claudeDesktopExecutablePaths(\n roots: readonly string[],\n executablePaths: readonly (readonly string[])[],\n): readonly string[] {\n const paths: string[] = [];\n for (const root of roots) {\n const versions = installedDirectories(root)\n .filter((version) => /^\\d+\\.\\d+\\.\\d+$/.test(version))\n .toSorted((left, right) => right.localeCompare(left, \"en\", { numeric: true }));\n for (const version of versions) {\n const directory = join(root, version);\n // Current Desktop builds use checksum directories; older versions install directly.\n const installations = [\n directory,\n ...installedDirectories(directory).map((build) => join(directory, build)),\n ];\n for (const installation of installations) {\n for (const executablePath of executablePaths) {\n paths.push(join(installation, ...executablePath));\n }\n }\n }\n }\n return paths;\n}\n", "import { type ChildProcess, execFile } from \"node:child_process\";\nimport { readFile, realpath } from \"node:fs/promises\";\nimport { dirname, extname, isAbsolute, join, resolve } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { LocalPathError } from \"../filesystem/path-error.ts\";\nimport { ProcessExecutionError } from \"../process/process-error.ts\";\nimport { claudeDesktopExecutablePaths, installedDirectories } from \"./claude-desktop.ts\";\nimport type { PlatformSupport, ProcessLaunch, ProcessTableEntry, ProcessTreeIdentity } from \"./contracts.ts\";\nimport { parseProcessTable, processExists } from \"./posix.ts\";\n\nconst execute = promisify(execFile);\n\nfunction environmentValue(environment: Readonly<NodeJS.ProcessEnv>, name: string): string | undefined {\n return Object.entries(environment).find(([key]) => key.toUpperCase() === name.toUpperCase())?.[1];\n}\n\nfunction desktopClaudeExecutablePaths(environment: Readonly<NodeJS.ProcessEnv>): readonly string[] {\n const roots: string[] = [];\n const localAppData = environmentValue(environment, \"LOCALAPPDATA\");\n if (localAppData !== undefined && isAbsolute(localAppData)) {\n const dataDirectory = join(localAppData, \"Claude-Data\");\n for (const installation of installedDirectories(dataDirectory)) {\n if (installation.startsWith(\"claude_\")) {\n roots.push(join(dataDirectory, installation, \"claude-code\"));\n }\n }\n }\n const appData = environmentValue(environment, \"APPDATA\");\n if (appData !== undefined && isAbsolute(appData)) {\n roots.push(join(appData, \"Claude\", \"claude-code\"));\n }\n return claudeDesktopExecutablePaths(roots, [[\"claude.exe\"]]);\n}\n\nfunction executableExtensions(executableName: string, environment: Readonly<NodeJS.ProcessEnv>): readonly string[] {\n if (/\\.[a-zA-Z0-9]+$/.test(executableName)) {\n return [\"\"];\n }\n const configured = environmentValue(environment, \"PATHEXT\") ?? \".COM;.EXE;.BAT;.CMD\";\n const extensions = configured\n .split(\";\")\n .map((extension) => extension.trim())\n .filter((extension) => extension.length > 0)\n .map((extension) => (extension.startsWith(\".\") ? extension : `.${extension}`));\n return extensions.length > 0 ? extensions : [\".EXE\"];\n}\n\nasync function resolveExecutableTarget(path: string): Promise<string> {\n let resolvedPath: string;\n try {\n resolvedPath = await realpath(extname(path) === \"\" ? `${path}.cmd` : path);\n } catch (cause) {\n if (extname(path) !== \"\" || !(cause instanceof Error) || !(\"code\" in cause) || cause.code !== \"ENOENT\") {\n throw cause;\n }\n resolvedPath = await realpath(path);\n }\n if (extname(resolvedPath).toLowerCase() === \".cmd\") {\n // npm cmd-shim entrypoints are Node scripts. Resolve the script instead of\n // handing untrusted arguments to cmd.exe's command language.\n const shim = await readFile(resolvedPath, \"utf8\");\n // Node's bundled npm uses its own shim format, not npm cmd-shim.\n if (\n shim.includes('SET \"NPM_CLI_JS=%~dp0\\\\node_modules\\\\npm\\\\bin\\\\npm-cli.js\"') &&\n shim.includes('\"%NODE_EXE%\" \"%NPM_CLI_JS%\" %*')\n ) {\n return await realpath(resolve(dirname(resolvedPath), \"node_modules/npm/bin/npm-cli.js\"));\n }\n const script = /\"%_prog%\"\\s+\"%dp0%[\\\\/]([^\"\\r\\n]+\\.(?:js|mjs|cjs))\"\\s+%\\*/iu.exec(shim)?.[1];\n if (script !== undefined && shim.includes(\"SET dp0=%~dp0\")) {\n resolvedPath = await realpath(resolve(dirname(resolvedPath), script));\n } else {\n const pnpmScript = /^\\s*node\\s+\"%~dp0[\\\\/]([^\"\\r\\n]+\\.(?:js|mjs|cjs))\"\\s+%\\*\\s*$/imu.exec(shim)?.[1];\n if (pnpmScript === undefined || !shim.includes(\"@SETLOCAL\")) {\n throw new ProcessExecutionError(\n \"process_unsupported_script\",\n \"Use a native executable or a verified Node entrypoint\",\n );\n }\n resolvedPath = await realpath(resolve(dirname(resolvedPath), pnpmScript));\n }\n }\n return resolvedPath;\n}\n\nfunction executableLaunch(command: string, args: readonly string[]): ProcessLaunch {\n if (/\\.(?:js|mjs|cjs)$/iu.test(command)) {\n return { command: process.execPath, arguments: [command, ...args] };\n }\n if (/\\.(?:cmd|bat)$/iu.test(command)) {\n throw new ProcessExecutionError(\n \"process_unsupported_script\",\n \"Use a native executable or a verified Node entrypoint\",\n );\n }\n return { command, arguments: args };\n}\n\nfunction readProcessTable(): Promise<readonly ProcessTableEntry[]> {\n const systemRoot = environmentValue(process.env, \"SystemRoot\");\n if (systemRoot === undefined) {\n return Promise.resolve([]);\n }\n return new Promise((resolveTable) => {\n execFile(\n join(systemRoot, \"System32\", \"WindowsPowerShell\", \"v1.0\", \"powershell.exe\"),\n [\n \"-NoLogo\",\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n \"Get-CimInstance Win32_Process | ForEach-Object { '{0} {1} {0}' -f $_.ProcessId, $_.ParentProcessId }\",\n ],\n {\n encoding: \"utf8\",\n windowsHide: true,\n timeout: 10000,\n signal: AbortSignal.timeout(10000),\n maxBuffer: 1024 * 1024,\n },\n (error, stdout) => resolveTable(error === null ? parseProcessTable(stdout) : []),\n );\n });\n}\n\nfunction signalCapturedProcesses(\n processes: readonly ProcessTreeIdentity[],\n _rootProcessId: number,\n signal: number,\n): void {\n for (const identity of [...processes].reverse()) {\n try {\n process.kill(identity.processId, signal);\n } catch {\n // A concurrently exited process no longer needs cleanup.\n }\n }\n}\n\nfunction terminateProcess(child: ChildProcess, signal: NodeJS.Signals): void {\n if (child.exitCode !== null || child.signalCode !== null || child.pid === undefined) {\n return;\n }\n child.kill(signal);\n}\n\n// The path is data in the environment, never interpolated into PowerShell source.\nconst windowsPermissions = `\n$ErrorActionPreference = 'Stop'\n$ProgressPreference = 'SilentlyContinue'\n$item = Get-Item -LiteralPath $env:MOBIUS_PERMISSION_PATH -Force\nif (($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Unsafe path' }\n$sid = [Security.Principal.WindowsIdentity]::GetCurrent().User\n$acl = $item.GetAccessControl()\n$owner = $acl.GetOwner([Security.Principal.SecurityIdentifier])\nif ($owner -ne $sid -and -not ($owner.Value -eq 'S-1-5-32-544' -and ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))) { throw 'Path is not user-owned' }\nif ($env:MOBIUS_PERMISSION_PRIVATE -eq '1') {\n if ($item.PSIsContainer) {\n $private = New-Object Security.AccessControl.DirectorySecurity\n $rule = New-Object Security.AccessControl.FileSystemAccessRule($sid, 'FullControl', 'ContainerInherit,ObjectInherit', 'None', 'Allow')\n } else {\n $private = New-Object Security.AccessControl.FileSecurity\n $rule = New-Object Security.AccessControl.FileSystemAccessRule($sid, 'FullControl', 'Allow')\n }\n $private.SetOwner($sid)\n $private.SetAccessRuleProtection($true, $false)\n $private.AddAccessRule($rule)\n $item.SetAccessControl($private)\n}\n`;\n\n// Keep ACL validation bounded in case Windows filesystem operations stall.\nconst windowsPermissionsTimeoutMs = 30_000;\n\nasync function validatePathPermissions(\n path: string,\n _directory: boolean,\n privateAccess: boolean,\n signal: AbortSignal,\n): Promise<void> {\n signal.throwIfAborted();\n const systemRoot = environmentValue(process.env, \"SystemRoot\");\n if (systemRoot === undefined) {\n throw new LocalPathError(\"Windows system directory is unavailable\");\n }\n try {\n await execute(\n join(systemRoot, \"System32\", \"WindowsPowerShell\", \"v1.0\", \"powershell.exe\"),\n [\n \"-NoLogo\",\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-EncodedCommand\",\n Buffer.from(windowsPermissions, \"utf16le\").toString(\"base64\"),\n ],\n {\n env: {\n ...process.env,\n MOBIUS_PERMISSION_PATH: path,\n MOBIUS_PERMISSION_PRIVATE: privateAccess ? \"1\" : \"0\",\n },\n windowsHide: true,\n signal: AbortSignal.any([signal, AbortSignal.timeout(windowsPermissionsTimeoutMs)]),\n timeout: windowsPermissionsTimeoutMs,\n maxBuffer: 16384,\n },\n );\n } catch (cause) {\n signal.throwIfAborted();\n throw new LocalPathError(\"The local path permissions could not be secured\", { cause });\n }\n}\n\nexport const windowsPlatform: PlatformSupport = {\n controlSocketPath: (installationHash) => `\\\\\\\\.\\\\pipe\\\\mobius-${installationHash}`,\n prepareControlSocket: async () => {},\n secureControlSocket: async () => {},\n removeControlSocket: async () => {},\n\n pathDelimiter: \";\",\n environmentValue,\n executableExtensions,\n resolveExecutableTarget,\n executableLaunch,\n spawnOptions: { detached: false, windowsHide: true },\n signalCapturedProcesses,\n terminateProcess,\n validatePathPermissions,\n readProcessTable,\n readProcessTableSynchronously: () => [],\n processExists,\n claudeCodeExecutablePaths: (environment) => {\n const paths: string[] = [];\n const userProfile = environmentValue(environment, \"USERPROFILE\");\n if (userProfile !== undefined && isAbsolute(userProfile)) {\n paths.push(join(userProfile, \".local\", \"bin\", \"claude.exe\"));\n }\n const localAppData = environmentValue(environment, \"LOCALAPPDATA\");\n if (localAppData !== undefined && isAbsolute(localAppData)) {\n paths.push(join(localAppData, \"Microsoft\", \"WinGet\", \"Links\", \"claude.exe\"));\n }\n paths.push(...desktopClaudeExecutablePaths(environment));\n return paths;\n },\n};\n", "export class ProcessExecutionError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string, options: ErrorOptions = {}) {\n super(message, options);\n this.code = code;\n this.name = \"ProcessExecutionError\";\n }\n}\n", "import type { PlatformSupport } from \"./contracts.ts\";\nimport { linuxPlatform } from \"./linux.ts\";\nimport { macosPlatform } from \"./macos.ts\";\nimport { posixOperations, processExists, readProcessTableWithPs } from \"./posix.ts\";\nimport { windowsPlatform } from \"./windows.ts\";\n\n// Preserve the existing fallback for other POSIX hosts.\nconst fallbackPlatform: PlatformSupport = {\n ...posixOperations,\n readProcessTable: () => readProcessTableWithPs(\"/usr/bin/ps\"),\n readProcessTableSynchronously: () => [],\n processExists,\n claudeCodeExecutablePaths: () => [],\n};\nconst platforms: ReadonlyMap<NodeJS.Platform, PlatformSupport> = new Map([\n [\"linux\", linuxPlatform],\n [\"darwin\", macosPlatform],\n [\"win32\", windowsPlatform],\n]);\n\nexport function platformSupportFor(platform: NodeJS.Platform): PlatformSupport {\n return platforms.get(platform) ?? fallbackPlatform;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["lstat", "constants", "access", "realpath", "join", "join", "realpath", "access", "constants", "processExists", "isAbsolute", "join", "readdirSync", "join", "isAbsolute", "join", "execFile", "readFile", "realpath", "isAbsolute", "join", "execFile", "isAbsolute", "join", "realpath", "readFile", "signalCapturedProcesses", "terminateProcess", "lstat"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../../../src/util/platform/windows.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAyD,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../../../src/util/platform/windows.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAyD,MAAM,gBAAgB,CAAC;AA8M7G,eAAO,MAAM,eAAe,EAAE,eA+B7B,CAAC"}
|
|
@@ -123,11 +123,10 @@ function terminateProcess(child, signal) {
|
|
|
123
123
|
const windowsPermissions = `
|
|
124
124
|
$ErrorActionPreference = 'Stop'
|
|
125
125
|
$ProgressPreference = 'SilentlyContinue'
|
|
126
|
-
Import-Module (Join-Path $PSHOME 'Modules/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.psd1')
|
|
127
126
|
$item = Get-Item -LiteralPath $env:MOBIUS_PERMISSION_PATH -Force
|
|
128
127
|
if (($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Unsafe path' }
|
|
129
128
|
$sid = [Security.Principal.WindowsIdentity]::GetCurrent().User
|
|
130
|
-
$acl =
|
|
129
|
+
$acl = $item.GetAccessControl()
|
|
131
130
|
$owner = $acl.GetOwner([Security.Principal.SecurityIdentifier])
|
|
132
131
|
if ($owner -ne $sid -and -not ($owner.Value -eq 'S-1-5-32-544' -and ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))) { throw 'Path is not user-owned' }
|
|
133
132
|
if ($env:MOBIUS_PERMISSION_PRIVATE -eq '1') {
|
|
@@ -141,11 +140,10 @@ if ($env:MOBIUS_PERMISSION_PRIVATE -eq '1') {
|
|
|
141
140
|
$private.SetOwner($sid)
|
|
142
141
|
$private.SetAccessRuleProtection($true, $false)
|
|
143
142
|
$private.AddAccessRule($rule)
|
|
144
|
-
|
|
143
|
+
$item.SetAccessControl($private)
|
|
145
144
|
}
|
|
146
145
|
`;
|
|
147
|
-
//
|
|
148
|
-
// a cold host. Keep ACL validation bounded without rejecting a healthy startup.
|
|
146
|
+
// Keep ACL validation bounded in case Windows filesystem operations stall.
|
|
149
147
|
const windowsPermissionsTimeoutMs = 30_000;
|
|
150
148
|
async function validatePathPermissions(path, _directory, privateAccess, signal) {
|
|
151
149
|
signal.throwIfAborted();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windows.js","sourceRoot":"","sources":["../../../src/util/platform/windows.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"windows.js","sourceRoot":"","sources":["../../../src/util/platform/windows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEzF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEpC,SAAS,gBAAgB,CAAC,WAAwC,EAAE,IAAY;IAC5E,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtG,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAwC;IAC1E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACnE,IAAI,YAAY,KAAK,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACzD,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QACxD,KAAK,MAAM,YAAY,IAAI,oBAAoB,CAAC,aAAa,CAAC,EAAE,CAAC;YAC7D,IAAI,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;YACjE,CAAC;QACL,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACzD,IAAI,OAAO,KAAK,SAAS,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,4BAA4B,CAAC,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,oBAAoB,CAAC,cAAsB,EAAE,WAAwC;IAC1F,IAAI,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,qBAAqB,CAAC;IACrF,MAAM,UAAU,GAAG,UAAU;SACxB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;SACpC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;SAC3C,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;IACnF,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,IAAY;IAC/C,IAAI,YAAoB,CAAC;IACzB,IAAI,CAAC;QACD,YAAY,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrG,MAAM,KAAK,CAAC;QAChB,CAAC;QACD,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QACjD,2EAA2E;QAC3E,6DAA6D;QAC7D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAClD,iEAAiE;QACjE,IACI,IAAI,CAAC,QAAQ,CAAC,4DAA4D,CAAC;YAC3E,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EACjD,CAAC;YACC,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,iCAAiC,CAAC,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,MAAM,GAAG,6DAA6D,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7F,IAAI,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACzD,YAAY,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACJ,MAAM,UAAU,GAAG,iEAAiE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACrG,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC1D,MAAM,IAAI,qBAAqB,CAC3B,4BAA4B,EAC5B,uDAAuD,CAC1D,CAAC;YACN,CAAC;YACD,YAAY,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QAC9E,CAAC;IACL,CAAC;IACD,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,IAAuB;IAC9D,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,qBAAqB,CAC3B,4BAA4B,EAC5B,uDAAuD,CAC1D,CAAC;IACN,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,gBAAgB;IACrB,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC/D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;QAChC,QAAQ,CACJ,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAC3E;YACI,SAAS;YACT,YAAY;YACZ,iBAAiB;YACjB,UAAU;YACV,sGAAsG;SACzG,EACD;YACI,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;YAClC,SAAS,EAAE,IAAI,GAAG,IAAI;SACzB,EACD,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CACnF,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,uBAAuB,CAC5B,SAAyC,EACzC,cAAsB,EACtB,MAAc;IAEd,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9C,IAAI,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACL,yDAAyD;QAC7D,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAmB,EAAE,MAAsB;IACjE,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAClF,OAAO;IACX,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC;AAED,kFAAkF;AAClF,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsB1B,CAAC;AAEF,2EAA2E;AAC3E,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAE3C,KAAK,UAAU,uBAAuB,CAClC,IAAY,EACZ,UAAmB,EACnB,aAAsB,EACtB,MAAmB;IAEnB,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC/D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,cAAc,CAAC,yCAAyC,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,CAAC;QACD,MAAM,OAAO,CACT,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAC3E;YACI,SAAS;YACT,YAAY;YACZ,iBAAiB;YACjB,iBAAiB;YACjB,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;SAChE,EACD;YACI,GAAG,EAAE;gBACD,GAAG,OAAO,CAAC,GAAG;gBACd,sBAAsB,EAAE,IAAI;gBAC5B,yBAAyB,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;aACvD;YACD,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACnF,OAAO,EAAE,2BAA2B;YACpC,SAAS,EAAE,KAAK;SACnB,CACJ,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,IAAI,cAAc,CAAC,iDAAiD,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3F,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC5C,iBAAiB,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,uBAAuB,gBAAgB,EAAE;IAClF,oBAAoB,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;IACpC,mBAAmB,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;IACnC,mBAAmB,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;IAEnC,aAAa,EAAE,GAAG;IAClB,gBAAgB;IAChB,oBAAoB;IACpB,uBAAuB;IACvB,gBAAgB;IAChB,YAAY,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;IACpD,uBAAuB;IACvB,gBAAgB;IAChB,uBAAuB;IACvB,gBAAgB;IAChB,6BAA6B,EAAE,GAAG,EAAE,CAAC,EAAE;IACvC,aAAa;IACb,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACvC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACjE,IAAI,WAAW,KAAK,SAAS,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACnE,IAAI,YAAY,KAAK,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC,WAAW,CAAC,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ,CAAC"}
|
|
@@ -446,11 +446,10 @@ function terminateProcess2(child, signal) {
|
|
|
446
446
|
var windowsPermissions = `
|
|
447
447
|
$ErrorActionPreference = 'Stop'
|
|
448
448
|
$ProgressPreference = 'SilentlyContinue'
|
|
449
|
-
Import-Module (Join-Path $PSHOME 'Modules/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.psd1')
|
|
450
449
|
$item = Get-Item -LiteralPath $env:MOBIUS_PERMISSION_PATH -Force
|
|
451
450
|
if (($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw 'Unsafe path' }
|
|
452
451
|
$sid = [Security.Principal.WindowsIdentity]::GetCurrent().User
|
|
453
|
-
$acl =
|
|
452
|
+
$acl = $item.GetAccessControl()
|
|
454
453
|
$owner = $acl.GetOwner([Security.Principal.SecurityIdentifier])
|
|
455
454
|
if ($owner -ne $sid -and -not ($owner.Value -eq 'S-1-5-32-544' -and ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))) { throw 'Path is not user-owned' }
|
|
456
455
|
if ($env:MOBIUS_PERMISSION_PRIVATE -eq '1') {
|
|
@@ -464,7 +463,7 @@ if ($env:MOBIUS_PERMISSION_PRIVATE -eq '1') {
|
|
|
464
463
|
$private.SetOwner($sid)
|
|
465
464
|
$private.SetAccessRuleProtection($true, $false)
|
|
466
465
|
$private.AddAccessRule($rule)
|
|
467
|
-
|
|
466
|
+
$item.SetAccessControl($private)
|
|
468
467
|
}
|
|
469
468
|
`;
|
|
470
469
|
var windowsPermissionsTimeoutMs = 3e4;
|