From 0abae60618dd6091f34b4da42406dc1ea2ae5de4 Mon Sep 17 00:00:00 2001 From: Serge Alex Date: Fri, 6 Nov 2026 09:10:17 +0300 Subject: [PATCH] Panel: stop button closes window when client is gone --- content/panel.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/content/panel.js b/content/panel.js index bb433b2..d4176b6 100644 --- a/content/panel.js +++ b/content/panel.js @@ -195,9 +195,9 @@ lb.addEventListener('click', function (ev) { ev.stopPropagation(); API.mcpLaunch(a.name); }); row.appendChild(lb); } - var sb = mk('button', 'dshmem-mcp-btn', 'stop'); - sb.title = 'Close MCP client (window stays)'; - sb.disabled = !a.running && !a.starting; + var sb = mk('button', 'dshmem-mcp-btn', a.running ? 'stop' : (a.guiUp ? 'close' : 'stop')); + sb.title = a.running ? 'Close MCP client (window stays)' : (a.guiUp ? 'Close the ' + a.name + ' window' : 'Nothing to close'); + sb.disabled = !a.running && !a.starting && !a.guiUp; sb.addEventListener('click', function (ev) { ev.stopPropagation(); API.mcpStop(a.name); }); row.appendChild(sb); el.mcpList.appendChild(row); @@ -230,8 +230,12 @@ }, mcpStop: function (name) { globalThis.DSH_BRIDGE.fetchBridge('POST', '/mcp/stop', { app: name }).then(function (r) { - if (r && r.ok) API.log('mcp stop: ' + name); - else API.log('mcp stop ' + name + ' fail: ' + ((r && r.error && r.error.message) || '?')); + if (!r || !r.ok) { API.log('mcp stop ' + name + ' fail: ' + ((r && r.error && r.error.message) || '?')); API.mcpRefresh(); return; } + var what = []; + if (r.stopped) what.push('client'); + if (r.windowClosed) what.push('window'); + if (what.length === 0) what.push('nothing'); + API.log('mcp stop ' + name + ': closed ' + what.join(' + ') + (r.warning ? ' | ' + r.warning : '')); API.mcpRefresh(); }); },