feat: improve Monitor panel UX and preserve session names

- Monitor panel now opens by default on webapp start
- Replace "Reconcile" button with refresh icon (↻)
- Change close button to toggle (▼/▲) for collapse/expand
- Preserve session display names when saving screen info
- Use stored name when restoring sessions (no more "Restored:" prefix)
- Show session name in Monitor panel instead of screen name
- Kill screen session when closing a tab

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
arkon
2026-01-19 04:22:41 +01:00
co-authored by Claude Opus 4.5
parent 34c86488dd
commit ea9618e281
7 changed files with 55 additions and 8 deletions
+14 -2
View File
@@ -48,7 +48,7 @@ export class ScreenManager extends EventEmitter {
}
// Create a new GNU screen session
async createScreen(sessionId: string, workingDir: string, mode: 'claude' | 'shell'): Promise<ScreenSession> {
async createScreen(sessionId: string, workingDir: string, mode: 'claude' | 'shell', name?: string): Promise<ScreenSession> {
const screenName = `claudeman-${sessionId.slice(0, 8)}`;
// Create screen in detached mode with the appropriate command
@@ -84,7 +84,8 @@ export class ScreenManager extends EventEmitter {
createdAt: Date.now(),
workingDir,
mode,
attached: false
attached: false,
name
};
this.screens.set(sessionId, screen);
@@ -150,6 +151,17 @@ export class ScreenManager extends EventEmitter {
return this.screens.get(sessionId);
}
// Update screen display name
updateScreenName(sessionId: string, name: string): boolean {
const screen = this.screens.get(sessionId);
if (!screen) {
return false;
}
screen.name = name;
this.saveScreens();
return true;
}
// Reconcile screens - find orphaned/dead screens
async reconcileScreens(): Promise<{ alive: string[]; dead: string[] }> {
const alive: string[] = [];