dsh-mcp-panel 0.6.13 → 0.6.15
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 +21 -0
- package/{README.es.md → README-es.md} +13 -7
- package/{README.hi.md → README-hi.md} +13 -7
- package/{README.pt.md → README-pt.md} +13 -7
- package/{README.zh.md → README-zh.md} +13 -7
- package/README.md +13 -7
- package/cordis.patch.yml +5 -0
- package/docs/optimization-plan-v2.zh.md +7 -5
- package/docs/upstream-proposal.md +9 -0
- package/lib/client.js +192 -65
- package/lib/client.js.map +1 -1
- package/lib/index.js +103 -18
- package/lib/typert.host.js +31 -60
- package/lib/types/client/McpPanelTab.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +14 -0
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/remote.d.ts +56 -179
- package/lib/types/client/remote.d.ts.map +1 -1
- package/lib/types/command.d.ts.map +1 -1
- package/lib/types/config.d.ts +8 -0
- package/lib/types/config.d.ts.map +1 -1
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/patch.d.ts +7 -6
- package/lib/types/patch.d.ts.map +1 -1
- package/lib/types/service.d.ts +20 -0
- package/lib/types/service.d.ts.map +1 -1
- package/lib/types/trial.d.ts +8 -0
- package/lib/types/trial.d.ts.map +1 -1
- package/lib/types/typert.host.d.ts +56 -179
- package/lib/types/typert.host.d.ts.map +1 -1
- package/lib/types/upstream.d.ts +27 -20
- package/lib/types/upstream.d.ts.map +1 -1
- package/lib/types/wire.d.ts +113 -359
- package/lib/types/wire.d.ts.map +1 -1
- package/package.json +24 -23
- package/src/client/McpPanelTab.tsx +79 -0
- package/src/client/locales.ts +20 -4
- package/src/client/styles.ts +18 -0
- package/src/command.ts +8 -4
- package/src/config.ts +20 -0
- package/src/index.ts +3 -1
- package/src/patch.ts +17 -9
- package/src/probe.ts +1 -1
- package/src/service.ts +83 -4
- package/src/trial.ts +32 -6
- package/src/upstream.ts +27 -20
- package/src/wire.ts +33 -61
- package/src/write.ts +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project are documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.6.15] - 2026-09-15
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **Issue #27 — `disable` / `enable` / `edit` emitted `- set:` fragments the loader dialect does not implement (silent no-op).** Both renderers (`renderPatchFragment` and the `/mcp <server> disable|enable` suggestion) now emit the loader's real dialect: `- id: <entryId>` + `name:` + `disabled:` (or a full `config:` block for edits). `appendPatchFragment` reads the file back to confirm the appended block survived, and `writePatch` re-verifies every write against the loader's re-applied state before reporting success — a skipped patch (wrong dialect, a row living in a layer a profile patch cannot reach such as `$DSH_HOME/cordis.patch.yml`, or a name mismatch) now fails honestly instead of reading "written". New config: `writeVerifyEnabled` (default true) and `writeVerifyTimeoutMs` (default 3000).
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **Read-only Resources browser.** The shipped `@deepseek-ai/dsh-mcp-resources` service now bridges MCP resources upstream; the console feature-detects the service + the three registered shared tools and offers list / templates / URI read per server card through the OFFICIAL tool pipeline (results stay panel-only). `callTool` now accepts the three shared resource tools and injects the requested `server` into their arguments (conflicts fail closed). Capability detection no longer probes the never-shipped `mcpCatalog` face; Prompts stays `available: false` until upstream bridges prompt templates.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Compatibility baseline raised to `dsh-v0.1.6-alpha.1`: all `@deepseek-ai/dsh-*` dev/test pins and the runtime `dsh-subprocess` pin moved to `0.1.6-alpha.1`; `dshWorkshop.compatibility.dshVersions` gains `0.1.6-alpha.1`; the five-language READMEs now document the id-override CRUD dialect, the Resources browser, the write-verification hardening, and the corrected capabilities wording (Prompts + resource subscriptions pending).
|
|
18
|
+
|
|
19
|
+
## [0.6.14] - 2026-09-12
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Rename the four translated READMEs to `README-<lang>.md`. npm selects the package-page readme as the first markdown file matching its `{README,README.*}` glob (`@npmcli/package-json`, publish path), and that glob order puts `README.<lang>.md` ahead of `README.md` — so npm was serving the Simplified-Chinese file for this package too (measured on 15/15 sampled packages of the family). The new names sit outside the glob, so the English source is served again. No content changed apart from the language-switcher link each translation holds to its siblings, and the repo readme gate still passes. Takes effect with the next release; an already-published version cannot gain a corrected readme retroactively.
|
|
24
|
+
- Pin the `@deepseek-ai/dsh-*` dev/test dependencies to the published `0.1.5-rc.2` line and record `0.1.5-rc.2` in `dshWorkshop.compatibility.dshVersions`; the monthly Compat workflow now runs against `0.1.5-rc.2`. The peer range `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0` is unchanged, so no supported host line is dropped.
|
|
25
|
+
|
|
5
26
|
## [0.6.13] - 2026-09-10
|
|
6
27
|
|
|
7
28
|
### Changed
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
[](https://www.npmjs.com/package/dsh-mcp-panel)
|
|
17
17
|
[](https://www.npmjs.com/package/dsh-mcp-panel)
|
|
18
18
|
|
|
19
|
-
[English](README.md) · [简体中文](README
|
|
19
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
20
20
|
|
|
21
21
|
</div>
|
|
22
22
|
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
| Superficie | Estado |
|
|
28
28
|
|---|---|
|
|
29
|
-
| Harness | DeepSeek Harness `dsh-v0.1.
|
|
29
|
+
| Harness | DeepSeek Harness `dsh-v0.1.6-alpha.1` (tag de GitHub, verificado el 2026-09-16): cadena completa de puertas (typecheck / typecheck:ci / test / build / verify / package) más smoke de instalación de perfil contra el checkout 0.1.6-alpha.1. El servicio `@deepseek-ai/dsh-mcp-resources` ahora puentea Resources, que la consola detecta y navega en solo lectura. Línea base anterior: `dsh-v0.1.5-rc.2` (verificado el 2026-09-11). |
|
|
30
30
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
31
31
|
| Plataformas | Web GUI (doble cara: host + navegador) |
|
|
32
32
|
| Modelo | Cualquiera (el panel es de solo lectura; solo la salida de `/mcp` es legible por el modelo) |
|
|
@@ -40,7 +40,8 @@
|
|
|
40
40
|
- **`/mcp <servidor> health`** — sugerencias de autorreparación derivadas (ENOENT → dependencia faltante, ECONNREFUSED, timeouts, 401/403/404, DNS, rate limit, reconexión agotada…); código de salida / stderr etiquetados honestamente como *pendiente de soporte upstream*.
|
|
41
41
|
- **`/mcp <servidor> call <tool> [json]`** — llamada de prueba por el **pipeline oficial de herramientas** (`ctx.tools.execute()`); política de permisos pre-ejecución, aprobación, guards y post-ejecución, todo en vigor.
|
|
42
42
|
- **Ajustes → Plugins → MCP** — tarjetas de estado con insignias, diagnósticos y sondas, más el CRUD de servidores y el banco de pruebas de herramientas.
|
|
43
|
-
- **CRUD de servidores** — formularios de alta/edición/borrado →
|
|
43
|
+
- **CRUD de servidores** — formularios de alta/edición/borrado → `insert` para alta y anulaciones dirigidas por id (`- id:` + `name:` + `disabled:`/`config:`) para edición/borrado → copia al portapapeles o escritura con aprobación, copias de seguridad automáticas y re-verificación contra el loader.
|
|
44
|
+
- **Navegación de Resources** — listado de recursos, listado de plantillas y lecturas de URI de solo lectura mediante las herramientas oficiales `list_mcp_resources` / `list_mcp_resource_templates` / `read_mcp_resource` (puenteadas por el servicio `@deepseek-ai/dsh-mcp-resources`); los resultados se muestran solo en la pestaña, nunca en el contexto del modelo.
|
|
44
45
|
- **Banco de pruebas de herramientas** — servidor → herramienta `mcp__*` → argumentos JSON → resultado JSON canónico + contenido renderizado; limitado por `trialMaxResultChars`; solo panel, nunca contexto del modelo.
|
|
45
46
|
|
|
46
47
|
## Architecture: official client = bridge, this plugin = console
|
|
@@ -78,7 +79,7 @@ La consola **lee** el cliente por su seam de observabilidad `mcp/status` (evento
|
|
|
78
79
|
|---|---|---|
|
|
79
80
|
| Añadir servidor | Editar YAML, cuidar indentación/comillas | Formulario → fragmento de parche → **copiar** o **escribir** (aprobación + copia de seguridad) |
|
|
80
81
|
| Editar servidor | Editar YAML, reiniciar/recarga en caliente | Formulario precargado de la fila en vivo; los secretos sin cambios conservan su valor en el host |
|
|
81
|
-
| Eliminar servidor | Borrar la fila |
|
|
82
|
+
| Eliminar servidor | Borrar la fila | Anulación `- id:` + `disabled: true` (el vocabulario de parches no tiene remove) — re-habilitable |
|
|
82
83
|
| Ver estado | Leer logs | Insignias + reconexiones + último error, en vivo desde `mcp/status` |
|
|
83
84
|
| Probar una herramienta | Pedírselo al modelo | Banco de pruebas → pipeline oficial `ctx.tools.execute()` (permisos y aprobación en vigor) |
|
|
84
85
|
| Diagnosticar fallos | grep de logs | `/mcp <servidor> health` con sugerencias derivadas |
|
|
@@ -132,6 +133,8 @@ Todas las opciones son campos Schemastery `Config` (modificables desde cordis.ym
|
|
|
132
133
|
| `trialTimeoutMs` | `120000` | Plazo del panel por llamada de prueba en ms |
|
|
133
134
|
| `trialMaxResultChars` | `60000` | Tope del payload de resultado de prueba en caracteres |
|
|
134
135
|
| `writeEnabled` | `true` | Interruptor de seguridad: `false` rechaza toda escritura (copiar sigue funcionando) |
|
|
136
|
+
| `writeVerifyEnabled` | `true` | Re-verifica cada escritura contra el estado re-aplicado del loader antes de reportar éxito |
|
|
137
|
+
| `writeVerifyTimeoutMs` | `3000` | Presupuesto de sondeo para la verificación de escritura en ms |
|
|
135
138
|
| `backupCount` | `5` | Copias de `cordis.patch.yml` retenidas por escritura |
|
|
136
139
|
| `catalogEntries` | `[]` | Superposición de usuario para el directorio recomendado: anexa entradas; una entrada con el mismo `id` reemplaza la integrada |
|
|
137
140
|
|
|
@@ -149,7 +152,9 @@ Todas las opciones son campos Schemastery `Config` (modificables desde cordis.ym
|
|
|
149
152
|
|
|
150
153
|
## Resources & Prompts
|
|
151
154
|
|
|
152
|
-
|
|
155
|
+
Resources YA están puenteados upstream: el bundle base monta `@deepseek-ai/dsh-mcp-resources`, el cliente oficial registra el provider de recursos de cada conexión en `ctx.mcpResources`, y ese paquete posee las tres herramientas compartidas (`list_mcp_resources`, `list_mcp_resource_templates`, `read_mcp_resource`). La consola detecta el servicio y las herramientas registradas, y ofrece un navegador de Resources de solo lectura (lista / plantillas / lectura de URI) en cada tarjeta de servidor — cada llamada pasa por el pipeline OFICIAL de herramientas y los resultados nunca entran en el contexto del modelo.
|
|
156
|
+
|
|
157
|
+
Las **plantillas de prompts** y las **suscripciones a recursos** siguen diferidas upstream; el tablero de capacidades marca Prompts **pendiente de soporte upstream**.
|
|
153
158
|
|
|
154
159
|
## Permissions & data
|
|
155
160
|
|
|
@@ -160,14 +165,15 @@ El cliente oficial documenta que *"Tools are the only bridged MCP capability"*
|
|
|
160
165
|
|
|
161
166
|
- **El puente sigue siendo el puente.** Sin cambios de transporte, OAuth o protocolo; una fila mcp-client por servidor, exactamente como a mano.
|
|
162
167
|
- **Sin estado falso.** Los campos de conexión sin observaciones upstream leen `unknown` / `—` con `statusSource: 'derived'`; códigos de salida y stderr nunca se inventan.
|
|
163
|
-
- **Escrituras solo-anexar, con aprobación y respaldo.** La consola nunca reescribe `cordis.patch.yml`; anexa operaciones generadas
|
|
168
|
+
- **Escrituras solo-anexar, con aprobación y respaldo.** La consola nunca reescribe `cordis.patch.yml`; anexa operaciones generadas, conserva las `backupCount` copias más recientes y re-verifica cada escritura contra el estado re-aplicado del loader antes de reportar éxito (un parche omitido nunca se muestra como éxito).
|
|
164
169
|
- **Sin inyección de prompts.** El panel no registra secciones de prompt; su único texto visible al modelo son las dos descripciones de herramienta/comando.
|
|
165
170
|
|
|
166
171
|
## Known limitations
|
|
167
172
|
|
|
168
|
-
- **
|
|
173
|
+
- **Plantillas de prompts y suscripciones a recursos** están pendientes de soporte upstream — el cliente oficial puentea herramientas y recursos, pero no prompts ni suscripciones.
|
|
169
174
|
- **Códigos de salida / stderr** se etiquetan *pendiente de soporte upstream* hasta que el cliente los exponga.
|
|
170
175
|
- **Panel de solo lectura** — la consola nunca falsifica un estado de conexión; los campos no observables leen `unknown` / `-1` / `—`.
|
|
176
|
+
- **Las escrituras se verifican, no se garantizan** — la consola re-verifica cada escritura contra el estado re-aplicado del loader y falla honestamente cuando el loader no la aplicó (p. ej. una fila insertada por `$DSH_HOME/cordis.patch.yml`, que un parche de capa de perfil no puede alcanzar).
|
|
171
177
|
|
|
172
178
|
## Development
|
|
173
179
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
[](https://www.npmjs.com/package/dsh-mcp-panel)
|
|
17
17
|
[](https://www.npmjs.com/package/dsh-mcp-panel)
|
|
18
18
|
|
|
19
|
-
[English](README.md) · [简体中文](README
|
|
19
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
20
20
|
|
|
21
21
|
</div>
|
|
22
22
|
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
| सतह | स्थिति |
|
|
28
28
|
|---|---|
|
|
29
|
-
| Harness | DeepSeek Harness `dsh-v0.1.
|
|
29
|
+
| Harness | DeepSeek Harness `dsh-v0.1.6-alpha.1` (GitHub tag, 2026-09-16 को सत्यापित): 0.1.6-alpha.1 checkout के विरुद्ध पूर्ण गेट शृंखला (typecheck / typecheck:ci / test / build / verify / package) + प्रोफ़ाइल इंस्टॉल स्मोक। `@deepseek-ai/dsh-mcp-resources` सेवा अब Resources जोड़ती है, जिसे कंसोल फ़ीचर-डिटेक्ट कर रीड-ओनली ब्राउज़ करता है। पिछली आधार रेखा: `dsh-v0.1.5-rc.2` (2026-09-11 को सत्यापित)। |
|
|
30
30
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
31
31
|
| प्लेटफ़ॉर्म | Web GUI (दोहरा चेहरा: host + browser) |
|
|
32
32
|
| मॉडल | कोई भी (पैनल रीड-ओनली है; केवल `/mcp` आउटपुट मॉडल-पठनीय है) |
|
|
@@ -40,7 +40,8 @@
|
|
|
40
40
|
- **`/mcp <server> health`** — व्युत्पन्न स्व-उपचार सुझाव (ENOENT → अनुपलब्ध निर्भरता, ECONNREFUSED, टाइमआउट, 401/403/404, DNS, दर सीमा, रीकनेक्ट समाप्त…); एग्ज़िट कोड / stderr पूँछ ईमानदारी से *upstream समर्थन की प्रतीक्षा में* चिह्नित।
|
|
41
41
|
- **`/mcp <server> call <tool> [json]`** — **आधिकारिक टूल पाइपलाइन** (`ctx.tools.execute()`) से परीक्षण कॉल; प्री-एग्ज़ीक्यूट अनुमति नीति, अनुमोदन, guards और post-execute सब लागू।
|
|
42
42
|
- **सेटिंग्स → प्लगइन्स → MCP टैब** — बैज, निदान और प्रोब वाले स्थिति कार्ड, साथ में सर्वर CRUD और टूल ट्रायल कंसोल।
|
|
43
|
-
- **सर्वर CRUD** — जोड़/बदल/हटा फ़ॉर्म → `insert
|
|
43
|
+
- **सर्वर CRUD** — जोड़/बदल/हटा फ़ॉर्म → जोड़ने के लिए `insert` और बदलने/हटाने के लिए id-लक्षित ओवरराइड (`- id:` + `name:` + `disabled:`/`config:`) → क्लिपबोर्ड कॉपी या अनुमोदित लेखन, स्वचालित बैकअप और loader के विरुद्ध पुनः सत्यापन के साथ।
|
|
44
|
+
- **Resources ब्राउज़िंग** — आधिकारिक `list_mcp_resources` / `list_mcp_resource_templates` / `read_mcp_resource` टूल से रीड-ओनली संसाधन सूची, टेम्पलेट सूची और URI पठन (`@deepseek-ai/dsh-mcp-resources` सेवा द्वारा जोड़े गए); परिणाम केवल टैब में दिखते हैं, मॉडल संदर्भ में कभी नहीं।
|
|
44
45
|
- **टूल ट्रायल कंसोल** — सर्वर → `mcp__*` टूल → JSON तर्क → कैनोनिकल JSON परिणाम + रेंडर सामग्री; `trialMaxResultChars` से सीमित; केवल पैनल, मॉडल संदर्भ में कभी नहीं।
|
|
45
46
|
|
|
46
47
|
## Architecture: official client = bridge, this plugin = console
|
|
@@ -78,7 +79,7 @@
|
|
|
78
79
|
|---|---|---|
|
|
79
80
|
| सर्वर जोड़ें | YAML संपादित करें, इंडेंट/कोट्स का ध्यान | फ़ॉर्म → patch अंश → **कॉपी** या **लिखें** (अनुमोदन + बैकअप) |
|
|
80
81
|
| सर्वर बदलें | YAML संपादित करें, रीस्टार्ट/हॉट-रीलोड | लाइव पंक्ति से पहले से भरा फ़ॉर्म; बिना बदले सीक्रेट host पर ही रहते हैं |
|
|
81
|
-
| सर्वर हटाएँ | पंक्ति मिटाएँ | `
|
|
82
|
+
| सर्वर हटाएँ | पंक्ति मिटाएँ | `- id:` + `disabled: true` ओवरराइड (patch शब्दावली में remove नहीं) — कभी भी फिर से सक्षम करने योग्य |
|
|
82
83
|
| स्थिति देखें | लॉग पढ़ें | बैज + रीकनेक्ट + अंतिम त्रुटि, `mcp/status` से लाइव |
|
|
83
84
|
| टूल आज़माएँ | मॉडल से कहें | ट्रायल कंसोल → आधिकारिक `ctx.tools.execute()` पाइपलाइन (अनुमतियाँ और अनुमोदन लागू) |
|
|
84
85
|
| विफलताओं का निदान | लॉग grep करें | `/mcp <server> health` व्युत्पन्न सुझावों के साथ |
|
|
@@ -132,6 +133,8 @@ dsh --profile web --dump-config | grep -A3 'id: mcp-panel'
|
|
|
132
133
|
| `trialTimeoutMs` | `120000` | प्रति ट्रायल कॉल पैनल-साइड समय सीमा (ms) |
|
|
133
134
|
| `trialMaxResultChars` | `60000` | ट्रायल परिणाम payload की सीमा (वर्ण) |
|
|
134
135
|
| `writeEnabled` | `true` | कठोर स्विच: `false` हर प्रोफ़ाइल लेखन अस्वीकार करता है (कॉपी फिर भी चलती है) |
|
|
136
|
+
| `writeVerifyEnabled` | `true` | सफलता बताने से पहले हर लेखन को loader के पुनः-लागू अवस्था के विरुद्ध सत्यापित करता है |
|
|
137
|
+
| `writeVerifyTimeoutMs` | `3000` | लेखन सत्यापन के लिए पोलिंग बजट (मि.से.) |
|
|
135
138
|
| `backupCount` | `5` | प्रति लेखन रखे गए `cordis.patch.yml` बैकअप |
|
|
136
139
|
| `catalogEntries` | `[]` | अनुशंसित निर्देशिका के लिए उपयोगकर्ता ओवरले: प्रविष्टियाँ जोड़ता है; समान `id` वाली प्रविष्टि अंतर्निहित को बदल देती है |
|
|
137
140
|
|
|
@@ -149,7 +152,9 @@ dsh --profile web --dump-config | grep -A3 'id: mcp-panel'
|
|
|
149
152
|
|
|
150
153
|
## Resources & Prompts
|
|
151
154
|
|
|
152
|
-
आधिकारिक क्लाइंट
|
|
155
|
+
Resources अब upstream जोड़ चुका है: base bundle `@deepseek-ai/dsh-mcp-resources` माउंट करता है, आधिकारिक क्लाइंट हर कनेक्शन का संसाधन provider `ctx.mcpResources` में पंजीकृत करता है, और वह पैकेज तीन साझा टूल (`list_mcp_resources`, `list_mcp_resource_templates`, `read_mcp_resource`) रखता है। कंसोल सेवा और पंजीकृत टूल को फ़ीचर-डिटेक्ट करता है, और हर सर्वर कार्ड पर रीड-ओनली Resources ब्राउज़र (सूची / टेम्पलेट / URI पठन) देता है — हर कॉल आधिकारिक टूल पाइपलाइन से जाती है और परिणाम मॉडल संदर्भ में कभी नहीं जाते।
|
|
156
|
+
|
|
157
|
+
MCP **prompt टेम्पलेट** और **संसाधन सदस्यताएँ** अभी भी upstream स्थगित हैं; क्षमता बोर्ड Prompts को **upstream समर्थन की प्रतीक्षा में** दर्शाता है।
|
|
153
158
|
|
|
154
159
|
## Permissions & data
|
|
155
160
|
|
|
@@ -160,14 +165,15 @@ dsh --profile web --dump-config | grep -A3 'id: mcp-panel'
|
|
|
160
165
|
|
|
161
166
|
- **पुल पुल ही रहता है।** ट्रांसपोर्ट, OAuth या प्रोटोकॉल में कोई बदलाव नहीं; प्रति सर्वर एक mcp-client पंक्ति, ठीक हाथ से लिखी हुई।
|
|
162
167
|
- **कोई नकली स्थिति नहीं।** बिना upstream अवलोकन वाले कनेक्शन फ़ील्ड `unknown` / `—` और `statusSource: 'derived'` पढ़ते हैं; एग्ज़िट कोड और stderr पूँछ कभी गढ़े नहीं जाते।
|
|
163
|
-
- **लेखन केवल-जोड़ने वाला, अनुमोदित, बैकअप सहित।** कंसोल कभी `cordis.patch.yml` को दोबारा नहीं लिखता; यह जनरेट किए ऑपरेशन जोड़ता
|
|
168
|
+
- **लेखन केवल-जोड़ने वाला, अनुमोदित, बैकअप सहित।** कंसोल कभी `cordis.patch.yml` को दोबारा नहीं लिखता; यह जनरेट किए ऑपरेशन जोड़ता है, नवीनतम `backupCount` बैकअप रखता है, और सफलता बताने से पहले हर लेखन को loader के पुनः-लागू अवस्था के विरुद्ध सत्यापित करता है (छोड़ा गया patch कभी सफल नहीं दिखता)।
|
|
164
169
|
- **कोई प्रॉम्प्ट इंजेक्शन नहीं।** पैनल कोई प्रॉम्प्ट अनुभाग पंजीकृत नहीं करता; मॉडल को दिखने वाला उसका एकमात्र पाठ दो टूल/कमांड विवरण हैं।
|
|
165
170
|
|
|
166
171
|
## Known limitations
|
|
167
172
|
|
|
168
|
-
- **
|
|
173
|
+
- **prompt टेम्पलेट और संसाधन सदस्यताएँ** upstream समर्थन की प्रतीक्षा में — आधिकारिक क्लाइंट टूल और संसाधन जोड़ता है, पर prompts या सदस्यताएँ नहीं।
|
|
169
174
|
- **एग्ज़िट कोड / stderr पूँछ** तब तक *upstream समर्थन की प्रतीक्षा में* चिह्नित रहते हैं जब तक क्लाइंट उन्हें उजागर न करे।
|
|
170
175
|
- **रीड-ओनली पैनल** — कंसोल कभी कनेक्शन स्थिति नहीं गढ़ता; अप्रेक्षणीय फ़ील्ड `unknown` / `-1` / `—` पढ़ते हैं।
|
|
176
|
+
- **लेखन सत्यापित होते हैं, गारंटी नहीं** — कंसोल हर लेखन को loader के पुनः-लागू अवस्था के विरुद्ध सत्यापित करता है और जब loader उसे लागू न करे (जैसे `$DSH_HOME/cordis.patch.yml` द्वारा डाली गई पंक्ति, जिसे प्रोफ़ाइल-परत patch नहीं पहुँच सकता) तो ईमानदारी से विफल होता है।
|
|
171
177
|
|
|
172
178
|
## Development
|
|
173
179
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
[](https://www.npmjs.com/package/dsh-mcp-panel)
|
|
17
17
|
[](https://www.npmjs.com/package/dsh-mcp-panel)
|
|
18
18
|
|
|
19
|
-
[English](README.md) · [简体中文](README
|
|
19
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
20
20
|
|
|
21
21
|
</div>
|
|
22
22
|
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
| Superfície | Status |
|
|
28
28
|
|---|---|
|
|
29
|
-
| Harness | DeepSeek Harness `dsh-v0.1.
|
|
29
|
+
| Harness | DeepSeek Harness `dsh-v0.1.6-alpha.1` (tag do GitHub, verificado em 2026-09-16): cadeia completa de portas (typecheck / typecheck:ci / test / build / verify / package) mais smoke de instalação de perfil contra o checkout 0.1.6-alpha.1. O serviço `@deepseek-ai/dsh-mcp-resources` agora pontua Resources, que o console detecta e navega somente leitura. Linha de base anterior: `dsh-v0.1.5-rc.2` (verificado em 2026-09-11). |
|
|
30
30
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
31
31
|
| Plataformas | Web GUI (duas faces: host + navegador) |
|
|
32
32
|
| Modelo | Qualquer (o painel é somente leitura; só a saída de `/mcp` é legível pelo modelo) |
|
|
@@ -40,7 +40,8 @@ O `dsh-mcp-panel` é a camada de experiência sobre o cliente MCP oficial: uma v
|
|
|
40
40
|
- **`/mcp <servidor> health`** — sugestões de autorreparo derivadas (ENOENT → dependência ausente, ECONNREFUSED, timeouts, 401/403/404, DNS, rate limit, reconexão esgotada…); código de saída / cauda de stderr rotulados honestamente como *aguardando suporte upstream*.
|
|
41
41
|
- **`/mcp <servidor> call <tool> [json]`** — chamada de teste pelo **pipeline oficial de ferramentas** (`ctx.tools.execute()`); política de permissão pré-execução, aprovação, guards e pós-execução, tudo em vigor.
|
|
42
42
|
- **Configurações → Plugins → MCP** — cartões de status com selos, diagnósticos e sondas, mais o CRUD de servidores e o banco de testes de ferramentas.
|
|
43
|
-
- **CRUD de servidores** — formulários de adicionar/editar/remover →
|
|
43
|
+
- **CRUD de servidores** — formulários de adicionar/editar/remover → `insert` para adicionar e anulações dirigidas por id (`- id:` + `name:` + `disabled:`/`config:`) para editar/remover → cópia para a área de transferência ou gravação com aprovação, backups automáticos e re-verificação contra o loader.
|
|
44
|
+
- **Navegação de Resources** — listagem de recursos, listagem de templates e leituras de URI somente leitura pelas ferramentas oficiais `list_mcp_resources` / `list_mcp_resource_templates` / `read_mcp_resource` (ponteadas pelo serviço `@deepseek-ai/dsh-mcp-resources`); os resultados aparecem apenas na aba, nunca no contexto do modelo.
|
|
44
45
|
- **Banco de testes de ferramentas** — servidor → ferramenta `mcp__*` → argumentos JSON → resultado JSON canônico + conteúdo renderizado; limitado por `trialMaxResultChars`; somente painel, nunca contexto do modelo.
|
|
45
46
|
|
|
46
47
|
## Architecture: official client = bridge, this plugin = console
|
|
@@ -78,7 +79,7 @@ O console **lê** o cliente pelo seu seam de observabilidade `mcp/status` (event
|
|
|
78
79
|
|---|---|---|
|
|
79
80
|
| Adicionar servidor | Editar YAML, cuidar indentação/aspas | Formulário → fragmento de patch → **copiar** ou **gravar** (aprovação + backup) |
|
|
80
81
|
| Editar servidor | Editar YAML, reiniciar/recarga a quente | Formulário pré-preenchido da linha ao vivo; segredos inalterados preservam o valor no host |
|
|
81
|
-
| Remover servidor | Apagar a linha |
|
|
82
|
+
| Remover servidor | Apagar a linha | Anulação `- id:` + `disabled: true` (o vocabulário de patches não tem remove) — re-habilitável |
|
|
82
83
|
| Ver status | Ler logs | Selos + reconexões + último erro, ao vivo do `mcp/status` |
|
|
83
84
|
| Testar uma ferramenta | Pedir ao modelo | Banco de testes → pipeline oficial `ctx.tools.execute()` (permissões e aprovação em vigor) |
|
|
84
85
|
| Diagnosticar falhas | grep de logs | `/mcp <servidor> health` com sugestões derivadas |
|
|
@@ -132,6 +133,8 @@ Todas as opções são campos Schemastery `Config` (modificáveis a partir do co
|
|
|
132
133
|
| `trialTimeoutMs` | `120000` | Prazo do painel por chamada de teste em ms |
|
|
133
134
|
| `trialMaxResultChars` | `60000` | Teto do payload do resultado de teste em caracteres |
|
|
134
135
|
| `writeEnabled` | `true` | Interruptor de segurança: `false` rejeita toda gravação (copiar continua funcionando) |
|
|
136
|
+
| `writeVerifyEnabled` | `true` | Re-verifica cada gravação contra o estado re-aplicado do loader antes de reportar sucesso |
|
|
137
|
+
| `writeVerifyTimeoutMs` | `3000` | Orçamento de sondagem para a verificação de gravação em ms |
|
|
135
138
|
| `backupCount` | `5` | Backups de `cordis.patch.yml` retidos por gravação |
|
|
136
139
|
| `catalogEntries` | `[]` | Sobreposição do usuário para o diretório recomendado: anexa entradas; uma entrada com o mesmo `id` substitui a integrada |
|
|
137
140
|
|
|
@@ -149,7 +152,9 @@ Todas as opções são campos Schemastery `Config` (modificáveis a partir do co
|
|
|
149
152
|
|
|
150
153
|
## Resources & Prompts
|
|
151
154
|
|
|
152
|
-
|
|
155
|
+
Resources JÁ são ponteados upstream: o bundle base monta `@deepseek-ai/dsh-mcp-resources`, o cliente oficial registra o provider de recursos de cada conexão em `ctx.mcpResources`, e esse pacote possui as três ferramentas compartilhadas (`list_mcp_resources`, `list_mcp_resource_templates`, `read_mcp_resource`). O console detecta o serviço e as ferramentas registradas, e oferece um navegador de Resources somente leitura (lista / templates / leitura de URI) em cada cartão de servidor — cada chamada passa pelo pipeline OFICIAL de ferramentas e os resultados nunca entram no contexto do modelo.
|
|
156
|
+
|
|
157
|
+
**Templates de prompts** e **assinaturas de recursos** permanecem adiados upstream; o painel de capacidades marca Prompts **aguardando suporte upstream**.
|
|
153
158
|
|
|
154
159
|
## Permissions & data
|
|
155
160
|
|
|
@@ -160,14 +165,15 @@ O cliente oficial documenta que *"Tools are the only bridged MCP capability"*
|
|
|
160
165
|
|
|
161
166
|
- **A ponte continua sendo a ponte.** Sem mudanças de transporte, OAuth ou protocolo; uma linha mcp-client por servidor, exatamente como à mão.
|
|
162
167
|
- **Sem status falso.** Campos de conexão sem observações upstream leem `unknown` / `—` com `statusSource: 'derived'`; códigos de saída e stderr nunca são inventados.
|
|
163
|
-
- **Gravações somente-anexar, com aprovação e backup.** O console nunca reescreve o `cordis.patch.yml`; anexa operações geradas
|
|
168
|
+
- **Gravações somente-anexar, com aprovação e backup.** O console nunca reescreve o `cordis.patch.yml`; anexa operações geradas, conserva os `backupCount` backups mais recentes e re-verifica cada gravação contra o estado re-aplicado do loader antes de reportar sucesso (um patch omitido nunca aparece como sucesso).
|
|
164
169
|
- **Sem injeção de prompts.** O painel não registra seções de prompt; seu único texto visível ao modelo são as duas descrições de ferramenta/comando.
|
|
165
170
|
|
|
166
171
|
## Known limitations
|
|
167
172
|
|
|
168
|
-
- **
|
|
173
|
+
- **Templates de prompts e assinaturas de recursos** aguardam suporte upstream — o cliente oficial pontua ferramentas e recursos, mas não prompts nem assinaturas.
|
|
169
174
|
- **Códigos de saída / caudas de stderr** são rotulados *aguardando suporte upstream* até o cliente expô-los.
|
|
170
175
|
- **Painel somente leitura** — o console nunca falsifica um estado de conexão; campos não observáveis leem `unknown` / `-1` / `—`.
|
|
176
|
+
- **Gravações são verificadas, não garantidas** — o console re-verifica cada gravação contra o estado re-aplicado do loader e falha honestamente quando o loader não a aplicou (ex.: uma linha inserida por `$DSH_HOME/cordis.patch.yml`, que um patch de camada de perfil não alcança).
|
|
171
177
|
|
|
172
178
|
## Development
|
|
173
179
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
[](https://www.npmjs.com/package/dsh-mcp-panel)
|
|
19
19
|
[](https://www.npmjs.com/package/dsh-mcp-panel)
|
|
20
20
|
|
|
21
|
-
[English](README.md) · [简体中文](README
|
|
21
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
22
22
|
|
|
23
23
|
</div>
|
|
24
24
|
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
| 维度 | 状态 |
|
|
30
30
|
|---|---|
|
|
31
|
-
| Harness | DeepSeek Harness `dsh-v0.1.
|
|
31
|
+
| Harness | DeepSeek Harness `dsh-v0.1.6-alpha.1`(GitHub tag,2026-09-16 已核验):全量门禁链(typecheck / typecheck:ci / test / build / verify / package)+ 对照 0.1.6-alpha.1 checkout 的 profile 安装冒烟。上游 `@deepseek-ai/dsh-mcp-resources` 现已桥接 Resources,控制台特征探测后提供只读浏览。上一基线:`dsh-v0.1.5-rc.2`(2026-09-11 已核验)。 |
|
|
32
32
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
33
33
|
| 平台 | Web GUI(双面:Host + 浏览器) |
|
|
34
34
|
| 模型 | 任意(面板只读;仅 `/mcp` 输出对模型可见) |
|
|
@@ -42,7 +42,8 @@
|
|
|
42
42
|
- **`/mcp <server> health`** —— 派生自愈建议(ENOENT → 依赖缺失、ECONNREFUSED、超时、401/403/404、DNS、限流、重连耗尽…);退出码 / stderr 尾部如实标注*待官方支持*。
|
|
43
43
|
- **`/mcp <server> call <tool> [json]`** —— 经**官方工具管线**(`ctx.tools.execute()`)试用调用;pre-execute 权限策略、审批、guard、post-execute 全部生效。
|
|
44
44
|
- **设置 → 插件 → MCP 页** —— 状态卡片(徽章、诊断、探测),加 server CRUD 与工具试用台。
|
|
45
|
-
- **Server CRUD** —— 增删改表单 → `insert
|
|
45
|
+
- **Server CRUD** —— 增删改表单 → 添加用 `insert`,编辑/删除用 id 定向覆盖(`- id:` + `name:` + `disabled:`/`config:`)→ 剪贴板复制或审批写入,自动备份,并在报成功前对照 loader 复验。
|
|
46
|
+
- **Resources 浏览** —— 经官方 `list_mcp_resources` / `list_mcp_resource_templates` / `read_mcp_resource` 工具只读列出资源、模板与 URI 读取(由上游 `@deepseek-ai/dsh-mcp-resources` 服务桥接);结果只显示在本页、绝不进入模型上下文。
|
|
46
47
|
- **工具试用台** —— 选 server → 选 `mcp__*` 工具 → JSON 填参 → 规范 JSON 结果 + render 内容;按 `trialMaxResultChars` 截断;仅面板可见、永不进入模型上下文。
|
|
47
48
|
|
|
48
49
|
## Architecture: official client = bridge, this plugin = console
|
|
@@ -80,7 +81,7 @@
|
|
|
80
81
|
|---|---|---|
|
|
81
82
|
| 添加服务器 | 改 YAML,注意缩进与引号 | 表单 → patch 片段 → **一键复制**或**写入**(审批 + 自动备份) |
|
|
82
83
|
| 修改服务器 | 改 YAML,重启/热重载 | 表单预填当前行;未改动的密钥在 host 侧保留原值 |
|
|
83
|
-
| 删除服务器 | 删掉该行 | 追加 `
|
|
84
|
+
| 删除服务器 | 删掉该行 | 追加 `- id:` + `disabled: true` 覆盖操作(patch 词汇表没有 remove)——可随时重新启用 |
|
|
84
85
|
| 查看状态 | 翻日志 | 徽章 + 重连次数 + 最近错误,来自 `mcp/status` seam 实时数据 |
|
|
85
86
|
| 试用工具 | 让模型调用 | 试用台 → 官方 `ctx.tools.execute()` 管线(权限与审批全程生效) |
|
|
86
87
|
| 排查故障 | grep 日志 | `/mcp <server> health` 派生自愈建议 |
|
|
@@ -134,6 +135,8 @@ dsh --profile web --dump-config | grep -A3 'id: mcp-panel'
|
|
|
134
135
|
| `trialTimeoutMs` | `120000` | 每次试用调用的面板侧截止时间(ms) |
|
|
135
136
|
| `trialMaxResultChars` | `60000` | 试用结果载荷上限(字符) |
|
|
136
137
|
| `writeEnabled` | `true` | 总开关:`false` 拒绝一切 profile 写入(仍可复制片段) |
|
|
138
|
+
| `writeVerifyEnabled` | `true` | 每次写入在报成功前对照 loader 重放后的状态复验 |
|
|
139
|
+
| `writeVerifyTimeoutMs` | `3000` | 写入复验的轮询预算(毫秒) |
|
|
137
140
|
| `backupCount` | `5` | 每次写入保留的 `cordis.patch.yml` 备份数 |
|
|
138
141
|
| `catalogEntries` | `[]` | 推荐服务器目录的用户覆盖:追加条目,同 `id` 的条目替换内置条目 |
|
|
139
142
|
|
|
@@ -151,7 +154,9 @@ dsh --profile web --dump-config | grep -A3 'id: mcp-panel'
|
|
|
151
154
|
|
|
152
155
|
## Resources & Prompts
|
|
153
156
|
|
|
154
|
-
|
|
157
|
+
Resources 已由上游桥接:base bundle 默认挂载 `@deepseek-ai/dsh-mcp-resources`,官方 client 把每个连接的资源 provider 注册进 `ctx.mcpResources`,该包拥有三个共享工具(`list_mcp_resources`、`list_mcp_resource_templates`、`read_mcp_resource`)。控制台特征探测该服务与已注册工具,并在每个 server 卡上提供只读 Resources 浏览(列表 / 模板 / URI 读取)——每次调用都走**官方工具管线**,结果只显示在本页、绝不进入模型上下文。
|
|
158
|
+
|
|
159
|
+
MCP **prompt 模板**与**资源订阅**仍待上游;能力一览中 Prompts 标注**待官方支持**。
|
|
155
160
|
|
|
156
161
|
## Permissions & data
|
|
157
162
|
|
|
@@ -162,14 +167,15 @@ dsh --profile web --dump-config | grep -A3 'id: mcp-panel'
|
|
|
162
167
|
|
|
163
168
|
- **桥接层仍是桥接层。** 不改传输、OAuth、协议;每个 server 一行 mcp-client,与你手写完全一致。
|
|
164
169
|
- **不伪造状态。** 无上游观测时连接字段显示 `unknown` / `—` 并标注 `statusSource: 'derived'`;退出码与 stderr 尾部绝不臆造。
|
|
165
|
-
- **写入只追加、走审批、先备份。** 控制台从不改写 `cordis.patch.yml
|
|
170
|
+
- **写入只追加、走审批、先备份。** 控制台从不改写 `cordis.patch.yml`:只追加生成的操作,保留最新 `backupCount` 份备份,并在报成功前对照 loader 重放后的状态复验(被跳过的补丁绝不显示为成功)。
|
|
166
171
|
- **零提示词注入。** 本插件不注册任何提示词段落;对模型可见的文本只有两个工具/命令描述。
|
|
167
172
|
|
|
168
173
|
## Known limitations
|
|
169
174
|
|
|
170
|
-
- **
|
|
175
|
+
- **prompt 模板与资源订阅** 待官方支持——官方 client 桥接工具与资源,但未桥接 prompts 与订阅。
|
|
171
176
|
- **退出码 / stderr 尾部** 在 client 暴露前如实标注*待官方支持*。
|
|
172
177
|
- **只读面板** —— 控制台从不伪造连接状态;不可观测字段显示 `unknown` / `-1` / `—`。
|
|
178
|
+
- **写入复验而非保证** —— 控制台对照 loader 重放后的状态复验每次写入;loader 未应用时(例如该行由 `$DSH_HOME/cordis.patch.yml` 插入、profile 层补丁够不着)如实报失败。
|
|
173
179
|
|
|
174
180
|
## Development
|
|
175
181
|
|
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
[](https://www.npmjs.com/package/dsh-mcp-panel)
|
|
20
20
|
[](https://www.npmjs.com/package/dsh-mcp-panel)
|
|
21
21
|
|
|
22
|
-
[English](README.md) · [简体中文](README
|
|
22
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
23
23
|
|
|
24
24
|
</div>
|
|
25
25
|
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
|
|
30
30
|
| Surface | Status |
|
|
31
31
|
|---|---|
|
|
32
|
-
| Harness | DeepSeek Harness `dsh-v0.1.
|
|
32
|
+
| Harness | DeepSeek Harness `dsh-v0.1.6-alpha.1` (GitHub tag, verified 2026-09-16): full gate chain (typecheck / typecheck:ci / test / build / verify / package) plus a profile install smoke against the 0.1.6-alpha.1 checkout. The shipped `@deepseek-ai/dsh-mcp-resources` service now bridges Resources, which the console feature-detects and browses read-only. Previous baseline: `dsh-v0.1.5-rc.2` (verified 2026-09-11). |
|
|
33
33
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
34
34
|
| Platforms | Web GUI (dual-face: host + browser) |
|
|
35
35
|
| Model | Any (the panel is read-only; only `/mcp` output is model-readable) |
|
|
@@ -43,7 +43,8 @@
|
|
|
43
43
|
- **`/mcp <server> health`** — derived self-heal suggestions (ENOENT → missing dependency, ECONNREFUSED, timeouts, 401/403/404, DNS, rate limit, reconnect exhaustion…); exit code / stderr tail honestly labeled *pending upstream support* until the client exposes them.
|
|
44
44
|
- **`/mcp <server> call <tool> [json]`** — trial-call through the **official tool pipeline** (`ctx.tools.execute()`); pre-execute permission policy, approval, guards, and post-execute all apply.
|
|
45
45
|
- **Settings → Plugins → MCP tab** — status cards with badges, diagnostics, and probes, plus the server CRUD and the tool trial console.
|
|
46
|
-
- **Server CRUD** — add/edit/remove forms → `insert
|
|
46
|
+
- **Server CRUD** — add/edit/remove forms → `insert` for add and id-targeted overrides (`- id:` + `name:` + `disabled:`/`config:`) for edit/remove → clipboard copy or approval-gated write with automatic backups and loader re-verification.
|
|
47
|
+
- **Resources browse** — read-only resource listing, template listing, and URI reads through the official `list_mcp_resources` / `list_mcp_resource_templates` / `read_mcp_resource` tools (bridged by the shipped `@deepseek-ai/dsh-mcp-resources` service); results are shown in the tab only, never in model context.
|
|
47
48
|
- **Recommended directory** — a built-in community MCP server catalog (filesystem, git, github, fetch, playwright, …) served in the snapshot; `catalogEntries` appends/overrides entries, and `catalogToConfigInput` turns one into a one-click add.
|
|
48
49
|
- **Config import/export** — `exportConfigs()` serializes the server rows to a versioned JSON document (a `!!js` row exports as `null` with a reason), and `importPreview()` parses an export back into per-server `add` patch fragments for review.
|
|
49
50
|
- **Tool trial console** — server → `mcp__*` tool → JSON args → canonical JSON result + rendered content; capped by `trialMaxResultChars`; panel-only, never model context.
|
|
@@ -83,7 +84,7 @@ The console **reads** the client through its proposed `mcp/status` observability
|
|
|
83
84
|
|---|---|---|
|
|
84
85
|
| Add a server | Edit YAML, mind indent/quoting | Form → patch fragment → **copy** or **write** (approval + auto backup) |
|
|
85
86
|
| Edit a server | Edit YAML, restart/hot-reload | Form pre-filled from the live row; unchanged secrets keep their raw values host-side |
|
|
86
|
-
| Remove a server | Delete the row | `
|
|
87
|
+
| Remove a server | Delete the row | `- id:` + `disabled: true` override (the patch vocabulary has no remove) — re-enableable anytime |
|
|
87
88
|
| See status | Read logs | Badges + reconnects + last error, live from the `mcp/status` seam |
|
|
88
89
|
| Try a tool | Ask the model to call it | Trial console → official `ctx.tools.execute()` pipeline (permission & approval stay in force) |
|
|
89
90
|
| Diagnose failures | Grep logs | `/mcp <server> health` with derived self-heal suggestions |
|
|
@@ -137,6 +138,8 @@ All tunables are Schemastery `Config` fields (changeable from cordis.yml). `cord
|
|
|
137
138
|
| `trialTimeoutMs` | `120000` | Panel-side deadline per trial call in ms |
|
|
138
139
|
| `trialMaxResultChars` | `60000` | Cap on the trial result payload in chars |
|
|
139
140
|
| `writeEnabled` | `true` | Kill switch: `false` rejects every profile write (copy still works) |
|
|
141
|
+
| `writeVerifyEnabled` | `true` | Re-verify each write against the loader's re-applied state before reporting success |
|
|
142
|
+
| `writeVerifyTimeoutMs` | `3000` | Polling budget for write verification in ms |
|
|
140
143
|
| `backupCount` | `5` | `cordis.patch.yml` backups retained per write |
|
|
141
144
|
| `catalogEntries` | `[]` | User overlay for the recommended server directory: entries append, an entry with the same `id` replaces the built-in one |
|
|
142
145
|
|
|
@@ -154,7 +157,9 @@ All tunables are Schemastery `Config` fields (changeable from cordis.yml). `cord
|
|
|
154
157
|
|
|
155
158
|
## Resources & Prompts
|
|
156
159
|
|
|
157
|
-
|
|
160
|
+
Resources ARE bridged upstream: the base bundle mounts `@deepseek-ai/dsh-mcp-resources`, the official client registers each connection's resource provider into `ctx.mcpResources`, and that package owns the three shared tools (`list_mcp_resources`, `list_mcp_resource_templates`, `read_mcp_resource`). The console feature-detects the service and the registered tools, and offers a read-only Resources browser (list / templates / URI read) on every server card — each call runs through the OFFICIAL tool pipeline, and results never enter model context.
|
|
161
|
+
|
|
162
|
+
MCP **prompt templates** and **resource subscriptions** remain deferred upstream; the capabilities board marks Prompts **pending upstream support**.
|
|
158
163
|
|
|
159
164
|
## Permissions & data
|
|
160
165
|
|
|
@@ -165,14 +170,15 @@ The official client documents that *"Tools are the only bridged MCP capability"*
|
|
|
165
170
|
|
|
166
171
|
- **The bridge stays the bridge.** No transport, OAuth, or protocol changes; one mcp-client row per server, exactly as hand-written.
|
|
167
172
|
- **No fake status.** Connection fields without upstream observations read `unknown` / `—` with `statusSource: 'derived'`; exit codes and stderr tails are never invented.
|
|
168
|
-
- **Writes are append-only, approval-gated, and backed up.** The console never rewrites `cordis.patch.yml`; it appends generated operations
|
|
173
|
+
- **Writes are append-only, approval-gated, and backed up.** The console never rewrites `cordis.patch.yml`; it appends generated operations, keeps the newest `backupCount` backups, and re-verifies every write against the loader's re-applied state before reporting success (a skipped patch never reads as success).
|
|
169
174
|
- **No prompt injection.** The panel registers **no prompt sections**; its only model-facing text is the two tool/command descriptions.
|
|
170
175
|
|
|
171
176
|
## Known limitations
|
|
172
177
|
|
|
173
|
-
- **
|
|
178
|
+
- **Prompt templates & resource subscriptions** are pending upstream support — the official client bridges tools and resources, but not prompts or subscriptions.
|
|
174
179
|
- **Exit codes / stderr tails** are labeled *pending upstream support* until the client exposes them.
|
|
175
180
|
- **Read-only panel** — the console never fakes a connection state; unobservable fields read `unknown` / `-1` / `—`.
|
|
181
|
+
- **Writes are verified, not guaranteed** — the console re-verifies each write against the loader's re-applied state and fails honestly when the loader did not apply it (e.g. a row inserted by `$DSH_HOME/cordis.patch.yml`, which a profile-layer patch cannot reach).
|
|
176
182
|
|
|
177
183
|
## Development
|
|
178
184
|
|
package/cordis.patch.yml
CHANGED
|
@@ -32,5 +32,10 @@
|
|
|
32
32
|
# Kill switch for profile-patch writes: false rejects every write
|
|
33
33
|
# (fragments stay copyable).
|
|
34
34
|
# writeEnabled: true
|
|
35
|
+
# Verify each write against the loader's re-applied state before
|
|
36
|
+
# reporting success (a skipped patch must not read as success).
|
|
37
|
+
# writeVerifyEnabled: true
|
|
38
|
+
# Polling budget for write verification in milliseconds.
|
|
39
|
+
# writeVerifyTimeoutMs: 3000
|
|
35
40
|
# Number of cordis.patch.yml backups retained per write.
|
|
36
41
|
# backupCount: 5
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
1. **当前工作区是红灯状态**:上一版 Phase 2 功能(面板轮询、探测按钮、被动探测、/mcp i18n、探测上限、事件陈旧度)已写入源码但**未收口**——`pnpm run typecheck` 有 7 个错误、`pnpm test` 84 例中 1 例失败、15 个文件未提交、文档(5 语言 README / cordis.patch.yml / CHANGELOG / AGENTS.md)未同步。**第一优先级是完成收口并提交**(§2),而不是叠加新功能。
|
|
10
10
|
2. **CI typecheck 可恢复**:上一版 A6 以"npm 类型包过旧"为由否决 CI typecheck;实测证据表明该前提已不成立——`@deepseek-ai/dsh-*` 全套 `0.1.0-rc.6` 已发布到 npm(`next` 标签),独立 spike 用纯 npm 类型闭包编译本仓库源码,错误输出与 checkout 版本**完全一致**(仅本仓库自身 7 错,无任何模块解析/类型闭包错误)。恢复 CI typecheck 可直接堵住当前这类"改一半"的回归(§3)。
|
|
11
|
-
3. **上游 `mcp/status` seam 仍未落地**:grep 本地 harness checkout 全部 `packages/` 与 `docs/`,`mcp/status` 事件、`McpStatusService` 均不存在,`docs/upstream-proposal.md` 也未出现在 harness 仓库。插件当前全部连接字段仍走 `unknown + statusSource: derived` 降级。提案文档已完备(本仓库 `docs/upstream-proposal.md`,含 PR contents
|
|
11
|
+
3. **上游 `mcp/status` seam 仍未落地**:grep 本地 harness checkout 全部 `packages/` 与 `docs/`,`mcp/status` 事件、`McpStatusService` 均不存在,`docs/upstream-proposal.md` 也未出现在 harness 仓库。插件当前全部连接字段仍走 `unknown + statusSource: derived` 降级。提案文档已完备(本仓库 `docs/upstream-proposal.md`,含 PR contents 清单),但**上游不开放外部 PR 通道**——2026-09-10 复核 `GET /repos/deepseek-ai/deepseek-harness/pulls` 仍为 HTTP 404,与 §11 的 2026-08-14 证据一致。故当前最高杠杆动作是**维持 `src/upstream.ts` tripwire + 跟随锚点 Discussion [#1300](https://github.com/deepseek-ai/deepseek-harness/discussions/1300)**,而非提交 PR(详见 §11)。
|
|
12
12
|
4. **新增产品与工程机会**已逐项核查(§4/§5),均不触碰只读契约与诚实性约束。
|
|
13
13
|
|
|
14
14
|
### 可行性总览
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
| P2-7 | sanitizeUrl 补 URL fragment 凭据键脱敏 | ✅ | 无 | XS |
|
|
34
34
|
| P2-8 | 配置事实展示(failOnStartupError / reconnect 策略,derived 标注) | ✅ | 需 locale 文案 | S |
|
|
35
35
|
| P3-1 | 面板/命令扩展到 es/pt/hi(对齐 5 语言 README) | ✅ | 翻译 + 校对 | M–L |
|
|
36
|
-
| P4-1 |
|
|
36
|
+
| P4-1 | 上游 `mcp/status` seam 落地(PR 通道关闭 → 锚点 Discussion [#1300](https://github.com/deepseek-ai/deepseek-harness/discussions/1300)) | ⛔ 外部受阻(2026-09-10 复核仍 404) | 上游重开 PR 通道或采纳提案 | L |
|
|
37
37
|
| P4-2 | 上游落地后回归 + tripwire 清理 | ✅ | 依赖 P4-1 合入 | S |
|
|
38
38
|
|
|
39
39
|
---
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
|---|---|---|
|
|
49
49
|
| C1 entryId 修正 | ✅ 已做 | `src/service.ts:147` 用 `entry.options.id`;`tests/command.spec.ts:121` nestedMcpRow 用例 |
|
|
50
50
|
| C2 提案入库 | ✅ 已做 | `docs/upstream-proposal.md`(随包分发);README 已改相对链接 |
|
|
51
|
-
| C3 README 五章×5 语言 | ✅ 已做 | README.md 含 Compatibility/Quick start/Uninstall/Honest by contract/Configuration/Permissions & data/Troubleshooting/Security;`README
|
|
51
|
+
| C3 README 五章×5 语言 | ✅ 已做 | README.md 含 Compatibility/Quick start/Uninstall/Honest by contract/Configuration/Permissions & data/Troubleshooting/Security;`README-zh.md` 章节结构一致 |
|
|
52
52
|
| A3 v0.1.0 发布 | ⚠️ 部分 | CHANGELOG 有 0.1.0 条目、README 引 `#v0.1.0`;但本机 clone **无 remote**,tag/Release 无法本地验证(见 §1.5) |
|
|
53
53
|
| A1 CI / A2 产物冒烟 / A4 probe 单测 / A5 客户端接线 / A7 dependabot | ✅ 已做 | `.github/workflows/ci.yml`、`scripts/verify-artifacts.mjs`、`tests/probe.spec.ts`(9 例)、`tests/client-registration.spec.ts`(6 例)、`.github/dependabot.yml` |
|
|
54
54
|
| B1 轮询 / B3 探测按钮 / B5 过滤框 / B4 命令 i18n / B6 探测上限 / B7 陈旧度 / B2 被动探测 | ⚠️ 已写未收口 | 源码全部就位(`refreshIntervalMs`、`mcpPanel/probe` 描述符、`toolQuery`、`outputLanguage`、`maxProbes`、`observedAt`、`passiveProbe*`),但见 §1.2 红灯 |
|
|
@@ -226,7 +226,7 @@ tests/aggregate.spec.ts > projects upstream status facts
|
|
|
226
226
|
|
|
227
227
|
## 6. Phase 4 —— 上游联动(可选,价值最高)
|
|
228
228
|
|
|
229
|
-
### P4-1 ·
|
|
229
|
+
### P4-1 · 上游 `mcp/status` seam:提案与通道状态
|
|
230
230
|
|
|
231
231
|
- 现状:提案完备(本仓库 `docs/upstream-proposal.md` 含动机、面定义、6 个发射点、PR contents 清单、非目标);harness 侧零落地。
|
|
232
232
|
- 动作(在 harness 仓库执行,非本仓库):
|
|
@@ -271,7 +271,7 @@ Phase 3 / Phase 4(可选,各自独立可插队)
|
|
|
271
271
|
|
|
272
272
|
## 9. 总结
|
|
273
273
|
|
|
274
|
-
17 项全部可实施,无一受阻。**最关键的是 P0**:当前工作区处于"功能已写、门禁红灯、文档滞后"的半完成状态,先把 7 个类型错误与 1 个失败测试修掉、把 Phase 2 收口提交并同步五语言文档,再谈提升。之后 P1-1(CI typecheck 恢复,有 spike 证据背书)能永久堵住同类回归;P2 八项把面板/命令打磨到与功能集相称的完整度;P4-1
|
|
274
|
+
17 项全部可实施,无一受阻。**最关键的是 P0**:当前工作区处于"功能已写、门禁红灯、文档滞后"的半完成状态,先把 7 个类型错误与 1 个失败测试修掉、把 Phase 2 收口提交并同步五语言文档,再谈提升。之后 P1-1(CI typecheck 恢复,有 spike 证据背书)能永久堵住同类回归;P2 八项把面板/命令打磨到与功能集相称的完整度;P4-1 受上游 PR 通道关闭所限,本轮只能停在「提案 + tripwire」(§11)。
|
|
275
275
|
|
|
276
276
|
---
|
|
277
277
|
|
|
@@ -310,6 +310,8 @@ Phase 3 / Phase 4(可选,各自独立可插队)
|
|
|
310
310
|
|
|
311
311
|
结论:上游仓库当前不向外部账号开放 Pull Requests 通道。手头交付物已就绪:fork 分支 + PR 正文(`Project/Plugins/pr-body-mcp-status-seam.md`)+ 交接说明(`Project/Plugins/pr-handoff.md`,含对比链接 `https://github.com/deepseek-ai/deepseek-harness/compare/master...PerryLink:feat/mcp-client-status-observability-seam`)——具备权限者可从网页一键开 PR;上游恢复 PR 通道后重跑 `gh pr create --repo deepseek-ai/deepseek-harness --head PerryLink:feat/mcp-client-status-observability-seam --base master`。**已获授权并完成 Discussions 移交**:https://github.com/deepseek-ai/deepseek-harness/discussions/1300(Show and tell 分类,含完整实现清单与一键 PR 链接)。
|
|
312
312
|
|
|
313
|
+
**2026-09-10 复核(本轮)**:`GET /repos/deepseek-ai/deepseek-harness/pulls` 仍返回 HTTP 404;上游 `CONTRIBUTING.md` 现行文本为 "we cannot accept external pull requests at the moment",并把开放通道收敛为「Discussions 报 bug / 提提案」+「生态插件」。因此 P4-1 的终局口径固定为:**提案(本仓库 `docs/upstream-proposal.md`)+ 消费侧 tripwire(`src/upstream.ts`)+ 锚点 Discussion #1300**;PR 通道恢复前不再重试创建。另按工作区现行纪律,上游 PR 只在「标准件 E」专用会话提交,且同时 open 的上游 PR ≤1。
|
|
314
|
+
|
|
313
315
|
## 12. v0.3.0 实施记录(2026-08-15)
|
|
314
316
|
|
|
315
317
|
| 项 | 状态 | 证据 |
|
|
@@ -167,3 +167,12 @@ both before and after this proposal lands.
|
|
|
167
167
|
`PerryLink/deepseek-harness:feat/mcp-client-status-observability-seam`.
|
|
168
168
|
- Everything else in this document stands as written.
|
|
169
169
|
|
|
170
|
+
## Status check 2026-09-16 (0.1.6-alpha.1)
|
|
171
|
+
|
|
172
|
+
> Measured read-only against `origin/master` = `0d1f5000` (`0.1.6-alpha.1`, a 666-commit interval since the previous baseline).
|
|
173
|
+
|
|
174
|
+
- **The `mcp/status` seam is still missing.** `mcp/status` / `mcpStatus` / `McpStatus` -> 0 hits across `packages`; the mcp-client still exposes no per-server status/observability surface, so the panel keeps its feature-detected, derived-status fallback. The proposal and its tripwire remain unchanged.
|
|
175
|
+
- **Resources shipped differently than proposed.** The upstream bridge now provides Resources through a NEW package, `@deepseek-ai/dsh-mcp-resources` (mounted by `packages/bundle/base/cordis.patch.yml:471-472`): the client registers each connection's provider into `ctx.mcpResources`, and the package owns three shared tools (`list_mcp_resources`, `list_mcp_resource_templates`, `read_mcp_resource`). The console's old "catalog seam" idea (`mcpCatalog`) is therefore retired — the panel feature-detects `ctx.mcpResources` + the registered tools and browses resources through the OFFICIAL tools (`src/upstream.ts`, `src/service.ts`, `src/trial.ts`).
|
|
176
|
+
- **Prompts and resource subscriptions remain deferred** (`packages/mcp/mcp-client/README.md:209` documents prompts as unsupported); the capabilities board keeps Prompts `available: false`.
|
|
177
|
+
- The `dsh-mcp-panel` package now runs its full gate chain against `0.1.6-alpha.1` (compatibility baseline raised from `0.1.5-rc.2`).
|
|
178
|
+
|