144 lines · 4.3 KB · TypeScript
RawDownload
/** * 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,  ProviderUploadFeedbackInput,  ProviderUploadFeedbackResult,  MessageId,  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<ProviderSession, ProviderServiceError>;   /**   * Send a provider turn.   */  readonly sendTurn: (    input: ProviderSendTurnInput,  ) => Effect.Effect<ProviderTurnStartResult, ProviderServiceError>;   readonly compactThread: (    threadId: ThreadId,    modelSelection?: ProviderSendTurnInput["modelSelection"],    requestId?: MessageId,  ) => Effect.Effect<void, ProviderServiceError>;   /**   * Interrupt a running provider turn.   */  readonly interruptTurn: (    input: ProviderInterruptTurnInput,  ) => Effect.Effect<void, ProviderServiceError>;   /**   * Respond to a provider approval request.   */  readonly respondToRequest: (    input: ProviderRespondToRequestInput,  ) => Effect.Effect<void, ProviderServiceError>;   /**   * Respond to a provider structured user-input request.   */  readonly respondToUserInput: (    input: ProviderRespondToUserInputInput,  ) => Effect.Effect<void, ProviderServiceError>;   /**   * Stop a provider session.   */  readonly stopSession: (    input: ProviderStopSessionInput,  ) => Effect.Effect<void, ProviderServiceError>;   /**   * List active provider sessions.   *   * Aggregates runtime session lists from all registered adapters.   */  readonly listSessions: () => Effect.Effect<ReadonlyArray<ProviderSession>>;   /**   * Read capabilities for the adapter bound to a configured provider instance.   */  readonly getCapabilities: (    instanceId: ProviderInstanceId,  ) => Effect.Effect<ProviderAdapterCapabilities, ProviderServiceError>;   readonly getInstanceInfo: (    instanceId: ProviderInstanceId,  ) => Effect.Effect<ProviderInstanceRoutingInfo, ProviderServiceError>;   /**   * Reject unsupported rewind before files change, without resuming the session.   */  readonly assertConversationRollbackSupported: (    threadId: ThreadId,  ) => Effect.Effect<void, ProviderServiceError>;   /**   * Roll back provider conversation state by a number of turns.   */  readonly rollbackConversation: (input: {    readonly threadId: ThreadId;    readonly numTurns: number;  }) => Effect.Effect<void, ProviderServiceError>;   /**   * Upload a thread and return the provider's shareable feedback identifier.   */  readonly uploadFeedback: (    input: ProviderUploadFeedbackInput,  ) => Effect.Effect<ProviderUploadFeedbackResult, ProviderServiceError>;   /**   * Canonical provider runtime event stream.   *   * Fan-out is owned by ProviderService (not by a standalone event-bus service).   */  readonly streamEvents: Stream.Stream<ProviderRuntimeEvent>;} /** * ProviderService - Service tag for provider orchestration. */export class ProviderService extends Context.Service<ProviderService, ProviderServiceShape>()(  "t3/provider/Services/ProviderService",) {}