summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-09-02 15:15:34 -0400
committerDax Raad <[email protected]>2025-09-02 16:38:50 -0400
commit8952b3d246a6282e7f2059312d52a69f16432259 (patch)
tree80f8325897029e1828521d85a223de6b69f77438
parentd6350a7fa61702ac2aa74357e901d59f2c4ee1c7 (diff)
downloadopencode-8952b3d246a6282e7f2059312d52a69f16432259.tar.gz
opencode-8952b3d246a6282e7f2059312d52a69f16432259.zip
support OPENCODE_CONFIG_CONTENT
-rw-r--r--packages/opencode/src/config/config.ts5
-rw-r--r--packages/opencode/src/flag/flag.ts1
-rw-r--r--packages/sdk/js/src/server.ts26
3 files changed, 22 insertions, 10 deletions
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index fbb99512f..9bc9882f0 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -34,6 +34,11 @@ export namespace Config {
log.debug("loaded custom config", { path: Flag.OPENCODE_CONFIG })
}
+ if (Flag.OPENCODE_CONFIG_CONTENT) {
+ result = mergeDeep(result, JSON.parse(Flag.OPENCODE_CONFIG_CONTENT))
+ log.debug("loaded custom config from OPENCODE_CONFIG_CONTENT")
+ }
+
for (const [key, value] of Object.entries(auth)) {
if (value.type === "wellknown") {
process.env[value.key] = value.token
diff --git a/packages/opencode/src/flag/flag.ts b/packages/opencode/src/flag/flag.ts
index 1bc06cd96..a9d366e8a 100644
--- a/packages/opencode/src/flag/flag.ts
+++ b/packages/opencode/src/flag/flag.ts
@@ -2,6 +2,7 @@ export namespace Flag {
export const OPENCODE_AUTO_SHARE = truthy("OPENCODE_AUTO_SHARE")
export const OPENCODE_DISABLE_WATCHER = truthy("OPENCODE_DISABLE_WATCHER")
export const OPENCODE_CONFIG = process.env["OPENCODE_CONFIG"]
+ export const OPENCODE_CONFIG_CONTENT = process.env["OPENCODE_CONFIG_CONTENT"]
export const OPENCODE_DISABLE_AUTOUPDATE = truthy("OPENCODE_DISABLE_AUTOUPDATE")
export const OPENCODE_PERMISSION = process.env["OPENCODE_PERMISSION"]
export const OPENCODE_DISABLE_DEFAULT_PLUGINS = truthy("OPENCODE_DISABLE_DEFAULT_PLUGINS")
diff --git a/packages/sdk/js/src/server.ts b/packages/sdk/js/src/server.ts
index 20217b371..5c8caa43f 100644
--- a/packages/sdk/js/src/server.ts
+++ b/packages/sdk/js/src/server.ts
@@ -1,30 +1,36 @@
import { spawn } from "node:child_process"
+import { Config } from "./gen/types.gen.js"
-export type ServerConfig = {
+export type ServerOptions = {
hostname?: string
port?: number
signal?: AbortSignal
timeout?: number
+ config?: Config
}
-export async function createOpencodeServer(config?: ServerConfig) {
- config = Object.assign(
+export async function createOpencodeServer(options?: ServerOptions) {
+ options = Object.assign(
{
hostname: "127.0.0.1",
port: 4096,
timeout: 5000,
},
- config ?? {},
+ options ?? {},
)
- const proc = spawn(`opencode`, [`serve`, `--hostname=${config.hostname}`, `--port=${config.port}`], {
- signal: config.signal,
+ const proc = spawn(`opencode`, [`serve`, `--hostname=${options.hostname}`, `--port=${options.port}`], {
+ signal: options.signal,
+ env: {
+ ...process.env,
+ OPENCODE_CONFIG_CONTENT: JSON.stringify(options.config ?? {}),
+ },
})
const url = await new Promise<string>((resolve, reject) => {
const id = setTimeout(() => {
- reject(new Error(`Timeout waiting for server to start after ${config.timeout}ms`))
- }, config.timeout)
+ reject(new Error(`Timeout waiting for server to start after ${options.timeout}ms`))
+ }, options.timeout)
let output = ""
proc.stdout?.on("data", (chunk) => {
output += chunk.toString()
@@ -56,8 +62,8 @@ export async function createOpencodeServer(config?: ServerConfig) {
clearTimeout(id)
reject(error)
})
- if (config.signal) {
- config.signal.addEventListener("abort", () => {
+ if (options.signal) {
+ options.signal.addEventListener("abort", () => {
clearTimeout(id)
reject(new Error("Aborted"))
})