@moon16u/dsh-plugin-mcp-console 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
File without changes
package/README.zh-CN.md CHANGED
File without changes
package/cordis.patch.yml CHANGED
File without changes
package/lib/client.js CHANGED
@@ -211,6 +211,11 @@ window.__ModuleLoader__.load({
211
211
  ".mcp-mgr-iconbtn{border:0;background:0 0;color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;border-radius:8px;width:30px;height:30px;display:grid;place-items:center;flex:none;padding:0}",
212
212
  ".mcp-mgr-iconbtn:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,rgba(0,0,0,.05));color:var(--dsw-alias-label-primary,#111827)}",
213
213
  ".mcp-mgr-iconbtn:disabled{color:var(--dsw-alias-label-dimmed,#9ca3af);cursor:wait}",
214
+ // A refresh keeps the icon at its normal color and spins it; the disabled
215
+ // dimming was the entire feedback, and at ~50 ms it read as a blink.
216
+ ".mcp-mgr-iconbtn[data-busy=true]{color:var(--dsw-alias-label-secondary,#6b7280);cursor:progress}",
217
+ ".mcp-spin{animation:mcp-spin .8s linear infinite;transform-origin:50% 50%}",
218
+ "@keyframes mcp-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}",
214
219
  ".mcp-mgr-btn{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);background:var(--dsw-alias-bg-base,#ffffff);color:var(--dsw-alias-label-primary,#111827);font-family:var(--dsw-font-family);cursor:pointer;border-radius:8px;padding:6px 14px;font-size:13px;line-height:20px;display:inline-flex;align-items:center;gap:6px;box-shadow:0 1px 2px rgba(0,0,0,.04)}",
215
220
  ".mcp-mgr-btn:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,#f9fafb);border-color:#d1d5db}",
216
221
  ".mcp-mgr-btn:disabled{color:var(--dsw-alias-label-dimmed,#9ca3af);cursor:default}",
@@ -951,6 +956,7 @@ window.__ModuleLoader__.load({
951
956
  }
952
957
 
953
958
  function refresh() {
959
+ if (refreshing) return;
954
960
  setRefreshing(true);
955
961
  withBusy(null, function () {
956
962
  return mcpApi("/refresh", { method: "POST" }).then(function () { return load(); });
@@ -1047,7 +1053,6 @@ window.__ModuleLoader__.load({
1047
1053
  var servers = snapshot && snapshot.servers ? snapshot.servers : [];
1048
1054
  var readOnlyServers = snapshot && snapshot.externalServers ? snapshot.externalServers : [];
1049
1055
  var allServers = servers.concat(readOnlyServers);
1050
- var busyAny = busy !== null || refreshing;
1051
1056
 
1052
1057
  var listChildren = [];
1053
1058
  if (allServers.length === 0) {
@@ -1146,7 +1151,9 @@ window.__ModuleLoader__.load({
1146
1151
  }, t("confirmYes")))));
1147
1152
  }
1148
1153
 
1149
- var topDisabled = refreshing || mode !== null;
1154
+ // Only the refresh control reflects refresh progress. Disabling the two
1155
+ // write buttons for the same round-trip made the whole header blink.
1156
+ var topDisabled = mode !== null;
1150
1157
 
1151
1158
  // Master switch off: the whole host side is down, so the page offers the
1152
1159
  // way back instead of actions that cannot work.
@@ -1164,9 +1171,10 @@ window.__ModuleLoader__.load({
1164
1171
  McpH("h2", { className: "mcp-mgr-title" }, t("title")),
1165
1172
  McpH("button", {
1166
1173
  type: "button", className: "mcp-mgr-iconbtn", disabled: refreshing,
1174
+ "data-busy": refreshing ? "true" : "false",
1167
1175
  title: t("refresh"), "aria-label": t("refresh"),
1168
1176
  onClick: refresh,
1169
- }, McpH(IconRefresh, { size: 15 })),
1177
+ }, McpH(IconRefresh, { size: 15, className: refreshing ? "mcp-spin" : undefined })),
1170
1178
  McpH("button", {
1171
1179
  type: "button", className: "mcp-mgr-btn", disabled: topDisabled,
1172
1180
  onClick: function () { setEditing(null); setMode("add"); },
File without changes
package/lib/import.js CHANGED
File without changes
package/lib/index.js CHANGED
File without changes
File without changes
package/lib/routes.js CHANGED
File without changes
package/lib/status.js CHANGED
File without changes
package/lib/store.js CHANGED
File without changes
File without changes
File without changes
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moon16u/dsh-plugin-mcp-console",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "Web GUI console for MCP servers: manages the official @deepseek-ai/dsh-mcp-client at runtime — add/edit/enable/disable/reconnect/delete servers, live status, mcpServers JSON import. No MCP protocol code: connection and tool registration are 100% the official client, resolved from the running DSH profile.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -60,6 +60,10 @@
60
60
  "optional": true
61
61
  }
62
62
  },
63
+ "scripts": {
64
+ "test": "node --test test/*.test.mjs",
65
+ "sync-root-client": "node scripts/sync-root-client.mjs"
66
+ },
63
67
  "license": "MIT",
64
68
  "publishConfig": {
65
69
  "access": "public",
@@ -68,9 +72,5 @@
68
72
  "devDependencies": {
69
73
  "react": "18.2.0",
70
74
  "react-dom": "18.2.0"
71
- },
72
- "scripts": {
73
- "test": "node --test test/*.test.mjs",
74
- "sync-root-client": "node scripts/sync-root-client.mjs"
75
75
  }
76
- }
76
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 moon16u
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.