Skip to content

Commit a822e99

Browse files
committed
refactor(httpapi): simplify route layer composition
1 parent d4d8ea6 commit a822e99

1 file changed

Lines changed: 70 additions & 56 deletions

File tree

  • packages/opencode/src/server/routes/instance/httpapi

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

Lines changed: 70 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -112,73 +112,87 @@ const runtime = HttpRouter.middleware()(
112112
Effect.succeed((effect) =>
113113
Effect.gen(function* () {
114114
const selected = ServerBackend.select()
115-
yield* Effect.annotateCurrentSpan(
116-
ServerBackend.attributes(ServerBackend.force(selected, "effect-httpapi")),
117-
)
115+
yield* Effect.annotateCurrentSpan(ServerBackend.attributes(ServerBackend.force(selected, "effect-httpapi")))
118116
return yield* effect
119117
}),
120118
),
121119
).layer
122120

123-
const controlRoutes = HttpApiBuilder.layer(ControlApi).pipe(Layer.provide(controlHandlers))
124-
const globalRoutes = HttpApiBuilder.layer(GlobalApi).pipe(Layer.provide(globalHandlers))
121+
const rootApiRoutes = Layer.mergeAll(HttpApiBuilder.layer(ControlApi), HttpApiBuilder.layer(GlobalApi)).pipe(
122+
Layer.provide([controlHandlers, globalHandlers]),
123+
)
125124
const instanceApiRoutes = Layer.mergeAll(
126-
HttpApiBuilder.layer(ConfigApi).pipe(Layer.provide(configHandlers)),
127-
HttpApiBuilder.layer(ExperimentalApi).pipe(Layer.provide(experimentalHandlers)),
128-
HttpApiBuilder.layer(FileApi).pipe(Layer.provide(fileHandlers)),
129-
HttpApiBuilder.layer(InstanceApi).pipe(Layer.provide(instanceHandlers)),
130-
HttpApiBuilder.layer(McpApi).pipe(Layer.provide(mcpHandlers)),
131-
HttpApiBuilder.layer(ProjectApi).pipe(Layer.provide(projectHandlers)),
132-
HttpApiBuilder.layer(PtyApi).pipe(Layer.provide(ptyHandlers)),
133-
HttpApiBuilder.layer(QuestionApi).pipe(Layer.provide(questionHandlers)),
134-
HttpApiBuilder.layer(PermissionApi).pipe(Layer.provide(permissionHandlers)),
135-
HttpApiBuilder.layer(ProviderApi).pipe(Layer.provide(providerHandlers)),
136-
HttpApiBuilder.layer(SessionApi).pipe(Layer.provide(sessionHandlers)),
137-
HttpApiBuilder.layer(SyncApi).pipe(Layer.provide(syncHandlers)),
138-
HttpApiBuilder.layer(TuiApi).pipe(Layer.provide(tuiHandlers)),
139-
HttpApiBuilder.layer(WorkspaceApi).pipe(Layer.provide(workspaceHandlers)),
125+
HttpApiBuilder.layer(ConfigApi),
126+
HttpApiBuilder.layer(ExperimentalApi),
127+
HttpApiBuilder.layer(FileApi),
128+
HttpApiBuilder.layer(InstanceApi),
129+
HttpApiBuilder.layer(McpApi),
130+
HttpApiBuilder.layer(ProjectApi),
131+
HttpApiBuilder.layer(PtyApi),
132+
HttpApiBuilder.layer(QuestionApi),
133+
HttpApiBuilder.layer(PermissionApi),
134+
HttpApiBuilder.layer(ProviderApi),
135+
HttpApiBuilder.layer(SessionApi),
136+
HttpApiBuilder.layer(SyncApi),
137+
HttpApiBuilder.layer(TuiApi),
138+
HttpApiBuilder.layer(WorkspaceApi),
139+
).pipe(
140+
Layer.provide([
141+
configHandlers,
142+
experimentalHandlers,
143+
fileHandlers,
144+
instanceHandlers,
145+
mcpHandlers,
146+
projectHandlers,
147+
ptyHandlers,
148+
questionHandlers,
149+
permissionHandlers,
150+
providerHandlers,
151+
sessionHandlers,
152+
syncHandlers,
153+
tuiHandlers,
154+
workspaceHandlers,
155+
]),
140156
)
141157

142158
const instanceRoutes = Layer.mergeAll(eventRoute, ptyConnectRoute, instanceApiRoutes).pipe(
143-
Layer.provide(authorizationLayer),
144-
Layer.provide(instance),
159+
Layer.provide([authorizationLayer, instance]),
145160
)
146161

147-
export const routes = Layer.mergeAll(controlRoutes, globalRoutes, instanceRoutes)
148-
.pipe(
149-
Layer.provide(runtime),
150-
Layer.provide(Account.defaultLayer),
151-
Layer.provide(Agent.defaultLayer),
152-
Layer.provide(Auth.defaultLayer),
153-
Layer.provide(Command.defaultLayer),
154-
Layer.provide(Config.defaultLayer),
155-
Layer.provide(File.defaultLayer),
156-
Layer.provide(Format.defaultLayer),
157-
Layer.provide(LSP.defaultLayer),
158-
Layer.provide(Installation.defaultLayer),
159-
Layer.provide(MCP.defaultLayer),
160-
Layer.provide(Permission.defaultLayer),
161-
Layer.provide(Project.defaultLayer),
162-
Layer.provide(ProviderAuth.defaultLayer),
163-
Layer.provide(Provider.defaultLayer),
164-
Layer.provide(Pty.defaultLayer),
165-
Layer.provide(Question.defaultLayer),
166-
Layer.provide(Ripgrep.defaultLayer),
167-
Layer.provide(Session.defaultLayer),
168-
)
169-
.pipe(
170-
Layer.provide(SessionRunState.defaultLayer),
171-
Layer.provide(SessionStatus.defaultLayer),
172-
Layer.provide(SessionSummary.defaultLayer),
173-
Layer.provide(Skill.defaultLayer),
174-
Layer.provide(Todo.defaultLayer),
175-
Layer.provide(ToolRegistry.defaultLayer),
176-
Layer.provide(Vcs.defaultLayer),
177-
Layer.provide(Worktree.defaultLayer),
178-
Layer.provide(Bus.layer),
179-
Layer.provide(HttpServer.layerServices),
180-
Layer.provideMerge(Observability.layer),
181-
)
162+
export const routes = Layer.mergeAll(rootApiRoutes, instanceRoutes).pipe(
163+
Layer.provide([
164+
runtime,
165+
Account.defaultLayer,
166+
Agent.defaultLayer,
167+
Auth.defaultLayer,
168+
Command.defaultLayer,
169+
Config.defaultLayer,
170+
File.defaultLayer,
171+
Format.defaultLayer,
172+
LSP.defaultLayer,
173+
Installation.defaultLayer,
174+
MCP.defaultLayer,
175+
Permission.defaultLayer,
176+
Project.defaultLayer,
177+
ProviderAuth.defaultLayer,
178+
Provider.defaultLayer,
179+
Pty.defaultLayer,
180+
Question.defaultLayer,
181+
Ripgrep.defaultLayer,
182+
Session.defaultLayer,
183+
SessionRunState.defaultLayer,
184+
SessionStatus.defaultLayer,
185+
SessionSummary.defaultLayer,
186+
Skill.defaultLayer,
187+
Todo.defaultLayer,
188+
ToolRegistry.defaultLayer,
189+
Vcs.defaultLayer,
190+
Worktree.defaultLayer,
191+
Bus.layer,
192+
HttpServer.layerServices,
193+
]),
194+
Layer.provideMerge(Observability.layer),
195+
)
182196

183197
export const webHandler = lazy(() =>
184198
HttpRouter.toWebHandler(routes, {

0 commit comments

Comments
 (0)