import { LocalContext } from "@/util/local-context" import { FSUtil } from "@opencode-ai/core/fs-util" import type * as Project from "./project" export interface InstanceContext { directory: string worktree: string project: Project.Info } export const context = LocalContext.create("instance") /** * Check if a path is within the project boundary. * Returns true if path is inside ctx.directory OR ctx.worktree. * Paths within the worktree but outside the working directory should not trigger external_directory permission. */ export function containsPath(filepath: string, ctx: InstanceContext): boolean { if (FSUtil.contains(ctx.directory, filepath)) return true // Non-git projects set worktree to "/" which would match ANY absolute path. // Skip worktree check in this case to preserve external_directory permissions. if (ctx.worktree === "/") return false return FSUtil.contains(ctx.worktree, filepath) }