diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index ed1b155003da..39ddde426c07 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -1355,12 +1355,22 @@ export namespace Config { } export async function update(config: Info) { - const filepath = path.join(Instance.directory, "config.json") + const filepath = projectConfigFile() const existing = await loadFile(filepath) await Bun.write(filepath, JSON.stringify(mergeDeep(existing, config), null, 2)) await Instance.dispose() } + function projectConfigFile() { + const candidates = ["opencode.jsonc", "opencode.json"].map((file) => + path.join(Instance.directory, file), + ) + for (const file of candidates) { + if (existsSync(file)) return file + } + return candidates[1] + } + function globalConfigFile() { const candidates = ["opencode.jsonc", "opencode.json", "config.json"].map((file) => path.join(Global.Path.config, file), diff --git a/packages/opencode/test/config/config.test.ts b/packages/opencode/test/config/config.test.ts index dee633110604..7e4687105903 100644 --- a/packages/opencode/test/config/config.test.ts +++ b/packages/opencode/test/config/config.test.ts @@ -549,7 +549,7 @@ test("updates config and writes to file", async () => { const newConfig = { model: "updated/model" } await Config.update(newConfig as any) - const writtenConfig = JSON.parse(await Bun.file(path.join(tmp.path, "config.json")).text()) + const writtenConfig = JSON.parse(await Bun.file(path.join(tmp.path, "opencode.json")).text()) expect(writtenConfig.model).toBe("updated/model") }, })