dsh-plugin-upgrade 0.1.3 → 2.0.0
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/AGENTS.md +146 -47
- package/CHANGELOG.md +92 -32
- package/README-es.md +241 -0
- package/README-hi.md +241 -0
- package/README-pt.md +241 -0
- package/README-zh.md +241 -0
- package/README.md +115 -46
- package/SECURITY.md +1 -1
- package/THIRD_PARTY_NOTICES.md +3 -3
- package/cordis.patch.yml +6 -6
- package/docs/EVIDENCE.md +354 -0
- package/index.mjs +21 -17
- package/lib/route.mjs +112 -0
- package/lib/scan-0.1.6.mjs +310 -0
- package/lib/scan.mjs +264 -31
- package/package.json +55 -10
- package/scripts/changelog-section.mjs +1 -0
- package/scripts/check-readme-sync.mjs +4 -1
- package/scripts/scan-0.1.5.mjs +20 -6
- package/scripts/sweep-all.mjs +6 -2
- package/scripts/verify-artifacts.mjs +44 -14
- package/scripts/verify-self-contained.mjs +13 -3
- package/skills/plugin-upgrade/SKILL.md +88 -0
- package/skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md +421 -0
- package/skills/plugin-upgrade/references/v0.1.5-rc.2-to-v0.1.6-alpha.2.md +75 -0
- package/skills/plugin-upgrade/scripts/scan-0.1.5.mjs +29 -0
- package/types.d.ts +39 -7
- package/README.es.md +0 -172
- package/README.hi.md +0 -172
- package/README.pt.md +0 -172
- package/README.zh.md +0 -172
- package/skills/plugin-upgrade-015/SKILL.md +0 -38
- package/skills/plugin-upgrade-015/references/v0.1.3-alpha.1-to-v0.1.5-alpha.1.md +0 -90
- package/skills/plugin-upgrade-015/scripts/scan-0.1.5.mjs +0 -14
package/README-es.md
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# ⬆️ dsh-plugin-upgrade
|
|
4
|
+
- **Canal de la tienda 1024**: ejecuta `npm i -g dsh1024` una vez y luego `dsh1024 plugin --profile web add dsh-plugin-upgrade` (cuenta para el ranking de instalaciones de [deepseek1024.com](https://deepseek1024.com)).
|
|
5
|
+
[](https://gitee.com/perrylink/dsh-plugin-upgrade)
|
|
6
|
+
|
|
7
|
+
**Habilidad de actualización de plugins para DeepSeek Harness, fusionada y con versión bloqueada — `0.1.3-alpha.1` → `0.1.5-rc.1`, llevada como dos tramos cerrados.**
|
|
8
|
+
|
|
9
|
+
*Tramo A `0.1.3-alpha.1` → `0.1.5-alpha.1`, tramo B `0.1.5-alpha.1` → `0.1.5-rc.1`: una tarjeta de corredor más un escáner de costuras sin dependencias sobre el catálogo fusionado de 20 costuras, para que una mitad de cliente que dejó de montarse en silencio nunca se confunda con «typecheck en verde».*
|
|
10
|
+
|
|
11
|
+
> **Repositorio oficial.** Este es el único repositorio oficial de dsh-plugin-upgrade, mantenido por PerryLink. Sustituye a los dos paquetes con versión bloqueada `dsh-plugin-upgrade` (tramo A) y `dsh-plugin-upgrade-rc1` (tramo B). Los repositorios con el mismo nombre en otras cuentas no están afiliados.
|
|
12
|
+
|
|
13
|
+
[](LICENSE)
|
|
14
|
+
[](https://github.com/topics/dsh-plugin)
|
|
15
|
+
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
16
|
+
[](#)
|
|
17
|
+
[](https://github.com/PerryLink/dsh-plugin-upgrade/actions)
|
|
18
|
+
[](https://github.com/PerryLink/dsh-plugin-upgrade/releases)
|
|
19
|
+
[](https://www.npmjs.com/package/dsh-plugin-upgrade)
|
|
20
|
+
[](https://www.npmjs.com/package/dsh-plugin-upgrade)
|
|
21
|
+
|
|
22
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
23
|
+
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Compatibilidad
|
|
29
|
+
|
|
30
|
+
| Superficie | Estado |
|
|
31
|
+
|---|---|
|
|
32
|
+
| Harness | DeepSeek Harness `0.1.5-rc.1` (tag `dsh-v0.1.5-rc.1` = `183f08e9c6dd`; relevo tramo A→B `dsh-v0.1.5-alpha.1` = `5dda764ed3aa`; inicio del corredor `0.1.3-alpha.1`). Banda de peers `@deepseek-ai/dsh-skill >=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`, `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`. |
|
|
33
|
+
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
34
|
+
| Plataformas | Donde corra Node; el escáner solo usa el sistema de archivos y es neutral respecto a la plataforma |
|
|
35
|
+
| Modelo | Modelos solo de texto totalmente soportados; la habilidad es un Markdown, sin requisitos de herramientas ni visión |
|
|
36
|
+
| Alcance | **Dos tramos cerrados, un solo lapso**: tramo A `0.1.3-alpha.1` → `0.1.5-alpha.1` más tramo B `0.1.5-alpha.1` → `0.1.5-rc.1`. Un corredor nunca se ensancha: un salto posterior a `0.1.5-rc.1` es un paquete nuevo. |
|
|
37
|
+
| Tramos | Ambos tramos viven en este paquete: el tramo A conserva las costuras `S1`–`S10` + `M1`, el tramo B conserva `C1`, `C2`, `C4`, `C5`, `H1`–`H4`, `P1` — cada uno con su propia evidencia, sección de tarjeta, fixtures y ruta de reversión. No hay paquete hermano que instalar. |
|
|
38
|
+
| `C3` | Retirada: la tarjeta del tramo B escribía como `C3` el falso verde de la línea de tipos obsoleta, que es el mismo defecto que el `M1` del tramo A. La fusión queda registrada en la tarjeta; `--seams C3` no coincide con nada. |
|
|
39
|
+
| Paquete anterior | No montes el retirado `dsh-plugin-upgrade` en el mismo perfil: ambos registran la skill `plugin-upgrade`, así que el segundo montaje colisiona con ese nombre. Ese paquete está obsoleto en npm y su repositorio se retiró; este paquete sustituye sus dos tramos. |
|
|
40
|
+
|
|
41
|
+
## Lo que obtienes
|
|
42
|
+
|
|
43
|
+
Dos mitades, un solo catálogo de costuras:
|
|
44
|
+
|
|
45
|
+
- **Una habilidad de agente incluida (`plugin-upgrade`)** — la tarjeta del corredor fusionado y un bucle de arreglar-y-verificar. El cuerpo primero enruta a quien la llama al tramo que corresponde a su banda de peers; el modelo la carga solo cuando una tarea la necesita de verdad, y el paquete no aporta ningún párrafo al prompt del sistema ni registra herramientas.
|
|
46
|
+
- **Una CLI sin dependencias (`dsh-plugin-upgrade-scan`)** — informa hechos `file:line` de las veinte costuras fusionadas (`S3`, `S8`, `S9`, `M1`, `S4`, `S5`, `S6`, `S7`, `S2`, `S1`, `S10`, `C1`, `C2`, `P1`, `C4`, `C5`, `H1`, `H2`, `H4`, `H3`) releídas de los rangos de tags del harness el 2026-09-09 (tramo A) y el 2026-09-10 (tramo B). Sale con `1` ante cualquier hallazgo de severidad error, así que entra directo en CI.
|
|
47
|
+
|
|
48
|
+
El objetivo es el modo de fallo que este corredor existe para matar: **la rotura de este lapso es mayormente silenciosa, y lo es por ambos extremos.** La línea de tipos puede estar obsoleta, así que el repo compila contra el **catálogo antiguo** (costura `M1`), y el slot de cliente desnudo `conversation` se eliminó sin alias mientras `ctx.slots.inject()` solo ejecuta su callback cuando la declaración existe: una mitad de cliente que aún lo apunta deja de montarse sin error, sin línea de log y sin build fallido (costura `C1`). Tres clases de rotura sobreviven a `typecheck` + `test`:
|
|
49
|
+
|
|
50
|
+
1. la puerta local compila una línea de tipos obsoleta — un alias `paths` antiguo, o tipos de dev/test fijados en `0.1.5-alpha.*` (costura `M1`);
|
|
51
|
+
2. un escritor de logs omite el campo `stream` obligatorio de V3, así que la sesión se importa y luego se niega a reanudarse (costura `S3`);
|
|
52
|
+
3. las pruebas están simuladas contra la forma antigua, así que pasan mientras el host descarta tu contribución (costura `C1`).
|
|
53
|
+
|
|
54
|
+
Medición honesta: el barrido del espacio de trabajo del tramo B encontró que las mitades de cliente de la familia usan solo **8** claves de slot, y las 8 sobreviven en rc.1 — para ellas la rotura de rc.1 es **latente, no real**. Los plugins de cliente de terceros que apuntaban a la clave desnuda `conversation` son los que se rompen, y lo hacen en silencio. El barrido del tramo A encontró la textura opuesta: 40 repos, 11 de ellos dieron con `M1`, y arreglar la ruta obsoleta destapó errores reales de TypeScript en 3 repos que antes estaban «en verde».
|
|
55
|
+
|
|
56
|
+
## Inicio rápido
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
# 1. instala el bundle en tu perfil
|
|
60
|
+
dsh plugin --profile web add dsh-plugin-upgrade
|
|
61
|
+
|
|
62
|
+
# 2. verifica que la fila se montó
|
|
63
|
+
dsh --profile web --dump-config | grep -A3 'id: dsh-plugin-upgrade'
|
|
64
|
+
|
|
65
|
+
# 3. escanea el plugin que vas a actualizar
|
|
66
|
+
npx dsh-plugin-upgrade-scan --repo ../my-plugin
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Luego pide al agente que use la habilidad `plugin-upgrade`, o lleva el bucle tú mismo con la tarjeta en
|
|
70
|
+
`skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md` (el tramo A es §1, el tramo B es §2, el índice de costuras fusionado es §3).
|
|
71
|
+
|
|
72
|
+
## Instalación y desinstalación
|
|
73
|
+
|
|
74
|
+
```sh
|
|
75
|
+
dsh plugin --profile web add dsh-plugin-upgrade # desde npm
|
|
76
|
+
dsh plugin --profile web add "github:PerryLink/dsh-plugin-upgrade#main" # desde el código
|
|
77
|
+
dsh plugin --profile web remove dsh-plugin-upgrade # desinstalar (reversible)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Instalar el bundle solo registra una habilidad; quitar la fila quita la habilidad. La CLI es un destino `npx` normal y no necesita perfil.
|
|
81
|
+
|
|
82
|
+
## Configuración
|
|
83
|
+
|
|
84
|
+
Cada clave es opcional y vive en el patch del perfil:
|
|
85
|
+
|
|
86
|
+
| Clave | Por defecto | Significado |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| `enabled` | `true` | Registra la habilidad incluida. Pon `false` para mantener la dependencia montada pero en silencio. |
|
|
89
|
+
| `skillName` | `plugin-upgrade` | Directorio bajo `skillsRoot` que se registra, y el nombre que aparece en el catálogo. |
|
|
90
|
+
| `skillsRoot` | el `./skills` del propio paquete | Dónde vive `<skillName>/SKILL.md`. Apúntalo a tu propia tarjeta para reutilizar la infraestructura. |
|
|
91
|
+
| `userInvocable` | `true` | Si una persona puede invocar la habilidad por nombre además del modelo. |
|
|
92
|
+
|
|
93
|
+
```yaml
|
|
94
|
+
- insert:
|
|
95
|
+
- id: dsh-plugin-upgrade
|
|
96
|
+
name: dsh-plugin-upgrade
|
|
97
|
+
config:
|
|
98
|
+
skillName: plugin-upgrade
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
El plugin monta de forma ruidosa: un `SKILL.md` ausente, un cuerpo vacío o un frontmatter sin `name` hacen fallar el montaje en lugar de registrar una habilidad vacía.
|
|
102
|
+
|
|
103
|
+
## Superficies
|
|
104
|
+
|
|
105
|
+
**Habilidad** — `plugin-upgrade` (invocable por el modelo y por personas por defecto). Cuerpo: la tabla de enrutado por tramo, las 8 reglas duras y el bucle de 6 pasos. Referencias: la tarjeta del corredor fusionado. Scripts: el detector, dentro del directorio de la habilidad para que las rutas relativas resuelvan.
|
|
106
|
+
|
|
107
|
+
**CLI** — `dsh-plugin-upgrade-scan`:
|
|
108
|
+
|
|
109
|
+
```sh
|
|
110
|
+
dsh-plugin-upgrade-scan [--repo <path>] [--json <out.json>] [--seams S3,C1,P1] [--quiet]
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
| Bandera | Significado |
|
|
114
|
+
|---|---|
|
|
115
|
+
| `--repo <path>` | Repositorio a escanear (por defecto: el directorio actual). |
|
|
116
|
+
| `--json <out.json>` | También escribe el informe legible por máquina (`repo`, `scannedAt`, `files`, `hits[]`, `bySeam`). |
|
|
117
|
+
| `--seams S3,C1,P1` | Restringe a costuras concretas del catálogo fusionado. |
|
|
118
|
+
| `--quiet` | Suprime la salida humana (combínala con `--json`). |
|
|
119
|
+
|
|
120
|
+
Códigos de salida: `0` sin hallazgos de severidad error · `1` al menos un hallazgo de severidad error · `2` uso o fallo del escaneo. Un escaneo limpio es necesario pero no suficiente: el criterio de salida es un smoke real en el host, más un ida y vuelta de reanudación para los escritores de logs (tramo A) y una aserción en un navegador real para la mitad de cliente (tramo B).
|
|
121
|
+
|
|
122
|
+
## Las veinte costuras
|
|
123
|
+
|
|
124
|
+
El orden sigue el catálogo de `lib/scan.mjs` (primero el tramo A, luego el tramo B), que es también el orden al que `test/card.test.mjs` fija la tarjeta.
|
|
125
|
+
|
|
126
|
+
| Id | Severidad | Qué cambió en el camino a `0.1.5-rc.1` |
|
|
127
|
+
|---|---|---|
|
|
128
|
+
| `S3` | error | `assistant/message` ganó un campo `stream` obligatorio (formato de sesión V3): un log escrito sin él se importa con éxito y luego se niega a reanudarse (`Session.fromRestore` lanza `invalid settlement fields`). |
|
|
129
|
+
| `S8` | error | `SessionHandle.read()` devuelve `SessionHandleReadResult` (`{ eventState, events }`) en lugar del array de eventos; las operaciones de array deben desenvolver `.events`. |
|
|
130
|
+
| `S9` | error | La configuración de `SystemPrompt` renombró `persona` → `personaPrefix` / `personaSuffix`. Sustituirlo por `includeHarnessIdentity: false` **no** es equivalente: elimina el bloque de identidad del harness. |
|
|
131
|
+
| `M1` | error | La puerta local compila una línea de tipos obsoleta: tipos de dev/test fijados en `0.1.5-alpha.*`, o un alias `paths` de `tsconfig` que resuelve a un directorio de checkout inexistente, hacen que TypeScript vuelva en silencio a los tipos publicados. Puerta en verde, regla equivocada. |
|
|
132
|
+
| `S4` | error | `tool/code-dispatch` pasó a llamarse `tool/ptc-dispatch`; la etiqueta antigua ya no se reconoce en las sesiones V3. |
|
|
133
|
+
| `S5` | error | `ctx.agent` se eliminó: quien llama debe pasar el Agent explícitamente (por ejemplo, el segundo parámetro de `setup(agentCtx, agent)`). |
|
|
134
|
+
| `S6` | error | `Inbox` es una interfaz de tipo, no una clase construible; los fixtures usan la forma oficial no soportada y el código en tiempo de ejecución lee `agent.inbox`. |
|
|
135
|
+
| `S7` | warn | `SubprocessHandle.pid` se eliminó (solo queda `SubprocessTerminalHandle.pid`); quita el campo de los fixtures de prueba. |
|
|
136
|
+
| `S2` | warn | `EpochHeader.system` se eliminó: el prompt del sistema es ahora el `system/message` del nodo 0 de la superficie. |
|
|
137
|
+
| `S1` | warn | Formato de sesión V3 y nombres de log con sufijo de generación: la generación actual es `session.v3.jsonl.zstd`, así que los scripts que fijan `session.jsonl.zstd` fallan en silencio. |
|
|
138
|
+
| `S10` | warn | Los eventos de sesión escritos por un plugin deben pasar por la puerta de adaptación fail-closed del host: `Session.append` no tiene canal de escritura `ignorable`, así que un append incondicional puede dejar una sesión ilegible. |
|
|
139
|
+
| `C1` | error | El slot de cliente desnudo `conversation` se eliminó y se sustituyó por `main` + `main.conversation`, **sin alias**. `ctx.slots.inject()` solo se dispara si la declaración existe, así que un plugin que lo apunta deja de montarse **en silencio**. |
|
|
140
|
+
| `C2` | error | `@deepseek-ai/dsh-client-ui-sidebar-textpreview` pasó a llamarse `…-sidebar-documentpreview`; el nombre antiguo desapareció y no hay paquete shim. |
|
|
141
|
+
| `P1` | error | La banda de peers debe conservar su segundo segmento: `>=0.1.2-rc.1 <0.2.0` por sí solo **rechaza** `0.1.5-rc.1` bajo la regla prerelease-tuple de npm semver (medido `false` en semver 7.8.5). |
|
|
142
|
+
| `C4` | warn | rc.1 añadió un modelo de panel principal global (`main`, `sidebar.panellist`, `ctx.layout.selectPanel(MainPanelId \| null)`) y añadió la prop estándar `usePanelInfo` a casi todos los slots. |
|
|
143
|
+
| `C5` | warn | La vista previa de documentos se movió al slot con clave `sidebar.right.tab.document` (`DocumentContent`); `sidebar.right.pane.tab` sobrevive pero su entrada padre pasó a ser `rightbar.session`. |
|
|
144
|
+
| `H1` | warn | `KNOWN_SESSION_EVENT_TYPES` ganó `deliverables/presented` y `subagent/catalog`: el vocabulario fail-closed creció. |
|
|
145
|
+
| `H2` | warn | La fila de la nueva herramienta `present` ocupa la clave `'present'` de `tool.call.toolview`, que en alpha.1 estaba libre. |
|
|
146
|
+
| `H4` | info | El catálogo asesor por defecto del adaptador DeepSeek ahora encabeza con `deepseek-flash` (DeepSeek-V41-Flash). |
|
|
147
|
+
| `H3` | info | Nuevas capacidades opcionales: `ctx.sessionFeedback`, `ctx.layout.beginNavigation()`, `ctx.workspaces.openSession()` / `openWorkspace()` / `forkSession()`. Listadas en la tarjeta; deliberadamente sin detección automática. |
|
|
148
|
+
|
|
149
|
+
`S7`, `S2`, `S1`, `S10`, `C4`, `C5`, `H1`, `H2` y `H4` son deliberadamente asesorables: tienen coincidencias legítimas (un repo que ya usa la API nueva, una instantánea de documentación, la tabla de ids de modelo de un plugin, un `ChildProcess.pid` de Node), así que el escáner las reporta como pistas para revisión manual, no como fallos. `M1` y `P1` son comprobaciones **estructurales** — resuelven `package.json` y `tsconfig*.json` en lugar de coincidir texto — y `H3` es **solo de tarjeta**: documentada, con paridad de ids comprobada y deliberadamente sin detector (`CARD_ONLY = ['H3']`).
|
|
150
|
+
|
|
151
|
+
## Lo que esto no cubre
|
|
152
|
+
|
|
153
|
+
- **Un salto posterior a `0.1.5-rc.1`.** El lapso fusionado termina en rc.1 por construcción: el salto del harness `0.1.5-rc.1` → `0.1.5-rc.2` no añadió ninguna costura de cara a los plugins (el pin de dev/test y la sonda de CI de este propio paquete corren sobre la línea `0.1.5-rc.2`, de modo que el catálogo queda verificado contra los tipos publicados más recientes). Cualquier cosa que añada una costura más adelante es un **paquete nuevo**: una tarjeta que deriva es peor que ninguna tarjeta.
|
|
154
|
+
- **El salto `0.1.1` → `0.1.2`.** Usa la habilidad de convergencia de la comunidad.
|
|
155
|
+
- **Repetir entre tramos.** El tramo A posee las costuras del formato de sesión (`assistant/message.stream`, `SessionHandleReadResult`, `EpochHeader.system`, `ctx.agent`, `Inbox`, `SystemPrompt.persona`, la generación de log V3) y el tramo B no las repite: todo el diff de `packages/core/session/src` en el rango del tramo B son dos literales de tipo de evento añadidos y una línea de comentario. La sección de tarjeta de cada tramo conserva su propia declaración de alcance.
|
|
156
|
+
- **La ruta de actualización del usuario de DSH.** Este paquete actualiza *código fuente de plugins*, no la instalación del harness de un usuario.
|
|
157
|
+
- **Tokens de tema.** `docs/web-styling.md` no tiene ningún cambio en el rango del tramo B.
|
|
158
|
+
- **Prueba.** Un escaneo limpio es una hipótesis. El criterio de salida es un smoke real en el host (`DSH_HOME` temporal, CLI objetivo, `plugin add <tarball>`, `--dump-config`) más un ida y vuelta de reanudación para los escritores de logs de sesión (tramo A) y una aserción en un navegador real para cada hallazgo del lado cliente (tramo B).
|
|
159
|
+
|
|
160
|
+
## Límites de seguridad
|
|
161
|
+
|
|
162
|
+
- **Escaneo de solo lectura.** La CLI nunca escribe dentro del repositorio escaneado; `--json` escribe solo en la ruta que indiques.
|
|
163
|
+
- **Sin red, sin shell.** El escáner no importa nada fuera de la biblioteca estándar de Node y nunca lanza un proceso.
|
|
164
|
+
- **Sin secretos.** Nada en el paquete lee credenciales, tokens de entorno ni datos de sesión.
|
|
165
|
+
- **Receta de smoke en sandbox.** La comprobación de host real de la tarjeta usa un `DSH_HOME` de `mkdtemp`; nunca toca tu `~/.dsh` real.
|
|
166
|
+
|
|
167
|
+
## Desarrollo
|
|
168
|
+
|
|
169
|
+
```sh
|
|
170
|
+
npm install # o: pnpm install (el repo incluye pnpm-lock.yaml)
|
|
171
|
+
npm test # node --test: escáner, paridad tarjeta<->catálogo, Cordis + SkillRegistry reales
|
|
172
|
+
npm run verify:self-contained # cada import resuelve dentro del paquete
|
|
173
|
+
npm run verify:artifacts # el tarball lleva la habilidad, la CLI y el patch, y excluye las pruebas
|
|
174
|
+
npm run check:readmes # consistencia de los README en cinco idiomas
|
|
175
|
+
npm pack
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
El escáner tiene un par de fixtures sintéticos **por tramo**: `fixtures/leg-a-bad-repo` (las costuras de sesión/configuración del tramo A, con todas las costuras de error presentes a propósito) junto con `fixtures/leg-a-good-repo` (adaptado), y `fixtures/bad-repo` (las costuras de slot de cliente del tramo B) junto con `fixtures/good-repo` (adaptado) — más un negativo en vivo sobre un repositorio de la familia ya fijado a `0.1.5-rc.1`, de modo que una regresión del catálogo falla en esta suite y no en un usuario aguas abajo. `test/card.test.mjs` afirma que el índice de la tarjeta fusionada y `lib/scan.mjs` nombran **exactamente** los mismos veinte ids de costura con las mismas severidades, y que `CARD_ONLY` es exactamente `['H3']`: la regla de vinculación de evidencia como puerta de máquina.
|
|
179
|
+
|
|
180
|
+
## Temas
|
|
181
|
+
|
|
182
|
+
`dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `plugin-upgrade`, `migration`, `skill`, `version-card`, `scanner`, `client-slots` (reflejan las `keywords` de `package.json`; `dsh-plugin` es el canal de visibilidad del ecosistema).
|
|
183
|
+
|
|
184
|
+
## Familia de plugins DSH de PerryLink
|
|
185
|
+
|
|
186
|
+
Este proyecto es uno de los [40 complementos de DeepSeek Harness](https://github.com/PerryLink) mantenidos por [PerryLink](https://github.com/PerryLink). Si este te ayuda, probablemente los demás también:
|
|
187
|
+
|
|
188
|
+
| Plugin | One-liner |
|
|
189
|
+
|---|---|
|
|
190
|
+
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
191
|
+
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
192
|
+
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | |
|
|
193
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | |
|
|
194
|
+
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
195
|
+
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
196
|
+
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Unified session + workspace + config checkpoints with one-shot `/rewind` | |
|
|
197
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code, Codex, OpenCode and Hermes sessions, memories and skills into DSH | |
|
|
198
|
+
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
199
|
+
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
|
|
200
|
+
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Deterministic dataset profiling, cleaning and citation verification | |
|
|
201
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | |
|
|
202
|
+
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
203
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | |
|
|
204
|
+
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics: load, spill, compaction and cache hit rate | |
|
|
205
|
+
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Chinese mutual-fund research with sealed, traceable source snapshots | |
|
|
206
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issue/CI integration with every write approval-gated | |
|
|
207
|
+
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry and company research pack: chain map, policy timeline, company cards | |
|
|
208
|
+
| **[dsh-kit](https://github.com/PerryLink/dsh-kit)** | One-command starter pack that installs the core family | |
|
|
209
|
+
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base with hybrid search and citation-aware injection | |
|
|
210
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local Ollama model discovery and task-based routing with cloud fallback | |
|
|
211
|
+
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions, symbols and rename | |
|
|
212
|
+
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking at the model boundary with a host-side restore table | |
|
|
213
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | MCP management console: `/mcp` command, Settings tab and trial calls | |
|
|
214
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory protocol (`ctx.memory` + SQLite) | |
|
|
215
|
+
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse telemetry export from the session event stream | |
|
|
216
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Runtime-switchable model output styles | |
|
|
217
|
+
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Declarative allow/deny/ask rules plus a process-level network policy | |
|
|
218
|
+
| **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
|
|
219
|
+
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
|
|
220
|
+
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-dev knowledge base, agent skill and the `dsh-plugin-dev` CLI toolchain | |
|
|
221
|
+
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
222
|
+
| **[dsh-plugin-portal](https://github.com/PerryLink/dsh-plugin-portal)** | Zero-dependency static portal rendering the whole plugin family as one page | |
|
|
223
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat, Telegram, Feishu + a session console | |
|
|
224
|
+
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research reports: evidence ledger, manifest seal, per-claim verdicts | |
|
|
225
|
+
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional plugin quality scoring with an evidence-backed leaderboard | |
|
|
226
|
+
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions and workspaces in the Web sidebar with per-pin colors | |
|
|
227
|
+
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | Git-backed cross-device session synchronization with keep-both merges | |
|
|
228
|
+
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack plus the `plugin_vet` supply-chain gate | |
|
|
229
|
+
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop: speech-to-text input and text-to-speech replies | |
|
|
230
|
+
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | |
|
|
231
|
+
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives with a pass/fail matrix | |
|
|
232
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel plus eleven agent tools | |
|
|
233
|
+
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair | |
|
|
234
|
+
| **[dsh-wechat](https://github.com/pan17/dsh-wechat)** | WeChat ↔ DSH bridge (Tencent iLink bot) developed with [pan17](https://github.com/pan17/dsh-wechat), who hosts the repo | |
|
|
235
|
+
| **[dsh-personal-directive](https://github.com/PerryLink/dsh-personal-directive)** | Personal directive injector with a top-bar toggle (fork of liucai2026/dsh-personal-directive) | |
|
|
236
|
+
|
|
237
|
+
Parte de la familia de plugins DSH de PerryLink: más de 40 repositorios que cubren sesiones, memoria, permisos, entrega, observabilidad y herramientas para desarrolladores. Explora el catálogo en [perrylink-dsh-catalog.perrylink.workers.dev](https://perrylink-dsh-catalog.perrylink.workers.dev) o el [tema `dsh-plugin`](https://github.com/topics/dsh-plugin).
|
|
238
|
+
|
|
239
|
+
## Licencia
|
|
240
|
+
|
|
241
|
+
Apache-2.0 — consulta [LICENSE](LICENSE). Las dependencias de instalación y sus licencias están en [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md); no se incluye nada empaquetado.
|
package/README-hi.md
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# ⬆️ dsh-plugin-upgrade
|
|
4
|
+
- **1024 स्टोर चैनल**: एक बार `npm i -g dsh1024` चलाएँ, फिर `dsh1024 plugin --profile web add dsh-plugin-upgrade` (यह [deepseek1024.com](https://deepseek1024.com) की इंस्टॉल रैंकिंग में गिना जाता है)।
|
|
5
|
+
[](https://gitee.com/perrylink/dsh-plugin-upgrade)
|
|
6
|
+
|
|
7
|
+
**DeepSeek Harness के लिए संस्करण-लॉक्ड और विलयित प्लगइन अपग्रेड स्किल — `0.1.3-alpha.1` → `0.1.5-rc.1`, दो बंद पैरों (legs) में वहन किया गया।**
|
|
8
|
+
|
|
9
|
+
*पैर A `0.1.3-alpha.1` → `0.1.5-alpha.1`, पैर B `0.1.5-alpha.1` → `0.1.5-rc.1`: विलयित 20-सीम कैटलॉग पर एक कॉरिडोर कार्ड और एक शून्य-निर्भरता सीम स्कैनर, ताकि चुपचाप माउंट होना बंद कर चुका क्लाइंट आधा हिस्सा कभी «typecheck हरा है» न समझा जाए।*
|
|
10
|
+
|
|
11
|
+
> **आधिकारिक रिपॉज़िटरी।** यह dsh-plugin-upgrade की एकमात्र आधिकारिक रिपॉज़िटरी है, जिसे PerryLink संभालता है। यह दोनों संस्करण-लॉक्ड पैकेजों `dsh-plugin-upgrade` (पैर A) और `dsh-plugin-upgrade-rc1` (पैर B) का स्थान लेती है। अन्य खातों की समान-नाम वाली रिपॉज़िटरियाँ इससे संबद्ध नहीं हैं।
|
|
12
|
+
|
|
13
|
+
[](LICENSE)
|
|
14
|
+
[](https://github.com/topics/dsh-plugin)
|
|
15
|
+
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
16
|
+
[](#)
|
|
17
|
+
[](https://github.com/PerryLink/dsh-plugin-upgrade/actions)
|
|
18
|
+
[](https://github.com/PerryLink/dsh-plugin-upgrade/releases)
|
|
19
|
+
[](https://www.npmjs.com/package/dsh-plugin-upgrade)
|
|
20
|
+
[](https://www.npmjs.com/package/dsh-plugin-upgrade)
|
|
21
|
+
|
|
22
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
23
|
+
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## संगतता
|
|
29
|
+
|
|
30
|
+
| सतह | स्थिति |
|
|
31
|
+
|---|---|
|
|
32
|
+
| हार्नेस | DeepSeek Harness `0.1.5-rc.1` (tag `dsh-v0.1.5-rc.1` = `183f08e9c6dd`; पैर A→B हैंडऑफ़ `dsh-v0.1.5-alpha.1` = `5dda764ed3aa`; कॉरिडोर की शुरुआत `0.1.3-alpha.1`)। पीयर बैंड `@deepseek-ai/dsh-skill >=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`, `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`। |
|
|
33
|
+
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
34
|
+
| प्लेटफ़ॉर्म | जहाँ Node चले; स्कैनर केवल फ़ाइल सिस्टम पढ़ता है और प्लेटफ़ॉर्म-निरपेक्ष है |
|
|
35
|
+
| मॉडल | केवल-पाठ मॉडल पूरी तरह समर्थित; स्किल एक Markdown है, किसी टूल या विज़न की आवश्यकता नहीं |
|
|
36
|
+
| दायरा | **दो बंद पैर, एक ही विस्तार**: पैर A `0.1.3-alpha.1` → `0.1.5-alpha.1` और पैर B `0.1.5-alpha.1` → `0.1.5-rc.1`। कॉरिडोर कभी चौड़ा नहीं होता: `0.1.5-rc.1` के बाद की कोई छलांग एक नया पैकेज है। |
|
|
37
|
+
| पैर | दोनों पैर इसी पैकेज में रहते हैं: पैर A `S1`–`S10` + `M1` सीमें रखता है, पैर B `C1`, `C2`, `C4`, `C5`, `H1`–`H4`, `P1` — हर एक के अपने साक्ष्य, कार्ड अनुभाग, fixtures और रोलबैक पथ के साथ। इंस्टॉल करने के लिए कोई सहोदर पैकेज नहीं है। |
|
|
38
|
+
| `C3` | सेवानिवृत्त: पैर B का कार्ड पुरानी टाइप-लाइन वाले झूठे हरे को `C3` लिखता था, जो पैर A की `M1` जैसा ही दोष है। यह विलय कार्ड पर दर्ज है; `--seams C3` किसी से मेल नहीं खाता। |
|
|
39
|
+
| पूर्ववर्ती पैकेज | एक ही प्रोफ़ाइल में सेवानिवृत्त `dsh-plugin-upgrade` को साथ में माउंट न करें: दोनों agent skill `plugin-upgrade` पंजीकृत करते हैं, इसलिए दूसरा माउंट skill नाम पर टकराएगा। वह पैकेज npm पर deprecated है और उसका रिपॉज़िटरी सेवानिवृत्त हो चुका है; यह पैकेज उसके दोनों चरणों का स्थान लेता है। |
|
|
40
|
+
|
|
41
|
+
## आपको क्या मिलता है
|
|
42
|
+
|
|
43
|
+
दो हिस्से, एक ही सीम कैटलॉग:
|
|
44
|
+
|
|
45
|
+
- **पैकेज में शामिल एजेंट स्किल (`plugin-upgrade`)** — विलयित कॉरिडोर कार्ड और ठीक-करो-और-सत्यापित-करो चक्र। बॉडी पहले बुलाने वाले को उसी पैर तक पहुँचाती है जो उसके पीयर बैंड से मेल खाता है; मॉडल इसे केवल तब लोड करता है जब किसी कार्य को वास्तव में आवश्यकता हो, और यह पैकेज सिस्टम प्रॉम्प्ट का कोई अनुच्छेद नहीं जोड़ता और कोई टूल भी नहीं।
|
|
46
|
+
- **शून्य-निर्भरता CLI (`dsh-plugin-upgrade-scan`)** — विलयित बीस सीमों (`S3`, `S8`, `S9`, `M1`, `S4`, `S5`, `S6`, `S7`, `S2`, `S1`, `S10`, `C1`, `C2`, `P1`, `C4`, `C5`, `H1`, `H2`, `H4`, `H3`) के `file:line` तथ्य बताता है, जो 2026-09-09 (पैर A) और 2026-09-10 (पैर B) को हार्नेस tag रेंज से दोबारा पढ़े गए। किसी भी error-स्तर की हिट पर `1` लौटाता है, इसलिए सीधे CI में लगता है।
|
|
47
|
+
|
|
48
|
+
यह उस विफलता-विधा के लिए है जिसे खत्म करने के लिए यह कॉरिडोर बना है: **इस विस्तार की टूटन ज़्यादातर चुपचाप होती है, दोनों सिरों से।** टाइप लाइन पुरानी हो सकती है, इसलिए रेपो **पुराने** कैटलॉग के विरुद्ध कंपाइल होता है (सीम `M1`), और नंगा `conversation` क्लाइंट स्लॉट बिना किसी alias के हटा दिया गया, जबकि `ctx.slots.inject()` कॉलबैक केवल तब चलाता है जब declaration मौजूद हो — इसलिए उसे अब भी लक्षित करता क्लाइंट आधा हिस्सा माउंट होना बंद कर देता है: कोई त्रुटि नहीं, कोई लॉग पंक्ति नहीं, कोई बिल्ड विफलता नहीं (सीम `C1`)। `typecheck` + `test` को तीन वर्ग की टूटन पार कर जाती हैं:
|
|
49
|
+
|
|
50
|
+
1. स्थानीय गेट एक पुरानी टाइप लाइन कंपाइल करता है — पुराना `paths` alias, या `0.1.5-alpha.*` पर pinned dev/test टाइप (सीम `M1`);
|
|
51
|
+
2. कोई लॉग लेखक V3 के अनिवार्य `stream` फ़ील्ड को छोड़ देता है, इसलिए सत्र import तो हो जाता है पर फिर रिज़्यूम करने से इनकार कर देता है (सीम `S3`);
|
|
52
|
+
3. परीक्षण पुरानी आकृति के विरुद्ध mock किए गए हैं, इसलिए वे पास हो जाते हैं जबकि होस्ट योगदान गिरा देता है (सीम `C1`)।
|
|
53
|
+
|
|
54
|
+
ईमानदार आकलन: पैर B की वर्कस्पेस स्कैन में पाया गया कि परिवार के क्लाइंट हिस्से केवल **8** स्लॉट कुंजियाँ इस्तेमाल करते हैं, और सभी 8 rc.1 में जीवित हैं — उनके लिए rc.1 की टूटन **अव्यक्त है, वास्तविक नहीं**। जो टूटते हैं वे तीसरे पक्ष के क्लाइंट प्लगइन हैं जो नंगी `conversation` कुंजी को लक्षित करते थे, और वे चुपचाप टूटते हैं। पैर A की स्कैन में उलटी बनावट मिली: 40 रेपो, उनमें से 11 पर `M1` लगा, और पुराने पथ को ठीक करने से 3 ऐसे रेपो में असली TypeScript त्रुटियाँ खुल गईं जो पहले «हरे» थे।
|
|
55
|
+
|
|
56
|
+
## त्वरित शुरुआत
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
# 1. बंडल को अपने प्रोफ़ाइल में इंस्टॉल करें
|
|
60
|
+
dsh plugin --profile web add dsh-plugin-upgrade
|
|
61
|
+
|
|
62
|
+
# 2. पुष्टि करें कि पंक्ति माउंट हुई
|
|
63
|
+
dsh --profile web --dump-config | grep -A3 'id: dsh-plugin-upgrade'
|
|
64
|
+
|
|
65
|
+
# 3. जिस प्लगइन को अपग्रेड करना है उसे स्कैन करें
|
|
66
|
+
npx dsh-plugin-upgrade-scan --repo ../my-plugin
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
फिर एजेंट से `plugin-upgrade` स्किल इस्तेमाल करने को कहें, या कार्ड के साथ स्वयं चक्र चलाएँ:
|
|
70
|
+
`skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md` (पैर A §1 है, पैर B §2 है, विलयित सीम सूचकांक §3 है)।
|
|
71
|
+
|
|
72
|
+
## इंस्टॉल और अनइंस्टॉल
|
|
73
|
+
|
|
74
|
+
```sh
|
|
75
|
+
dsh plugin --profile web add dsh-plugin-upgrade # npm से
|
|
76
|
+
dsh plugin --profile web add "github:PerryLink/dsh-plugin-upgrade#main" # स्रोत से
|
|
77
|
+
dsh plugin --profile web remove dsh-plugin-upgrade # अनइंस्टॉल (प्रतिवर्ती)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
बंडल इंस्टॉल करने से केवल एक स्किल पंजीकृत होती है; पंक्ति हटाने से स्किल हट जाती है। CLI एक सामान्य `npx` लक्ष्य है और उसे किसी प्रोफ़ाइल की आवश्यकता नहीं।
|
|
81
|
+
|
|
82
|
+
## कॉन्फ़िगरेशन
|
|
83
|
+
|
|
84
|
+
हर कुंजी वैकल्पिक है और प्रोफ़ाइल पैच में रहती है:
|
|
85
|
+
|
|
86
|
+
| कुंजी | डिफ़ॉल्ट | अर्थ |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| `enabled` | `true` | पैकेज में शामिल स्किल पंजीकृत करें। निर्भरता माउंट रखते हुए चुप रहने के लिए `false`। |
|
|
89
|
+
| `skillName` | `plugin-upgrade` | `skillsRoot` के अंतर्गत पंजीकृत होने वाली डायरेक्टरी, और कैटलॉग में दिखने वाला नाम। |
|
|
90
|
+
| `skillsRoot` | पैकेज का अपना `./skills` | जहाँ `<skillName>/SKILL.md` है। इसी ढाँचे का पुनरुपयोग करने के लिए इसे अपने कार्ड पर इंगित करें। |
|
|
91
|
+
| `userInvocable` | `true` | मॉडल के अतिरिक्त कोई व्यक्ति भी नाम से स्किल बुला सके या नहीं। |
|
|
92
|
+
|
|
93
|
+
```yaml
|
|
94
|
+
- insert:
|
|
95
|
+
- id: dsh-plugin-upgrade
|
|
96
|
+
name: dsh-plugin-upgrade
|
|
97
|
+
config:
|
|
98
|
+
skillName: plugin-upgrade
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
प्लगइन ज़ोर से माउंट होता है: `SKILL.md` गायब होना, खाली बॉडी, या `name` रहित frontmatter — तीनों खाली स्किल पंजीकृत करने के बजाय माउंट विफल कर देते हैं।
|
|
102
|
+
|
|
103
|
+
## सतहें
|
|
104
|
+
|
|
105
|
+
**स्किल** — `plugin-upgrade` (डिफ़ॉल्ट रूप से मॉडल और व्यक्ति दोनों द्वारा आमंत्रित). बॉडी: पैर-रूटिंग तालिका, 8 कठोर नियम और 6-चरणीय चक्र। संदर्भ: विलयित कॉरिडोर कार्ड। स्क्रिप्ट: डिटेक्टर, स्किल डायरेक्टरी के भीतर भेजा गया, ताकि सापेक्ष पथ हल हों।
|
|
106
|
+
|
|
107
|
+
**CLI** — `dsh-plugin-upgrade-scan`:
|
|
108
|
+
|
|
109
|
+
```sh
|
|
110
|
+
dsh-plugin-upgrade-scan [--repo <path>] [--json <out.json>] [--seams S3,C1,P1] [--quiet]
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
| फ़्लैग | अर्थ |
|
|
114
|
+
|---|---|
|
|
115
|
+
| `--repo <path>` | स्कैन करने वाली रिपॉज़िटरी (डिफ़ॉल्ट: वर्तमान डायरेक्टरी)। |
|
|
116
|
+
| `--json <out.json>` | मशीन-पठनीय रिपोर्ट भी लिखें (`repo`, `scannedAt`, `files`, `hits[]`, `bySeam`)। |
|
|
117
|
+
| `--seams S3,C1,P1` | विलयित कैटलॉग की केवल निर्दिष्ट सीमों तक सीमित करें। |
|
|
118
|
+
| `--quiet` | मानव-पठनीय आउटपुट बंद करें (`--json` के साथ उपयोगी)। |
|
|
119
|
+
|
|
120
|
+
एग्ज़िट कोड: `0` कोई error-स्तर हिट नहीं · `1` कम से कम एक error-स्तर हिट · `2` उपयोग या स्कैन विफलता। स्वच्छ स्कैन आवश्यक है पर पर्याप्त नहीं — निर्गम मानदंड असली होस्ट स्मोक है, साथ ही लॉग लेखकों के लिए एक रिज़्यूम राउंड-ट्रिप (पैर A) और क्लाइंट आधे हिस्से के लिए असली ब्राउज़र अभिकथन (पैर B)।
|
|
121
|
+
|
|
122
|
+
## बीस सीमें
|
|
123
|
+
|
|
124
|
+
क्रम `lib/scan.mjs` के कैटलॉग का अनुसरण करता है (पहले पैर A, फिर पैर B), और यही वह क्रम है जिस पर `test/card.test.mjs` कार्ड को pinned रखता है।
|
|
125
|
+
|
|
126
|
+
| Id | स्तर | `0.1.5-rc.1` तक के रास्ते में क्या बदला |
|
|
127
|
+
|---|---|---|
|
|
128
|
+
| `S3` | error | `assistant/message` में अनिवार्य `stream` फ़ील्ड जुड़ा (सत्र प्रारूप V3): उसके बिना लिखा लॉग सफलतापूर्वक import होता है और फिर रिज़्यूम करने से इनकार कर देता है (`Session.fromRestore` `invalid settlement fields` फेंकता है)। |
|
|
129
|
+
| `S8` | error | `SessionHandle.read()` इवेंट array के बजाय `SessionHandleReadResult` (`{ eventState, events }`) लौटाता है; array संक्रियाओं को `.events` खोलना पड़ता है। |
|
|
130
|
+
| `S9` | error | `SystemPrompt` के कॉन्फ़िग ने `persona` → `personaPrefix` / `personaSuffix` कर दिया। `includeHarnessIdentity: false` लगाना **समतुल्य नहीं** है — वह हार्नेस पहचान ब्लॉक को मिटा देता है। |
|
|
131
|
+
| `M1` | error | स्थानीय गेट एक पुरानी टाइप लाइन कंपाइल करता है: `0.1.5-alpha.*` पर pinned dev/test टाइप, या किसी अनुपस्थित checkout डायरेक्टरी की ओर इंगित `tsconfig` `paths` alias, TypeScript को चुपचाप प्रकाशित टाइप पर लौटा देते हैं। हरा गेट, ग़लत पैमाना। |
|
|
132
|
+
| `S4` | error | `tool/code-dispatch` का नाम `tool/ptc-dispatch` हो गया; पुराना लेबल V3 सत्रों में अब मान्य नहीं है। |
|
|
133
|
+
| `S5` | error | `ctx.agent` हटा दिया गया: बुलाने वाले को Agent स्पष्ट रूप से पास करना होगा (जैसे `setup(agentCtx, agent)` का दूसरा पैरामीटर)। |
|
|
134
|
+
| `S6` | error | `Inbox` एक type interface है, बनाने योग्य class नहीं; fixtures आधिकारिक असमर्थित आकृति इस्तेमाल करते हैं और runtime कोड `agent.inbox` पढ़ता है। |
|
|
135
|
+
| `S7` | warn | `SubprocessHandle.pid` हटा दिया गया (केवल `SubprocessTerminalHandle.pid` बचा है); टेस्ट fixtures से यह फ़ील्ड हटा दें। |
|
|
136
|
+
| `S2` | warn | `EpochHeader.system` हटा दिया गया: सिस्टम प्रॉम्प्ट अब सरफ़ेस नोड 0 का `system/message` है। |
|
|
137
|
+
| `S1` | warn | सत्र प्रारूप V3 और generation-प्रत्यय वाले लॉग नाम — वर्तमान generation `session.v3.jsonl.zstd` है, इसलिए `session.jsonl.zstd` को hardcode करने वाली स्क्रिप्टें चुपचाप विफल होती हैं। |
|
|
138
|
+
| `S10` | warn | प्लगइन द्वारा लिखे सत्र इवेंट होस्ट के fail-closed अनुकूलन गेट से होकर जाने चाहिए: `Session.append` में `ignorable` लेखन चैनल नहीं है, इसलिए बिना शर्त append किसी सत्र को अपठनीय बना सकता है। |
|
|
139
|
+
| `C1` | error | नंगा क्लाइंट स्लॉट `conversation` हटाया गया और उसकी जगह `main` + `main.conversation` आया, **कोई alias नहीं**। `ctx.slots.inject()` केवल तब चलता है जब declaration मौजूद हो, इसलिए उसे लक्षित करने वाला प्लगइन **चुपचाप** माउंट होना बंद कर देता है। |
|
|
140
|
+
| `C2` | error | `@deepseek-ai/dsh-client-ui-sidebar-textpreview` का नाम `…-sidebar-documentpreview` हो गया; पुराना नाम गायब है और कोई shim पैकेज नहीं। |
|
|
141
|
+
| `P1` | error | पीयर बैंड का दूसरा खंड बना रहना चाहिए: अकेला `>=0.1.2-rc.1 <0.2.0`, npm semver के prerelease-tuple नियम के तहत `0.1.5-rc.1` को **अस्वीकार** करता है (semver 7.8.5 पर मापा गया `false`)। |
|
|
142
|
+
| `C4` | warn | rc.1 ने वैश्विक मुख्य-पैनल मॉडल जोड़ा (`main`, `sidebar.panellist`, `ctx.layout.selectPanel(MainPanelId \| null)`) और लगभग हर स्लॉट में `usePanelInfo` मानक prop जोड़ा। |
|
|
143
|
+
| `C5` | warn | दस्तावेज़ पूर्वावलोकन keyed स्लॉट `sidebar.right.tab.document` (`DocumentContent`) पर चला गया; `sidebar.right.pane.tab` बचा है पर उसका पैरेंट प्रवेश `rightbar.session` हो गया। |
|
|
144
|
+
| `H1` | warn | `KNOWN_SESSION_EVENT_TYPES` में `deliverables/presented` और `subagent/catalog` जुड़े — fail-closed शब्दावली बढ़ी। |
|
|
145
|
+
| `H2` | warn | नए `present` टूल की पंक्ति `tool.call.toolview` की कुंजी `'present'` लेती है, जो alpha.1 में खाली थी। |
|
|
146
|
+
| `H4` | info | DeepSeek अडैप्टर का डिफ़ॉल्ट सलाहकारी मॉडल कैटलॉग अब `deepseek-flash` (DeepSeek-V41-Flash) से शुरू होता है। |
|
|
147
|
+
| `H3` | info | नई वैकल्पिक क्षमताएँ: `ctx.sessionFeedback`, `ctx.layout.beginNavigation()`, `ctx.workspaces.openSession()` / `openWorkspace()` / `forkSession()`। कार्ड पर सूचीबद्ध; जानबूझकर कोई स्वचालित पहचान नहीं। |
|
|
148
|
+
|
|
149
|
+
`S7`, `S2`, `S1`, `S10`, `C4`, `C5`, `H1`, `H2` और `H4` जानबूझकर सलाहकारी हैं: उनके वैध मेल हैं (पहले से नई API इस्तेमाल करता रेपो, दस्तावेज़ snapshot, प्लगइन की अपनी मॉडल-id तालिका, Node का `ChildProcess.pid`), इसलिए स्कैनर उन्हें विफलता नहीं बल्कि मानवीय समीक्षा के सुराग के रूप में बताता है। `M1` और `P1` **संरचित** जाँचें हैं — वे पाठ मिलाने के बजाय `package.json` और `tsconfig*.json` हल करती हैं — और `H3` **केवल-कार्ड** है: प्रलेखित, id-समानता से जाँचा गया, और जानबूझकर बिना किसी डिटेक्टर के (`CARD_ONLY = ['H3']`)।
|
|
150
|
+
|
|
151
|
+
## यह क्या कवर नहीं करता
|
|
152
|
+
|
|
153
|
+
- **`0.1.5-rc.1` के बाद की कोई छलांग।** विलयित विस्तार रचना से ही rc.1 पर समाप्त होता है: हार्नेस की छलांग `0.1.5-rc.1` → `0.1.5-rc.2` ने प्लगइन-मुखी कोई सीम नहीं जोड़ी (इस पैकेज का अपना dev/test pin और CI प्रोब `0.1.5-rc.2` लाइन पर चलते हैं, ताकि कैटलॉग नवीनतम प्रकाशित टाइप के विरुद्ध सत्यापित हो)। इसके बाद सीम जोड़ने वाली कोई भी चीज़ एक **नया पैकेज** है — बहकता कार्ड किसी कार्ड से बुरा है।
|
|
154
|
+
- **`0.1.1` → `0.1.2` की छलांग।** समुदाय की convergence स्किल इस्तेमाल करें।
|
|
155
|
+
- **पैरों के बीच सीमें दोहराना।** सत्र-प्रारूप सीमें पैर A की हैं (`assistant/message.stream`, `SessionHandleReadResult`, `EpochHeader.system`, `ctx.agent`, `Inbox`, `SystemPrompt.persona`, V3 लॉग generation) और पैर B उन्हें दोबारा नहीं लिखता — पैर B के विस्तार में `packages/core/session/src` का पूरा diff दो जुड़े event-type literals और एक टिप्पणी पंक्ति है। हर पैर का कार्ड अनुभाग अपना दायरा-कथन रखता है।
|
|
156
|
+
- **DSH की उपयोगकर्ता-मुखी अपग्रेड राह।** यह पैकेज *प्लगइन स्रोत कोड* अपग्रेड करता है, उपयोगकर्ता की harness इंस्टॉलेशन नहीं।
|
|
157
|
+
- **थीम टोकन।** पैर B के विस्तार में `docs/web-styling.md` में शून्य परिवर्तन है।
|
|
158
|
+
- **प्रमाण।** स्वच्छ स्कैन एक परिकल्पना है। निर्गम मानदंड असली होस्ट स्मोक है (अस्थायी `DSH_HOME`, लक्ष्य CLI, `plugin add <tarball>`, `--dump-config`), साथ ही सत्र-लॉग लेखकों के लिए एक रिज़्यूम राउंड-ट्रिप (पैर A) और हर क्लाइंट-पक्ष हिट के लिए असली ब्राउज़र अभिकथन (पैर B)।
|
|
159
|
+
|
|
160
|
+
## सुरक्षा सीमाएँ
|
|
161
|
+
|
|
162
|
+
- **केवल-पठन स्कैन।** CLI स्कैन की जा रही रिपॉज़िटरी के भीतर कभी नहीं लिखता; `--json` केवल आपके दिए पथ पर लिखता है।
|
|
163
|
+
- **कोई नेटवर्क नहीं, कोई shell नहीं।** स्कैनर Node की मानक लाइब्रेरी के अलावा कुछ import नहीं करता और कोई प्रक्रिया नहीं चलाता।
|
|
164
|
+
- **कोई रहस्य नहीं।** पैकेज में कुछ भी क्रेडेंशियल, एनवायरनमेंट टोकन या सत्र डेटा नहीं पढ़ता।
|
|
165
|
+
- **सैंडबॉक्स स्मोक विधि।** कार्ड की असली-होस्ट जाँच `mkdtemp` वाला `DSH_HOME` इस्तेमाल करती है; आपका असली `~/.dsh` कभी नहीं छूती।
|
|
166
|
+
|
|
167
|
+
## विकास
|
|
168
|
+
|
|
169
|
+
```sh
|
|
170
|
+
npm install # या: pnpm install (रेपो में pnpm-lock.yaml है)
|
|
171
|
+
npm test # node --test: स्कैनर, कार्ड<->कैटलॉग समानता, असली Cordis + SkillRegistry
|
|
172
|
+
npm run verify:self-contained # हर import पैकेज के भीतर हल होता है
|
|
173
|
+
npm run verify:artifacts # tarball में स्किल, CLI और patch हैं, और परीक्षण शामिल नहीं
|
|
174
|
+
npm run check:readmes # पाँच-भाषा README स्थिरता
|
|
175
|
+
npm pack
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
स्कैनर के पास **हर पैर के लिए** संश्लेषित fixtures की एक जोड़ी है: `fixtures/leg-a-bad-repo` (पैर A की सत्र/कॉन्फ़िग सीमें, हर error सीम जानबूझकर मौजूद) के साथ `fixtures/leg-a-good-repo` (अनुकूलित), और `fixtures/bad-repo` (पैर B की क्लाइंट-स्लॉट सीमें) के साथ `fixtures/good-repo` (अनुकूलित) — साथ ही पहले से `0.1.5-rc.1` पर pinned एक परिवार रेपो पर live negative, ताकि कैटलॉग में रिग्रेशन डाउनस्ट्रीम उपयोगकर्ता के बजाय इस सूट में विफल हो। `test/card.test.mjs` दावा करता है कि विलयित कार्ड सूचकांक और `lib/scan.mjs` **ठीक वही** बीस सीम id और समान स्तर बताते हैं, और `CARD_ONLY` ठीक `['H3']` है — साक्ष्य-बद्धता नियम एक मशीन गेट के रूप में।
|
|
179
|
+
|
|
180
|
+
## विषय टैग
|
|
181
|
+
|
|
182
|
+
`dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `plugin-upgrade`, `migration`, `skill`, `version-card`, `scanner`, `client-slots` (`package.json` के keywords के समान; `dsh-plugin` पारिस्थितिकी का दृश्यता चैनल है)।
|
|
183
|
+
|
|
184
|
+
## PerryLink DSH प्लगइन परिवार
|
|
185
|
+
|
|
186
|
+
यह प्रोजेक्ट [PerryLink](https://github.com/PerryLink) द्वारा अनुरक्षित [40 DeepSeek Harness प्लगइनों](https://github.com/PerryLink) में से एक है। अगर यह आपकी मदद करता है, तो बाकी भी करेंगे:
|
|
187
|
+
|
|
188
|
+
| Plugin | One-liner |
|
|
189
|
+
|---|---|
|
|
190
|
+
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
191
|
+
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
192
|
+
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | |
|
|
193
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | |
|
|
194
|
+
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
195
|
+
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
196
|
+
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Unified session + workspace + config checkpoints with one-shot `/rewind` | |
|
|
197
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code, Codex, OpenCode and Hermes sessions, memories and skills into DSH | |
|
|
198
|
+
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
199
|
+
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
|
|
200
|
+
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Deterministic dataset profiling, cleaning and citation verification | |
|
|
201
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | |
|
|
202
|
+
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
203
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | |
|
|
204
|
+
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics: load, spill, compaction and cache hit rate | |
|
|
205
|
+
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Chinese mutual-fund research with sealed, traceable source snapshots | |
|
|
206
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issue/CI integration with every write approval-gated | |
|
|
207
|
+
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry and company research pack: chain map, policy timeline, company cards | |
|
|
208
|
+
| **[dsh-kit](https://github.com/PerryLink/dsh-kit)** | One-command starter pack that installs the core family | |
|
|
209
|
+
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base with hybrid search and citation-aware injection | |
|
|
210
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local Ollama model discovery and task-based routing with cloud fallback | |
|
|
211
|
+
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions, symbols and rename | |
|
|
212
|
+
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking at the model boundary with a host-side restore table | |
|
|
213
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | MCP management console: `/mcp` command, Settings tab and trial calls | |
|
|
214
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory protocol (`ctx.memory` + SQLite) | |
|
|
215
|
+
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse telemetry export from the session event stream | |
|
|
216
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Runtime-switchable model output styles | |
|
|
217
|
+
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Declarative allow/deny/ask rules plus a process-level network policy | |
|
|
218
|
+
| **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
|
|
219
|
+
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
|
|
220
|
+
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-dev knowledge base, agent skill and the `dsh-plugin-dev` CLI toolchain | |
|
|
221
|
+
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
222
|
+
| **[dsh-plugin-portal](https://github.com/PerryLink/dsh-plugin-portal)** | Zero-dependency static portal rendering the whole plugin family as one page | |
|
|
223
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat, Telegram, Feishu + a session console | |
|
|
224
|
+
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research reports: evidence ledger, manifest seal, per-claim verdicts | |
|
|
225
|
+
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional plugin quality scoring with an evidence-backed leaderboard | |
|
|
226
|
+
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions and workspaces in the Web sidebar with per-pin colors | |
|
|
227
|
+
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | Git-backed cross-device session synchronization with keep-both merges | |
|
|
228
|
+
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack plus the `plugin_vet` supply-chain gate | |
|
|
229
|
+
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop: speech-to-text input and text-to-speech replies | |
|
|
230
|
+
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | |
|
|
231
|
+
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives with a pass/fail matrix | |
|
|
232
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel plus eleven agent tools | |
|
|
233
|
+
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair | |
|
|
234
|
+
| **[dsh-wechat](https://github.com/pan17/dsh-wechat)** | WeChat ↔ DSH bridge (Tencent iLink bot) developed with [pan17](https://github.com/pan17/dsh-wechat), who hosts the repo | |
|
|
235
|
+
| **[dsh-personal-directive](https://github.com/PerryLink/dsh-personal-directive)** | Personal directive injector with a top-bar toggle (fork of liucai2026/dsh-personal-directive) | |
|
|
236
|
+
|
|
237
|
+
PerryLink DSH प्लगइन परिवार का हिस्सा — 40+ रिपॉज़िटरियाँ, जो सत्र, स्मृति, अनुमतियाँ, डिलीवरी, प्रेक्षणीयता और डेवलपर टूलिंग को कवर करती हैं। कैटलॉग देखें [perrylink-dsh-catalog.perrylink.workers.dev](https://perrylink-dsh-catalog.perrylink.workers.dev) या [`dsh-plugin` विषय](https://github.com/topics/dsh-plugin) पर।
|
|
238
|
+
|
|
239
|
+
## लाइसेंस
|
|
240
|
+
|
|
241
|
+
Apache-2.0 — देखें [LICENSE](LICENSE)। इंस्टॉल-समय निर्भरताएँ और उनके लाइसेंस [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) में सूचीबद्ध हैं; कुछ भी बंडल नहीं किया गया।
|