import type { SessionApi } from "@opencode-ai/client/effect/api" import type { Message, SystemPart } from "@opencode-ai/ai" import type { Agent } from "@opencode-ai/schema/agent" import type { Model } from "@opencode-ai/schema/model" import type { Session } from "@opencode-ai/schema/session" import type { Effect, JsonSchema } from "effect" import type { Hooks } from "./registration.js" export interface SessionContext { readonly sessionID: Session.ID readonly agent: Agent.ID readonly model: Model.Ref system: Array messages: Array tools: Record } export interface SessionHttp { readonly sessionID: Session.ID readonly agent: Agent.ID readonly model: Model.Ref readonly use: (middleware: SessionHttpMiddleware) => Effect.Effect } export type SessionHttpHandler = (request: Request) => Effect.Effect export type SessionHttpMiddleware = ( request: Request, next: SessionHttpHandler, ) => Effect.Effect export interface SessionHooks { readonly context: SessionContext readonly http: SessionHttp } export type SessionDomain = Pick< SessionApi, "create" | "get" | "prompt" | "generate" | "command" | "synthetic" | "interrupt" | "rename" | "wait" > & { readonly hook: Hooks }