mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-11-11 13:24:55 +01:00
Carry managed OpenCode home helper through Storybook layer
* codex/restack-13006-r121: Preserve sandbox home in managed OpenCode runtime configuration Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
commit
d4f12b2827
2 files changed
+38
-2
No files matched your search
@@ -2,10 +2,43 @@ import fs from "node:fs/promises";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import { afterEach, describe, expect, it } from "vitest";
|
||||
import { prepareOpenCodeRuntimeConfig } from "./runtime-config.js";
|
||||
import { prepareManagedOpenCodeRemoteHomes, prepareOpenCodeRuntimeConfig } from "./runtime-config.js";
|
||||
|
||||
const cleanupPaths = new Set<string>();
|
||||
|
||||
describe("prepareManagedOpenCodeRemoteHomes", () => {
|
||||
it("keeps the sandbox home while isolating managed credentials outside scoped folders", () => {
|
||||
const env = { HOME: "/host/private", XDG_DATA_HOME: "/host/data" };
|
||||
prepareManagedOpenCodeRemoteHomes({
|
||||
env,
|
||||
config: { managedAiConnection: true },
|
||||
runtimeRootDir: "/home/daytona/.paperclip-runtime/opencode",
|
||||
runId: "run-1",
|
||||
configDir: "/home/daytona/.paperclip-runtime/opencode/config",
|
||||
workFolderHome: "/home/daytona",
|
||||
});
|
||||
expect(env).toEqual({
|
||||
HOME: "/home/daytona",
|
||||
XDG_CONFIG_HOME: "/home/daytona/.paperclip-runtime/opencode/config",
|
||||
XDG_DATA_HOME: "/home/daytona/.paperclip-runtime/opencode/managed-auth/run-1/data",
|
||||
XDG_CACHE_HOME: "/home/daytona/.paperclip-runtime/opencode/managed-auth/run-1/cache",
|
||||
XDG_STATE_HOME: "/home/daytona/.paperclip-runtime/opencode/managed-auth/run-1/state",
|
||||
});
|
||||
});
|
||||
|
||||
it("preserves the isolated remote home for execution without work folders", () => {
|
||||
const env: Record<string, string> = { HOME: "/host/private" };
|
||||
prepareManagedOpenCodeRemoteHomes({
|
||||
env,
|
||||
config: { managedAiConnection: true },
|
||||
runtimeRootDir: "/remote/runtime",
|
||||
runId: "run-1",
|
||||
});
|
||||
expect(env.HOME).toBe("/remote/runtime/managed-auth/run-1");
|
||||
expect(env.XDG_DATA_HOME).toBe("/remote/runtime/managed-auth/run-1/data");
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await Promise.all(
|
||||
[...cleanupPaths].map(async (filepath) => {
|
||||
|
||||
@@ -248,12 +248,15 @@ export function prepareManagedOpenCodeRemoteHomes(input: {
|
||||
runtimeRootDir: string | null | undefined;
|
||||
runId: string;
|
||||
configDir?: string;
|
||||
workFolderHome?: string;
|
||||
}): void {
|
||||
if (!input.config.managedAiConnection) return;
|
||||
if (!input.runtimeRootDir) throw new Error("Managed OpenCode authentication requires an isolated remote runtime directory.");
|
||||
const home = path.posix.join(input.runtimeRootDir, "managed-auth", input.runId);
|
||||
Object.assign(input.env, {
|
||||
HOME: home,
|
||||
// Scoped work folders live beneath the sandbox's real home. OpenCode's
|
||||
// credential/configuration stores still use the isolated XDG directories.
|
||||
HOME: input.workFolderHome ?? home,
|
||||
XDG_CONFIG_HOME: input.configDir ?? path.posix.join(home, "config"),
|
||||
XDG_DATA_HOME: path.posix.join(home, "data"),
|
||||
XDG_CACHE_HOME: path.posix.join(home, "cache"),
|
||||
|
||||
Reference in new issue
Block a user