Use bundled opencode config at runtime

This commit is contained in:
Shantur Rathore
2025-12-24 12:01:03 +00:00
parent e947691aae
commit d0eac1e610
4 changed files with 18 additions and 16 deletions

View File

@@ -69,6 +69,10 @@
"!icon.icns",
"!icon.ico"
]
},
{
"from": "../server/dist/opencode-config",
"to": "opencode-config"
}
],
"mac": {

View File

@@ -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
}

View File

@@ -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

View File

@@ -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, {