| 123456789101112131415161718192021222324252627282930313233343536373839 |
- export * as OpenCode from "./opencode"
- import { Context, Effect, Layer } from "effect"
- import { Database } from "./database/database"
- import { EventV2 } from "./event"
- import { LocationServiceMap } from "./location-layer"
- import { ProjectV2 } from "./project"
- import { SessionV2 } from "./session"
- import { SessionProjector } from "./session/projector"
- import * as SessionExecutionLocal from "./session/execution/local"
- import { SessionStore } from "./session/store"
- export interface Interface {
- readonly sessions: SessionV2.Interface
- }
- /** Public embedded OpenCode API for Effect-native applications. */
- export class Service extends Context.Service<Service, Interface>()("@opencode/OpenCode") {}
- const DefaultSessions = SessionV2.layer.pipe(
- Layer.provide(SessionProjector.layer),
- Layer.provide(SessionExecutionLocal.layer),
- Layer.provide(LocationServiceMap.layer),
- Layer.provide(SessionStore.layer),
- Layer.provide(EventV2.layer),
- Layer.provide(Database.defaultLayer),
- Layer.provide(ProjectV2.defaultLayer),
- Layer.orDie,
- )
- // TODO: Accept explicit storage so tests and embeddings can select disposable or application-owned persistence.
- export const layer = Layer.effect(
- Service,
- Effect.gen(function* () {
- return Service.of({ sessions: yield* SessionV2.Service })
- }),
- ).pipe(Layer.provide(DefaultSessions))
- // TODO: Add OpenCode.create(...) as the Promise facade over the same embedded API semantics.
|