import { AsyncLocalStorage } from 'async_hooks' import { getCwdState, getOriginalCwd } from '../bootstrap/state.js' const cwdOverrideStorage = new AsyncLocalStorage() /** * Run a function with an overridden working directory for the current async context. * All calls to pwd()/getCwd() within the function (and its async descendants) will * return the overridden cwd instead of the global one. This enables concurrent * agents to each see their own working directory without affecting each other. */ export function runWithCwdOverride(cwd: string, fn: () => T): T { return cwdOverrideStorage.run(cwd, fn) } /** * Get the current working directory */ export function pwd(): string { return cwdOverrideStorage.getStore() ?? getCwdState() } /** * Get the current working directory or the original working directory if the current one is not available */ export function getCwd(): string { try { return pwd() } catch { return getOriginalCwd() } }