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

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
@@ -15,9 +15,6 @@ belong to the official `@deepseek-ai/dsh-mcp-client`; this plugin is only
15
15
  ## Installation
16
16
 
17
17
  ```bash
18
- # Recommended: the whole pouch bundle (this plugin ships inside it)
19
- dsh plugin --profile web add @moon16u/dsh-pouch
20
- # Or standalone:
21
18
  dsh plugin --profile web add @moon16u/dsh-plugin-mcp-console
22
19
  ```
23
20
 
@@ -63,12 +60,7 @@ Then open DSH Web → bottom-left Settings → **"MCP servers"**.
63
60
  ## Development
64
61
 
65
62
  ```bash
66
- pnpm --filter @moon16u/dsh-plugin-mcp-console test # 73 tests
67
- node scripts/sync-root-client.mjs # after editing lib/client.js, sync into the pouch root bundle
68
- ```
69
-
70
- The marked section inside `lib/client.js` is kept identical to the dsh-pouch
71
- root `lib/client.js` by the sync script; tests pin it against drift.
63
+ pnpm --filter @moon16u/dsh-plugin-mcp-console test
72
64
 
73
65
  ## License
74
66
  [MIT](../../LICENSE)
package/README.zh-CN.md CHANGED
@@ -9,9 +9,6 @@ DSH(DeepSeek Harness)Web GUI 的 **MCP 服务器管理控制台**:在设
9
9
  ## 安装
10
10
 
11
11
  ```bash
12
- # dsh-pouch 已装则跳过(本包随 pouch bundle 分发)
13
- dsh plugin --profile web add @moon16u/dsh-pouch
14
- # 独立安装(发布后):
15
12
  dsh plugin --profile web add @moon16u/dsh-plugin-mcp-console
16
13
  ```
17
14
 
@@ -56,8 +53,4 @@ dsh plugin --profile web add @moon16u/dsh-plugin-mcp-console
56
53
  ## 开发
57
54
 
58
55
  ```bash
59
- pnpm --filter @moon16u/dsh-plugin-mcp-console test # 73 个测试
60
- node scripts/sync-root-client.mjs # 改 lib/client.js 后同步进 dsh-pouch 根 bundle
61
- ```
62
-
63
- 包内 `lib/client.js` 与 dsh-pouch 根 `lib/client.js` 中的标记段由同步脚本保持一致,测试锁定防漂移。
56
+ pnpm --filter @moon16u/dsh-plugin-mcp-console test
package/cordis.patch.yml CHANGED
@@ -1,6 +1,5 @@
1
1
  # dsh-mcp-console bundle patch: inserts the console into the loader tree when
2
- # this package is installed as a standalone bundle (inside @moon16u/dsh-pouch
3
- # the root pouch patch already loads it; this file is inert there).
2
+ # this package is installed as its own DSH bundle.
4
3
  - insert:
5
4
  - id: ui-mcp-console
6
5
  name: '@moon16u/dsh-plugin-mcp-console'
package/lib/client.js CHANGED
@@ -6,7 +6,7 @@ window.__ModuleLoader__.load({
6
6
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
7
7
  var React = require("react");
8
8
 
9
- // ==== mcp-console client body (synced; keep identical to dsh-pouch/lib/client.js) ====
9
+ // ==== mcp-console client body ====
10
10
 
11
11
  var McpIcons = require("@deepseek-ai/dsh-client-ui-primitives");
12
12
  var IconRefresh = McpIcons.IconRefreshOutlineRegular || McpIcons.IconRefreshOutline16;
@@ -19,8 +19,7 @@ window.__ModuleLoader__.load({
19
19
 
20
20
  // ---------------------------------------------------------------------------
21
21
  // mcp-console client: an "MCP" settings section (mcp-manager-gui-spec.md)
22
- // over /api/dsh-mcp-console/*. All identifiers carry an Mcp/mcp prefix so
23
- // this body can be pasted verbatim into the dsh-pouch root client bundle.
22
+ // over /api/dsh-mcp-console/*. All identifiers carry an Mcp/mcp prefix.
24
23
  // ---------------------------------------------------------------------------
25
24
 
26
25
  var McpNS = "mcp-console";
@@ -211,6 +210,11 @@ window.__ModuleLoader__.load({
211
210
  ".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
211
  ".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
212
  ".mcp-mgr-iconbtn:disabled{color:var(--dsw-alias-label-dimmed,#9ca3af);cursor:wait}",
213
+ // A refresh keeps the icon at its normal color and spins it; the disabled
214
+ // dimming was the entire feedback, and at ~50 ms it read as a blink.
215
+ ".mcp-mgr-iconbtn[data-busy=true]{color:var(--dsw-alias-label-secondary,#6b7280);cursor:progress}",
216
+ ".mcp-spin{animation:mcp-spin .8s linear infinite;transform-origin:50% 50%}",
217
+ "@keyframes mcp-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}",
214
218
  ".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
219
  ".mcp-mgr-btn:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,#f9fafb);border-color:#d1d5db}",
216
220
  ".mcp-mgr-btn:disabled{color:var(--dsw-alias-label-dimmed,#9ca3af);cursor:default}",
@@ -951,6 +955,7 @@ window.__ModuleLoader__.load({
951
955
  }
952
956
 
953
957
  function refresh() {
958
+ if (refreshing) return;
954
959
  setRefreshing(true);
955
960
  withBusy(null, function () {
956
961
  return mcpApi("/refresh", { method: "POST" }).then(function () { return load(); });
@@ -1047,7 +1052,6 @@ window.__ModuleLoader__.load({
1047
1052
  var servers = snapshot && snapshot.servers ? snapshot.servers : [];
1048
1053
  var readOnlyServers = snapshot && snapshot.externalServers ? snapshot.externalServers : [];
1049
1054
  var allServers = servers.concat(readOnlyServers);
1050
- var busyAny = busy !== null || refreshing;
1051
1055
 
1052
1056
  var listChildren = [];
1053
1057
  if (allServers.length === 0) {
@@ -1146,7 +1150,9 @@ window.__ModuleLoader__.load({
1146
1150
  }, t("confirmYes")))));
1147
1151
  }
1148
1152
 
1149
- var topDisabled = refreshing || mode !== null;
1153
+ // Only the refresh control reflects refresh progress. Disabling the two
1154
+ // write buttons for the same round-trip made the whole header blink.
1155
+ var topDisabled = mode !== null;
1150
1156
 
1151
1157
  // Master switch off: the whole host side is down, so the page offers the
1152
1158
  // way back instead of actions that cannot work.
@@ -1164,9 +1170,10 @@ window.__ModuleLoader__.load({
1164
1170
  McpH("h2", { className: "mcp-mgr-title" }, t("title")),
1165
1171
  McpH("button", {
1166
1172
  type: "button", className: "mcp-mgr-iconbtn", disabled: refreshing,
1173
+ "data-busy": refreshing ? "true" : "false",
1167
1174
  title: t("refresh"), "aria-label": t("refresh"),
1168
1175
  onClick: refresh,
1169
- }, McpH(IconRefresh, { size: 15 })),
1176
+ }, McpH(IconRefresh, { size: 15, className: refreshing ? "mcp-spin" : undefined })),
1170
1177
  McpH("button", {
1171
1178
  type: "button", className: "mcp-mgr-btn", disabled: topDisabled,
1172
1179
  onClick: function () { setEditing(null); setMode("add"); },
File without changes
package/lib/import.js CHANGED
File without changes
package/lib/index.js CHANGED
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * Surface wiring uses dynamic `ctx.inject(...)` scopes rather than a static
13
13
  * `inject` export: on a host without the web profile (no webServer) the
14
- * plugin stays dormant instead of blocking the whole dsh-pouch bundle. The
14
+ * plugin stays dormant instead of blocking the host. The
15
15
  * same mechanism powers the settings-GUI master switches (borrowed from
16
16
  * dsh-skills-mcp-manager): `enabled` tears the composition (routes + MCP
17
17
  * fibers) up and down live, `announceToAgent` toggles the model-facing
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.4",
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,7 +60,15 @@
60
60
  "optional": true
61
61
  }
62
62
  },
63
+ "scripts": {
64
+ "test": "node --test test/*.test.mjs"
65
+ },
63
66
  "license": "MIT",
67
+ "repository": {
68
+ "type": "git",
69
+ "url": "git+https://github.com/moon16u/dsh-pouch.git",
70
+ "directory": "packages/dsh-plugin-mcp-console"
71
+ },
64
72
  "publishConfig": {
65
73
  "access": "public",
66
74
  "registry": "https://registry.npmjs.org/"
@@ -68,9 +76,5 @@
68
76
  "devDependencies": {
69
77
  "react": "18.2.0",
70
78
  "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
79
  }
76
- }
80
+ }
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.