dsh-mcp-panel 0.6.23 → 0.6.26
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/CHANGELOG.md +23 -0
- package/README-es.md +3 -3
- package/README-hi.md +3 -3
- package/README-pt.md +3 -3
- package/README-zh.md +3 -3
- package/README.md +3 -3
- package/docs/assets/dsh-mcp-panel-demo.gif +0 -0
- package/docs/assets/dsh-mcp-panel-hero.png +0 -0
- package/lib/index.js +23 -5
- package/lib/types/probe.d.ts.map +1 -1
- package/package.json +9 -7
- package/src/probe.ts +21 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,7 +1,30 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.6.26] - 2026-10-18
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Add a 1280×720 hero and a 960×540, 4-second terminal GIF rendered from the test run; `screenshots.json` is an object array and `capture.json` records the command.
|
|
8
|
+
|
|
9
|
+
## [0.6.25] - 2026-10-18
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- **A timed-out stdio probe now kills the process tree on Windows.** `child.kill()` left the wrapped MCP server and its descendants running; the probe uses `taskkill /T /F` on win32 and still calls `child.kill()` elsewhere (issue #30: orphan processes/GBs of RSS).
|
|
14
|
+
|
|
3
15
|
All notable changes to this project are documented in this file.
|
|
4
16
|
|
|
17
|
+
## [0.6.24] - 2026-10-10
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- Publish with `npm publish` instead of `pnpm publish`.
|
|
22
|
+
|
|
23
|
+
pnpm's publish omits the README and a gitHead from the packument, so the registry
|
|
24
|
+
stored an empty readme and the package page showed no documentation at all.
|
|
25
|
+
Both symptoms are known upstream: pnpm#12966 and pnpm#3373.
|
|
26
|
+
|
|
27
|
+
|
|
5
28
|
## [0.6.23] - 2026-10-10
|
|
6
29
|
|
|
7
30
|
### Changed
|
package/README-es.md
CHANGED
|
@@ -40,7 +40,7 @@ La consola de gestión MCP para el cliente MCP oficial de DeepSeek Harness: aña
|
|
|
40
40
|
|
|
41
41
|
Cliente oficial = puente, este plugin = consola: lee el estado por el seam `mcp/status`, escribe solo parches de perfil de solo-anexar y con aprobación.
|
|
42
42
|
|
|
43
|
-

|
|
44
44
|
|
|
45
45
|

|
|
46
46
|
|
|
@@ -223,7 +223,7 @@ pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build && pn
|
|
|
223
223
|
|
|
224
224
|
## PerryLink DSH Plugin Family
|
|
225
225
|
|
|
226
|
-
Este proyecto es uno de los **
|
|
226
|
+
Este proyecto es uno de los **34 plugins activamente mantenidos** de DeepSeek Harness de [PerryLink](https://github.com/PerryLink): el registro tiene **42**, de los cuales **5** están congelados y **3** retirados; cada uno conserva su fila abajo, con el motivo en la columna Estado. Si este te ayuda, probablemente los demás también:
|
|
227
227
|
|
|
228
228
|
| Plugin | En una línea | Estado |
|
|
229
229
|
|---|---|---|
|
|
@@ -251,7 +251,7 @@ Este proyecto es uno de los **33 plugins activamente mantenidos** de DeepSeek Ha
|
|
|
251
251
|
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
252
252
|
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
253
253
|
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
254
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
|
|
254
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
255
255
|
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
256
256
|
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
257
257
|
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
package/README-hi.md
CHANGED
|
@@ -40,7 +40,7 @@ DeepSeek Harness के आधिकारिक MCP क्लाइंट क
|
|
|
40
40
|
|
|
41
41
|
आधिकारिक क्लाइंट = पुल, यह प्लगइन = कंसोल: `mcp/status` seam से स्थिति पढ़ें, केवल जोड़ने वाले, अनुमोदित प्रोफ़ाइल patch लिखें।
|
|
42
42
|
|
|
43
|
-

|
|
44
44
|
|
|
45
45
|

|
|
46
46
|
|
|
@@ -223,7 +223,7 @@ pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build && pn
|
|
|
223
223
|
|
|
224
224
|
## PerryLink DSH Plugin Family
|
|
225
225
|
|
|
226
|
-
यह प्रोजेक्ट [PerryLink](https://github.com/PerryLink) के DeepSeek Harness प्लगइन परिवार का हिस्सा है — **
|
|
226
|
+
यह प्रोजेक्ट [PerryLink](https://github.com/PerryLink) के DeepSeek Harness प्लगइन परिवार का हिस्सा है — **34 सक्रिय रूप से अनुरक्षित**, कुल सूची **42** है जिसमें **5 फ़्रोज़न** और **3 सेवानिवृत्त** हैं; हर एक की पंक्ति नीचे बनी रहती है, कारण “स्थिति” कॉलम में है। अगर यह उपयोगी लगे, तो अन्य भी मददगार होंगे:
|
|
227
227
|
|
|
228
228
|
| Plugin | एक पंक्ति में | स्थिति |
|
|
229
229
|
|---|---|---|
|
|
@@ -251,7 +251,7 @@ pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build && pn
|
|
|
251
251
|
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
252
252
|
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
253
253
|
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
254
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
|
|
254
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
255
255
|
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
256
256
|
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
257
257
|
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
package/README-pt.md
CHANGED
|
@@ -40,7 +40,7 @@ O console de gerenciamento MCP para o cliente MCP oficial do DeepSeek Harness: a
|
|
|
40
40
|
|
|
41
41
|
Cliente oficial = ponte, este plugin = console: leia o status pelo seam `mcp/status`, escreva apenas patches de perfil somente-anexar e com aprovação.
|
|
42
42
|
|
|
43
|
-

|
|
44
44
|
|
|
45
45
|

|
|
46
46
|
|
|
@@ -223,7 +223,7 @@ O `scripts/verify-headless.mjs` inicia o perfil web real e imprime a saída exat
|
|
|
223
223
|
|
|
224
224
|
## PerryLink DSH Plugin Family
|
|
225
225
|
|
|
226
|
-
Este projeto é um dos **
|
|
226
|
+
Este projeto é um dos **34 plugins ativamente mantidos** do DeepSeek Harness da [PerryLink](https://github.com/PerryLink): o registro tem **42**, dos quais **5** estão congelados e **3** aposentados; cada um mantém sua linha abaixo, com o motivo na coluna Status. Se este ajudou você, provavelmente os outros também ajudarão:
|
|
227
227
|
|
|
228
228
|
| Plugin | Em uma linha | Status |
|
|
229
229
|
|---|---|---|
|
|
@@ -251,7 +251,7 @@ Este projeto é um dos **33 plugins ativamente mantidos** do DeepSeek Harness da
|
|
|
251
251
|
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
252
252
|
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
253
253
|
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
254
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
|
|
254
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
255
255
|
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
256
256
|
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
257
257
|
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
package/README-zh.md
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
|
|
43
43
|
官方 client = 桥接,本插件 = 控制台:经 `mcp/status` seam 读取状态,只写入只追加、走审批的 profile patch。
|
|
44
44
|
|
|
45
|
-

|
|
46
46
|
|
|
47
47
|

|
|
48
48
|
|
|
@@ -225,7 +225,7 @@ pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build && pn
|
|
|
225
225
|
|
|
226
226
|
## PerryLink DSH Plugin Family
|
|
227
227
|
|
|
228
|
-
本项目是 [PerryLink](https://github.com/PerryLink) 维护的 DeepSeek Harness 插件家族成员:**
|
|
228
|
+
本项目是 [PerryLink](https://github.com/PerryLink) 维护的 DeepSeek Harness 插件家族成员:**34 个活跃维护**,名册共 **42** 个,其中 **5 个已冻结**、**3 个已退役**——每一个都在下表保留自己的行,原因见「状态」列。如果它能帮到你,其他的也会:
|
|
229
229
|
|
|
230
230
|
| Plugin | 一句话 | 状态 |
|
|
231
231
|
|---|---|---|
|
|
@@ -253,7 +253,7 @@ pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build && pn
|
|
|
253
253
|
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
254
254
|
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
255
255
|
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
256
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
|
|
256
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
257
257
|
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
258
258
|
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
259
259
|
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
package/README.md
CHANGED
|
@@ -44,7 +44,7 @@ The MCP management console for the official DeepSeek Harness MCP client — add,
|
|
|
44
44
|
|
|
45
45
|
Official client = bridge, this plugin = console: read status through the `mcp/status` seam, write only append-only, approval-gated profile patches.
|
|
46
46
|
|
|
47
|
-

|
|
48
48
|
|
|
49
49
|

|
|
50
50
|
|
|
@@ -233,7 +233,7 @@ pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build && pn
|
|
|
233
233
|
|
|
234
234
|
## PerryLink DSH Plugin Family
|
|
235
235
|
|
|
236
|
-
This project is one of the **
|
|
236
|
+
This project is one of the **34 actively maintained** DeepSeek Harness plugins from [PerryLink](https://github.com/PerryLink) — the roster is **42**, of which **5** are frozen and **3** retired; every one keeps its row below, with the reason in the Status column. If this one helps you, the others likely will too:
|
|
237
237
|
|
|
238
238
|
| Plugin | One-liner | Status |
|
|
239
239
|
|---|---|---|
|
|
@@ -261,7 +261,7 @@ This project is one of the **33 actively maintained** DeepSeek Harness plugins f
|
|
|
261
261
|
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
262
262
|
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
263
263
|
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
264
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
|
|
264
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
265
265
|
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
266
266
|
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
267
267
|
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
|
Binary file
|
|
Binary file
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { s as string } from "./schemas-Bc0dJzRm.js";
|
|
2
2
|
import z from "@deepseek-ai/schemastery";
|
|
3
|
-
import { spawn } from "node:child_process";
|
|
3
|
+
import { execFile, spawn } from "node:child_process";
|
|
4
4
|
import { scrubbedParentEnv } from "@deepseek-ai/dsh-subprocess";
|
|
5
5
|
import { defineTool } from "@deepseek-ai/dsh-tools";
|
|
6
6
|
import { join } from "node:path";
|
|
@@ -813,6 +813,26 @@ function sanitizeError(error) {
|
|
|
813
813
|
*
|
|
814
814
|
* @module dsh-mcp-panel/probe
|
|
815
815
|
*/
|
|
816
|
+
/**
|
|
817
|
+
* Kill a stdio probe child and, on Windows, its whole process tree.
|
|
818
|
+
* `child.kill()` only signals the direct child; MCP servers frequently wrap
|
|
819
|
+
* `npx`/`cmd`, leaving the real server and its descendants alive.
|
|
820
|
+
* @param child - spawned probe child.
|
|
821
|
+
*/
|
|
822
|
+
function killProcessTree(child) {
|
|
823
|
+
try {
|
|
824
|
+
if (process.platform === "win32" && child?.pid !== void 0) {
|
|
825
|
+
execFile("taskkill", [
|
|
826
|
+
"/pid",
|
|
827
|
+
String(child.pid),
|
|
828
|
+
"/T",
|
|
829
|
+
"/F"
|
|
830
|
+
], { windowsHide: true }, () => {});
|
|
831
|
+
return;
|
|
832
|
+
}
|
|
833
|
+
child?.kill();
|
|
834
|
+
} catch {}
|
|
835
|
+
}
|
|
816
836
|
/** Producer kind; also the job-id prefix. */
|
|
817
837
|
const PROBE_KIND = "mcp-probe";
|
|
818
838
|
/** JSON-RPC MCP initialize request used by the probe (protocol constant). */
|
|
@@ -822,7 +842,7 @@ const INITIALIZE_PROTOCOL_VERSION = "2024-11-05";
|
|
|
822
842
|
* advertised version tracks the package version. */
|
|
823
843
|
const PROBE_CLIENT_INFO = {
|
|
824
844
|
name: "dsh-mcp-panel",
|
|
825
|
-
version: "0.6.
|
|
845
|
+
version: "0.6.26"
|
|
826
846
|
};
|
|
827
847
|
/** Display cap for server-reported name/version fields in probe details. */
|
|
828
848
|
const DISPLAY_LIMIT = 80;
|
|
@@ -915,9 +935,7 @@ function probeStdio(target, timeoutMs, signal) {
|
|
|
915
935
|
if (settled) return;
|
|
916
936
|
settled = true;
|
|
917
937
|
if (timer !== void 0) clearTimeout(timer);
|
|
918
|
-
|
|
919
|
-
child?.kill();
|
|
920
|
-
} catch {}
|
|
938
|
+
killProcessTree(child);
|
|
921
939
|
resolve(outcome);
|
|
922
940
|
};
|
|
923
941
|
timer = setTimeout(() => {
|
package/lib/types/probe.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAqBH,OAAO,KAAK,EAAE,QAAQ,EAAc,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAE9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEnD,6CAA6C;AAC7C,eAAO,MAAM,UAAU,cAAc,CAAA;AAErC,OAAO,QAAQ,uBAAuB,CAAC;IACrC,UAAU,UAAU;QAClB,kFAAkF;QAClF,WAAW,EAAE,WAAW,CAAA;KACzB;CACF;AAKD;;oDAEoD;AACpD,eAAO,MAAM,iBAAiB;IAAK,IAAI;IAAmB,OAAO;CAAY,CAAA;AAE7E,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAA;IAC9B,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAA;CACf;AAED,8EAA8E;AAC9E,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,GACnG;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC9C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAUL;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACzC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CA4CvB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,EAC/C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CA6EvB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CAazE;AAOD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,CA6C3G"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-mcp-panel",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.26",
|
|
4
4
|
"description": "MCP management console for the official DeepSeek Harness MCP client: /mcp command with health diagnostics and pipeline trial calls, a Settings MCP tab with server CRUD (append-only profile-patch fragments, approval-gated writes with automatic backups), a tool trial console over the official tool pipeline, connection status, reconnect counts and sanitized tool inventory, plus an optional Streamable HTTP probe.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -121,6 +121,7 @@
|
|
|
121
121
|
"node": "^22.19.0 || >=24.0.0",
|
|
122
122
|
"dsh": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0"
|
|
123
123
|
},
|
|
124
|
+
"packageManager": "pnpm@11.7.0",
|
|
124
125
|
"peerDependencies": {
|
|
125
126
|
"@deepseek-ai/cordis": "^4.0.5-alpha.1",
|
|
126
127
|
"@deepseek-ai/cordis-plugin-loader": "^1.0.3",
|
|
@@ -184,11 +185,6 @@
|
|
|
184
185
|
"react-dom": "19.2.8",
|
|
185
186
|
"vitest": "^5.0.0"
|
|
186
187
|
},
|
|
187
|
-
"license": "Apache-2.0",
|
|
188
|
-
"funding": {
|
|
189
|
-
"type": "individual",
|
|
190
|
-
"url": "https://github.com/sponsors/PerryLink"
|
|
191
|
-
},
|
|
192
188
|
"scripts": {
|
|
193
189
|
"build": "node scripts/prepare.mjs",
|
|
194
190
|
"typecheck": "tsc --noEmit",
|
|
@@ -198,7 +194,13 @@
|
|
|
198
194
|
"test:coverage": "vitest run --coverage",
|
|
199
195
|
"lint": "oxlint",
|
|
200
196
|
"check:readmes": "node scripts/check-readme-sync.mjs",
|
|
197
|
+
"prepare": "node scripts/prepare.mjs",
|
|
201
198
|
"verify:self-contained": "node scripts/verify-self-contained.mjs",
|
|
202
199
|
"verify:artifacts": "node scripts/verify-artifacts.mjs"
|
|
200
|
+
},
|
|
201
|
+
"license": "Apache-2.0",
|
|
202
|
+
"funding": {
|
|
203
|
+
"type": "individual",
|
|
204
|
+
"url": "https://github.com/sponsors/PerryLink"
|
|
203
205
|
}
|
|
204
|
-
}
|
|
206
|
+
}
|
package/src/probe.ts
CHANGED
|
@@ -14,7 +14,25 @@
|
|
|
14
14
|
* @module dsh-mcp-panel/probe
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Kill a stdio probe child and, on Windows, its whole process tree.
|
|
19
|
+
* `child.kill()` only signals the direct child; MCP servers frequently wrap
|
|
20
|
+
* `npx`/`cmd`, leaving the real server and its descendants alive.
|
|
21
|
+
* @param child - spawned probe child.
|
|
22
|
+
*/
|
|
23
|
+
function killProcessTree(child: ReturnType<typeof spawn> | undefined): void {
|
|
24
|
+
try {
|
|
25
|
+
if (process.platform === 'win32' && child?.pid !== undefined) {
|
|
26
|
+
execFile('taskkill', ['/pid', String(child.pid), '/T', '/F'], { windowsHide: true }, () => {})
|
|
27
|
+
return
|
|
28
|
+
}
|
|
29
|
+
child?.kill()
|
|
30
|
+
} catch {
|
|
31
|
+
/* already gone */
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
import { execFile, spawn } from 'node:child_process'
|
|
18
36
|
import type { JobHooks, JobOutcome, JobRegistry } from '@deepseek-ai/dsh-jobs'
|
|
19
37
|
import { scrubbedParentEnv } from '@deepseek-ai/dsh-subprocess'
|
|
20
38
|
import type { ToolDefinition } from '@deepseek-ai/dsh-tools'
|
|
@@ -38,7 +56,7 @@ const INITIALIZE_PROTOCOL_VERSION = '2024-11-05'
|
|
|
38
56
|
/** MCP clientInfo facts; protocol constants, not configuration. Exported so the
|
|
39
57
|
* version-consistency tripwire (`tests/version.spec.ts`) can assert the
|
|
40
58
|
* advertised version tracks the package version. */
|
|
41
|
-
export const PROBE_CLIENT_INFO = { name: 'dsh-mcp-panel', version: '0.6.
|
|
59
|
+
export const PROBE_CLIENT_INFO = { name: 'dsh-mcp-panel', version: '0.6.26' }
|
|
42
60
|
|
|
43
61
|
/** One settled probe: outcome status plus a sanitized one-line detail. */
|
|
44
62
|
export interface ProbeOutcome {
|
|
@@ -159,7 +177,7 @@ export function probeStdio(
|
|
|
159
177
|
if (settled) return
|
|
160
178
|
settled = true
|
|
161
179
|
if (timer !== undefined) clearTimeout(timer)
|
|
162
|
-
|
|
180
|
+
killProcessTree(child)
|
|
163
181
|
resolve(outcome)
|
|
164
182
|
}
|
|
165
183
|
timer = setTimeout(() => {
|