cloudaxe-opencode/packages/opencode/src/config/paths.ts
Dax Raad effa6405e8 fix(config): load configs across git boundaries
Search every ancestor from the filesystem root so shared parent config applies to child repositories while nearer config retains precedence.

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-07-12 21:37:32 +00:00

39 lines
1.2 KiB
TypeScript

export * as ConfigPaths from "./paths"
import path from "path"
import { Flag } from "@opencode-ai/core/flag/flag"
import { Global } from "@opencode-ai/core/global"
import { unique } from "remeda"
import * as Effect from "effect/Effect"
import { FSUtil } from "@opencode-ai/core/fs-util"
export const files = Effect.fn("ConfigPaths.projectFiles")(function* (name: string, directory: string) {
const afs = yield* FSUtil.Service
return (yield* afs.up({
targets: [`${name}.jsonc`, `${name}.json`],
start: directory,
})).toReversed()
})
export const directories = Effect.fn("ConfigPaths.directories")(function* (directory: string) {
const afs = yield* FSUtil.Service
return unique([
Global.Path.config,
...(!Flag.OPENCODE_DISABLE_PROJECT_CONFIG
? (yield* afs.up({
targets: [".opencode"],
start: directory,
})).toReversed()
: []),
...(yield* afs.up({
targets: [".opencode"],
start: Global.Path.home,
stop: Global.Path.home,
})),
...(Flag.OPENCODE_CONFIG_DIR ? [Flag.OPENCODE_CONFIG_DIR] : []),
])
})
export function fileInDirectory(dir: string, name: string) {
return [path.join(dir, `${name}.json`), path.join(dir, `${name}.jsonc`)]
}