This commit is contained in:
James Long 2026-06-26 15:41:43 -04:00
commit 2f0343ca24
106 changed files with 1377 additions and 748 deletions

View file

@ -1,10 +1,4 @@
import { SessionV2 } from "@opencode-ai/core/session"
import { LocationServiceMap } from "@opencode-ai/core/location-layer"
import { PermissionSaved } from "@opencode-ai/core/permission/saved"
import { PtyTicket } from "@opencode-ai/core/pty/ticket"
import { Layer } from "effect"
import { layer as locationLayer } from "./location"
import { sessionLocationLayer } from "./middleware/session-location"
import { MessageHandler } from "./handlers/message"
import { ModelHandler } from "./handlers/model"
import { ProviderHandler } from "./handlers/provider"
@ -19,11 +13,9 @@ import { HealthHandler } from "./handlers/health"
import { PtyHandler } from "./handlers/pty"
import { QuestionHandler } from "./handlers/question"
import { ReferenceHandler } from "./handlers/reference"
import * as SessionExecutionLocal from "@opencode-ai/core/session/execution/local"
import { LocationHandler } from "./handlers/location"
import { IntegrationHandler } from "./handlers/integration"
import { CredentialHandler } from "./handlers/credential"
import { Credential } from "@opencode-ai/core/credential"
import { ProjectCopyHandler } from "./handlers/project-copy"
export const handlers = Layer.mergeAll(
@ -45,13 +37,4 @@ export const handlers = Layer.mergeAll(
QuestionHandler,
ReferenceHandler,
ProjectCopyHandler,
).pipe(
Layer.provide(sessionLocationLayer),
Layer.provide(locationLayer),
Layer.provide(SessionV2.defaultLayer),
Layer.provide(SessionExecutionLocal.defaultLayer),
Layer.provide(PermissionSaved.defaultLayer),
Layer.provide(PtyTicket.defaultLayer),
Layer.provide(LocationServiceMap.layer),
Layer.provide(Credential.defaultLayer),
)

View file

@ -1,7 +1,17 @@
import { Database } from "@opencode-ai/core/database/database"
import { LayerNode } from "@opencode-ai/core/effect/layer-node"
import { httpClient } from "@opencode-ai/core/effect/layer-node-platform"
import { ScopedNode } from "@opencode-ai/core/effect/scoped-node"
import { ScopedNodeBuild } from "@opencode-ai/core/effect/scoped-node-build"
import { EventV2 } from "@opencode-ai/core/event"
import { LocationServiceMap } from "@opencode-ai/core/location-layer"
import { FetchHttpClient, HttpRouter, HttpServer } from "effect/unstable/http"
import { Credential } from "@opencode-ai/core/credential"
import { PermissionSaved } from "@opencode-ai/core/permission/saved"
import { PtyTicket } from "@opencode-ai/core/pty/ticket"
import { SessionV2 } from "@opencode-ai/core/session"
import { SessionExecutionLocal } from "@opencode-ai/core/session/execution/local"
import { LocationServiceMap, locationServices } from "@opencode-ai/core/location-layer"
import { ToolOutputStore } from "@opencode-ai/core/tool-output-store"
import { FetchHttpClient, HttpClient, HttpRouter, HttpServer } from "effect/unstable/http"
import { HttpApiBuilder } from "effect/unstable/httpapi"
import { Layer, Option } from "effect"
import { Api } from "./api"
@ -10,6 +20,23 @@ import { handlers } from "./handlers"
import { authorizationLayer } from "./middleware/authorization"
import { schemaErrorLayer } from "./middleware/schema-error"
import { PtyEnvironment } from "./pty-environment"
import { layer as locationLayer } from "./location"
import { sessionLocationLayer } from "./middleware/session-location"
const applicationServices = LayerNode.group([
Database.node,
EventV2.node,
httpClient,
ToolOutputStore.cleanupNode,
SessionV2.node,
SessionExecutionLocal.node,
PermissionSaved.node,
PtyTicket.node,
Credential.node,
])
type ApplicationServices = typeof applicationServices extends LayerNode.Node<infer A, unknown, any>
? A
: never
export function createRoutes(password?: string) {
return makeRoutes(
@ -24,16 +51,19 @@ export function createEmbeddedRoutes() {
}
function makeRoutes<AuthError, AuthServices>(auth: Layer.Layer<ServerAuth.Config, AuthError, AuthServices>) {
const serviceLayer = ScopedNodeBuild.build(LayerNode.group([locationServices, applicationServices])) as Layer.Layer<
LocationServiceMap | ApplicationServices
>
return HttpApiBuilder.layer(Api, { openapiPath: "/openapi.json" }).pipe(
Layer.provide(handlers),
Layer.provide(PtyEnvironment.defaultLayer),
Layer.provide(sessionLocationLayer),
Layer.provide(locationLayer),
Layer.provide(authorizationLayer),
Layer.provide(schemaErrorLayer),
Layer.provide(auth),
Layer.provide(LocationServiceMap.layer),
Layer.provide(Database.defaultLayer),
Layer.provide(EventV2.defaultLayer),
Layer.provide(FetchHttpClient.layer),
Layer.provide(serviceLayer),
)
}