diff --git a/CLAUDE.md b/CLAUDE.md index d02fe103..d085b58e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,7 +35,7 @@ When user says "COM": 1. Increment version in BOTH `package.json` AND `CLAUDE.md` (verify they match with `grep version package.json && grep Version CLAUDE.md`) 2. Run: `git add -A && git commit -m "chore: bump version to X.XXXX" && git push && npm run build && systemctl --user restart claudeman-web` -**Version**: 0.1559 (must match `package.json` for npm publish) +**Version**: 0.1560 (must match `package.json` for npm publish) ## Project Overview diff --git a/package.json b/package.json index eb6406d5..f96964ed 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "claudeman", - "version": "0.1559", + "version": "0.1560", "description": "The missing control plane for Claude Code - run 20 autonomous agents with real-time monitoring and session persistence", "type": "module", "main": "dist/index.js", diff --git a/src/web/public/app.js b/src/web/public/app.js index e5031407..a620ecb8 100644 --- a/src/web/public/app.js +++ b/src/web/public/app.js @@ -1019,7 +1019,10 @@ class LocalEchoOverlay { this.overlay.style.display = ''; } catch { - this.clear(); + // Hide overlay on render error but preserve pendingText — + // next rerender() (from flushPendingWrites) will retry when terminal is ready. + this.overlay.innerHTML = ''; + this.overlay.style.display = 'none'; } } @@ -4607,13 +4610,20 @@ class ClaudemanApp { } } - // Restore local echo text for incoming session (saved during previous tab switch) + // Restore local echo text for incoming session (saved during previous tab switch). + // Retry rerender at increasing delays — terminal render service may not be ready + // immediately after buffer load (especially on slower mobile devices). const savedEcho = this.localEchoTextCache.get(sessionId); if (savedEcho && this._localEchoOverlay) { this._localEchoOverlay.pendingText = savedEcho; this._localEchoOverlay._persist(); - // Delay rerender until buffer is settled and prompt is visible - setTimeout(() => this._localEchoOverlay?.rerender(), 100); + for (const delay of [150, 500, 1000]) { + setTimeout(() => { + if (this.activeSessionId === sessionId && this._localEchoOverlay?.pendingText) { + this._localEchoOverlay.rerender(); + } + }, delay); + } } // Send resize and Ctrl+L to trigger Claude to redraw at correct size