πŸ“„ File detail

utils/cwd.ts

🧩 .tsπŸ“ 33 linesπŸ’Ύ 985 bytesπŸ“ text
← Back to All Files

🎯 Use case

This file lives under β€œutils/”, which covers cross-cutting helpers (shell, tempfiles, settings, messages, process input, …). On the API surface it exposes runWithCwdOverride, pwd, and getCwd β€” mainly functions, hooks, or classes. Dependencies touch async_hooks. It composes internal code from bootstrap (relative imports).

Generated from folder role, exports, dependency roots, and inline comments β€” not hand-reviewed for every path.

🧠 Inline summary

import { AsyncLocalStorage } from 'async_hooks' import { getCwdState, getOriginalCwd } from '../bootstrap/state.js' const cwdOverrideStorage = new AsyncLocalStorage<string>()

πŸ“€ Exports (heuristic)

  • runWithCwdOverride
  • pwd
  • getCwd

πŸ“š External import roots

Package roots from from "…" (relative paths omitted).

  • async_hooks

πŸ–₯️ Source preview

import { AsyncLocalStorage } from 'async_hooks'
import { getCwdState, getOriginalCwd } from '../bootstrap/state.js'

const cwdOverrideStorage = new AsyncLocalStorage<string>()

/**
 * 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<T>(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()
  }
}