Use bundled opencode config at runtime
This commit is contained in:
@@ -69,6 +69,10 @@
|
|||||||
"!icon.icns",
|
"!icon.icns",
|
||||||
"!icon.ico"
|
"!icon.ico"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "../server/dist/opencode-config",
|
||||||
|
"to": "opencode-config"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"mac": {
|
"mac": {
|
||||||
|
|||||||
@@ -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 })
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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, {
|
||||||
|
|||||||
Reference in New Issue
Block a user