(value: string)
| 95 | return null; |
| 96 | } |
| 97 | async function handleSelect(value: string) { |
| 98 | if (!worktreeSession) return; |
| 99 | const hasTmux = Boolean(worktreeSession.tmuxSessionName); |
| 100 | if (value === 'keep' || value === 'keep-with-tmux') { |
| 101 | setStatus('keeping'); |
| 102 | logEvent('tengu_worktree_kept', { |
| 103 | commits: commitCount, |
| 104 | changed_files: changes.length |
| 105 | }); |
| 106 | await keepWorktree(); |
| 107 | process.chdir(worktreeSession.originalCwd); |
| 108 | setCwd(worktreeSession.originalCwd); |
| 109 | recordWorktreeExit(); |
| 110 | getPlansDirectory.cache.clear?.(); |
| 111 | if (hasTmux) { |
| 112 | setResultMessage(`Worktree kept. Your work is saved at ${worktreeSession.worktreePath} on branch ${worktreeSession.worktreeBranch}. Reattach to tmux session with: tmux attach -t ${worktreeSession.tmuxSessionName}`); |
| 113 | } else { |
| 114 | setResultMessage(`Worktree kept. Your work is saved at ${worktreeSession.worktreePath} on branch ${worktreeSession.worktreeBranch}`); |
| 115 | } |
| 116 | setStatus('done'); |
| 117 | } else if (value === 'keep-kill-tmux') { |
| 118 | setStatus('keeping'); |
| 119 | logEvent('tengu_worktree_kept', { |
| 120 | commits: commitCount, |
| 121 | changed_files: changes.length |
| 122 | }); |
| 123 | if (worktreeSession.tmuxSessionName) { |
| 124 | await killTmuxSession(worktreeSession.tmuxSessionName); |
| 125 | } |
| 126 | await keepWorktree(); |
| 127 | process.chdir(worktreeSession.originalCwd); |
| 128 | setCwd(worktreeSession.originalCwd); |
| 129 | recordWorktreeExit(); |
| 130 | getPlansDirectory.cache.clear?.(); |
| 131 | setResultMessage(`Worktree kept at ${worktreeSession.worktreePath} on branch ${worktreeSession.worktreeBranch}. Tmux session terminated.`); |
| 132 | setStatus('done'); |
| 133 | } else if (value === 'remove' || value === 'remove-with-tmux') { |
| 134 | setStatus('removing'); |
| 135 | logEvent('tengu_worktree_removed', { |
| 136 | commits: commitCount, |
| 137 | changed_files: changes.length |
| 138 | }); |
| 139 | if (worktreeSession.tmuxSessionName) { |
| 140 | await killTmuxSession(worktreeSession.tmuxSessionName); |
| 141 | } |
| 142 | try { |
| 143 | await cleanupWorktree(); |
| 144 | process.chdir(worktreeSession.originalCwd); |
| 145 | setCwd(worktreeSession.originalCwd); |
| 146 | recordWorktreeExit(); |
| 147 | getPlansDirectory.cache.clear?.(); |
| 148 | } catch (error) { |
| 149 | logForDebugging(`Failed to clean up worktree: ${error}`, { |
| 150 | level: 'error' |
| 151 | }); |
| 152 | setResultMessage('Worktree cleanup failed, exiting anyway'); |
| 153 | setStatus('done'); |
| 154 | return; |
no test coverage detected