Skip to content

Commit 6594642

Browse files
authored
fix(httpapi): mount workspace bridge routes (anomalyco#24626)
1 parent 79d8627 commit 6594642

4 files changed

Lines changed: 18 additions & 14 deletions

File tree

packages/opencode/src/server/routes/instance/httpapi/config.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,9 @@ export const configHandlers = Layer.unwrap(
6767
})
6868

6969
const update = Effect.fn("ConfigHttpApi.update")(function* (ctx) {
70-
const payload = Config.Info.zod.parse(ctx.payload)
71-
yield* configSvc.update(payload, { dispose: false })
70+
yield* configSvc.update(ctx.payload, { dispose: false })
7271
yield* markInstanceForDisposal(yield* InstanceState.context)
73-
return payload
72+
return ctx.payload
7473
})
7574

7675
const providers = Effect.fn("ConfigHttpApi.providers")(function* () {

packages/opencode/src/server/routes/instance/httpapi/project.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export const projectHandlers = Layer.unwrap(
9999
params: { projectID: ProjectID }
100100
payload: Project.UpdatePayload
101101
}) {
102-
return yield* svc.update({ ...Project.UpdatePayload.zod.parse(ctx.payload), projectID: ctx.params.projectID })
102+
return yield* svc.update({ ...ctx.payload, projectID: ctx.params.projectID })
103103
})
104104

105105
return HttpApiBuilder.group(ProjectApi, "project", (handlers) =>

packages/opencode/src/server/routes/instance/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { McpPaths } from "./httpapi/mcp"
2525
import { SessionPaths } from "./httpapi/session"
2626
import { SyncPaths } from "./httpapi/sync"
2727
import { TuiPaths } from "./httpapi/tui"
28+
import { WorkspacePaths } from "./httpapi/workspace"
2829
import { ProjectRoutes } from "./project"
2930
import { SessionRoutes } from "./session"
3031
import { PtyRoutes } from "./pty"
@@ -144,6 +145,12 @@ export const InstanceRoutes = (upgrade: UpgradeWebSocket): Hono => {
144145
app.post(TuiPaths.selectSession, (c) => handler(c.req.raw, context))
145146
app.get(TuiPaths.controlNext, (c) => handler(c.req.raw, context))
146147
app.post(TuiPaths.controlResponse, (c) => handler(c.req.raw, context))
148+
app.get(WorkspacePaths.adaptors, (c) => handler(c.req.raw, context))
149+
app.post(WorkspacePaths.list, (c) => handler(c.req.raw, context))
150+
app.get(WorkspacePaths.list, (c) => handler(c.req.raw, context))
151+
app.get(WorkspacePaths.status, (c) => handler(c.req.raw, context))
152+
app.delete(WorkspacePaths.remove, (c) => handler(c.req.raw, context))
153+
app.post(WorkspacePaths.sessionRestore, (c) => handler(c.req.raw, context))
147154
}
148155

149156
return app

packages/opencode/test/server/httpapi-workspace.test.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import { afterEach, describe, expect, test } from "bun:test"
22
import { mkdir } from "node:fs/promises"
33
import path from "node:path"
4-
import { Context, Effect } from "effect"
4+
import { Effect } from "effect"
5+
import type { UpgradeWebSocket } from "hono/ws"
56
import { Flag } from "@opencode-ai/core/flag/flag"
67
import { registerAdaptor } from "../../src/control-plane/adaptors"
78
import type { WorkspaceAdaptor } from "../../src/control-plane/types"
89
import { Workspace } from "../../src/control-plane/workspace"
9-
import { ExperimentalHttpApiServer } from "../../src/server/routes/instance/httpapi/server"
1010
import { WorkspacePaths } from "../../src/server/routes/instance/httpapi/workspace"
11+
import { InstanceRoutes } from "../../src/server/routes/instance"
1112
import { Session } from "../../src/session"
1213
import { Log } from "../../src/util"
1314
import { resetDatabase } from "../fixture/db"
@@ -16,19 +17,15 @@ import { Instance } from "../../src/project/instance"
1617

1718
void Log.init({ print: false })
1819

19-
const context = Context.empty() as Context.Context<unknown>
2020
const originalWorkspaces = Flag.OPENCODE_EXPERIMENTAL_WORKSPACES
21+
const originalHttpApi = Flag.OPENCODE_EXPERIMENTAL_HTTPAPI
22+
const websocket = (() => () => new Response(null, { status: 501 })) as unknown as UpgradeWebSocket
2123

2224
function request(path: string, directory: string, init: RequestInit = {}) {
25+
Flag.OPENCODE_EXPERIMENTAL_HTTPAPI = true
2326
const headers = new Headers(init.headers)
2427
headers.set("x-opencode-directory", directory)
25-
return ExperimentalHttpApiServer.webHandler().handler(
26-
new Request(`http://localhost${path}`, {
27-
...init,
28-
headers,
29-
}),
30-
context,
31-
)
28+
return InstanceRoutes(websocket).request(path, { ...init, headers })
3229
}
3330

3431
function runSession<A, E>(fx: Effect.Effect<A, E, Session.Service>) {
@@ -61,6 +58,7 @@ function localAdaptor(directory: string): WorkspaceAdaptor {
6158

6259
afterEach(async () => {
6360
Flag.OPENCODE_EXPERIMENTAL_WORKSPACES = originalWorkspaces
61+
Flag.OPENCODE_EXPERIMENTAL_HTTPAPI = originalHttpApi
6462
await Instance.disposeAll()
6563
await resetDatabase()
6664
})

0 commit comments

Comments
 (0)