dsh-mcp-panel 0.4.0 → 0.4.2

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
@@ -2,6 +2,23 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## [0.4.2] - 2026-08-21
6
+
7
+ ### Changed
8
+
9
+ - All `@deepseek-ai/dsh-*` dependencies moved from the `0.1.0-rc.6` line to rc.8: the 15 devDependencies pin `0.1.0-rc.8` exactly, and the four peerDependencies (`dsh-commands` / `dsh-jobs` / `dsh-tools` / `dsh-typert-protocol`) now range `>=0.1.0-rc.8 <0.2.0`. `@deepseek-ai/cordis` and the non-dsh dependency lines are unchanged; the compatibility tables now claim `0.1.0-rc.8`–`0.2.0`.
10
+ - The `/mcp` and `mcp_probe` surfaces are unchanged. The rc.8 `commands.execute(agent, line, images, signal)` signature carries a new image-attachment parameter; the internal call sites that drive plain invocations (test harness, loader runner, headless verifier) now pass an empty image list.
11
+
12
+ ### Engineering
13
+
14
+ - `pnpm-lock.yaml` regenerated against the rc.8 graph so the client type faces (`dsh-typert-protocol`, `dsh-api-remotes`) resolve as one version, keeping the `mcpPanel` Remote namespace merge visible to `typecheck:ci`.
15
+
16
+ ## [0.4.1] - 2026-08-19
17
+
18
+ ### Fixed
19
+
20
+ - The trial console's callId counter now lives on a per-service-instance trial caller (`createTrialCaller`) instead of a module-level `let`, matching its documented per-instance semantics — a plugin reload no longer carries counter state across mounts. (`runTrialCall` is now exported through the caller factory.)
21
+
5
22
  ## [0.4.0] - 2026-08-16
6
23
 
7
24
  ### Added
package/README.es.md CHANGED
@@ -1,80 +1,211 @@
1
+ <div align="center">
2
+
1
3
  # dsh-mcp-panel
2
4
 
3
- **Consola de gestión MCP para el cliente MCP oficial de DeepSeek Harness: añade, edita, elimina y prueba servidores MCP desde una página de ajustes, con estado honesto, diagnósticos de salud y escrituras de perfil seguras y reversibles.**
5
+ **La consola de gestión MCP para el cliente MCP oficial de DeepSeek Harness: añade, edita, elimina y prueba servidores MCP desde una página de ajustes, con estado honesto, diagnósticos de salud y escrituras de perfil seguras y reversibles.**
4
6
 
5
- [English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
7
+ *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.*
6
8
 
7
9
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
8
- [![npm](https://img.shields.io/npm/v/dsh-mcp-panel)](https://www.npmjs.com/package/dsh-mcp-panel)
9
- [![CI](https://github.com/PerryLink/dsh-mcp-panel/actions/workflows/ci.yml/badge.svg)](https://github.com/PerryLink/dsh-mcp-panel/actions/workflows/ci.yml)
10
- [![dsh-plugin](https://img.shields.io/badge/ecosystem-dsh--plugin-8b5cf6)](https://github.com/topics/dsh-plugin)
10
+ [![DSH plugin](https://img.shields.io/badge/dsh-plugin-✅-green)](https://github.com/topics/dsh-plugin)
11
+ [![Node](https://img.shields.io/badge/node-%5E22.19%20%7C%7C%20%3E%3D24-brightgreen.svg)](#)
12
+ [![CI](https://img.shields.io/github/actions/workflow/status/PerryLink/dsh-mcp-panel/ci.yml?branch=main&label=CI)](https://github.com/PerryLink/dsh-mcp-panel/actions)
13
+ [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-mcp-panel?label=version)](https://github.com/PerryLink/dsh-mcp-panel/releases)
14
+ [![npm version](https://img.shields.io/npm/v/dsh-mcp-panel)](https://www.npmjs.com/package/dsh-mcp-panel)
15
+ [![npm downloads](https://img.shields.io/npm/dm/dsh-mcp-panel)](https://www.npmjs.com/package/dsh-mcp-panel)
16
+
17
+ [English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
18
+
19
+ </div>
20
+
21
+ ---
22
+
23
+ ## Compatibility
24
+
25
+ | Superficie | Estado |
26
+ |---|---|
27
+ | Harness | DeepSeek Harness `0.1.0-rc.8`–`0.2.0` |
28
+ | Node | `^22.19.0 \|\| >=24.0.0` |
29
+ | Plataformas | Web GUI (doble cara: host + navegador) |
30
+ | Modelo | Cualquiera (el panel es de solo lectura; solo la salida de `/mcp` es legible por el modelo) |
31
+
32
+ ## What you get
33
+
34
+ `dsh-mcp-panel` es la capa de experiencia sobre el cliente MCP oficial: una vista de runtime de solo lectura más escrituras de perfil seguras y reversibles.
11
35
 
12
- ## Arquitectura: el cliente oficial es el puente; este plugin es la consola
36
+ - **Comando `/mcp`** — una fila por servidor: transporte, destino, número de herramientas, estado de conexión (desde el seam upstream; `unknown` cuando no hay observación), último error, reconexiones — legible por el modelo, reconstruible del log de sesión, cinco idiomas de salida.
37
+ - **`/mcp <servidor> tools`** — nombres y descripciones de las herramientas `mcp__*` visibles para el modelo.
38
+ - **`/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*.
39
+ - **`/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.
40
+ - **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.
41
+ - **CRUD de servidores** — formularios de alta/edición/borrado → fragmentos `insert`/`set`/`set disabled` → copia al portapapeles o escritura con aprobación y copias de seguridad automáticas.
42
+ - **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.
43
+
44
+ ## Architecture: official client = bridge, this plugin = console
13
45
 
14
46
  [`@deepseek-ai/dsh-mcp-client`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/mcp/mcp-client) es el **único puente**: una instancia por servidor MCP, configurada como fila escrita a mano en `cordis.yml`, que conecta el transporte, sincroniza herramientas y registra los nombres `mcp__<servidor>__<herramienta>`. Este plugin nunca lo sustituye: es la **capa de experiencia** encima:
15
47
 
16
- ```
17
- profile/composición dsh-mcp-client (puente) dsh-mcp-panel (consola)
18
- - id: mcp-github • transporte • comando /mcp
19
- name: '@deepseek-ai/…' • sincronización de tools • Ajustes → Plugins → MCP:
20
- config: { serverName, } • herramientas mcp__* CRUD, banco de pruebas,
21
- - id: mcp-panel • seam mcp/status ◄─estado─► diagnósticos, sondas
22
- name: dsh-mcp-panel
48
+ ```text
49
+ ┌────────────────────────────────────────────┐
50
+ profile │ cordis.yml / cordis.patch.yml │
51
+ composición │ - id: mcp-github │
52
+ (una fila por │ name: '@deepseek-ai/dsh-mcp-client' │
53
+ servidor, a mano) │ config: { serverName, transport, … } │
54
+ - id: mcp-panel
55
+ │ name: dsh-mcp-panel ◄── este plugin │
56
+ └───────────────┬────────────────────────────┘
57
+
58
+ ┌───────────────────────────┴───────────────────────────┐
59
+ │ │
60
+ ┌────▼──────────────┐ ┌───────────────────────────┐ │
61
+ │ @deepseek-ai/dsh- │ │ dsh-mcp-panel (consola) │ │
62
+ │ mcp-client │ │ │ │
63
+ │ • transporte │ │ • comando /mcp │ │
64
+ │ • sincronización │ │ • Ajustes → Plugins → │ │
65
+ │ • herramientas │◄──────►│ MCP: CRUD, banco de │ │
66
+ │ • seam mcp/status │ estado │ • diagnósticos de salud │ │
67
+ └───────────────────┘ │ • sondas, capacidades │ │
68
+ └───────────────────────────┘ │
23
69
  ```
24
70
 
25
- La consola **lee** a través del seam `mcp/status` (evento + servicio `mcpStatus`), el registro de herramientas y el loader; **escribe** solo en la capa de parches del perfil: solo anexa, con aprobación y copia de seguridad automática. Transporte, OAuth y protocolo permanecen intactos.
71
+ La consola **lee** el cliente por su seam de observabilidad `mcp/status` (evento + servicio de consulta `mcpStatus`), el registro de herramientas y el loader; **escribe** solo en la capa de parches del perfil solo-anexar, con aprobación y siempre con copia de seguridad. Transporte, OAuth y protocolo permanecen intactos.
26
72
 
27
- ## Consola vs. cordis.yml escrito a mano
73
+ ## Console vs. hand-written cordis.yml
28
74
 
29
75
  | | cordis.yml a mano | Consola dsh-mcp-panel |
30
76
  |---|---|---|
31
- | Añadir servidor | Editar YAML | Formulario → fragmento de parche → **copiar** o **escribir** (aprobación + copia de seguridad) |
32
- | Editar servidor | Editar YAML y reiniciar | Formulario precargado; los secretos sin cambios conservan su valor en el host |
33
- | Eliminar servidor | Borrar la fila | Operación `set disabled: true` (el vocabulario de parches no tiene remove); re-habilitable |
77
+ | Añadir servidor | Editar YAML, cuidar indentación/comillas | Formulario → fragmento de parche → **copiar** o **escribir** (aprobación + copia de seguridad) |
78
+ | 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 |
79
+ | Eliminar servidor | Borrar la fila | Operación `set disabled: true` (el vocabulario de parches no tiene remove) re-habilitable |
34
80
  | Ver estado | Leer logs | Insignias + reconexiones + último error, en vivo desde `mcp/status` |
35
81
  | Probar una herramienta | Pedírselo al modelo | Banco de pruebas → pipeline oficial `ctx.tools.execute()` (permisos y aprobación en vigor) |
36
- | Diagnosticar | grep de logs | `/mcp <servidor> health` con sugerencias derivadas |
37
-
38
- ## Qué obtienes
82
+ | Diagnosticar fallos | grep de logs | `/mcp <servidor> health` con sugerencias derivadas |
83
+ | Errores | Revertir a mano | Cada escritura es solo-anexar y deja una copia de seguridad con marca de tiempo |
39
84
 
40
- - **`/mcp`**: fila por servidor transporte, destino, número de herramientas, estado de conexión (honesto: `unknown` sin datos upstream), último error, reconexiones; legible por el modelo, reconstruible desde el log de sesión, cinco idiomas de salida.
41
- - **`/mcp <servidor> tools | health | call <tool> [json] | disable | enable`**: lista de herramientas; diagnósticos derivados (ENOENT → dependencia faltante, ECONNREFUSED, timeouts, 401/403/404, DNS, rate limit, reconexión agotada); llamada de prueba por el **pipeline oficial** (permisos + aprobación en vigor); sugerencias de parche exactas.
42
- - **Ajustes → Plugins → MCP**: tarjetas de estado con insignias y diagnósticos, **CRUD de servidores** (fragmentos `insert`/`set`/`set disabled`, copia al portapapeles o escritura con aprobación y copia de seguridad `cordis.patch.yml.bak-<ts>`), **banco de pruebas de herramientas** (resultado JSON canónico + contenido renderizado, limitado por `trialMaxResultChars`, solo panel), y el **tablero de capacidades**: Resources y Prompts marcados como *pendientes de soporte upstream* (el cliente oficial hoy solo puentea herramientas).
43
- - **Sondas**: conectividad Streamable HTTP de un clic o pasiva (resultados solo del panel).
85
+ La salida de la consola ES el vocabulario de `cordis.patch.yml` las mismas líneas que escribirías a mano, generadas, previsualizadas y aplicadas con seguridad.
44
86
 
45
- ## Inicio rápido
87
+ ## Quick start
46
88
 
47
89
  ```sh
48
- dsh plugin --profile web add github:PerryLink/dsh-mcp-panel#v0.4.0
49
- # o el canal npm:
50
- dsh plugin --profile web add dsh-mcp-panel@0.4.0
90
+ # 1. instala el bundle en tu perfil
91
+ dsh plugin --profile web add "github:PerryLink/dsh-mcp-panel#main"
92
+
93
+ # o desde npm (versiones publicadas)
94
+ dsh plugin --profile web add dsh-mcp-panel
95
+
96
+ # 2. reinicia y verifica la fila
97
+ dsh --profile web --dump-config | grep -A3 'id: mcp-panel'
51
98
  ```
52
99
 
53
- Reinicia (o deja que la superficie web recargue `cordis.patch.yml`) y abre **Ajustes → Plugins → MCP**, o ejecuta `/mcp`.
100
+ Luego abre **Ajustes → Plugins → MCP**, o ejecuta:
54
101
 
55
- ## Honesto por contrato
102
+ ```text
103
+ /mcp
104
+ /mcp everything tools
105
+ /mcp everything health
106
+ /mcp everything call echo '{"message": "hi"}'
107
+ ```
108
+
109
+ ## Install & uninstall
56
110
 
57
- - **El puente sigue siendo el puente**: sin cambios de transporte/OAuth/protocolo.
58
- - **Sin estado falso**: `unknown` / `—` con `statusSource: 'derived'` sin datos upstream; códigos de salida y stderr nunca inventados (etiquetados *pendiente de soporte upstream*).
59
- - **Visualización saneada**: credenciales en URLs, userinfo, valores de headers, tokens bearer y JWTs redactados; los **valores** de env/headers nunca salen del host (el editor ve solo claves).
60
- - **Escrituras solo-anexar, con aprobación y respaldo**: la consola nunca reescribe `cordis.patch.yml`; con servicio de aprobación y un agente en turno abierto pregunta a `ctx.approval` (solo `allowed-once` procede); si no, la confirmación interactiva es el canal de aprobación. `writeEnabled: false` es el interruptor de seguridad.
61
- - **Sin inyección de prompts**: la consola no registra secciones de prompt; solo las descripciones de sus dos herramientas/comandos, en el estilo minimalista del cliente oficial.
111
+ - **Canal git** (último `main`): `dsh plugin --profile web add "github:PerryLink/dsh-mcp-panel#main"` — el script `prepare` construye solo con dependencias de producción.
112
+ - **Canal npm** (versiones publicadas): `dsh plugin --profile web add dsh-mcp-panel`.
113
+ - **Canal tarball**: `pnpm pack` en este repo, luego `dsh plugin --profile web add ./dsh-mcp-panel-<version>.tgz`.
114
+ - **Desinstalar**: elimina la fila `mcp-panel` de `cordis.patch.yml` (la superficie web la recarga en caliente), borra el paquete del `node_modules` del perfil y verifica con `dsh web --dump-config` que no quede ninguna fila `mcp-panel`.
62
115
 
63
- ## Config
116
+ ## Configuration
64
117
 
65
- | Clave | Valor | Descripción |
118
+ Todas las opciones son campos Schemastery `Config` (modificables desde cordis.yml). `cordis.patch.yml` documenta cada clave.
119
+
120
+ | Clave | Por defecto | Significado |
121
+ |---|---|---|
122
+ | `probeEnabled` | `true` | Registra la herramienta `mcp_probe` (resultados solo del panel) |
123
+ | `probeTimeoutMs` | `10000` | Tiempo límite por sonda en ms |
124
+ | `maxProbes` | `10` | Registros de sonda mostrados en el panel |
125
+ | `refreshIntervalMs` | `0` | Refresco sugerido del panel en ms; `0` = bajo demanda |
126
+ | `outputLanguage` | `en` | Idioma de salida de `/mcp`: `en \| zh \| es \| pt \| hi` |
127
+ | `passiveProbeEnabled` | `false` | Sondear periódicamente servidores streamable-http |
128
+ | `passiveProbeIntervalMs` | `60000` | Intervalo de sonda pasiva en ms |
129
+ | `trialEnabled` | `true` | Banco de pruebas de herramientas (pestaña de ajustes + `/mcp call`) |
130
+ | `trialTimeoutMs` | `120000` | Plazo del panel por llamada de prueba en ms |
131
+ | `trialMaxResultChars` | `60000` | Tope del payload de resultado de prueba en caracteres |
132
+ | `writeEnabled` | `true` | Interruptor de seguridad: `false` rechaza toda escritura (copiar sigue funcionando) |
133
+ | `backupCount` | `5` | Copias de `cordis.patch.yml` retenidas por escritura |
134
+
135
+ ## Tools & surfaces
136
+
137
+ | Superficie | Tipo | Notas |
66
138
  |---|---|---|
67
- | `probeEnabled` / `probeTimeoutMs` / `maxProbes` | `true` / `10000` / `10` | herramienta de sonda, tiempo límite, registros mostrados |
68
- | `refreshIntervalMs` | `0` | refresco sugerido del panel (`0` = bajo demanda) |
69
- | `outputLanguage` | `en` | idioma de `/mcp`: `en\|zh\|es\|pt\|hi` |
70
- | `passiveProbeEnabled` / `passiveProbeIntervalMs` | `false` / `60000` | sondas pasivas y su intervalo |
71
- | `trialEnabled` / `trialTimeoutMs` / `trialMaxResultChars` | `true` / `120000` / `60000` | banco de pruebas y sus límites |
72
- | `writeEnabled` / `backupCount` | `true` / `5` | interruptor de escrituras; copias de seguridad retenidas |
139
+ | `/mcp` | command | Fila de estado por servidor; legible por el modelo y reconstruible del log |
140
+ | `/mcp <servidor> tools` | command | Nombres + descripciones de `mcp__*` visibles para el modelo |
141
+ | `/mcp <servidor> health` | command | Sugerencias de autorreparación derivadas del texto de error saneado |
142
+ | `/mcp <servidor> call <tool> [json]` | command | Llamada de prueba por el pipeline oficial de herramientas |
143
+ | `mcp_probe` | tool | Sonda opcional de conectividad Streamable HTTP (trabajo en segundo plano) |
144
+ | Ajustes Plugins → MCP | Slot de UI | Tarjetas de estado, CRUD de servidores y banco de pruebas |
145
+ | Remote Typert `mcpPanel` | service | Canal de instantáneas de solo lectura (host → cliente) |
146
+
147
+ ## Resources & Prompts
148
+
149
+ El cliente oficial documenta que *"Tools are the only bridged MCP capability"* — Resources y Prompts están diferidos. La consola detecta un seam de catálogo propuesto y mostrará listas de solo lectura el día que se envíe; hasta entonces el tablero de capacidades marca ambos **pendientes de soporte upstream**.
150
+
151
+ ## Permissions & data
152
+
153
+ - **Permisos**: el manifiesto `dshWorkshop` declara `network:outbound` y `native-code:none`.
154
+ - **Datos**: el panel es de solo lectura; escribe solo fragmentos de `cordis.patch.yml` de solo-anexar (con aprobación, respaldo primero). Credenciales en URLs, contraseñas userinfo, valores de headers, tokens bearer y JWTs se redactan antes de renderizar; los `headers` configurados nunca entran en ninguna instantánea, y los **valores** de env/headers nunca salen del host (el editor ve solo claves).
155
+
156
+ ## Security boundaries
157
+
158
+ - **El puente sigue siendo el puente.** Sin cambios de transporte, OAuth o protocolo; una fila mcp-client por servidor, exactamente como a mano.
159
+ - **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.
160
+ - **Escrituras solo-anexar, con aprobación y respaldo.** La consola nunca reescribe `cordis.patch.yml`; anexa operaciones generadas y conserva las `backupCount` copias más recientes.
161
+ - **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.
162
+
163
+ ## Known limitations
164
+
165
+ - **Resources y Prompts** están pendientes de soporte upstream — el cliente oficial solo puentea herramientas.
166
+ - **Códigos de salida / stderr** se etiquetan *pendiente de soporte upstream* hasta que el cliente los exponga.
167
+ - **Panel de solo lectura** — la consola nunca falsifica un estado de conexión; los campos no observables leen `unknown` / `-1` / `—`.
168
+
169
+ ## Development
170
+
171
+ ```sh
172
+ pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build && pnpm run verify:self-contained && pnpm run verify:artifacts && pnpm pack
173
+ ```
174
+
175
+ `scripts/verify-headless.mjs` arranca el perfil web real e imprime la salida exacta de `/mcp`. Publicación: `node scripts/release.mjs <x.y.z>` ejecuta la puerta completa, hace commit y etiqueta `v<x.y.z>` localmente (nunca empuja).
176
+
177
+ ## Topics
178
+
179
+ `dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `mcp`, `mcp-client`, `observability`, `panel`
180
+
181
+ ## Contributors
182
+
183
+ - [@PerryLink](https://github.com/PerryLink) — creador y mantenedor.
184
+ - [@xiaoyuyu6420](https://github.com/xiaoyuyu6420) — diagnosticó las devDependencies de client faltantes detrás de los fallos de build en checkouts limpios (PR #5).
185
+
186
+ ## PerryLink DSH Plugin Family
73
187
 
74
- ## Resources y Prompts
188
+ Este proyecto es uno de los [plugins de DeepSeek Harness](https://github.com/PerryLink) mantenidos por [PerryLink](https://github.com/PerryLink). Si este te ayuda, los demás probablemente también:
75
189
 
76
- El cliente oficial documenta "Tools are the only bridged MCP capability": ambos están diferidos. La consola detecta un seam de catálogo propuesto y mostrará listas de solo lectura cuando llegue; hasta entonces el tablero marca *pendiente de soporte upstream* (addendum en `docs/upstream-proposal.md` del harness).
190
+ | Plugin | En una línea |
191
+ |---|---|
192
+ | [dsh-mask](https://github.com/PerryLink/dsh-mask) | Middleware de enmascaramiento de PII: anonimiza en el límite del modelo, restaura en la capa de visualización |
193
+ | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Panel MCP de solo lectura: comando /mcp + pestaña de ajustes con estado, herramientas y errores |
194
+ | [dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck) | Guardia de disciplina de ingeniería: interrogatorio de requisitos, puertas de pruebas, revisión adversaria |
195
+ | [dsh-background-agents](https://github.com/PerryLink/dsh-background-agents) | Agentes hijos en segundo plano con barra lateral web, mensajería e interrupción |
196
+ | [dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions) | Diagnóstico, formato, autocompletado, acciones de código y renombrado LSP |
197
+ | [dsh-output-styles](https://github.com/PerryLink/dsh-output-styles) | Cambio de estilo en tiempo de ejecución equivalente a outputStyles de Claude Code |
198
+ | [dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind) | Equivalente a /rewind de Claude Code: snapshots, forks de sesión, restauración de un clic |
199
+ | [dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules) | Reglas de permisos declarativas allow/deny/ask estilo Claude Code, con auditoría |
200
+ | [dsh-auto-review](https://github.com/PerryLink/dsh-auto-review) | Autorrevisión de segundo modelo en la cadena de aprobación, fail-closed por defecto |
201
+ | [dsh-memento](https://github.com/PerryLink/dsh-memento) | Memoria entre sesiones con aprobación: seam ctx.memory + SQLite + herramienta memory |
202
+ | [dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security) | Paquete de skills de auditoría de seguridad: escaneo de secretos, revisión de dependencias y cadena de suministro |
203
+ | [dsh-session-pin](https://github.com/PerryLink/dsh-session-pin) | Fija sesiones en la barra lateral web con orden duradero |
204
+ | [dsh-composer-history](https://github.com/PerryLink/dsh-composer-history) | Historial de entrada estilo terminal para el compositor web: flechas, búsqueda Ctrl+R |
205
+ | [dsh-github](https://github.com/PerryLink/dsh-github) | Integración de PR/issues de GitHub para DSH, toda escritura con aprobación |
206
+ | [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) | Base de conocimiento de desarrollo de plugins como skill de agente bajo demanda |
207
+ | [dsh-claude-move](https://github.com/PerryLink/dsh-claude-move) | Migra sesiones, memoria, skills y CLAUDE.md de Claude Code a DSH |
77
208
 
78
- ## Licencia
209
+ ## License
79
210
 
80
- Apache-2.0 — véase [LICENSE](LICENSE).
211
+ [Apache License 2.0](LICENSE) © 2026 colaboradores de dsh-mcp-panel
package/README.hi.md CHANGED
@@ -1,80 +1,211 @@
1
+ <div align="center">
2
+
1
3
  # dsh-mcp-panel
2
4
 
3
5
  **DeepSeek Harness के आधिकारिक MCP क्लाइंट के लिए MCP प्रबंधन कंसोल — सेटिंग्स पेज से MCP सर्वर जोड़ें, बदलें, हटाएँ और टूल आज़माएँ; ईमानदार स्थिति, स्वास्थ्य निदान और सुरक्षित, वापस लाने योग्य प्रोफ़ाइल लेखन के साथ।**
4
6
 
5
- [English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
7
+ *आधिकारिक क्लाइंट = पुल, यह प्लगइन = कंसोल: `mcp/status` seam से स्थिति पढ़ें, केवल जोड़ने वाले, अनुमोदित प्रोफ़ाइल patch लिखें।*
6
8
 
7
9
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
8
- [![npm](https://img.shields.io/npm/v/dsh-mcp-panel)](https://www.npmjs.com/package/dsh-mcp-panel)
9
- [![CI](https://github.com/PerryLink/dsh-mcp-panel/actions/workflows/ci.yml/badge.svg)](https://github.com/PerryLink/dsh-mcp-panel/actions/workflows/ci.yml)
10
- [![dsh-plugin](https://img.shields.io/badge/ecosystem-dsh--plugin-8b5cf6)](https://github.com/topics/dsh-plugin)
10
+ [![DSH plugin](https://img.shields.io/badge/dsh-plugin-✅-green)](https://github.com/topics/dsh-plugin)
11
+ [![Node](https://img.shields.io/badge/node-%5E22.19%20%7C%7C%20%3E%3D24-brightgreen.svg)](#)
12
+ [![CI](https://img.shields.io/github/actions/workflow/status/PerryLink/dsh-mcp-panel/ci.yml?branch=main&label=CI)](https://github.com/PerryLink/dsh-mcp-panel/actions)
13
+ [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-mcp-panel?label=version)](https://github.com/PerryLink/dsh-mcp-panel/releases)
14
+ [![npm version](https://img.shields.io/npm/v/dsh-mcp-panel)](https://www.npmjs.com/package/dsh-mcp-panel)
15
+ [![npm downloads](https://img.shields.io/npm/dm/dsh-mcp-panel)](https://www.npmjs.com/package/dsh-mcp-panel)
16
+
17
+ [English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
18
+
19
+ </div>
20
+
21
+ ---
22
+
23
+ ## Compatibility
24
+
25
+ | सतह | स्थिति |
26
+ |---|---|
27
+ | Harness | DeepSeek Harness `0.1.0-rc.8`–`0.2.0` |
28
+ | Node | `^22.19.0 \|\| >=24.0.0` |
29
+ | प्लेटफ़ॉर्म | Web GUI (दोहरा चेहरा: host + browser) |
30
+ | मॉडल | कोई भी (पैनल रीड-ओनली है; केवल `/mcp` आउटपुट मॉडल-पठनीय है) |
31
+
32
+ ## What you get
33
+
34
+ `dsh-mcp-panel` आधिकारिक MCP क्लाइंट के ऊपर की अनुभव परत है: एक रीड-ओनली रनटाइम दृश्य और सुरक्षित, वापस लाने योग्य प्रोफ़ाइल लेखन।
11
35
 
12
- ## आर्किटेक्चर: आधिकारिक क्लाइंट पुल है; यह प्लगइन कंसोल है
36
+ - **`/mcp` कमांड** प्रति सर्वर एक पंक्ति: ट्रांसपोर्ट, लक्ष्य, टूल गिनती, कनेक्शन स्थिति (upstream seam से; अप्रेक्षित होने पर `unknown`), अंतिम त्रुटि, रीकनेक्ट — मॉडल-पठनीय, सत्र लॉग से पुनर्निर्माण योग्य, पाँच आउटपुट भाषाएँ।
37
+ - **`/mcp <server> tools`** — मॉडल-दृश्य `mcp__*` टूल नाम व विवरण।
38
+ - **`/mcp <server> health`** — व्युत्पन्न स्व-उपचार सुझाव (ENOENT → अनुपलब्ध निर्भरता, ECONNREFUSED, टाइमआउट, 401/403/404, DNS, दर सीमा, रीकनेक्ट समाप्त…); एग्ज़िट कोड / stderr पूँछ ईमानदारी से *upstream समर्थन की प्रतीक्षा में* चिह्नित।
39
+ - **`/mcp <server> call <tool> [json]`** — **आधिकारिक टूल पाइपलाइन** (`ctx.tools.execute()`) से परीक्षण कॉल; प्री-एग्ज़ीक्यूट अनुमति नीति, अनुमोदन, guards और post-execute सब लागू।
40
+ - **सेटिंग्स → प्लगइन्स → MCP टैब** — बैज, निदान और प्रोब वाले स्थिति कार्ड, साथ में सर्वर CRUD और टूल ट्रायल कंसोल।
41
+ - **सर्वर CRUD** — जोड़/बदल/हटा फ़ॉर्म → `insert`/`set`/`set disabled` अंश → क्लिपबोर्ड कॉपी या अनुमोदित लेखन, स्वचालित बैकअप के साथ।
42
+ - **टूल ट्रायल कंसोल** — सर्वर → `mcp__*` टूल → JSON तर्क → कैनोनिकल JSON परिणाम + रेंडर सामग्री; `trialMaxResultChars` से सीमित; केवल पैनल, मॉडल संदर्भ में कभी नहीं।
43
+
44
+ ## Architecture: official client = bridge, this plugin = console
13
45
 
14
46
  [`@deepseek-ai/dsh-mcp-client`](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/mcp/mcp-client) **एकमात्र पुल** है: प्रति MCP सर्वर एक इंस्टेंस, हाथ से लिखी `cordis.yml` पंक्ति के रूप में, जो ट्रांसपोर्ट जोड़ता है, टूल सिंक करता है और `mcp__<server>__<tool>` नाम पंजीकृत करता है। यह प्लगइन उसे कभी नहीं बदलता: यह उसके ऊपर की **अनुभव परत** है:
15
47
 
16
- ```
17
- profile/composition dsh-mcp-client (पुल) dsh-mcp-panel (कंसोल)
18
- - id: mcp-github • ट्रांसपोर्ट • /mcp कमांड
19
- name: '@deepseek-ai/…' • टूल सिंक • सेटिंग्स → प्लगइन्स → MCP:
20
- config: { serverName, … } • mcp__* टूल CRUD, ट्रायल कंसोल,
21
- - id: mcp-panel • mcp/status seam ◄─स्थिति─► निदान, प्रोब
22
- name: dsh-mcp-panel
48
+ ```text
49
+ ┌────────────────────────────────────────────┐
50
+ profile │ cordis.yml / cordis.patch.yml
51
+ संरचना │ - id: mcp-github │
52
+ (प्रति सर्वर │ name: '@deepseek-ai/dsh-mcp-client' │
53
+ एक पंक्ति, │ config: { serverName, transport, } │
54
+ हाथ से) │ - id: mcp-panel
55
+ │ name: dsh-mcp-panel ◄── यह प्लगइन │
56
+ └───────────────┬────────────────────────────┘
57
+
58
+ ┌───────────────────────────┴───────────────────────────┐
59
+ │ │
60
+ ┌────▼──────────────┐ ┌───────────────────────────┐ │
61
+ │ @deepseek-ai/dsh- │ │ dsh-mcp-panel (कंसोल) │ │
62
+ │ mcp-client │ │ │ │
63
+ │ • ट्रांसपोर्ट │ │ • /mcp कमांड │ │
64
+ │ • टूल सिंक │ │ • सेटिंग्स → प्लगइन्स → │ │
65
+ │ • mcp__* टूल │◄──────►│ MCP: CRUD, ट्रायल │ │
66
+ │ • mcp/status seam │ स्थिति │ • स्वास्थ्य निदान │ │
67
+ └───────────────────┘ │ • प्रोब, क्षमताएँ │ │
68
+ └───────────────────────────┘ │
23
69
  ```
24
70
 
25
- कंसोल `mcp/status` seam (इवेंट + `mcpStatus` सेवा), टूल रजिस्ट्री और loader से **पढ़ता** है; **लिखता** केवल प्रोफ़ाइल की patch परत में — केवल जोड़ता है, अनुमोदन के साथ, स्वचालित बैकअप के साथ। ट्रांसपोर्ट, OAuth और प्रोटोकॉल अछूते रहते हैं।
71
+ कंसोल क्लाइंट को उसके `mcp/status` अवलोकन seam (इवेंट + `mcpStatus` क्वेरी सेवा), टूल रजिस्ट्री और loader से **पढ़ता** है; **लिखता** केवल प्रोफ़ाइल की patch परत में — केवल-जोड़ने वाला, अनुमोदित, हमेशा बैकअप सहित। ट्रांसपोर्ट, OAuth और प्रोटोकॉल अछूते रहते हैं।
26
72
 
27
- ## कंसोल बनाम हाथ से लिखा cordis.yml
73
+ ## Console vs. hand-written cordis.yml
28
74
 
29
75
  | | हाथ से लिखा cordis.yml | dsh-mcp-panel कंसोल |
30
76
  |---|---|---|
31
- | सर्वर जोड़ें | YAML संपादित करें | फ़ॉर्म → patch अंश → **कॉपी** या **लिखें** (अनुमोदन + बैकअप) |
32
- | सर्वर बदलें | YAML संपादित करें, रीस्टार्ट करें | पहले से भरा फ़ॉर्म; बिना बदले सीक्रेट host पर ही रहते हैं |
33
- | सर्वर हटाएँ | पंक्ति मिटाएँ | `set disabled: true` ऑपरेशन (patch शब्दावली में remove नहीं है); कभी भी फिर से सक्षम करने योग्य |
77
+ | सर्वर जोड़ें | YAML संपादित करें, इंडेंट/कोट्स का ध्यान | फ़ॉर्म → patch अंश → **कॉपी** या **लिखें** (अनुमोदन + बैकअप) |
78
+ | सर्वर बदलें | YAML संपादित करें, रीस्टार्ट/हॉट-रीलोड | लाइव पंक्ति से पहले से भरा फ़ॉर्म; बिना बदले सीक्रेट host पर ही रहते हैं |
79
+ | सर्वर हटाएँ | पंक्ति मिटाएँ | `set disabled: true` ऑपरेशन (patch शब्दावली में remove नहीं) कभी भी फिर से सक्षम करने योग्य |
34
80
  | स्थिति देखें | लॉग पढ़ें | बैज + रीकनेक्ट + अंतिम त्रुटि, `mcp/status` से लाइव |
35
81
  | टूल आज़माएँ | मॉडल से कहें | ट्रायल कंसोल → आधिकारिक `ctx.tools.execute()` पाइपलाइन (अनुमतियाँ और अनुमोदन लागू) |
36
- | निदान करें | लॉग grep करें | `/mcp <server> health` व्युत्पन्न सुझावों के साथ |
37
-
38
- ## क्या मिलता है
82
+ | विफलताओं का निदान | लॉग grep करें | `/mcp <server> health` व्युत्पन्न सुझावों के साथ |
83
+ | गलतियाँ | हाथ से वापस लाएँ | हर लेखन केवल-जोड़ने वाला है और समय-चिह्नित बैकअप छोड़ता है |
39
84
 
40
- - **`/mcp`**: प्रति सर्वर एक पंक्तिट्रांसपोर्ट, लक्ष्य, टूल गिनती, कनेक्शन स्थिति (ईमानदार: upstream डेटा के बिना `unknown`), अंतिम त्रुटि, रीकनेक्ट; मॉडल-पठनीय, सत्र लॉग से पुनर्निर्माण योग्य, पाँच आउटपुट भाषाएँ।
41
- - **`/mcp <server> tools | health | call <tool> [json] | disable | enable`**: टूल सूची; व्युत्पन्न निदान (ENOENT → अनुपलब्ध निर्भरता, ECONNREFUSED, टाइमआउट, 401/403/404, DNS, दर सीमा, रीकनेक्ट समाप्त); **आधिकारिक पाइपलाइन** से परीक्षण कॉल (अनुमतियाँ + अनुमोदन लागू); सटीक patch सुझाव।
42
- - **सेटिंग्स → प्लगइन्स → MCP**: बैज और निदान वाले स्थिति कार्ड, **सर्वर CRUD** (`insert`/`set`/`set disabled` अंश, क्लिपबोर्ड कॉपी या अनुमोदन + `cordis.patch.yml.bak-<ts>` बैकअप के साथ लेखन), **टूल ट्रायल कंसोल** (कैनोनिकल JSON परिणाम + रेंडर सामग्री, `trialMaxResultChars` द्वारा सीमित, केवल पैनल) और **क्षमता बोर्ड**: Resources व Prompts *upstream समर्थन की प्रतीक्षा में* चिह्नित (आज आधिकारिक क्लाइंट केवल टूल जोड़ता है)।
43
- - **प्रोब**: एक-क्लिक या निष्क्रिय Streamable HTTP कनेक्टिविटी जाँच (परिणाम केवल पैनल)।
85
+ कंसोल का आउटपुट ही `cordis.patch.yml` शब्दावली है वही पंक्तियाँ जो आप हाथ से लिखते, अब जनरेट, पूर्वावलोकित और सुरक्षित रूप से लागू।
44
86
 
45
- ## त्वरित शुरुआत
87
+ ## Quick start
46
88
 
47
89
  ```sh
48
- dsh plugin --profile web add github:PerryLink/dsh-mcp-panel#v0.4.0
49
- # या npm चैनल:
50
- dsh plugin --profile web add dsh-mcp-panel@0.4.0
90
+ # 1. bundle को अपने profile में इंस्टॉल करें
91
+ dsh plugin --profile web add "github:PerryLink/dsh-mcp-panel#main"
92
+
93
+ # या npm से (प्रकाशित संस्करण)
94
+ dsh plugin --profile web add dsh-mcp-panel
95
+
96
+ # 2. रीस्टार्ट करें और पंक्ति की पुष्टि करें
97
+ dsh --profile web --dump-config | grep -A3 'id: mcp-panel'
51
98
  ```
52
99
 
53
- रीस्टार्ट करें (या वेब सतह को `cordis.patch.yml` हॉट-रीलोड करने दें) और **सेटिंग्स → प्लगइन्स → MCP** खोलें, या `/mcp` चलाएँ।
100
+ फिर **सेटिंग्स → प्लगइन्स → MCP** खोलें, या चलाएँ:
54
101
 
55
- ## अनुबंध के अनुसार ईमानदार
102
+ ```text
103
+ /mcp
104
+ /mcp everything tools
105
+ /mcp everything health
106
+ /mcp everything call echo '{"message": "hi"}'
107
+ ```
108
+
109
+ ## Install & uninstall
56
110
 
57
- - **पुल पुल ही रहता है**: ट्रांसपोर्ट/OAuth/प्रोटोकॉल में कोई बदलाव नहीं।
58
- - **कोई नकली स्थिति नहीं**: upstream डेटा के बिना `unknown` / `—` और `statusSource: 'derived'`; एग्ज़िट कोड व stderr कभी गढ़े नहीं जाते (*upstream समर्थन की प्रतीक्षा में* चिह्नित)।
59
- - **सेनेटाइज़्ड प्रदर्शन**: URL क्रेडेंशियल, userinfo, हेडर मान, बियरर टोकन और JWT रिडैक्ट होते हैं; env/headers के **मान** कभी host से बाहर नहीं जाते (संपादक केवल कुंजियाँ देखता है)।
60
- - **लेखन केवल-जोड़ने वाला, अनुमोदित, बैकअप सहित**: कंसोल कभी `cordis.patch.yml` को दोबारा नहीं लिखता; अनुमोदन सेवा और खुले टर्न वाला एजेंट होने पर `ctx.approval` से पूछता है (केवल `allowed-once` आगे बढ़ता है); अन्यथा इंटरैक्टिव पुष्टि ही अनुमोदन माध्यम है। `writeEnabled: false` कठोर स्विच है।
61
- - **कोई प्रॉम्प्ट इंजेक्शन नहीं**: कंसोल कोई प्रॉम्प्ट अनुभाग पंजीकृत नहीं करता; केवल उसके दो टूल/कमांड विवरण, आधिकारिक क्लाइंट की न्यूनतम शैली में।
111
+ - **git चैनल** (नवीनतम `main`): `dsh plugin --profile web add "github:PerryLink/dsh-mcp-panel#main"` — `prepare` स्क्रिप्ट केवल production निर्भरताओं से बिल्ड करती है।
112
+ - **npm चैनल** (प्रकाशित संस्करण): `dsh plugin --profile web add dsh-mcp-panel`।
113
+ - **tarball चैनल**: इस repo में `pnpm pack`, फिर `dsh plugin --profile web add ./dsh-mcp-panel-<version>.tgz`।
114
+ - **अनइंस्टॉल**: `cordis.patch.yml` से `mcp-panel` पंक्ति हटाएँ (वेब सतह इसे हॉट-रीलोड करती है), profile के `node_modules` से पैकेज हटाएँ, और `dsh web --dump-config` से पुष्टि करें कि कोई `mcp-panel` पंक्ति शेष नहीं है।
62
115
 
63
- ## कॉन्फ़िगरेशन
116
+ ## Configuration
64
117
 
65
- | कुंजी | मान | विवरण |
118
+ सभी ट्यूनेबल Schemastery `Config` फ़ील्ड हैं (cordis.yml से बदले जा सकते हैं)। `cordis.patch.yml` हर कुंजी को इनलाइन दस्तावेज़ित करता है।
119
+
120
+ | कुंजी | डिफ़ॉल्ट | अर्थ |
121
+ |---|---|---|
122
+ | `probeEnabled` | `true` | `mcp_probe` पृष्ठभूमि-कार्य टूल पंजीकृत करें (परिणाम केवल पैनल) |
123
+ | `probeTimeoutMs` | `10000` | प्रति-प्रोब timeout (ms) |
124
+ | `maxProbes` | `10` | पैनल में दिखाए गए प्रोब रिकॉर्ड |
125
+ | `refreshIntervalMs` | `0` | सुझाया गया पैनल रीफ़्रेश (ms); `0` = माँग पर |
126
+ | `outputLanguage` | `en` | `/mcp` आउटपुट भाषा: `en \| zh \| es \| pt \| hi` |
127
+ | `passiveProbeEnabled` | `false` | streamable-http सर्वरों की आवधिक जाँच |
128
+ | `passiveProbeIntervalMs` | `60000` | निष्क्रिय प्रोब अंतराल (ms) |
129
+ | `trialEnabled` | `true` | टूल ट्रायल कंसोल (सेटिंग्स टैब + `/mcp call`) |
130
+ | `trialTimeoutMs` | `120000` | प्रति ट्रायल कॉल पैनल-साइड समय सीमा (ms) |
131
+ | `trialMaxResultChars` | `60000` | ट्रायल परिणाम payload की सीमा (वर्ण) |
132
+ | `writeEnabled` | `true` | कठोर स्विच: `false` हर प्रोफ़ाइल लेखन अस्वीकार करता है (कॉपी फिर भी चलती है) |
133
+ | `backupCount` | `5` | प्रति लेखन रखे गए `cordis.patch.yml` बैकअप |
134
+
135
+ ## Tools & surfaces
136
+
137
+ | सतह | प्रकार | टिप्पणियाँ |
66
138
  |---|---|---|
67
- | `probeEnabled` / `probeTimeoutMs` / `maxProbes` | `true` / `10000` / `10` | प्रोब टूल, समय सीमा, दिखाए गए रिकॉर्ड |
68
- | `refreshIntervalMs` | `0` | सुझाया गया पैनल रीफ़्रेश (`0` = मांग पर) |
69
- | `outputLanguage` | `en` | `/mcp` भाषा: `en\|zh\|es\|pt\|hi` |
70
- | `passiveProbeEnabled` / `passiveProbeIntervalMs` | `false` / `60000` | निष्क्रिय प्रोब और अंतराल |
71
- | `trialEnabled` / `trialTimeoutMs` / `trialMaxResultChars` | `true` / `120000` / `60000` | ट्रायल कंसोल और उसकी सीमाएँ |
72
- | `writeEnabled` / `backupCount` | `true` / `5` | लेखन स्विच; रखे गए बैकअप |
139
+ | `/mcp` | command | प्रति-सर्वर स्थिति पंक्ति; मॉडल-पठनीय और लॉग-पुनर्निर्माण योग्य |
140
+ | `/mcp <server> tools` | command | मॉडल-दृश्य `mcp__*` टूल नाम + विवरण |
141
+ | `/mcp <server> health` | command | सैनिटाइज़्ड त्रुटि पाठ से व्युत्पन्न स्व-उपचार सुझाव |
142
+ | `/mcp <server> call <tool> [json]` | command | आधिकारिक टूल पाइपलाइन से परीक्षण कॉल |
143
+ | `mcp_probe` | tool | वैकल्पिक Streamable HTTP कनेक्टिविटी प्रोब (पृष्ठभूमि कार्य) |
144
+ | सेटिंग्स प्लगइन्स → MCP टैब | UI slot | स्थिति कार्ड, सर्वर CRUD और टूल ट्रायल कंसोल |
145
+ | `mcpPanel` Typert Remote | service | रीड-ओनली स्नैपशॉट चैनल (host → client) |
146
+
147
+ ## Resources & Prompts
148
+
149
+ आधिकारिक क्लाइंट दस्तावेज़ कहता है कि *"Tools are the only bridged MCP capability"* — Resources और Prompts स्थगित हैं। कंसोल प्रस्तावित upstream catalog seam को फ़ीचर-डिटेक्ट करता है और उसके आते ही रीड-ओनली सूचियाँ दिखाएगा; तब तक क्षमता बोर्ड दोनों को **upstream समर्थन की प्रतीक्षा में** दर्शाता है।
150
+
151
+ ## Permissions & data
152
+
153
+ - **अनुमतियाँ**: `dshWorkshop` manifest `network:outbound` और `native-code:none` घोषित करता है।
154
+ - **डेटा**: पैनल रीड-ओनली है; यह केवल केवल-जोड़ने वाले `cordis.patch.yml` अंश लिखता है (अनुमोदित, बैकअप-प्रथम)। URL क्रेडेंशियल, userinfo पासवर्ड, हेडर मान, बियरर टोकन और JWT रेंडर से पहले रिडैक्ट होते हैं; कॉन्फ़िगर किए गए `headers` कभी किसी स्नैपशॉट में नहीं जाते, और env/header के **मान** कभी host से बाहर नहीं जाते (संपादक केवल कुंजियाँ देखता है)।
155
+
156
+ ## Security boundaries
157
+
158
+ - **पुल पुल ही रहता है।** ट्रांसपोर्ट, OAuth या प्रोटोकॉल में कोई बदलाव नहीं; प्रति सर्वर एक mcp-client पंक्ति, ठीक हाथ से लिखी हुई।
159
+ - **कोई नकली स्थिति नहीं।** बिना upstream अवलोकन वाले कनेक्शन फ़ील्ड `unknown` / `—` और `statusSource: 'derived'` पढ़ते हैं; एग्ज़िट कोड और stderr पूँछ कभी गढ़े नहीं जाते।
160
+ - **लेखन केवल-जोड़ने वाला, अनुमोदित, बैकअप सहित।** कंसोल कभी `cordis.patch.yml` को दोबारा नहीं लिखता; यह जनरेट किए ऑपरेशन जोड़ता है और नवीनतम `backupCount` बैकअप रखता है।
161
+ - **कोई प्रॉम्प्ट इंजेक्शन नहीं।** पैनल कोई प्रॉम्प्ट अनुभाग पंजीकृत नहीं करता; मॉडल को दिखने वाला उसका एकमात्र पाठ दो टूल/कमांड विवरण हैं।
162
+
163
+ ## Known limitations
164
+
165
+ - **Resources और Prompts** upstream समर्थन की प्रतीक्षा में — आधिकारिक क्लाइंट केवल टूल जोड़ता है।
166
+ - **एग्ज़िट कोड / stderr पूँछ** तब तक *upstream समर्थन की प्रतीक्षा में* चिह्नित रहते हैं जब तक क्लाइंट उन्हें उजागर न करे।
167
+ - **रीड-ओनली पैनल** — कंसोल कभी कनेक्शन स्थिति नहीं गढ़ता; अप्रेक्षणीय फ़ील्ड `unknown` / `-1` / `—` पढ़ते हैं।
168
+
169
+ ## Development
170
+
171
+ ```sh
172
+ pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build && pnpm run verify:self-contained && pnpm run verify:artifacts && pnpm pack
173
+ ```
174
+
175
+ `scripts/verify-headless.mjs` वास्तविक web profile बूट करता है और `/mcp` का सटीक आउटपुट छापता है। प्रकाशन: `node scripts/release.mjs <x.y.z>` पूरी जाँच चलाता है, commit करता है और स्थानीय रूप से `v<x.y.z>` टैग करता है (कभी push नहीं करता)।
176
+
177
+ ## Topics
178
+
179
+ `dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `mcp`, `mcp-client`, `observability`, `panel`
180
+
181
+ ## Contributors
182
+
183
+ - [@PerryLink](https://github.com/PerryLink) — निर्माता और अनुरक्षक।
184
+ - [@xiaoyuyu6420](https://github.com/xiaoyuyu6420) — क्लीन-चेकआउट बिल्ड विफलताओं के पीछे की गुम client devDependencies का निदान किया (PR #5)।
185
+
186
+ ## PerryLink DSH Plugin Family
73
187
 
74
- ## Resources और Prompts
188
+ यह परियोजना [PerryLink](https://github.com/PerryLink) द्वारा अनुरक्षित [DeepSeek Harness प्लगइनों](https://github.com/PerryLink) में से एक है। अगर यह आपकी मदद करता है, तो बाकी भी संभवतः करेंगे:
75
189
 
76
- आधिकारिक क्लाइंट दस्तावेज़ कहता है "Tools are the only bridged MCP capability": दोनों स्थगित हैं। कंसोल प्रस्तावित कैटलॉग seam को फ़ीचर-डिटेक्ट करता है और उसके आते ही रीड-ओनली सूचियाँ दिखाएगा; तब तक क्षमता बोर्ड *upstream समर्थन की प्रतीक्षा में* दर्शाता है (harness के `docs/upstream-proposal.md` में अनुपूरक)।
190
+ | प्लगइन | एक पंक्ति में |
191
+ |---|---|
192
+ | [dsh-mask](https://github.com/PerryLink/dsh-mask) | PII मास्किंग मिडलवेयर: मॉडल सीमा पर अनाम करें, डिस्प्ले लेयर पर पुनर्स्थापित करें |
193
+ | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | रीड-ओनली MCP रनटाइम पैनल: /mcp कमांड + सेटिंग्स टैब, स्थिति/टूल/त्रुटियाँ |
194
+ | [dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck) | इंजीनियरिंग-अनुशासन गार्ड: आवश्यकता पूछताछ, टेस्ट गेट, विरोधी समीक्षा |
195
+ | [dsh-background-agents](https://github.com/PerryLink/dsh-background-agents) | टिकाऊ पृष्ठभूमि चाइल्ड एजेंट: वेब साइडबार, संदेश और व्यवधान |
196
+ | [dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions) | LSP निदान, फ़ॉर्मेटिंग, पूर्णता, कोड क्रियाएँ और नाम बदलना |
197
+ | [dsh-output-styles](https://github.com/PerryLink/dsh-output-styles) | Claude Code outputStyles-समकक्ष रनटाइम शैली बदलाव |
198
+ | [dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind) | Claude Code /rewind-समकक्ष: स्नैपशॉट, सत्र fork, एक-क्लिक पुनर्स्थापना |
199
+ | [dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules) | Claude Code-शैली घोषणात्मक allow/deny/ask अनुमति नियम, ऑडिट सहित |
200
+ | [dsh-auto-review](https://github.com/PerryLink/dsh-auto-review) | अनुमोदन श्रृंखला पर दूसरे मॉडल की स्वतः समीक्षा, डिफ़ॉल्ट fail-closed |
201
+ | [dsh-memento](https://github.com/PerryLink/dsh-memento) | अनुमोदित क्रॉस-सत्र मेमोरी: ctx.memory seam + SQLite + memory टूल |
202
+ | [dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security) | सुरक्षा-ऑडिट स्किल पैक: सीक्रेट स्कैन, डिपेंडेंसी और सप्लाई-चेन समीक्षा |
203
+ | [dsh-session-pin](https://github.com/PerryLink/dsh-session-pin) | वेब साइडबार में सत्र पिन करें, टिकाऊ क्रम |
204
+ | [dsh-composer-history](https://github.com/PerryLink/dsh-composer-history) | वेब कम्पोज़र के लिए टर्मिनल-शैली इनपुट इतिहास: तीर, Ctrl+R खोज |
205
+ | [dsh-github](https://github.com/PerryLink/dsh-github) | DSH के लिए GitHub PR/issue एकीकरण, हर लेखन अनुमोदित |
206
+ | [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) | प्लगइन-विकास ज्ञान आधार, माँग पर एजेंट स्किल के रूप में |
207
+ | [dsh-claude-move](https://github.com/PerryLink/dsh-claude-move) | Claude Code के सत्र, मेमोरी, स्किल और CLAUDE.md को DSH में स्थानांतरित करें |
77
208
 
78
- ## लाइसेंस
209
+ ## License
79
210
 
80
- Apache-2.0 — देखें [LICENSE](LICENSE)
211
+ [Apache License 2.0](LICENSE) © 2026 dsh-mcp-panel योगदानकर्ता