UnlinkError with a code discriminator. Four subclasses
ship: ApiError, CapabilityError, ValidationError, and TimeoutError.
CapabilityError for missing local setup, such as a missing EVM provider or
an account that cannot execute. Use ValidationError for invalid SDK inputs.
The ApiError class also covers transport failures. If a connection drops
mid-response, the SDK throws ApiError with code: "CONNECTION_LOST" instead
of leaking a raw TypeError. It is distinct from an Engine rejection,
transient, and safe to retry. The underlying error is attached as err.cause.