From 2697cb8001cdcf0a6df888e4478c519244a32585 Mon Sep 17 00:00:00 2001 From: Shoubhit Dash Date: Thu, 21 May 2026 15:57:25 +0530 Subject: [PATCH] fix(httpapi): remove config error middleware special case (#28631) --- .../server/routes/instance/httpapi/middleware/error.ts | 8 -------- .../test/server/httpapi-error-middleware.test.ts | 10 +++++++--- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/opencode/src/server/routes/instance/httpapi/middleware/error.ts b/packages/opencode/src/server/routes/instance/httpapi/middleware/error.ts index bf4dacd67e..553e4de968 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/middleware/error.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/middleware/error.ts @@ -1,6 +1,5 @@ import { NamedError } from "@opencode-ai/core/util/error" import * as Log from "@opencode-ai/core/util/log" -import { ConfigError } from "@/config/error" import { Cause, Effect } from "effect" import { HttpRouter, HttpServerError, HttpServerRespondable, HttpServerResponse } from "effect/unstable/http" @@ -19,13 +18,6 @@ export const errorLayer = HttpRouter.middleware<{ handles: unknown }>()((effect) if (!defect) return Effect.failCause(cause) const error = defect.defect - if ( - error instanceof NamedError && - (ConfigError.InvalidError.isInstance(error) || ConfigError.JsonError.isInstance(error)) - ) { - return Effect.succeed(HttpServerResponse.jsonUnsafe(error.toObject(), { status: 400 })) - } - const ref = `err_${crypto.randomUUID().slice(0, 8)}` log.error("failed", { ref, error, cause: Cause.pretty(cause) }) diff --git a/packages/opencode/test/server/httpapi-error-middleware.test.ts b/packages/opencode/test/server/httpapi-error-middleware.test.ts index bd8e3d2deb..84ce7c8f8a 100644 --- a/packages/opencode/test/server/httpapi-error-middleware.test.ts +++ b/packages/opencode/test/server/httpapi-error-middleware.test.ts @@ -53,7 +53,7 @@ describe("HttpApi error middleware", () => { }), ) - it.live("preserves config defects as client-visible bad requests", () => + it.live("does not expose config defects from generic middleware", () => Effect.gen(function* () { const configError = new ConfigError.InvalidError({ path: "/tmp/opencode.json", @@ -68,9 +68,13 @@ describe("HttpApi error middleware", () => { const response = yield* HttpClientRequest.get("/config-error").pipe(HttpClient.execute) const body = yield* response.json + const serialized = JSON.stringify(body) - expect(response.status).toBe(400) - expect(JSON.stringify(body)).toBe(JSON.stringify(configError.toObject())) + expect(response.status).toBe(500) + expectUnknownErrorBody(body) + expect(serialized).not.toContain("/tmp/opencode.json") + expect(serialized).not.toContain("provider") + expect(serialized).not.toContain("anthropic") }), )