/** * ProviderService - Service interface for provider sessions, turns, and checkpoints. * * Acts as the cross-provider facade used by transports (WebSocket/RPC). It * resolves provider adapters through `ProviderAdapterRegistry`, routes * session-scoped calls via `ProviderSessionDirectory`, and exposes one unified * provider event stream to callers. * * Uses Effect `Context.Service` for dependency injection and returns typed * domain errors for validation, session, codex, and checkpoint workflows. * * @module ProviderService */ import type { ProviderInterruptTurnInput, ProviderInstanceId, ProviderRespondToRequestInput, ProviderRespondToUserInputInput, ProviderRuntimeEvent, ProviderSendTurnInput, ProviderSession, ProviderSessionStartInput, ProviderStopSessionInput, ThreadId, ProviderTurnStartResult, } from "@t3tools/contracts"; import * as Context from "effect/Context"; import type * as Effect from "effect/Effect"; import type * as Stream from "effect/Stream"; import type { ProviderServiceError } from "../Errors.ts"; import type { ProviderAdapterCapabilities } from "./ProviderAdapter.ts"; import type { ProviderInstanceRoutingInfo } from "./ProviderAdapterRegistry.ts"; /** * ProviderServiceShape - Service API for provider session and turn orchestration. */ export interface ProviderServiceShape { /** * Start a provider session. */ readonly startSession: ( threadId: ThreadId, input: ProviderSessionStartInput, ) => Effect.Effect; /** * Send a provider turn. */ readonly sendTurn: ( input: ProviderSendTurnInput, ) => Effect.Effect; /** * Interrupt a running provider turn. */ readonly interruptTurn: ( input: ProviderInterruptTurnInput, ) => Effect.Effect; /** * Respond to a provider approval request. */ readonly respondToRequest: ( input: ProviderRespondToRequestInput, ) => Effect.Effect; /** * Respond to a provider structured user-input request. */ readonly respondToUserInput: ( input: ProviderRespondToUserInputInput, ) => Effect.Effect; /** * Stop a provider session. */ readonly stopSession: ( input: ProviderStopSessionInput, ) => Effect.Effect; /** * List active provider sessions. * * Aggregates runtime session lists from all registered adapters. */ readonly listSessions: () => Effect.Effect>; /** * Read capabilities for the adapter bound to a configured provider instance. */ readonly getCapabilities: ( instanceId: ProviderInstanceId, ) => Effect.Effect; readonly getInstanceInfo: ( instanceId: ProviderInstanceId, ) => Effect.Effect; /** * Roll back provider conversation state by a number of turns. */ readonly rollbackConversation: (input: { readonly threadId: ThreadId; readonly numTurns: number; }) => Effect.Effect; /** * Canonical provider runtime event stream. * * Fan-out is owned by ProviderService (not by a standalone event-bus service). */ readonly streamEvents: Stream.Stream; } /** * ProviderService - Service tag for provider orchestration. */ export class ProviderService extends Context.Service()( "t3/provider/Services/ProviderService", ) {}