opencode/packages/core/src/opencode.ts
opencode-agent[bot] b0a929440b chore: generate
2026-06-04 03:03:39 +00:00

39 lines
1.4 KiB
TypeScript

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.