summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorJames Long <[email protected]>2026-04-17 15:20:11 -0400
committerGitHub <[email protected]>2026-04-17 15:20:11 -0400
commit5621373bc2d5ca106e9fbb2d2fbc3bc547dd744c (patch)
tree9b9570a6db9dccfab51e2cc67e2955ca5be0a695 /packages
parent88582566bf2bfd2d26000f0c25735bf48ddeca00 (diff)
downloadopencode-5621373bc2d5ca106e9fbb2d2fbc3bc547dd744c.tar.gz
opencode-5621373bc2d5ca106e9fbb2d2fbc3bc547dd744c.zip
fix(core): move instance middleware after control plane routes (#23150)
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/server/routes/instance/index.ts6
-rw-r--r--packages/opencode/src/server/routes/instance/middleware.ts35
-rw-r--r--packages/opencode/src/server/server.ts44
3 files changed, 46 insertions, 39 deletions
diff --git a/packages/opencode/src/server/routes/instance/index.ts b/packages/opencode/src/server/routes/instance/index.ts
index 017541b8f..c0339fded 100644
--- a/packages/opencode/src/server/routes/instance/index.ts
+++ b/packages/opencode/src/server/routes/instance/index.ts
@@ -15,6 +15,7 @@ import { Command } from "@/command"
import { QuestionRoutes } from "./question"
import { PermissionRoutes } from "./permission"
import { Flag } from "@/flag/flag"
+import { WorkspaceID } from "@/control-plane/schema"
import { ExperimentalHttpApiServer } from "./httpapi/server"
import { ProjectRoutes } from "./project"
import { SessionRoutes } from "./session"
@@ -27,9 +28,10 @@ import { ProviderRoutes } from "./provider"
import { EventRoutes } from "./event"
import { SyncRoutes } from "./sync"
import { AppRuntime } from "@/effect/app-runtime"
+import { InstanceMiddleware } from "./middleware"
-export const InstanceRoutes = (upgrade: UpgradeWebSocket): Hono => {
- const app = new Hono()
+export const InstanceRoutes = (upgrade: UpgradeWebSocket, workspaceID?: WorkspaceID): Hono => {
+ const app = new Hono().use(InstanceMiddleware(workspaceID))
if (Flag.OPENCODE_EXPERIMENTAL_HTTPAPI) {
const handler = ExperimentalHttpApiServer.webHandler().handler
diff --git a/packages/opencode/src/server/routes/instance/middleware.ts b/packages/opencode/src/server/routes/instance/middleware.ts
new file mode 100644
index 000000000..b963268d6
--- /dev/null
+++ b/packages/opencode/src/server/routes/instance/middleware.ts
@@ -0,0 +1,35 @@
+import type { MiddlewareHandler } from "hono"
+import { Instance } from "@/project/instance"
+import { InstanceBootstrap } from "@/project/bootstrap"
+import { AppRuntime } from "@/effect/app-runtime"
+import { AppFileSystem } from "@opencode-ai/shared/filesystem"
+import { WorkspaceContext } from "@/control-plane/workspace-context"
+import { WorkspaceID } from "@/control-plane/schema"
+
+export function InstanceMiddleware(workspaceID?: WorkspaceID): MiddlewareHandler {
+ return async (c, next) => {
+ const raw = c.req.query("directory") || c.req.header("x-opencode-directory") || process.cwd()
+ const directory = AppFileSystem.resolve(
+ (() => {
+ try {
+ return decodeURIComponent(raw)
+ } catch {
+ return raw
+ }
+ })(),
+ )
+
+ return WorkspaceContext.provide({
+ workspaceID,
+ async fn() {
+ return Instance.provide({
+ directory,
+ init: () => AppRuntime.runPromise(InstanceBootstrap),
+ async fn() {
+ return next()
+ },
+ })
+ },
+ })
+ }
+}
diff --git a/packages/opencode/src/server/server.ts b/packages/opencode/src/server/server.ts
index 2201c75b4..f608c2b73 100644
--- a/packages/opencode/src/server/server.ts
+++ b/packages/opencode/src/server/server.ts
@@ -1,16 +1,10 @@
import { generateSpecs } from "hono-openapi"
import { Hono } from "hono"
-import type { MiddlewareHandler } from "hono"
import { adapter } from "#hono"
import { lazy } from "@/util/lazy"
import { Log } from "@/util"
import { Flag } from "@/flag/flag"
-import { Instance } from "@/project/instance"
-import { InstanceBootstrap } from "@/project/bootstrap"
-import { AppRuntime } from "@/effect/app-runtime"
-import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { WorkspaceID } from "@/control-plane/schema"
-import { WorkspaceContext } from "@/control-plane/workspace-context"
import { MDNS } from "./mdns"
import { AuthMiddleware, CompressionMiddleware, CorsMiddleware, ErrorMiddleware, LoggerMiddleware } from "./middleware"
import { FenceMiddleware } from "./fence"
@@ -48,47 +42,23 @@ function create(opts: { cors?: string[] }) {
const runtime = adapter.create(app)
- function InstanceMiddleware(workspaceID?: WorkspaceID): MiddlewareHandler {
- return async (c, next) => {
- const raw = c.req.query("directory") || c.req.header("x-opencode-directory") || process.cwd()
- const directory = AppFileSystem.resolve(
- (() => {
- try {
- return decodeURIComponent(raw)
- } catch {
- return raw
- }
- })(),
- )
-
- return WorkspaceContext.provide({
- workspaceID,
- async fn() {
- return Instance.provide({
- directory,
- init: () => AppRuntime.runPromise(InstanceBootstrap),
- async fn() {
- return next()
- },
- })
- },
- })
- }
- }
-
if (Flag.OPENCODE_WORKSPACE_ID) {
return {
app: app
- .use(InstanceMiddleware(Flag.OPENCODE_WORKSPACE_ID ? WorkspaceID.make(Flag.OPENCODE_WORKSPACE_ID) : undefined))
.use(FenceMiddleware)
- .route("/", InstanceRoutes(runtime.upgradeWebSocket)),
+ .route(
+ "/",
+ InstanceRoutes(
+ runtime.upgradeWebSocket,
+ Flag.OPENCODE_WORKSPACE_ID ? WorkspaceID.make(Flag.OPENCODE_WORKSPACE_ID) : undefined,
+ ),
+ ),
runtime,
}
}
return {
app: app
- .use(InstanceMiddleware())
.route("/", ControlPlaneRoutes())
.use(WorkspaceRouterMiddleware(runtime.upgradeWebSocket))
.route("/", InstanceRoutes(runtime.upgradeWebSocket))