From eb7f4e20df365550541358d6274f1499a22d3758 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Fri, 26 Sep 2025 02:34:51 -0400 Subject: [PATCH] core: add config update endpoint and functionality --- packages/opencode/src/config/config.ts | 7 +++++++ packages/opencode/src/server/server.ts | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index a3fd2c3a..84ee9a16 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -686,6 +686,13 @@ export namespace Config { return state().then((x) => x.config) } + export async function update(config: Info) { + const filepath = path.join(Instance.directory, "config.json") + const existing = await loadFile(filepath) + await Bun.write(filepath, JSON.stringify(mergeDeep(existing, config), null, 2)) + await Instance.dispose() + } + export async function directories() { return state().then((x) => x.directories) } diff --git a/packages/opencode/src/server/server.ts b/packages/opencode/src/server/server.ts index c8ef1fe8..544e58b3 100644 --- a/packages/opencode/src/server/server.ts +++ b/packages/opencode/src/server/server.ts @@ -135,6 +135,30 @@ export namespace Server { return c.json(await Config.get()) }, ) + .patch( + "/config", + describeRoute({ + description: "Update config", + operationId: "config.update", + responses: { + 200: { + description: "Successfully updated config", + content: { + "application/json": { + schema: resolver(Config.Info), + }, + }, + }, + ...ERRORS, + }, + }), + validator("json", Config.Info), + async (c) => { + const config = c.req.valid("json") + await Config.update(config) + return c.json(config) + }, + ) .get( "/experimental/tool/ids", describeRoute({