/** * An error the user can act on, as opposed to a bug. * * These are printed and the process exits non-zero. They deliberately do NOT * trigger the fail-open handover to sl0ppij: "no project called foo" or "that * session is a saved dead copy" are answers, and replacing them with a raw * multiplexer would hide the answer and start a session nobody asked for. */ export class UserError extends Error { constructor(message: string) { super(message); this.name = "UserError"; } }