refactor: use ref objects for session tracking in closures

This commit is contained in:
weishu
2025-12-26 18:02:33 +08:00
parent aababe6a57
commit 3adaa0f77c
2 changed files with 9 additions and 7 deletions
+4 -3
View File
@@ -131,7 +131,7 @@ export async function runCodex(opts: {
messageQueue.push(message.content.text, enhancedMode);
});
let sessionWrapper: CodexSession | null = null;
const sessionWrapperRef: { current: CodexSession | null } = { current: null };
let cleanupStarted = false;
let exitCode = 0;
@@ -153,6 +153,7 @@ export async function runCodex(opts: {
logger.debug('[codex] Cleanup start');
restoreTerminalState();
try {
const sessionWrapper = sessionWrapperRef.current;
if (sessionWrapper) {
sessionWrapper.stopKeepAlive();
}
@@ -215,7 +216,7 @@ export async function runCodex(opts: {
}));
},
onSessionReady: (instance) => {
sessionWrapper = instance;
sessionWrapperRef.current = instance;
}
});
} catch (error) {
@@ -224,7 +225,7 @@ export async function runCodex(opts: {
archiveReason = 'Session crashed';
logger.debug('[codex] Loop error:', error);
} finally {
const localFailure = sessionWrapper?.localLaunchFailure;
const localFailure = sessionWrapperRef.current?.localLaunchFailure;
if (localFailure?.exitReason === 'exit') {
exitCode = 1;
archiveReason = `Local launch failed: ${formatFailureReason(localFailure.message)}`;