@moon16u/dsh-plugin-mcp-console 0.3.1 → 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 +0 -0
- package/README.zh-CN.md +0 -0
- package/cordis.patch.yml +0 -0
- package/lib/client.js +11 -3
- package/lib/clientAdapter.js +0 -0
- package/lib/import.js +0 -0
- package/lib/index.js +8 -6
- package/lib/orchestrator.js +0 -0
- package/lib/routes.js +0 -0
- package/lib/status.js +0 -0
- package/lib/store.js +0 -0
- package/lib/types/client/index.d.ts +0 -0
- package/lib/types/index.d.ts +0 -0
- package/lib/yamlMigrator.js +0 -0
- package/package.json +13 -13
- package/LICENSE +0 -21
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
|
-
|
|
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"); },
|
package/lib/clientAdapter.js
CHANGED
|
File without changes
|
package/lib/import.js
CHANGED
|
File without changes
|
package/lib/index.js
CHANGED
|
@@ -67,12 +67,14 @@ export function resolveConfig(value, storedConfig) {
|
|
|
67
67
|
* settings page instead of hand-edited config files.
|
|
68
68
|
*/
|
|
69
69
|
const SYSTEM_PROMPT_GUIDANCE =
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
70
|
+
"An MCP console plugin (dsh-plugin-mcp-console) is installed on this machine: the \"MCP Servers\" " +
|
|
71
|
+
"section of the DSH Web settings page manages all MCP servers — add/edit/delete, enable/disable, " +
|
|
72
|
+
"per-tool toggles, mcpServers JSON import, and connection testing. Enabled servers connect for real " +
|
|
73
|
+
"via the official @deepseek-ai/dsh-mcp-client, with tools named mcp__<server>__<tool>; tools disabled " +
|
|
74
|
+
"per-tool still appear in the tool list, but calls are rejected with a hint to enable them in the " +
|
|
75
|
+
"settings page. The plugin persists its config in ~/.dsh/dsh-mcp.json — no need to hand-edit, and do " +
|
|
76
|
+
"not hand-edit, cordis.patch.yml. When the user mentions \"MCP servers / MCP management / import MCP / " +
|
|
77
|
+
"test MCP connection\", guide them to the \"MCP Servers\" section of the settings page.";
|
|
76
78
|
|
|
77
79
|
/** System-prompt band this announcement sits in (after plugin guidance basics). */
|
|
78
80
|
const ANNOUNCEMENT_ORDER = 160;
|
package/lib/orchestrator.js
CHANGED
|
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
|
package/lib/types/index.d.ts
CHANGED
|
File without changes
|
package/lib/yamlMigrator.js
CHANGED
|
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.
|
|
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",
|
|
@@ -36,15 +36,15 @@
|
|
|
36
36
|
},
|
|
37
37
|
"engines": {
|
|
38
38
|
"node": ">=20.0.0",
|
|
39
|
-
"dsh": ">=0.2.
|
|
39
|
+
"dsh": ">=0.2.1-rc.1"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
|
-
"@deepseek-ai/cordis": "~4.0.
|
|
43
|
-
"@deepseek-ai/dsh-mcp-client": ">=0.2.
|
|
44
|
-
"@deepseek-ai/dsh-host-webserver": ">=0.2.
|
|
45
|
-
"@deepseek-ai/dsh-settings": ">=0.2.
|
|
46
|
-
"@deepseek-ai/dsh-tools": ">=0.2.
|
|
47
|
-
"@deepseek-ai/schemastery": "~3.18.
|
|
42
|
+
"@deepseek-ai/cordis": "~4.0.5",
|
|
43
|
+
"@deepseek-ai/dsh-mcp-client": ">=0.2.1-rc.1",
|
|
44
|
+
"@deepseek-ai/dsh-host-webserver": ">=0.2.1-rc.1",
|
|
45
|
+
"@deepseek-ai/dsh-settings": ">=0.2.1-rc.1",
|
|
46
|
+
"@deepseek-ai/dsh-tools": ">=0.2.1-rc.1",
|
|
47
|
+
"@deepseek-ai/schemastery": "~3.18.5"
|
|
48
48
|
},
|
|
49
49
|
"peerDependenciesMeta": {
|
|
50
50
|
"@deepseek-ai/dsh-mcp-client": {
|
|
@@ -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.
|