feat(core): add embedded v2 session runtime and tool foundation (#30632)

This commit is contained in:
Kit Langton 2026-06-03 23:02:17 -04:00 committed by GitHub
commit 76ee87ead8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
215 changed files with 31398 additions and 3332 deletions

View file

@ -0,0 +1,39 @@
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.