From bc49ce80bf609fb17acd44472f7018ae9b040200 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 14 Jul 2026 02:23:13 +0000 Subject: [PATCH] fix(cli): await sentry sink before fatal capture Co-Authored-By: mantra --- packages/cli/src/index.ts | 6 ++---- packages/cli/src/lib/sentry.ts | 12 ++++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 29431c689..c1bf8ccf0 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,4 +1,4 @@ -import { flushSentry, initSentry } from "./lib/sentry.js"; +import { captureFatalError, initSentry } from "./lib/sentry.js"; initSentry(); import { Command } from "commander"; @@ -49,9 +49,7 @@ async function main() { console.error(`Error: ${err.message}`); process.exit(1); } - const { captureError } = await import("@hexclave/shared/dist/utils/errors"); - captureError("stack-cli-fatal", err); - await flushSentry(2000); + await captureFatalError("stack-cli-fatal", err); console.error(err); process.exit(1); } diff --git a/packages/cli/src/lib/sentry.ts b/packages/cli/src/lib/sentry.ts index 7575b64a3..1b9039d8b 100644 --- a/packages/cli/src/lib/sentry.ts +++ b/packages/cli/src/lib/sentry.ts @@ -74,6 +74,18 @@ export function initSentry(): void { })); } +export async function captureFatalError(location: string, error: unknown, timeoutMs = 2000): Promise { + try { + // Registration is asynchronous to keep startup fast, so fatal reporting must wait for the sink. + await registrationPromise; + const { captureError } = await import("@hexclave/shared/dist/utils/errors"); + captureError(location, error); + await flushSentry(timeoutMs); + } catch { + // Preserve the original fatal error path if optional Sentry reporting fails. + } +} + export async function flushSentry(timeoutMs = 2000): Promise { await registrationPromise; await capturePromise;