/**
 * Process-level safety net for `uncaughtException` and `unhandledRejection`.
 *
 * Without this, a throw inside an agent hook, MCP callback, or stray async
 * `.then` chain crashes Node with a raw stack trace — no Outro screen, no
 * checkpoint flush, no Sentry capture, and no clean exit code. The user
 * is left staring at terminal vomit and the wizard's hard-won partial
 * progress (region, org/project, framework selection) is wiped.
 *
 * Sequence on a fatal:
 *   1. Capture to Sentry + analytics so we can see the failure remotely.
 *   2. Best-effort `saveCheckpoint` so the user can resume on next run.
 *   3. Route through `wizardAbort` so the user lands on the Outro Error
 *      screen with the same affordances as a normal failure (open log,
 *      write bug report, retry/resume).
 *   4. Force-exit on a hard deadline so a wedged abort path can't leave
 *      the process spinning forever.
 *
 * Re-entry: a second fatal (e.g. abort itself throws) is treated as a
 * defect-in-defect — we skip straight to `process.exit(INTERNAL_ERROR)`
 * to avoid an infinite loop.
 */
/**
 * Install process-level handlers for uncaught exceptions and unhandled
 * promise rejections. Idempotent — calling more than once is a no-op.
 *
 * Must be called from `bin.ts` after the observability layer is
 * initialized (so Sentry / analytics are wired) and before the TUI
 * mounts (so any throw during UI bootstrap is also caught).
 */
export declare function installSafetyNet(): void;
/**
 * Test-only — reset the install + re-entry flags between assertions.
 */
export declare function _resetSafetyNetForTests(): void;
/**
 * Test seam — exposed so tests can drive the fatal path without spawning
 * a child process. Production callers should not invoke this directly.
 */
export declare function _handleFatalForTests(source: 'uncaughtException' | 'unhandledRejection', reason: unknown): Promise<void>;
