refactor: share browser and sandbox helpers

This commit is contained in:
Peter Steinberger
2026-03-26 18:43:05 +00:00
parent 2b6375faf9
commit e774fe1286
11 changed files with 202 additions and 287 deletions

View File

@@ -46,6 +46,7 @@ export {
uploadDirectoryToSshTarget,
} from "./sandbox/ssh.js";
export { createRemoteShellSandboxFsBridge } from "./sandbox/remote-fs-bridge.js";
export { createWritableRenameTargetResolver } from "./sandbox/fs-bridge-rename-targets.js";
export { resolveWritableRenameTargets } from "./sandbox/fs-bridge-rename-targets.js";
export { resolveWritableRenameTargetsForBridge } from "./sandbox/fs-bridge-rename-targets.js";

View File

@@ -30,3 +30,10 @@ export function resolveWritableRenameTargetsForBridge<T extends { containerPath:
ensureWritable,
});
}
export function createWritableRenameTargetResolver<T extends { containerPath: string }>(
resolveTarget: (params: { filePath: string; cwd?: string }) => T,
ensureWritable: (target: T, action: string) => void,
): (params: { from: string; to: string; cwd?: string }) => { from: T; to: T } {
return (params) => resolveWritableRenameTargetsForBridge(params, resolveTarget, ensureWritable);
}

View File

@@ -2,7 +2,7 @@ import path from "node:path";
import { isPathInside } from "../../infra/path-guards.js";
import type { SandboxBackendCommandParams, SandboxBackendCommandResult } from "./backend.js";
import { SANDBOX_PINNED_MUTATION_PYTHON } from "./fs-bridge-mutation-helper.js";
import { resolveWritableRenameTargetsForBridge } from "./fs-bridge-rename-targets.js";
import { createWritableRenameTargetResolver } from "./fs-bridge-rename-targets.js";
import type { SandboxFsBridge, SandboxFsStat, SandboxResolvedPath } from "./fs-bridge.js";
import {
isPathInsideContainerRoot,
@@ -36,19 +36,16 @@ export function createRemoteShellSandboxFsBridge(params: {
}
class RemoteShellSandboxFsBridge implements SandboxFsBridge {
private readonly resolveRenameTargets = createWritableRenameTargetResolver(
(target) => this.resolveTarget(target),
(target, action) => this.ensureWritable(target, action),
);
constructor(
private readonly sandbox: SandboxContext,
private readonly runtime: RemoteShellSandboxHandle,
) {}
private resolveRenameTargets(params: { from: string; to: string; cwd?: string }) {
return resolveWritableRenameTargetsForBridge(
params,
(target) => this.resolveTarget(target),
(target, action) => this.ensureWritable(target, action),
);
}
resolvePath(params: { filePath: string; cwd?: string }): SandboxResolvedPath {
const target = this.resolveTarget(params);
return {