diff --git a/src/index.ts b/src/index.ts index 4233e8a67..406fede8f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -598,7 +598,18 @@ async function main() { await indexPersistence.save().catch((err) => { console.warn(`[agentmemory] Failed to save index on shutdown:`, err); }); - await sdk.shutdown(); + // #909 / iii-hq/iii#1835: defensive timeout prevents an indefinite hang when + // the OTel exporter is stuck retrying; un-flushed telemetry is dropped on exit. + const shutdownPromise = sdk.shutdown().catch((err) => { + console.warn(`[agentmemory] sdk.shutdown() errored:`, err); + }); + const timeoutPromise = new Promise((resolve) => + setTimeout(() => { + console.warn(`[agentmemory] sdk.shutdown() exceeded 3s timeout, proceeding to exit`); + resolve(); + }, 3000), + ); + await Promise.race([shutdownPromise, timeoutPromise]); clearWorkerPidfile(); process.exit(0); };