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 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
- ![Demostración de terminal de dsh-mcp-panel: dsh-mcp-panel — install, then /mcp status per server](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-demo.png)
43
+ ![Demostración de terminal de dsh-mcp-panel: dsh-mcp-panel — install, then /mcp status per server](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-hero.png)
44
44
 
45
45
  ![Animated terminal demo of dsh-mcp-panel](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-demo.gif)
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 **33 plugins activamente mantenidos** de DeepSeek Harness de [PerryLink](https://github.com/PerryLink): el registro tiene **42**, de los cuales **6** 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:
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 | 🧊 CONGELADO — ver el README del repositorio |
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
- ![dsh-mcp-panel का टर्मिनल डेमो: dsh-mcp-panel — install, then /mcp status per server](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-demo.png)
43
+ ![dsh-mcp-panel का टर्मिनल डेमो: dsh-mcp-panel — install, then /mcp status per server](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-hero.png)
44
44
 
45
45
  ![Animated terminal demo of dsh-mcp-panel](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-demo.gif)
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 प्लगइन परिवार का हिस्सा है — **33 सक्रिय रूप से अनुरक्षित**, कुल सूची **42** है जिसमें **6 फ़्रोज़न** और **3 सेवानिवृत्त** हैं; हर एक की पंक्ति नीचे बनी रहती है, कारण “स्थिति” कॉलम में है। अगर यह उपयोगी लगे, तो अन्य भी मददगार होंगे:
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 | 🧊 फ़्रोज़न — रिपॉज़िटरी README देखें |
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
- ![Demonstração de terminal do dsh-mcp-panel: dsh-mcp-panel — install, then /mcp status per server](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-demo.png)
43
+ ![Demonstração de terminal do dsh-mcp-panel: dsh-mcp-panel — install, then /mcp status per server](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-hero.png)
44
44
 
45
45
  ![Animated terminal demo of dsh-mcp-panel](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-demo.gif)
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 **33 plugins ativamente mantidos** do DeepSeek Harness da [PerryLink](https://github.com/PerryLink): o registro tem **42**, dos quais **6** 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:
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 | 🧊 CONGELADO — ver o README do repositório |
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
- ![dsh-mcp-panel 终端演示:dsh-mcp-panel — install, then /mcp status per server](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-demo.png)
45
+ ![dsh-mcp-panel 终端演示:dsh-mcp-panel — install, then /mcp status per server](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-hero.png)
46
46
 
47
47
  ![Animated terminal demo of dsh-mcp-panel](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-demo.gif)
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 插件家族成员:**33 个活跃维护**,名册共 **42** 个,其中 **6 个已冻结**、**3 个已退役**——每一个都在下表保留自己的行,原因见「状态」列。如果它能帮到你,其他的也会:
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 | 🧊 已冻结 — 见仓库 README |
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
- ![Terminal demo of dsh-mcp-panel: dsh-mcp-panel — install, then /mcp status per server](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-demo.png)
47
+ ![Terminal demo of dsh-mcp-panel: dsh-mcp-panel — install, then /mcp status per server](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-hero.png)
48
48
 
49
49
  ![Animated terminal demo of dsh-mcp-panel](https://raw.githubusercontent.com/PerryLink/dsh-mcp-panel/main/docs/assets/dsh-mcp-panel-demo.gif)
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 **33 actively maintained** DeepSeek Harness plugins from [PerryLink](https://github.com/PerryLink) — the roster is **42**, of which **6** 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:
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 | 🧊 FROZEN — see the repo README |
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
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.23"
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
- try {
919
- child?.kill();
920
- } catch {}
938
+ killProcessTree(child);
921
939
  resolve(outcome);
922
940
  };
923
941
  timer = setTimeout(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,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"}
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.23",
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
- import { spawn } from 'node:child_process'
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.23' }
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
- try { child?.kill() } catch { /* already gone */ }
180
+ killProcessTree(child)
163
181
  resolve(outcome)
164
182
  }
165
183
  timer = setTimeout(() => {