From 6fea0178eb44ad7d6ccb0eccabb241bb82b36916 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Sat, 9 May 2026 14:50:45 -0400 Subject: [PATCH] fix(server): defer validation error body change --- .../src/server/routes/instance/httpapi/api.ts | 3 --- .../httpapi/middleware/schema-error.ts | 21 ------------------- .../server/routes/instance/httpapi/server.ts | 3 --- .../opencode/test/server/httpapi-sync.test.ts | 2 +- 4 files changed, 1 insertion(+), 28 deletions(-) delete mode 100644 packages/opencode/src/server/routes/instance/httpapi/middleware/schema-error.ts diff --git a/packages/opencode/src/server/routes/instance/httpapi/api.ts b/packages/opencode/src/server/routes/instance/httpapi/api.ts index 4c6e46a455..bdd917e4e8 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/api.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/api.ts @@ -21,7 +21,6 @@ import { TuiApi } from "./groups/tui" import { WorkspaceApi } from "./groups/workspace" import { V2Api } from "./groups/v2" import { Authorization } from "./middleware/authorization" -import { SchemaErrorMiddleware } from "./middleware/schema-error" // SSE event schemas built from the BusEvent/SyncEvent registries. const EventSchema = Schema.Union(BusEvent.effectPayloads()).annotate({ identifier: "Event" }) @@ -30,7 +29,6 @@ const SyncEventSchemas = SyncEvent.effectPayloads() export const RootHttpApi = HttpApi.make("opencode-root") .addHttpApi(ControlApi) .addHttpApi(GlobalApi) - .middleware(SchemaErrorMiddleware) .middleware(Authorization) export const InstanceHttpApi = HttpApi.make("opencode-instance") @@ -49,7 +47,6 @@ export const InstanceHttpApi = HttpApi.make("opencode-instance") .addHttpApi(V2Api) .addHttpApi(TuiApi) .addHttpApi(WorkspaceApi) - .middleware(SchemaErrorMiddleware) export const OpenCodeHttpApi = HttpApi.make("opencode") .addHttpApi(RootHttpApi) diff --git a/packages/opencode/src/server/routes/instance/httpapi/middleware/schema-error.ts b/packages/opencode/src/server/routes/instance/httpapi/middleware/schema-error.ts deleted file mode 100644 index 9eecde3e64..0000000000 --- a/packages/opencode/src/server/routes/instance/httpapi/middleware/schema-error.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Effect } from "effect" -import { HttpServerResponse } from "effect/unstable/http" -import { HttpApiMiddleware } from "effect/unstable/httpapi" - -export class SchemaErrorMiddleware extends HttpApiMiddleware.Service()( - "@opencode/ExperimentalHttpApiSchemaError", -) {} - -export const schemaErrorLayer = HttpApiMiddleware.layerSchemaErrorTransform(SchemaErrorMiddleware, (error) => { - if (error.kind === "Body") return Effect.fail(error) - return Effect.succeed( - HttpServerResponse.jsonUnsafe( - { - data: {}, - errors: [{ kind: error.kind, message: error.cause.message }], - success: false, - }, - { status: 400 }, - ), - ) -}) diff --git a/packages/opencode/src/server/routes/instance/httpapi/server.ts b/packages/opencode/src/server/routes/instance/httpapi/server.ts index a64a9b9083..495497ecb4 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/server.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/server.ts @@ -84,7 +84,6 @@ import { compressionLayer } from "./middleware/compression" import { corsVaryFix } from "./middleware/cors-vary" import { errorLayer } from "./middleware/error" import { fenceLayer } from "./middleware/fence" -import { schemaErrorLayer } from "./middleware/schema-error" export const context = Context.makeUnsafe(new Map()) @@ -115,7 +114,6 @@ const authOnlyRouterLayer = authorizationRouterMiddleware.layer.pipe(Layer.provi const httpApiAuthLayer = authorizationLayer.pipe(Layer.provide(ServerAuth.Config.defaultLayer)) const rootApiRoutes = HttpApiBuilder.layer(RootHttpApi).pipe( Layer.provide([controlHandlers, globalHandlers]), - Layer.provide(schemaErrorLayer), Layer.provide(httpApiAuthLayer), ) const instanceRouterLayer = authorizationRouterMiddleware @@ -144,7 +142,6 @@ const instanceApiRoutes = HttpApiBuilder.layer(InstanceHttpApi).pipe( tuiHandlers, workspaceHandlers, ]), - Layer.provide(schemaErrorLayer), ) const rawInstanceRoutes = Layer.mergeAll(ptyConnectRoute).pipe(Layer.provide(instanceRouterLayer)) diff --git a/packages/opencode/test/server/httpapi-sync.test.ts b/packages/opencode/test/server/httpapi-sync.test.ts index c5ee637842..cd626c28f4 100644 --- a/packages/opencode/test/server/httpapi-sync.test.ts +++ b/packages/opencode/test/server/httpapi-sync.test.ts @@ -122,7 +122,7 @@ describe("sync HttpApi", () => { } }) - test("returns structured validation errors", async () => { + test.todo("returns structured validation errors", async () => { await using tmp = await tmpdir({ git: true, config: { formatter: false, lsp: false } }) const response = await ExperimentalHttpApiServer.webHandler().handler( new Request(`http://localhost${SyncPaths.history}`, {