fix(server): emit fixed workspace fence headers (#26443)

This commit is contained in:
Kit Langton
2026-05-08 22:45:54 -04:00
committed by GitHub
parent 9b7b6cb30f
commit 8e9550d90d
3 changed files with 47 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
import { Flag } from "@opencode-ai/core/flag/flag"
import { Effect } from "effect"
import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/unstable/http"
import * as Fence from "@/server/shared/fence"
const ignoredMethods = new Set(["GET", "HEAD", "OPTIONS"])
export const fenceLayer = HttpRouter.middleware<{ handles: unknown }>()((effect) =>
Effect.gen(function* () {
const request = yield* HttpServerRequest.HttpServerRequest
if (!Flag.OPENCODE_WORKSPACE_ID || ignoredMethods.has(request.method)) return yield* effect
const previous = Fence.load()
const response = yield* effect
const current = Fence.diff(previous, Fence.load())
if (Object.keys(current).length === 0) return response
return HttpServerResponse.setHeader(response, Fence.HEADER, JSON.stringify(current))
}),
).layer

View File

@@ -82,6 +82,7 @@ import { disposeMiddleware } from "./lifecycle"
import { memoMap } from "@opencode-ai/core/effect/memo-map"
import * as ServerBackend from "@/server/backend"
import { errorLayer } from "./middleware/error"
import { fenceLayer } from "./middleware/fence"
export const context = Context.makeUnsafe<unknown>(new Map())
@@ -173,6 +174,7 @@ export function createRoutes(corsOptions?: CorsOptions) {
return Layer.mergeAll(rootApiRoutes, eventApiRoutes, instanceRoutes, docRoute, uiRoute).pipe(
Layer.provide([
errorLayer,
fenceLayer,
cors(corsOptions),
runtime,
Account.defaultLayer,