@@ -13759,15 +13759,24 @@ class ClaudeOrchestrator {
1375913759 console.log('Applying session recovery:', recovery);
1376013760 const recoverySettings = this.userSettings?.global?.sessionRecovery || {};
1376113761 const resumeConversation = recoverySettings.resumeConversation !== false;
13762+ const resumeCwd = recoverySettings.resumeCwd !== false;
13763+ const normalizeMode = (mode, fallback) => {
13764+ const normalized = String(mode || '').trim().toLowerCase();
13765+ if (normalized === 'fresh' || normalized === 'continue' || normalized === 'resume') {
13766+ return normalized;
13767+ }
13768+ return fallback;
13769+ };
1376213770
1376313771 // Track which sessions we're recovering so auto-start skips them
1376413772 this.recoveredSessions = new Set();
1376513773
1376613774 for (const session of recovery.sessions) {
13767- const { sessionId, lastCwd, lastAgent, lastConversationId } = session;
13775+ const { sessionId, lastCwd, lastAgent, lastConversationId, lastMode } = session;
1376813776
1376913777 // Find the terminal for this session
13770- if (!this.sessions.has(sessionId)) {
13778+ const sessionState = this.sessions.get(sessionId);
13779+ if (!sessionState) {
1377113780 console.log(`Session ${sessionId} not found, skipping recovery`);
1377213781 continue;
1377313782 }
@@ -13777,24 +13786,53 @@ class ClaudeOrchestrator {
1377713786
1377813787 console.log(`Recovering session ${sessionId}:`, { lastCwd, lastAgent, lastConversationId });
1377913788
13780- // Start agent with resume if conversation available and it's a claude terminal
13781- if (resumeConversation && lastConversationId && lastAgent === 'claude' && sessionId.includes('-claude')) {
13782- console.log(`Resuming conversation: ${lastConversationId} in ${lastCwd}`);
13789+ const sessionType = String(sessionState?.type || '').trim().toLowerCase();
13790+ const recoveryCwd = resumeCwd ? lastCwd : null;
1378313791
13784- // Use recovery-specific skipPermissions setting (defaults to true)
13792+ if (lastAgent === 'claude' && (sessionType === 'claude' || sessionId.includes('-claude'))) {
1378513793 const skipPermissions = recoverySettings.skipPermissions !== false;
13794+ if (resumeConversation && lastConversationId) {
13795+ console.log(`Resuming conversation: ${lastConversationId} in ${lastCwd}`);
13796+ this.socket.emit('start-claude', {
13797+ sessionId,
13798+ options: {
13799+ mode: 'resume',
13800+ resumeId: lastConversationId,
13801+ skipPermissions: skipPermissions,
13802+ cwd: recoveryCwd
13803+ }
13804+ });
13805+ } else {
13806+ let mode = normalizeMode(lastMode, 'continue');
13807+ if (mode === 'resume') mode = 'continue';
13808+ console.log(`Recovering Claude session ${sessionId} with mode: ${mode}`);
13809+ this.socket.emit('start-claude', {
13810+ sessionId,
13811+ options: {
13812+ mode,
13813+ skipPermissions: skipPermissions,
13814+ cwd: recoveryCwd
13815+ }
13816+ });
13817+ }
1378613818
13787- this.socket.emit('start-claude', {
13788- sessionId,
13789- options: {
13790- mode: 'resume',
13791- resumeId: lastConversationId,
13792- skipPermissions: skipPermissions,
13793- cwd: lastCwd
13794- }
13795- });
13819+ await new Promise(resolve => setTimeout(resolve, 200));
13820+ continue;
13821+ }
1379613822
13797- // Small delay between sessions
13823+ if (lastAgent === 'codex') {
13824+ let mode = normalizeMode(lastMode, 'continue');
13825+ if (mode === 'resume') mode = 'continue';
13826+ console.log(`Recovering Codex session ${sessionId} with mode: ${mode}`);
13827+ const config = {
13828+ agentId: 'codex',
13829+ mode,
13830+ flags: ['yolo']
13831+ };
13832+ if (recoveryCwd) {
13833+ config.cwd = recoveryCwd;
13834+ }
13835+ await this.startAgentWithConfig(sessionId, config);
1379813836 await new Promise(resolve => setTimeout(resolve, 200));
1379913837 }
1380013838 }
0 commit comments