summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAiden Cline <[email protected]>2026-01-01 13:00:39 -0600
committerAiden Cline <[email protected]>2026-01-01 13:00:39 -0600
commite50365425246ea94cebfaefaf2d65c49ddb2b9ff (patch)
tree8cb5fe9d4212f32247e81c314102ecc8b5e8bddd
parent8ebc601ea28794da4367e3bf4373bf5c4c7f168e (diff)
downloadopencode-e50365425246ea94cebfaefaf2d65c49ddb2b9ff.tar.gz
opencode-e50365425246ea94cebfaefaf2d65c49ddb2b9ff.zip
core: make installdeps non blocking
-rw-r--r--packages/opencode/src/cli/cmd/acp.ts7
-rw-r--r--packages/opencode/src/config/config.ts4
-rw-r--r--packages/opencode/src/index.ts10
3 files changed, 5 insertions, 16 deletions
diff --git a/packages/opencode/src/cli/cmd/acp.ts b/packages/opencode/src/cli/cmd/acp.ts
index 060d0d5a1..30e919d99 100644
--- a/packages/opencode/src/cli/cmd/acp.ts
+++ b/packages/opencode/src/cli/cmd/acp.ts
@@ -9,13 +9,6 @@ import { withNetworkOptions, resolveNetworkOptions } from "../network"
const log = Log.create({ service: "acp-command" })
-process.on("unhandledRejection", (reason, promise) => {
- log.error("Unhandled rejection", {
- promise,
- reason,
- })
-})
-
export const AcpCommand = cmd({
command: "acp",
describe: "start ACP (Agent Client Protocol) server",
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index 34bb6654e..f66b46790 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -90,7 +90,6 @@ export namespace Config {
log.debug("loading config from OPENCODE_CONFIG_DIR", { path: Flag.OPENCODE_CONFIG_DIR })
}
- const promises: Promise<void>[] = []
for (const dir of unique(directories)) {
if (dir.endsWith(".opencode") || dir === Flag.OPENCODE_CONFIG_DIR) {
for (const file of ["opencode.jsonc", "opencode.json"]) {
@@ -103,13 +102,12 @@ export namespace Config {
}
}
- promises.push(installDependencies(dir))
+ installDependencies(dir)
result.command = mergeDeep(result.command ?? {}, await loadCommand(dir))
result.agent = mergeDeep(result.agent, await loadAgent(dir))
result.agent = mergeDeep(result.agent, await loadMode(dir))
result.plugin.push(...(await loadPlugin(dir)))
}
- await Promise.allSettled(promises)
// Migrate deprecated mode field to agent field
for (const [name, mode] of Object.entries(result.mode)) {
diff --git a/packages/opencode/src/index.ts b/packages/opencode/src/index.ts
index 03ccf7604..0ccc4e94a 100644
--- a/packages/opencode/src/index.ts
+++ b/packages/opencode/src/index.ts
@@ -28,6 +28,8 @@ import { WebCommand } from "./cli/cmd/web"
import { PrCommand } from "./cli/cmd/pr"
import { SessionCommand } from "./cli/cmd/session"
+const cancel = new AbortController()
+
process.on("unhandledRejection", (e) => {
Log.Default.error("rejection", {
e: e instanceof Error ? e.message : e,
@@ -150,10 +152,6 @@ try {
console.error(e)
}
process.exitCode = 1
-} finally {
- // Some subprocesses don't react properly to SIGTERM and similar signals.
- // Most notably, some docker-container-based MCP servers don't handle such signals unless
- // run using `docker run --init`.
- // Explicitly exit to avoid any hanging subprocesses.
- process.exit()
}
+
+cancel.abort()