From d0eac1e61084519ed325dc9c5bc907c1f25eefee Mon Sep 17 00:00:00 2001 From: Shantur Rathore Date: Wed, 24 Dec 2025 12:01:03 +0000 Subject: [PATCH] Use bundled opencode config at runtime --- packages/electron-app/package.json | 4 ++++ packages/server/src/opencode-config.ts | 18 ++++-------------- packages/server/src/workspaces/manager.ts | 2 +- packages/server/src/workspaces/runtime.ts | 10 +++++++++- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/packages/electron-app/package.json b/packages/electron-app/package.json index 0a72cf76..de93440f 100644 --- a/packages/electron-app/package.json +++ b/packages/electron-app/package.json @@ -69,6 +69,10 @@ "!icon.icns", "!icon.ico" ] + }, + { + "from": "../server/dist/opencode-config", + "to": "opencode-config" } ], "mac": { diff --git a/packages/server/src/opencode-config.ts b/packages/server/src/opencode-config.ts index 8b90651b..5129b70c 100644 --- a/packages/server/src/opencode-config.ts +++ b/packages/server/src/opencode-config.ts @@ -1,5 +1,4 @@ -import { cpSync, existsSync, mkdirSync, rmSync } from "fs" -import os from "os" +import { existsSync } from "fs" import path from "path" import { fileURLToPath } from "url" import { createLogger } from "./logger" @@ -8,11 +7,11 @@ const log = createLogger({ component: "opencode-config" }) const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) const devTemplateDir = path.resolve(__dirname, "../../opencode-config") -const prodTemplateDir = path.resolve(__dirname, "opencode-config") +const resourcesPath = (process as NodeJS.Process & { resourcesPath?: string }).resourcesPath +const prodTemplateDir = resourcesPath ? path.resolve(resourcesPath, "opencode-config") : path.resolve(__dirname, "opencode-config") const isDevBuild = Boolean(process.env.CODENOMAD_DEV ?? process.env.CLI_UI_DEV_SERVER) || existsSync(devTemplateDir) const templateDir = isDevBuild ? devTemplateDir : prodTemplateDir -const userConfigDir = path.join(os.homedir(), ".config", "codenomad", "opencode-config") export function getOpencodeConfigDir(): string { if (!existsSync(templateDir)) { @@ -21,16 +20,7 @@ export function getOpencodeConfigDir(): string { if (isDevBuild) { log.debug({ templateDir }, "Using Opencode config template directly (dev mode)") - return templateDir } - refreshUserConfig() - return userConfigDir -} - -function refreshUserConfig() { - log.debug({ templateDir, userConfigDir }, "Syncing Opencode config template") - rmSync(userConfigDir, { recursive: true, force: true }) - mkdirSync(path.dirname(userConfigDir), { recursive: true }) - cpSync(templateDir, userConfigDir, { recursive: true }) + return templateDir } diff --git a/packages/server/src/workspaces/manager.ts b/packages/server/src/workspaces/manager.ts index 4d93f73a..d2757bfa 100644 --- a/packages/server/src/workspaces/manager.ts +++ b/packages/server/src/workspaces/manager.ts @@ -10,7 +10,7 @@ import { clearWorkspaceSearchCache } from "../filesystem/search-cache" import { WorkspaceDescriptor, WorkspaceFileResponse, FileSystemEntry } from "../api-types" import { WorkspaceRuntime, ProcessExitInfo } from "./runtime" import { Logger } from "../logger" -import { getOpencodeConfigDir } from "../opencode-config" +import { getOpencodeConfigDir } from "../opencode-config.js" const STARTUP_STABILITY_DELAY_MS = 1500 diff --git a/packages/server/src/workspaces/runtime.ts b/packages/server/src/workspaces/runtime.ts index 7c1c5f12..6202bcfa 100644 --- a/packages/server/src/workspaces/runtime.ts +++ b/packages/server/src/workspaces/runtime.ts @@ -43,8 +43,16 @@ export class WorkspaceRuntime { let lastOutput = "" return new Promise((resolve, reject) => { + const commandLine = [options.binaryPath, ...args].join(" ") this.logger.info( - { workspaceId: options.workspaceId, folder: options.folder, binary: options.binaryPath }, + { + workspaceId: options.workspaceId, + folder: options.folder, + binary: options.binaryPath, + args, + commandLine, + env, + }, "Launching OpenCode process", ) const child = spawn(options.binaryPath, args, {