summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-09-26 02:34:51 -0400
committerDax Raad <[email protected]>2025-09-26 02:37:19 -0400
commiteb7f4e20df365550541358d6274f1499a22d3758 (patch)
treedaabac010e55f05b3c5f3647fdb1f3e9a4d3c149
parentea21bfd3c6071597602b3b938f47a4960a0b7217 (diff)
downloadopencode-eb7f4e20df365550541358d6274f1499a22d3758.tar.gz
opencode-eb7f4e20df365550541358d6274f1499a22d3758.zip
core: add config update endpoint and functionality
-rw-r--r--packages/opencode/src/config/config.ts7
-rw-r--r--packages/opencode/src/server/server.ts24
2 files changed, 31 insertions, 0 deletions
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index a3fd2c3a3..84ee9a162 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 c8ef1fe8e..544e58b38 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({