(sharedDataDir?: string)
| 79 | export type PiSpawnOptions = PiRunnerOptions; |
| 80 | |
| 81 | export function createPiIsolatedEnv(sharedDataDir?: string): PiIsolatedEnv { |
| 82 | const unique = `pi-e2e-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`; |
| 83 | const baseDirRaw = join(tmpdir(), unique); |
| 84 | mkdirSync(baseDirRaw, { recursive: true }); |
| 85 | const baseDir = realpathSync(baseDirRaw); |
| 86 | const configDir = join(baseDir, "config"); |
| 87 | const dataDir = sharedDataDir ? realpathSync(sharedDataDir) : join(baseDir, "data"); |
| 88 | const cacheDir = join(baseDir, "cache"); |
| 89 | const workdir = join(baseDir, "work"); |
| 90 | const agentDir = join(baseDir, ".pi", "agent"); |
| 91 | const pluginDir = join(agentDir, "extensions", "pi-magic-context"); |
| 92 | for (const d of [configDir, dataDir, cacheDir, workdir, agentDir, join(agentDir, "extensions")]) { |
| 93 | mkdirSync(d, { recursive: true }); |
| 94 | } |
| 95 | |
| 96 | // Use real paths consistently to avoid /var vs /private/var identity drift on macOS. |
| 97 | return { |
| 98 | baseDir: realpathSync(baseDir), |
| 99 | configDir: realpathSync(configDir), |
| 100 | dataDir: realpathSync(dataDir), |
| 101 | cacheDir: realpathSync(cacheDir), |
| 102 | workdir: realpathSync(workdir), |
| 103 | agentDir: realpathSync(agentDir), |
| 104 | pluginDir, |
| 105 | }; |
| 106 | } |
| 107 | |
| 108 | export function ensurePluginAvailable(env: PiIsolatedEnv): void { |
| 109 | const distEntry = join(PI_PLUGIN_ROOT, "dist", "index.js"); |
no outgoing calls
no test coverage detected