From 5ff7017aaab7b312f34d9cc5e5e0d0f3518de70a Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Fri, 19 Dec 2025 00:09:44 -0500 Subject: [PATCH] Enhance terminal drawer UI with text overflow handling, implement embed mode for seamless iframe integration, replace ttyd --once flag with --max-clients=1 to enable reconnection, add heartbeat mechanism for popout sessions, implement session reuse logic when opening popouts, and add postMessage communication between embedded terminal and dashboard for close/reconnect actions --- app/index.html | 11 + app/main.js | 64 ++++- app/routes/terminal.py | 121 +++++++++- app/services/terminal_gateway.py | 4 +- app/services/terminal_service.py | 11 +- logs/tasks_logs/.metadata_cache.json | 2 +- ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ ..._[Planifié]_Health-check-5min_completed.md | 224 ++++++++++++++++++ 100 files changed, 21254 insertions(+), 15 deletions(-) create mode 100644 logs/tasks_logs/2025/12/18/task_000023_80169f_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_000521_93f97b_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_001022_ff5bfc_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_001521_c25e8d_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_002023_e9a074_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_002522_f6c690_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_003022_538ed2_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_003523_f6b04a_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_004022_be7e6d_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_004522_3fa4c3_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_005022_1b021c_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_005522_b01b1e_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_010022_45a99b_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_010523_4bfe1d_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_011022_d66c1c_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_011522_d2f018_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_012023_f1aaed_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_012522_fd9282_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_013022_8d857e_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_013523_776ce0_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_014022_f4b84b_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_014522_ae6d48_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_015022_b88ef4_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_015522_8902a0_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_020022_5d4464_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_020527_4d6f19_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_021022_bf7bb4_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_021523_9b8095_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_022023_ae2ed3_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_022522_12ef80_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_023022_70c308_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_023523_93fc15_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_031024_277eed_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_031522_6c5bf1_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_032023_2e5a74_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_032523_477ebf_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_033021_2eda49_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_033521_0bac3e_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_035021_65d79a_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_035522_b52d56_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_040021_d80bb3_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_040520_ffa974_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_041021_a7a8dc_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_041522_6e48ef_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_042020_0db585_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_042524_51297f_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_043022_cd06bf_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_043537_11346e_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_044522_4dd0f5_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_045021_b236b5_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_202532_87033d_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_203021_4a0b40_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_203523_01c635_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_204023_71b94f_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_204521_d5a9bb_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_205021_8cf5c9_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_205521_0b33fa_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_210023_178749_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_210522_8fd59f_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_211022_0ae9f6_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_211523_b83ed0_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_212022_525f9e_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_212522_a12b2f_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_213022_5ec1ee_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_213522_965cb2_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_214023_36d2f4_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_214522_ac47ef_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_215023_719617_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_215522_bda30b_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_220023_a5042f_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_220522_2ec826_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_221022_7914f4_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_221523_685d0b_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_222022_b20945_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_222522_2c2d18_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_223022_ddc24d_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_223522_93e01f_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_224022_752b3c_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_224522_ac3ff7_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_225023_4f8042_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_225522_82d83f_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_230023_e61dc2_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_230522_fab87a_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_231022_a060b7_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_231522_205f3c_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_232023_3e2a84_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_232521_6474e9_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_233023_7304ba_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_233522_a89d06_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_234022_b21684_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_234522_0a3a12_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_235022_c1b13c_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/18/task_235521_6ab6bf_all_[Planifié]_Health-check-5min_completed.md create mode 100644 logs/tasks_logs/2025/12/19/task_050521_cda58d_all_[Planifié]_Health-check-5min_completed.md diff --git a/app/index.html b/app/index.html index 69a0987..03f4db1 100644 --- a/app/index.html +++ b/app/index.html @@ -3020,6 +3020,7 @@ display: flex; align-items: center; justify-content: space-between; + gap: 0.75rem; flex-shrink: 0; } @@ -3027,16 +3028,25 @@ display: flex; align-items: center; gap: 0.75rem; + min-width: 0; + flex: 1; + overflow: hidden; } .terminal-host-name { font-weight: 600; color: #fff; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .terminal-host-ip { color: #9ca3af; font-size: 0.875rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .terminal-status-badge { @@ -3059,6 +3069,7 @@ .terminal-header-actions { display: flex; gap: 0.5rem; + flex-shrink: 0; } .terminal-btn { diff --git a/app/main.js b/app/main.js index 8ff4c45..8fa622a 100644 --- a/app/main.js +++ b/app/main.js @@ -10327,10 +10327,23 @@ class DashboardManager { } // Create iframe for terminal + // Use embed mode so the connect page can hide its own header/pwa hint + // and let the drawer UI be the single source of controls. + const embeddedUrl = (() => { + try { + const url = new URL(session.url, window.location.origin); + url.searchParams.set('embed', '1'); + return url.toString(); + } catch (e) { + // Fallback for relative URLs + return session.url + (session.url.includes('?') ? '&' : '?') + 'embed=1'; + } + })(); + body.innerHTML = `