import { type ProviderApprovalDecision, type ProviderDriverKind, type ThreadId, } from "@t3tools/contracts"; import * as Schema from "effect/Schema"; import * as EffectAcpErrors from "effect-acp/errors"; import { ProviderAdapterRequestError, ProviderAdapterSessionClosedError, type ProviderAdapterError, } from "../Errors.ts"; const isAcpProcessExitedError = Schema.is(EffectAcpErrors.AcpProcessExitedError); const isAcpRequestError = Schema.is(EffectAcpErrors.AcpRequestError); export function mapAcpToAdapterError( provider: ProviderDriverKind, threadId: ThreadId, method: string, error: EffectAcpErrors.AcpError, ): ProviderAdapterError { if (isAcpProcessExitedError(error)) { return new ProviderAdapterSessionClosedError({ provider, threadId, cause: error, }); } if (isAcpRequestError(error)) { return new ProviderAdapterRequestError({ provider, method, detail: error.message, cause: error, }); } return new ProviderAdapterRequestError({ provider, method, detail: error.message, cause: error, }); } export function acpPermissionOutcome(decision: ProviderApprovalDecision): string { switch (decision) { case "acceptForSession": return "allow-always"; case "accept": return "allow-once"; case "decline": default: return "reject-once"; } }