import { Schema } from "effect"; import type { CheckpointServiceError } from "../checkpointing/Errors.ts"; /** * ProviderAdapterValidationError - Invalid adapter API input. */ export class ProviderAdapterValidationError extends Schema.TaggedErrorClass()( "ProviderAdapterValidationError", { provider: Schema.String, operation: Schema.String, issue: Schema.String, cause: Schema.optional(Schema.Defect), }, ) { override get message(): string { return `Provider adapter validation failed (${this.provider}) in ${this.operation}: ${this.issue}`; } } /** * ProviderAdapterSessionNotFoundError - Adapter-owned session id is unknown. */ export class ProviderAdapterSessionNotFoundError extends Schema.TaggedErrorClass()( "ProviderAdapterSessionNotFoundError", { provider: Schema.String, threadId: Schema.String, cause: Schema.optional(Schema.Defect), }, ) { override get message(): string { return `Unknown ${this.provider} adapter thread: ${this.threadId}`; } } /** * ProviderAdapterSessionClosedError - Adapter session exists but is closed. */ export class ProviderAdapterSessionClosedError extends Schema.TaggedErrorClass()( "ProviderAdapterSessionClosedError", { provider: Schema.String, threadId: Schema.String, cause: Schema.optional(Schema.Defect), }, ) { override get message(): string { return `${this.provider} adapter thread is closed: ${this.threadId}`; } } /** * ProviderAdapterRequestError - Provider protocol request failed or timed out. */ export class ProviderAdapterRequestError extends Schema.TaggedErrorClass()( "ProviderAdapterRequestError", { provider: Schema.String, method: Schema.String, detail: Schema.String, cause: Schema.optional(Schema.Defect), }, ) { override get message(): string { return `Provider adapter request failed (${this.provider}) for ${this.method}: ${this.detail}`; } } /** * ProviderAdapterProcessError - Provider process lifecycle failure. */ export class ProviderAdapterProcessError extends Schema.TaggedErrorClass()( "ProviderAdapterProcessError", { provider: Schema.String, threadId: Schema.String, detail: Schema.String, cause: Schema.optional(Schema.Defect), }, ) { override get message(): string { return `Provider adapter process error (${this.provider}) for thread ${this.threadId}: ${this.detail}`; } } /** * ProviderValidationError - Invalid provider API input. */ export class ProviderValidationError extends Schema.TaggedErrorClass()( "ProviderValidationError", { operation: Schema.String, issue: Schema.String, cause: Schema.optional(Schema.Defect), }, ) { override get message(): string { return `Provider validation failed in ${this.operation}: ${this.issue}`; } } /** * ProviderUnsupportedError - Requested provider is not implemented. */ export class ProviderUnsupportedError extends Schema.TaggedErrorClass()( "ProviderUnsupportedError", { provider: Schema.String, cause: Schema.optional(Schema.Defect), }, ) { override get message(): string { return `Provider '${this.provider}' is not implemented`; } } /** * ProviderSessionNotFoundError - Provider-facing session not found. */ export class ProviderSessionNotFoundError extends Schema.TaggedErrorClass()( "ProviderSessionNotFoundError", { threadId: Schema.String, cause: Schema.optional(Schema.Defect), }, ) { override get message(): string { return `Unknown provider thread: ${this.threadId}`; } } /** * ProviderSessionDirectoryPersistenceError - Session directory persistence failure. */ export class ProviderSessionDirectoryPersistenceError extends Schema.TaggedErrorClass()( "ProviderSessionDirectoryPersistenceError", { operation: Schema.String, detail: Schema.String, cause: Schema.optional(Schema.Defect), }, ) { override get message(): string { return `Provider session directory persistence error in ${this.operation}: ${this.detail}`; } } export type ProviderAdapterError = | ProviderAdapterValidationError | ProviderAdapterSessionNotFoundError | ProviderAdapterSessionClosedError | ProviderAdapterRequestError | ProviderAdapterProcessError; export type ProviderServiceError = | ProviderValidationError | ProviderUnsupportedError | ProviderSessionNotFoundError | ProviderSessionDirectoryPersistenceError | ProviderAdapterError | CheckpointServiceError;