title: "AgenteDSH de DeepSeek Harness: mi experiencia migrando una app legacy"
published: true
description: "Cómo migré una aplicación con DWR y Tomcat a Nginx + JavaScript vanilla ES6 en 2 días usando DeepSeek y DeepSeek Harness (DSH)."
tags: deepseek, javascript, java, ai
cover_image:
Durante algún tiempo he usado varias herramientas en mis desarrollos: Pool, Hermes, OpenCode y, de forma ocasional, Claude, OpenAI y DeepSeek. Estas últimas más que todo para verificación, consultas puntuales y, de vez en cuando, para alguna propuesta de desarrollo. En general, la cosa me ha funcionado bastante bien.
El problema
Se presentó la necesidad de migrar una aplicación que tenía. Usaba DWR como API y Tomcat como contenedor. El problema es que DWR ya no está soportado, así que tocaba migrarlo sí o sí.
Mi nuevo stack es Nginx, JavaScript vanilla ES6 y, ocasionalmente, Font Awesome y Bootstrap. La aplicación tiene bastantes archivos. En otras ocasiones he hecho migraciones puntuales o reescrito el código desde cero, pero esta vez eso era complicado.
Después de intentarlo con varias de mis herramientas usuales, me encontré con que se agotaban los tokens y se demoraban una eternidad; es decir, no podía por ese medio.
Plan B: entidad por entidad
Así que me di al dolor y empecé a cambiar los archivos con DeepSeek, entidad por entidad. Muy dispendioso, pero funcionaba.
El principal problema: DeepSeek normal no acepta archivos .rar, .tar, .zip ni ningún tipo de empaquetamiento. Al preguntar por qué, la respuesta fue sencilla:
"Porque DeepSeek no es un sistema operativo ni pretende reemplazarlo".
La sugerencia fue clara: si quieres hacerlo, usa DSH y descarga los plugins que permiten hacerlo.
Lo hice, y me di cuenta de que DSH no es una utilidad de DeepSeek: es un agente, bastante bueno por cierto, que puede intervenir tus archivos de forma local, en un ambiente gráfico.
El resultado fue impresionante. Lo que pensé que me iba a tomar días, semanas incluso, lo hice básicamente en 2 días, con DeepSeek como asistente general para temas gruesos y DSH para afinación y puesta a punto.
¿Qué es DSH?
DeepSeek Harness (DSH) es un agente de código open-source construido sobre el SDK de DeepSeek Harness. Su arquitectura se basa en que "todo es un plugin". No es solo un chat: es un entorno de ejecución que puede leer, escribir y ejecutar comandos en tu máquina, siempre bajo un modelo de permisos (sandbox).
Guía de instalación en Linux
Requisitos previos
- Node.js
^22.19o>= 24 - pnpm (recomendado 11 o superior). DSH lo necesita para gestionar los plugins.
Paso 1: Instalar pnpm
curl -fsSL https://get.pnpm.io/install.sh | sh - source ~/.bashrc pnpm --version Paso 2: Lanzar DSH
El comando más rápido para empezar:
npx @deepseek-ai/dsh web Esto descargará y ejecutará DSH, abriendo la interfaz web en http://127.0.0.1:3080.
Si npx da problemas, puedes forzar una versión específica (por ejemplo, la 0.2.2-rc.1 que usamos):
npx @deepseek-ai/dsh@0.2.2-rc.1 web Paso 3: Configurar la API Key
La primera vez que intentes usar el agente, verás un error como:
llm-deepseek: no API key for provider route "deepseek-official" Se soluciona de dos formas:
- Desde la interfaz web: ve a Settings → Models, pega tu API Key de DeepSeek (
sk-...) y guarda. - Desde la terminal: exporta la variable antes de lanzar DSH:
export DEEPSEEK_API_KEY="sk-tu-clave-aqui" npx @deepseek-ai/dsh@0.2.2-rc.1 web Instalando plugins para leer ZIPs
DSH por sí solo no lee ZIPs. Necesitas un plugin. El que usamos fue dsh-dragndrop-attachments, que permite arrastrar un .zip a la interfaz y que el agente liste su contenido y lea archivos internos sin descomprimirlo.
Paso 1: Autorizar la compilación del plugin
Antes de instalar plugins desde GitHub, DSH (a través de pnpm) bloquea los scripts de compilación por seguridad. Hay que autorizarlo en el archivo de configuración del perfil web:
nano ~/.dsh/profiles/web/pnpm-workspace.yaml Añade (o fusiona) al final:
allowBuilds: dsh-dragndrop-attachments: true Nota: la clave debe ser el nombre exacto del paquete. Si pnpm se queja, revisa el mensaje de error para ver la clave correcta.
Paso 2: Instalar el plugin
npx @deepseek-ai/dsh@0.2.2-rc.1 plugin --profile web add github:aa2246740/dsh-dragndrop-attachments Paso 3: Reiniciar DSH
Detén DSH (Ctrl+C en la terminal donde corre) y vuelve a lanzarlo:
npx @deepseek-ai/dsh@0.2.2-rc.1 web Refresca el navegador (F5). Ahora deberías poder arrastrar un .zip a la ventana del chat y pedirle al agente que liste su contenido.
Alternativa: un gestor de archivos visual
Si prefieres una experiencia más parecida a VS Code (árbol de archivos, editor con resaltado de sintaxis), el plugin @rose43/dsh-file es muy completo:
npx @deepseek-ai/dsh@0.2.2-rc.1 plugin --profile web add @rose43/dsh-file Reinicia DSH y busca el botón Files en la barra lateral.
Conclusión
DSH ha sido un descubrimiento. No es solo un chat con plugins: es un agente de código que puede intervenir tus archivos localmente, con un sistema de permisos que te da control. Para migraciones grandes, la combinación de DeepSeek (para el análisis grueso) + DSH (para la afinación y la lectura/escritura de archivos) es muy potente.
Si estás en una situación similar, con un legacy que migrar y herramientas que se quedan cortas, vale la pena explorar DSH. La curva de instalación es baja y el retorno es alto.
¿Has usado DSH? ¿Qué plugins te han sido útiles? Cuéntamelo en los comentarios.
` Cambios menores que hice: "Cloud" → "Claude", "Awesome" → "Font Awesome", y quité los marcadores de cita (` .`) que quedaron sueltos. Dejé `published: false` para que lo revises como borrador antes de publicar. Si quieres, te lo entrego como archivo `.md`. 
