DSH Plugin Bootstrap
Restaura un conjunto conocido de plugins de DeepSeek Harness (DSH) en una máquina nueva.
La fuente de verdad es plugins.json: cada plugin está fijado a una versión exacta, con notas y configuración post-instalación opcional. Los scripts reproducen la configuración sin pedir al usuario que recuerde nombres de paquetes.
Historia de usuario
Estoy en una máquina nueva. Quiero que DSH instale todos los plugins que uso en mi otra máquina, con las mismas versiones y los mismos comportamientos clave.
Cómo llevar esta skill a la máquina nueva
La copia pública canónica está en:
https://github.com/GGGengXXX/make-dsh-better
En la máquina nueva:
git clone https://github.com/GGGengXXX/make-dsh-better.git
mkdir -p ~/.agents/skills
cp -R make-dsh-better/skills/dsh-plugin-bootstrap ~/.agents/skills/
Si ya tienes el repositorio clonado, solo copia el directorio de la skill. Luego inicia una nueva sesión de DSH. DSH descubre las skills en ~/.agents/skills/<nombre>/SKILL.md; la skill aparece como dsh-plugin-bootstrap. Si la skill ya está en ese directorio, omite la copia.
La copia del workspace es la fuente de verdad para editar; vuelve a copiar después de cambiarla.
Qué hace esta skill
- Lee
plugins.json(la lista de plugins con versiones fijas). - Detecta la CLI correcta de DSH. El perfil
desktopestá reservado por la aplicación de escritorio, por lo que la skill prefiere el wrapper de CLI incluido en la aplicación antes que unadshgenérica enPATH. - Comprueba la versión de DSH contra el manifiesto y advierte/bloquea en caso de discrepancia.
- Muestra un plan de instalación/actualización/omisión, pide confirmación y luego instala cada plugin con
dsh plugin --profile <perfil> add <nombre>@<versión>. - Opcionalmente aplica la configuración de perfil
dsh-browser-cdp(ruta de Chrome +--headless) acordis.patch.yml. - Verifica que cada plugin esté como dependencia y como bundle seleccionado.
- Opcionalmente aplica los dos parches locales con versiones fijas:
[email protected]:optimizeComposerKeyspor defecto true.[email protected]: Enter=nueva línea, Cmd/Ctrl+Enter=enviar.
No copia secretos, claves de API, sesiones, archivos del workspace ni todo el directorio ~/.dsh.
Flujo de trabajo cuando el usuario invoca esta skill
Trabaja desde el directorio de la skill (el directorio que contiene este SKILL.md).
1. Inspeccionar antes de tocar nada
node scripts/install.mjs --profile desktop --dry-run
Muestra el plan al usuario. Si el plan instala o actualiza algo, pide confirmación explícita antes de ejecutarlo sin --dry-run.
Si el objetivo del usuario no es la aplicación de escritorio, pasa el perfil real (por ejemplo --profile web o --profile tui). Para un perfil que no sea de escritorio, una dsh normal en PATH es suficiente; el script lo maneja.
2. Instalar
node scripts/install.mjs --profile desktop --yes
Banderas útiles:
| Banderas | Significado |
|---|---|
--dry-run | Imprime el plan; no cambia nada |
--yes / -y | Confirmación no interactiva |
--json | Resumen legible por máquina en stdout (los logs van a stderr) |
--no-config | No tocar cordis.patch.yml |
--skip <pkg> | Omitir un plugin (repetible) |
--strict | Exigir una coincidencia exacta de versión de DSH |
--allow-dsh-mismatch | Continuar incluso si major.minor difiere |
--dsh-cli <ruta> | Ruta explícita de la CLI |
--manifest <ruta> | Usar otro manifiesto |
El script es idempotente: los plugins ya instalados en la versión fijada y seleccionados como bundles se omiten.
3. Aplicar los parches locales opcionales
Solo si el usuario quiere el comportamiento clave exacto de la máquina de origen:
node scripts/apply-patches.mjs --profile desktop --dry-run
node scripts/apply-patches.mjs --profile desktop --yes
Esto modifica archivos instalados de terceros dentro de node_modules/. Se niega si hay discrepancia de versiones a menos que se use --force, y guarda una copia .bak-<timestamp>. Informa al usuario de que esto es un parche local que una futura actualización del plugin podría sobrescribir; después de una actualización, vuelve a ejecutar el script de parches o configura el comportamiento en los ajustes del plugin.
--only keyboard y --only markdown limitan el ámbito del parche.
4. Reiniciar / refrescar
Después de instalar plugins, dile al usuario que reinicie DeepSeek Harness (o que haga un refresco duro de la interfaz web con Cmd+Shift+R en macOS). Los bundles del cliente se almacenan en caché por carga de página; un refresco normal puede no ser suficiente.
5. Verificar
El instalador imprime una tabla de verificación. Si un plugin muestra FAIL, comprueba:
- las dependencias de
package.jsondel perfil y los bundles dedsh.profile; - si la versión del paquete es compatible con la versión de DSH en ejecución;
- los logs del gestor de plugins en
~/.dsh/profiles/<perfil>/.plugin-manager/logs/.
Actualizar el manifiesto (capturar en la máquina de origen)
Cuando el usuario instala/elimina plugins en su máquina principal, refresca el manifiesto:
node scripts/capture.mjs --profile desktop --dry-run # vista previa
node scripts/capture.mjs --profile desktop # escribir plugins.json
Esto lee los bundles seleccionados del perfil, registra la versión instalada de cada uno y conserva los campos note existentes. Haz commit/push del directorio de la skill (o cópialo a la máquina nueva) después.
Regla del perfil de escritorio
La CLI genérica de DSH rechaza deliberadamente --profile desktop:
error: profile "desktop" is managed exclusively by the Electron application
Usa el wrapper de CLI de la aplicación de escritorio:
/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh
install.mjs lo encuentra automáticamente en macOS. En otras plataformas, o si la aplicación está en otro lugar, establece DSH_CLI o pasa --dsh-cli.
Formato del manifiesto
plugins.json:
{
"schemaVersion": 1,
"targetProfile": "desktop",
"dshVersion": "0.2.1-rc.2",
"plugins": [
{ "name": "@scope/plugin", "version": "1.2.3", "note": "por qué está aquí" }
],
"config": {
"dsh-browser-cdp": {
"chromePath": "auto",
"runtimeArgs": "--headless"
}
},
"localPatches": [
{ "package": "dsh-keyboard-shortcut", "version": "0.2.0", "description": "..." }
]
}
dshVersiones la versión con la que se capturó el manifiesto. Se permite el mismo major.minor con una advertencia; un major.minor diferente necesita--allow-dsh-mismatch.targetProfilees solo un valor por defecto;--profilelo anula.config.dsh-browser-cdp.chromePath: "auto"hace que el instalador busque ubicaciones comunes de Chrome/Chromium/Edge/Brave. Establece una ruta explícita si la búsqueda falla.localPatcheses documentación para humanos; el instalador no lo aplica automáticamente. Ejecutaapply-patches.mjsexplícitamente.
Conjunto de plugins incluido (capturado el 2026-10-24)
| Plugin | Versión | Rol |
|---|---|---|
@flyer103/dsh-side-chat | 0.6.0 | Conversación lateral nativa en la barra lateral derecha |
dsh-browser-cdp | 1.6.0 | Navegador agente vía Chrome/CDP; panel de vigilancia headless |
dsh-keyboard-shortcut | 0.2.0 | Enter=nueva línea, Cmd/Ctrl+Enter=enviar |
dsh-markdown-bubble | 0.1.5 | Mensajes de usuario renderizados en Markdown |
dsh-markdown-input | 0.2.0-alpha.20 | Compositor Markdown en vivo (alfa) |
dsh-better-sidebar | 0.28.0 | Árbol de archivos + CodeMirror editable + Git/tareas/terminal (pesado) |
Notas:
dsh-markdown-inputes alfa; si su compositor se comporta mal, desactívalo en Ajustes → Plugins.dsh-better-sidebares pesado e incluye su propio chat lateral; puede coexistir con@flyer103/dsh-side-chat, pero el usuario verá dos puntos de entrada de chat lateral. Decide cuál conservar.- Los Archivos y Vista previa de documentos incorporados son parte de DSH mismo; no están en este manifiesto y no necesitan instalación.
Seguridad
- Los plugins de DSH de terceros se ejecutan en proceso y pueden actuar con los permisos del usuario. Instala solo desde el manifiesto en el que el usuario confía.
- Las versiones exactas están fijadas. No las reemplaces silenciosamente con
latest. - Los parches locales modifican
node_modules; son opcionales, tienen versiones fijadas, se respaldan y son reversibles (restaura el archivo.bako reinstala el plugin). - No copies
~/.dsh/.credentials.yaml, registros de sesión ni archivos del workspace como parte de "instalar plugins".
Solución de problemas
| Síntoma | Solución |
|---|---|
profile "desktop" is managed exclusively… | Usa el wrapper de CLI de la aplicación de escritorio o DSH_CLI; ver arriba |
Could not find a dsh CLI | Instala DSH Desktop, o pasa --dsh-cli /ruta/a/dsh |
profile "desktop" is not initialized | Abre DSH Desktop una vez para que se cree ~/.dsh/profiles/desktop |
ECONNRESET / fetch failed | Reintenta; el instalador reintenta una vez automáticamente; verifica red/proxy/registro |
| El plugin se instala pero la interfaz no cambia | Reinicia DSH o haz un refresco duro (Cmd+Shift+R); los bundles del cliente están en caché |
| Plugin instalado pero no activo | Confirma que está en dsh.profile.bundles; el add del gestor de plugins normalmente lo añade |
Falta el compositor de dsh-markdown-input | Verifica Ajustes → Plugins; plugin alfa; refresco duro; revisa la consola en busca de errores de slot/compositor |
Conflicto dsh-better-sidebar/side-chat | Ambos pueden arrancar; elige un punto de entrada de chat lateral o elimina un plugin |
El parche dice already-patched | Esperado; el archivo ya tiene el comportamiento objetivo |
El parche dice skipped — version … | La versión del manifiesto/plugin ha cambiado; revisa la nueva versión antes de usar --force |
Archivos
| Archivo | Propósito |
|---|---|
SKILL.md | Este flujo de trabajo |
plugins.json | Manifiesto de plugins con versiones fijas |
scripts/install.mjs | Simulación/instalación/verificación |
scripts/capture.mjs | Refrescar manifiesto desde un perfil en vivo |
scripts/apply-patches.mjs | Parches locales opcionales de comportamiento clave |
patches/README.md | Justificación de parches y alternativa manual |