import type { JsonValue } from "./jsonValue.js"; import { AnalysisError } from "./analysisErrorBase.js"; /** Provider-neutral invalid analysis input or output at an application boundary. */ export class AnalysisProtocolError extends AnalysisError { readonly _tag = "AnalysisProtocolError"; } /** Caller input failed provider-neutral application parsing. */ export class AnalysisInputError extends AnalysisError { readonly _tag = "AnalysisInputError"; constructor( readonly operation: string, options?: ErrorOptions, readonly issues: readonly AnalysisInputIssue[] = [], ) { super(`Invalid analysis input for ${operation}`, options); } } /** Secret-safe correction metadata for one rejected caller argument. */ export interface AnalysisInputIssue { readonly path: readonly (string | number)[]; readonly reason: | "unknown_argument" | "missing_argument" | "invalid_type" | "out_of_range" | "invalid_value" | "invalid_format"; /** Schema-authored correction guidance for cross-field or custom checks. */ readonly message?: string; readonly expected?: JsonValue; readonly minimum?: number; readonly maximum?: number; } /** Provider output failed provider-neutral application parsing. */ export class AnalysisOutputError extends AnalysisError { readonly _tag = "AnalysisOutputError"; constructor( readonly operation: string, readonly reason: string, options?: ErrorOptions, ) { super(`Invalid analysis output for ${operation}: ${reason}`, options); } } /** Selected provider cannot execute a declared analysis operation. */ export class AnalysisCapabilityUnavailableError extends AnalysisError { readonly _tag = "AnalysisCapabilityUnavailableError"; constructor( readonly providerId: string, readonly operation: string, readonly reason: string, ) { super(`Provider ${providerId} cannot execute ${operation}: ${reason}`); } } /** Caller cancellation won before provider-neutral work completed. */ export class AnalysisCancelledError extends AnalysisError { readonly _tag = "AnalysisCancelledError"; constructor(readonly operation: string) { super(`Analysis operation was cancelled: ${operation}`); } } /** Provider-neutral operation exceeded its declared execution deadline. */ export class AnalysisTimeoutError extends AnalysisError { readonly _tag = "AnalysisTimeoutError"; constructor( readonly operation: string, readonly timeoutMs: number, ) { super( `Analysis operation timed out after ${String(timeoutMs)}ms: ${operation}`, ); } }