diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index c464fcb64ab8..2fc6f5075b7d 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -1347,12 +1347,20 @@ 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 Filesystem.writeJson(filepath, mergeDeep(existing, config)) 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 eb9c763fa757..9cce5348341d 100644 --- a/packages/opencode/test/config/config.test.ts +++ b/packages/opencode/test/config/config.test.ts @@ -685,7 +685,7 @@ test("updates config and writes to file", async () => { const newConfig = { model: "updated/model" } await Config.update(newConfig as any) - const writtenConfig = await Filesystem.readJson(path.join(tmp.path, "config.json")) + const writtenConfig = await Filesystem.readJson(path.join(tmp.path, "opencode.json")) expect(writtenConfig.model).toBe("updated/model") }, })