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.icns",
"!icon.ico" "!icon.ico"
] ]
},
{
"from": "../server/dist/opencode-config",
"to": "opencode-config"
} }
], ],
"mac": { "mac": {

View File

@@ -1,5 +1,4 @@
import { cpSync, existsSync, mkdirSync, rmSync } from "fs" import { existsSync } from "fs"
import os from "os"
import path from "path" import path from "path"
import { fileURLToPath } from "url" import { fileURLToPath } from "url"
import { createLogger } from "./logger" import { createLogger } from "./logger"
@@ -8,11 +7,11 @@ const log = createLogger({ component: "opencode-config" })
const __filename = fileURLToPath(import.meta.url) const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename) const __dirname = path.dirname(__filename)
const devTemplateDir = path.resolve(__dirname, "../../opencode-config") 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 isDevBuild = Boolean(process.env.CODENOMAD_DEV ?? process.env.CLI_UI_DEV_SERVER) || existsSync(devTemplateDir)
const templateDir = isDevBuild ? devTemplateDir : prodTemplateDir const templateDir = isDevBuild ? devTemplateDir : prodTemplateDir
const userConfigDir = path.join(os.homedir(), ".config", "codenomad", "opencode-config")
export function getOpencodeConfigDir(): string { export function getOpencodeConfigDir(): string {
if (!existsSync(templateDir)) { if (!existsSync(templateDir)) {
@@ -21,16 +20,7 @@ export function getOpencodeConfigDir(): string {
if (isDevBuild) { if (isDevBuild) {
log.debug({ templateDir }, "Using Opencode config template directly (dev mode)") log.debug({ templateDir }, "Using Opencode config template directly (dev mode)")
return templateDir
} }
refreshUserConfig() return templateDir
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 })
} }

View File

@@ -10,7 +10,7 @@ import { clearWorkspaceSearchCache } from "../filesystem/search-cache"
import { WorkspaceDescriptor, WorkspaceFileResponse, FileSystemEntry } from "../api-types" import { WorkspaceDescriptor, WorkspaceFileResponse, FileSystemEntry } from "../api-types"
import { WorkspaceRuntime, ProcessExitInfo } from "./runtime" import { WorkspaceRuntime, ProcessExitInfo } from "./runtime"
import { Logger } from "../logger" import { Logger } from "../logger"
import { getOpencodeConfigDir } from "../opencode-config" import { getOpencodeConfigDir } from "../opencode-config.js"
const STARTUP_STABILITY_DELAY_MS = 1500 const STARTUP_STABILITY_DELAY_MS = 1500

View File

@@ -43,8 +43,16 @@ export class WorkspaceRuntime {
let lastOutput = "" let lastOutput = ""
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const commandLine = [options.binaryPath, ...args].join(" ")
this.logger.info( 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", "Launching OpenCode process",
) )
const child = spawn(options.binaryPath, args, { const child = spawn(options.binaryPath, args, {