dsh-composer-plus 1.9.0 → 1.10.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/README.de.md +236 -0
- package/README.es.md +236 -0
- package/README.fr.md +236 -0
- package/README.hi.md +236 -0
- package/README.id.md +236 -0
- package/README.ja.md +236 -0
- package/README.ko.md +236 -0
- package/README.md +20 -14
- package/README.pt-BR.md +236 -0
- package/README.ru.md +236 -0
- package/README.tr.md +236 -0
- package/README.vi.md +236 -0
- package/README.zh.md +236 -0
- package/assets/features/featureIdeas.webp +0 -0
- package/assets/features/projectName.webp +0 -0
- package/assets/features/turnRollback.webp +0 -0
- package/client.js +259 -47
- package/index.js +122 -33
- package/package.json +2 -2
package/README.es.md
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# dsh-composer-plus — Composer Plus para DeepSeek Harness
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/dsh-composer-plus)
|
|
4
|
+
[](https://github.com/furkancak1r/dsh-composer-plus/actions/workflows/test.yml)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
[English](README.md) · [中文](README.zh.md) · [Türkçe](README.tr.md) · **Español** · [Português (Brasil)](README.pt-BR.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [Русский](README.ru.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Bahasa Indonesia](README.id.md) · [Tiếng Việt](README.vi.md) · [हिन्दी](README.hi.md)
|
|
8
|
+
|
|
9
|
+
Esta es una traducción. La versión de referencia es el [README.md](README.md) en inglés.
|
|
10
|
+
|
|
11
|
+
Mejoras de comodidad al estilo de Codex para la interfaz de escritorio y web de [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh): un panel de cambios, ideas de funciones en tarjetas que se deslizan, búsqueda en el texto de los mensajes desde la barra lateral, revertir turnos con restauración de archivos, eliminar chats a la Papelera, el nombre del proyecto debajo del editor, el estado del proyecto en la barra lateral, historial de entrada, un atajo para el modo plan, Continuar con un clic, reanudar los chats en ejecución tras un reinicio, arrastrar y soltar en la cola, enlaces directos a sesiones, permisos de la revisión automática por chat, notificaciones en segundo plano, acceso desde el iPhone con la app Tether y actualizaciones automáticas.
|
|
12
|
+
|
|
13
|
+
**En una línea:** un único plugin de DeepSeek Harness (npm `dsh-composer-plus`, que aparece como **Composer Plus** en Configuración → Plugins) que añade un panel de cambios de git, tarjetas de ideas de funciones al estilo de Tinder, una búsqueda en la barra lateral que también encuentra palabras dentro de los mensajes, la reversión de turnos con ↶ (solo el chat, o el chat y los archivos), Eliminar chat, el nombre del proyecto debajo del editor, el historial de entrada con ↑/↓, un interruptor de `/plan` con Shift+Tab, ▶ Continuar con un clic, Reanudar tras reiniciar, reordenar la cola arrastrando y soltando, Copiar enlace de sesión, “Permitir en este chat” para la revisión automática, notificaciones en segundo plano, acceso desde el iPhone (Conexión móvil, app Tether), 11 idiomas adicionales para la interfaz y actualizaciones automáticas.
|
|
14
|
+
|
|
15
|
+
<p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness con Composer Plus: el proyecto en ejecución muestra un indicador de carga en la barra lateral y el panel de cambios muestra un diff de git"></p>
|
|
16
|
+
|
|
17
|
+
Plugin comunitario no oficial. Las únicas llamadas de red son las de la comprobación de actualizaciones (las versiones publicadas en GitHub y el registro de npm). Desactiva **Actualizaciones automáticas** para que no se hagan al iniciar. **Ideas de funciones** llama al modelo de tu propio chat solo cuando haces clic en **Sugerir funciones**. **Conexión móvil** (desactivada de forma predeterminada) acepta conexiones del iPhone desde tu red local o tu tailnet solo después de que la actives.
|
|
18
|
+
|
|
19
|
+
## Instalación
|
|
20
|
+
|
|
21
|
+
**App de escritorio:** Configuración → Plugins → **Añadir plugin** → escribe `dsh-composer-plus` → **Activar ahora**.
|
|
22
|
+
También puedes pegar `https://github.com/furkancak1r/dsh-composer-plus` en lugar del nombre de npm.
|
|
23
|
+
|
|
24
|
+
**Perfil web / CLI:**
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
dsh plugin --profile web add dsh-composer-plus
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Después, reinicia dsh. (La CLI no puede instalar en el perfil de escritorio: de eso se encarga la app).
|
|
31
|
+
|
|
32
|
+
> El pnpm de dsh omite las versiones publicadas hace menos de 24 horas. Justo después de una versión nueva, añade la versión: `dsh-composer-plus@1.10.0`.
|
|
33
|
+
|
|
34
|
+
## Funciones
|
|
35
|
+
|
|
36
|
+
| Función | Cómo usarla | Captura |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| **Panel de cambios** | Barra lateral derecha → `+` → **Cambios**. Elige **Sin confirmar**, **Sin preparar**, **Preparados** o **Rama** para ver los archivos cambiados con sus contadores `+/-`; haz clic en un archivo para ver su diff. **Último turno** abre la revisión propia de dsh del último turno. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Captura del Panel de cambios"></a> |
|
|
39
|
+
| **Ideas de funciones** | Barra lateral derecha → `+` → **Ideas de funciones** → **Sugerir funciones**. El modelo del propio chat lee un breve resumen del proyecto del chat (los archivos del nivel superior, el principio del README y del manifiesto, los últimos 15 commits) y sugiere hasta 8 funciones. Las muestra como un montón de tarjetas en el idioma de la interfaz de dsh. Desliza una tarjeta hacia la derecha (o haz clic en **✓**, o pulsa `→`; en todos los casos la tarjeta sale volando hacia su lado) para iniciar un nuevo chat en el mismo proyecto: empieza en modo plan con la idea como petición, así que nada cambia antes de que apruebes el plan. Para saltarte el plan, haz clic en **▶ Crear ahora** (o pulsa `↑`; la tarjeta sale volando hacia arriba): el nuevo chat empieza enseguida con la idea como una petición normal, y el modelo hace el cambio y ejecuta sus comprobaciones (las aprobaciones se aplican como siempre). Desliza hacia la izquierda (o **✕**, o `←`) para omitirla; **Deshacer** (o `Z`) recupera una tarjeta omitida. Haz clic en **↓** (o pulsa `↓`) para guardar una buena idea para más tarde: va a la lista **Después** del proyecto, que aparece en todos los chats de la misma carpeta de proyecto (también tras un reinicio). **Después (N)** abre la lista; **Planificar** inicia el mismo chat en modo plan para la idea y **Crear ahora**, el chat sin plan; los dos la quitan de la lista. **Planificar todo (N)** inicia un solo chat en modo plan para todas las ideas de la lista, así que las partes comunes se planifican una sola vez. **Quitar de la lista** la elimina. **Más ideas** añade tarjetas. Las ideas no se sugieren dos veces en un proyecto: cada idea sugerida (omitida, guardada o iniciada) va al **Historial** del proyecto, se le indica al modelo que no vuelva a sugerirlas y se descarta un título repetido. **Historial** las muestra como **Iniciada** o **Sugerida**; **Olvidar** (u **Olvidar todo**) deja que una vuelva a aparecer; una idea que sigue en la lista **Después** queda fuera de las sugerencias hasta que la quitas de allí. El modelo solo se ejecuta cuando haces clic. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Captura de Ideas de funciones"></a> |
|
|
40
|
+
| **Búsqueda en el contenido** | La búsqueda propia de la barra lateral de dsh (la lupa junto a **Espacios de trabajo**; `Cmd+K` en la app de escritorio, `Cmd+Alt+K` en un navegador) también encuentra chats por las palabras de tus mensajes y de las respuestas, no solo por el título, y muestra el texto que coincide debajo del chat. dsh ya incluye esta búsqueda, pero viene desactivada; esta función la activa con un archivo de índice de búsqueda en tu equipo. El índice se crea en la primera búsqueda después de iniciar dsh (unos 15 s para 250 chats, consulta Límites) y se conserva para los siguientes inicios. Activada de forma predeterminada; un cambio se aplica después de reiniciar dsh. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Captura de Búsqueda en el contenido"></a> |
|
|
41
|
+
| **Revertir turno** | Pasa el puntero por encima de uno de tus mensajes y haz clic en **↶** (junto a Copiar). **Solo el chat** quita ese mensaje y todo lo que viene después (respuestas, llamadas a herramientas) del chat y del contexto del modelo, y vuelve a poner el mensaje en el editor: cámbialo y envíalo de nuevo. **Chat y archivos** primero muestra los archivos del proyecto que cambiaron desde ese mensaje y después también los devuelve a su estado anterior, incluidos los cambios hechos por comandos (`bash`), no solo por las herramientas de edición de dsh. Si hay un turno en ejecución, primero se detiene. El registro del chat nunca se reescribe: un marcador oculto esconde la parte retirada, igual que el propio `/compact` de dsh esconde los mensajes antiguos. Si [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) está instalado, ese plugin hace este trabajo y Composer Plus no muestra un segundo botón. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Captura de Revertir turno"></a> |
|
|
42
|
+
| **Eliminar chat** | Barra lateral → menú **…** de un chat (o clic derecho) → **Eliminar…** → **Eliminar**. dsh por sí solo solo puede archivar. El chat se detiene (su turno, sus trabajos en segundo plano, sus subagentes y sus recordatorios, igual que con el archivado propio de dsh) y su historial guardado, con los chats de sus subagentes, se mueve a la Papelera de macOS (en otros sistemas: `$DSH_HOME/trash`). Para recuperarlo, devuelve la carpeta a su sitio y reinicia dsh: aparece en la vista **Solo archivadas** de la barra lateral. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Captura de Eliminar chat"></a> |
|
|
43
|
+
| **Nombre del proyecto en el compositor** | La fila que hay debajo del editor (turnos, tokens, aciertos de caché, contexto) empieza con el nombre del proyecto del chat, así que siempre ves en qué proyecto trabaja un chat. Es el título del proyecto en dsh, o el nombre de la carpeta si el proyecto no tiene título. Pasa el puntero por encima para ver la ruta completa de la carpeta. Haz clic en él para encontrar el chat en la barra lateral, en la vista de lista o de proyectos: la barra lateral y el proyecto se abren (también un proyecto contraído y su **Mostrar más**), la lista se desplaza hasta el chat y el chat parpadea durante 5 segundos. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Captura de Nombre del proyecto en el compositor"></a> |
|
|
44
|
+
| **Historial de entrada** | Con el editor vacío, pulsa `↑` / `↓` para recorrer los mensajes que enviaste, como en una terminal. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Captura de Historial de entrada"></a> |
|
|
45
|
+
| **Modo plan con Shift+Tab** | `Shift+Tab` añade `/plan ` al principio del borrador (púlsalo otra vez para quitarlo). Si el chat ya está en modo plan, `Shift+Tab` sale de él. | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="Captura de Modo plan con Shift+Tab"></a> |
|
|
46
|
+
| **Mantener el foco en el editor** | Después de enviar un comando `/` o una skill, el cursor se queda en el editor y puedes volver a escribir enseguida. También funciona con macros de teclado que escriben un comando y pulsan `Enter`. dsh pone el editor en solo lectura mientras resuelve el comando, y entonces el navegador le quita el foco. Esta función le devuelve el foco, salvo que lo tenga un menú, un diálogo u otro campo. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Captura de Mantener el foco en el editor"></a> |
|
|
47
|
+
| **Continuar con un clic** | Después de un turno detenido, fallido o cortado, el editor vacío muestra **▶**. Un clic reanuda la conversación existente sin escribir en el campo de entrada ni añadir un mensaje visible al chat (el modelo recibe una breve nota oculta de “continúa desde donde te detuviste”, porque algunos proveedores, como Claude, rechazan una petición que termina con una respuesta del asistente). Un turno completado mantiene el botón normal de enviar. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Captura de Continuar con un clic"></a> |
|
|
48
|
+
| **Reanudar tras reiniciar** | Desactivada de forma predeterminada: actívala en **Configuración → Composer Plus**. Si sales de dsh (o se cierra) mientras un chat está trabajando, ese chat continúa solo cuando vuelves a abrir dsh, con la misma nota oculta que Continuar con un clic. Si había una ronda de un objetivo (`/goal`) en ejecución, el objetivo sigue con su siguiente ronda (dsh pausa los objetivos en cada inicio hasta que los reanudas). Los chats que detuviste, que terminaron o que fallaron no continúan. dsh no tiene ningún ajuste para esto: solo marca ese turno como interrumpido. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Captura de Reanudar tras reiniciar"></a> |
|
|
49
|
+
| **Arrastrar y soltar en la cola** | Los mensajes en cola tienen un asa (⠿). Arrástrala para reordenar, o pon el foco en el asa y pulsa `↑` / `↓`. `Esc` cancela. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Captura de Arrastrar y soltar en la cola"></a> |
|
|
50
|
+
| **Copiar enlace de sesión** | Haz clic derecho en un chat de la barra lateral → **Copiar enlace de sesión**. Pega el enlace `dsh-session:…` en otro chat para adjuntar ese chat como contexto de solo lectura. dsh 0.2.1 tiene su propia opción **Copiar ID de sesión**, que copia solo el id; esta opción aparece justo después. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Captura de Copiar enlace de sesión"></a> |
|
|
51
|
+
| **Copiar ruta del proyecto** | Haz clic derecho en un proyecto de la barra lateral → **Copiar ruta** copia la ruta completa de su carpeta. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Captura de Copiar ruta del proyecto"></a> |
|
|
52
|
+
| **Permitir en este chat** | Cuando la revisión automática te pregunta, la tarjeta de aprobación muestra **Permitir en este chat**: a partir de entonces, la misma herramienta en el mismo chat queda permitida, con cualquier argumento. Un chip en la cabecera muestra los permisos concedidos y permite revocarlos. Los permisos se mantienen tras un reinicio. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Captura de Permitir en este chat"></a> |
|
|
53
|
+
| **Estado del proyecto** | La fila de un proyecto en la barra lateral muestra el mismo indicador de en ejecución / en espera / terminado que sus chats, así que un proyecto contraído también te dice que un chat de dentro está trabajando o te necesita. Primero se muestra un chat que te espera, luego un chat terminado que aún no has abierto (el punto verde, también mientras otro chat sigue en ejecución) y luego el indicador de en ejecución. Pasa el puntero por encima para ver los detalles. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Captura de Estado del proyecto"></a> |
|
|
54
|
+
| **Proyectos activos primero** | Cuando un chat empieza a ejecutarse o te necesita, su proyecto sube al principio de la barra lateral con la animación de filas propia de dsh (el mismo movimiento que al arrastrarlo allí). Los proyectos terminados se quedan donde están; arrástralos a donde quieras, como siempre. Los movimientos se guardan en el orden de proyectos de dsh, así que al desactivar esta función se mantiene el orden actual. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Captura de Proyectos activos primero"></a> |
|
|
55
|
+
| **Filtro de proyectos recientes** | Barra lateral → opciones de vista (icono de controles deslizantes) → **Activos en las últimas 2 horas**. Mientras está seleccionado, la barra lateral solo muestra los proyectos con un chat activo en las últimas 2 horas: un chat actualizado en ese tiempo, un chat en ejecución o en espera, el chat abierto o un chat terminado que aún no has abierto (el punto verde de “terminado” de dsh), también después de las 2 horas. Los proyectos sin un chat así se ocultan, también los nuevos y vacíos. Selecciónalo otra vez para mostrar todos los proyectos. La elección se guarda en este dispositivo. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Captura de Filtro de proyectos recientes"></a> |
|
|
56
|
+
| **Contraer todos los proyectos** | Mientras hay un proyecto abierto en la barra lateral, aparece un botón junto a las opciones de vista (icono de controles deslizantes). Haz clic en él para cerrar a la vez todos los proyectos abiertos, por ejemplo 3 proyectos abiertos de 5. El botón se oculta de nuevo cuando no hay ningún proyecto abierto. | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="Captura de Contraer todos los proyectos"></a> |
|
|
57
|
+
| **Ordenar por estado** | Barra lateral → opciones de vista → **Ordenar por** → **Por estado** (con **En una sola lista**). Primero aparecen los chats terminados (el punto de “terminado” de dsh, que también recibe un turno que acabó con un error), luego los chats en ejecución o en espera, luego los chats con una automatización activa (Tareas automatizadas) y, por último, el resto en el orden de dsh. Al abrir un chat terminado, este baja. Solo cambia la vista: selecciona **Manual** o **Última actualización** para volver. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Captura de Ordenar por estado"></a> |
|
|
58
|
+
| **Notificaciones en segundo plano** | Mientras dsh está en segundo plano, recibes una notificación cuando un turno termina (la primera línea de la respuesta) o cuando un chat de verdad te espera: una aprobación (el nombre de la herramienta), una respuesta (la pregunta) o la revisión de un plan. Una solicitud tiene que seguir abierta 1,5 s después, así que las aprobaciones que se responden automáticamente (permisos de la revisión automática, otros plugins) no generan ningún aviso, y una notificación se retira en cuanto se responde su solicitud. La insignia del Dock o de la barra de tareas cuenta los chats en espera. Al hacer clic se abre ese chat. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Captura de Notificaciones en segundo plano"></a> |
|
|
59
|
+
| **11 idiomas adicionales para la interfaz** | Configuración → Composer Plus → **Idioma de la aplicación** cambia toda la interfaz de dsh a Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt o हिन्दी (consulta más abajo). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Captura de los 11 idiomas adicionales para la interfaz"></a> |
|
|
60
|
+
| **Conexión móvil (iPhone)** | Usa dsh desde tu iPhone con la app [Tether](tether/), en la misma red Wi-Fi o a través de [Tailscale](https://tailscale.com). Actívala en **Configuración → Composer Plus** (está desactivada de forma predeterminada, porque abre un puerto de red en este Mac). Después haz clic en **Conexión móvil**, abajo a la izquierda de la barra lateral: escanea el código QR en Tether y haz clic en **Approve**. El teléfono muestra tus chats, envía mensajes, responde aprobaciones y preguntas, y cambia de modelo y de agente. Empareja todos los Mac que quieras: el nombre del Mac, arriba a la izquierda en la app, te permite cambiar entre ellos. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Captura de Conexión móvil"></a> |
|
|
61
|
+
| **Actualizaciones automáticas** | Al iniciar dsh, el plugin consulta la [última versión publicada en GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Si es más reciente y ya está en npm, instala esa versión exacta con el gestor de plugins propio de dsh (el mismo camino que Configuración → Plugins) y te avisa. **Reinicia dsh** para cargarla. **Configuración → Composer Plus → Actualizaciones de Composer Plus** muestra la versión y tiene los botones **Buscar actualizaciones** / **Actualizar ahora**. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Captura de Actualizaciones automáticas"></a> |
|
|
62
|
+
|
|
63
|
+
Los botones, la información emergente, los avisos y las notificaciones siguen el idioma elegido en dsh (consulta Idioma de la aplicación más abajo).
|
|
64
|
+
|
|
65
|
+
## Configuración
|
|
66
|
+
|
|
67
|
+
Cada función se puede activar o desactivar por separado en **Configuración → Composer Plus** de dsh. Cada fila tiene una captura pequeña: pasa el puntero por encima para ver una vista previa más grande, o haz clic para abrirla a tamaño completo (`Esc` la cierra). El cuadro **Buscar funciones** de la parte superior filtra la página por nombre o descripción (en cualquier idioma, sin distinguir mayúsculas ni acentos); `Esc` lo vacía. Cada fila tiene un interruptor y una breve descripción. Los cambios se aplican de inmediato, sin reiniciar, y se recuerdan en ese dispositivo. Todo está activado de forma predeterminada, salvo **Conexión móvil** y **Reanudar tras reiniciar**. El Host de dsh guarda los interruptores de estas dos funciones y los de **Búsqueda en el contenido** y **Revertir turno**, así que se aplican a todas las ventanas y se mantienen tras un reinicio. **Búsqueda en el contenido** solo cambia después de reiniciar dsh (dsh la lee al iniciar); hasta entonces, su fila dice **Reinicia dsh para aplicar este cambio.**
|
|
68
|
+
|
|
69
|
+
<p align="center"><img src="docs/images/settings.webp" width="720" alt="Configuración → Composer Plus: búsqueda de funciones, selector de idioma, fila de actualizaciones y un interruptor por función, con una vista previa de la captura al pasar el puntero"></p>
|
|
70
|
+
|
|
71
|
+
### Idioma de la aplicación
|
|
72
|
+
|
|
73
|
+
Abre **Configuración → Composer Plus → Idioma de la aplicación** y elige **Idioma del sistema** o uno de los 13 idiomas:
|
|
74
|
+
|
|
75
|
+
English · 中文 · Türkçe · Español · Português (Brasil) · Français · Deutsch · Русский · 日本語 · 한국어 · Bahasa Indonesia · Tiếng Việt · हिन्दी
|
|
76
|
+
|
|
77
|
+
<p align="center"><img src="docs/images/language-tr.webp" width="720" alt="Interfaz de DeepSeek Harness cambiada a Türkçe"></p>
|
|
78
|
+
|
|
79
|
+
Toda la app cambia de inmediato. La elección es la propia preferencia guardada de dsh, `locale.preference` (la misma que General → Idioma), así que se mantiene tras los reinicios. **Idioma del sistema** borra esa elección: la app de escritorio sigue el idioma del sistema operativo, la interfaz web sigue el idioma del navegador, y un idioma no compatible pasa a inglés. Instalar el plugin nunca cambia un idioma que ya elegiste.
|
|
80
|
+
|
|
81
|
+
Cada paquete tiene 3143 textos: todos los textos de la interfaz de dsh `0.2.0-rc.2` y `0.2.1-rc.2` (chats, barra lateral, configuración, aprobaciones, recordatorios, vistas previas de archivos, gestor de plugins, mercado de plugins), los controles propios del plugin y el popular plugin [dsh-rewind](https://github.com/SiriLee/dsh-rewind). No se traducen: tus mensajes, la salida del modelo, el código, los nombres de los comandos de barra (`/plan`, `/compact`), las etiquetas que pertenecen al proveedor, como el nivel de razonamiento `High`, los textos de otros plugins, ni los menús nativos y los diálogos de actualización de la app de escritorio (dsh solo los incluye en inglés y chino). Los textos que añada una versión más nueva de dsh aparecen en inglés hasta que se actualicen los paquetes. Si otro plugin ya ofrece un idioma, ese plugin lo mantiene.
|
|
82
|
+
|
|
83
|
+
## Atajos de teclado
|
|
84
|
+
|
|
85
|
+
| Tecla | Dónde | Acción |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| `↑` / `↓` | editor vacío | mensaje enviado anterior / siguiente |
|
|
88
|
+
| `Shift+Tab` | editor | añadir o quitar `/plan `, o salir del modo plan |
|
|
89
|
+
| `↑` / `↓` | asa de la cola con el foco | mover el mensaje en cola |
|
|
90
|
+
| `Esc` | mientras arrastras | cancelar el movimiento |
|
|
91
|
+
| `→` / `←` | página Ideas de funciones | crear / omitir la tarjeta superior |
|
|
92
|
+
| `↓` | página Ideas de funciones | guardar la tarjeta superior en la lista Después del proyecto |
|
|
93
|
+
| `↑` | página Ideas de funciones | crear ahora la tarjeta superior, sin plan |
|
|
94
|
+
| `Z` | página Ideas de funciones | recuperar la última tarjeta omitida |
|
|
95
|
+
|
|
96
|
+
Un menú `/` o `@` abierto se queda con estas teclas.
|
|
97
|
+
|
|
98
|
+
## Compatibilidad
|
|
99
|
+
|
|
100
|
+
Probado en dsh `0.2.0-rc.2` (escritorio y web) y `0.2.1-rc.2` (web). La CI ejecuta las pruebas en cada push.
|
|
101
|
+
|
|
102
|
+
## Privacidad y seguridad
|
|
103
|
+
|
|
104
|
+
- **Continuar:** el endpoint local autenticado solo reanuda el último turno interrumpido, rechaza las peticiones obsoletas o duplicadas y mantiene los hooks de aprobación existentes. No envía un nuevo mensaje del usuario.
|
|
105
|
+
- **Reanudar tras reiniciar:** desactivada hasta que la actives. La parte Host solo guarda los ids de los chats y sus horas de inicio en `$DSH_HOME/storages/dsh-composer-plus/resume.json` (permisos solo para el propietario), y nada sale de tu equipo. Solo continúa un chat cuando el propio registro de dsh indica que fue dsh (no tú) quien detuvo su último turno. Las aprobaciones y la revisión automática se aplican al turno continuado como siempre.
|
|
106
|
+
|
|
107
|
+
- **Panel de cambios:** git se ejecuta en modo de solo lectura en tu equipo, en la carpeta del propio chat, a través del canal `/api` autenticado de dsh. Nunca hace commits, nunca prepara archivos ni ejecuta fetch, y solo muestra las rutas que el propio git listó.
|
|
108
|
+
- **Ideas de funciones:** no se ejecuta nada hasta que haces clic en **Sugerir funciones**. Entonces la parte Host lee solo la carpeta del propio chat (el navegador nunca envía una ruta): los nombres de las entradas del nivel superior, los primeros 6 kB del README, de AGENTS.md y del manifiesto (`package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, …) y `git log --oneline -15`, con un máximo de 16 kB en total. Omite `.env*`, los archivos de claves y carpetas como `node_modules`, y solo lee archivos normales que estén dentro de la carpeta: omite los enlaces simbólicos que apuntan fuera de la carpeta, los FIFO y los dispositivos. Este resumen va al modelo que usa el chat, con los ajustes de proveedor propios de dsh, en una sola petición; no se añade a ningún chat. No se escribe nada en el proyecto. Una idea deslizada a la derecha inicia un nuevo chat en modo plan, así que las aprobaciones y la revisión del plan se aplican como siempre. **Crear ahora** inicia el chat sin modo plan: el modelo puede cambiar archivos enseguida, con las aprobaciones habituales del chat y la revisión automática. Las ideas guardadas para después (título, resumen, motivo, esfuerzo) se guardan junto con la ruta de la carpeta del proyecto en `storages/dsh-composer-plus/later.json`, dentro del directorio home de dsh (archivo solo para el propietario); nada va al proyecto. El historial de ideas sugeridas (título, resumen, motivo, esfuerzo, fecha, si se inició) se guarda de la misma forma en `storages/dsh-composer-plus/idea-history.json`, como máximo 200 por proyecto (las más antiguas salen primero); sus títulos van al modelo con el siguiente **Sugerir funciones** de ese proyecto.
|
|
109
|
+
- **Búsqueda en el contenido:** ningún código nuevo busca en tus chats: el plugin solo activa el índice de mensajes propio de dsh (SQLite FTS5, `dsh-session-query-sqlite`) y le da un archivo, `$DSH_HOME/cache/composer-plus/session-search.db` (archivo y carpeta solo para el propietario). El archivo contiene el texto de tus mensajes y de los del asistente, así que es tan privado como los registros de chat de `$DSH_HOME/sessions`. Nada sale de tu equipo. Es una copia que dsh puede volver a crear: puedes eliminarla mientras dsh está cerrado. El interruptor está en `$DSH_HOME/storages/dsh-composer-plus/content-search.json`.
|
|
110
|
+
- **Revertir turno:** antes de cada uno de tus mensajes, el Host toma una instantánea git de la carpeta del chat en su propio almacén, `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (carpeta solo para el propietario). Contiene copias de los archivos de esa carpeta que git ve (no de los archivos ignorados), así que es tan privado como el proyecto. Lee los objetos de tu repositorio (no copia lo que git ya tiene) y nunca escribe en el índice, el `HEAD`, las ramas, las etiquetas, el stash ni la configuración de tu repositorio; el único cambio que git hace allí es una marca de tiempo más reciente en los archivos de objetos que reutiliza (esto retrasa su limpieza con `git gc`). Una reversión con archivos solo escribe archivos normales dentro de la carpeta del chat; omite los enlaces simbólicos, las tuberías y todo lo que esté fuera de la carpeta. Nada sale de tu equipo. Puedes eliminar el almacén mientras dsh está cerrado (entonces la reversión solo funciona para el chat, hasta que haya mensajes nuevos). **Eliminar chat** también elimina el almacén de ese chat. El interruptor está en `$DSH_HOME/storages/dsh-composer-plus/rollback.json`.
|
|
111
|
+
- **Eliminar chat:** mueve a la Papelera las carpetas de registro propias del chat (`$DSH_HOME/sessions/<project>/<chat>`). No toca la carpeta del proyecto.
|
|
112
|
+
- **Permitir en este chat:** los permisos concedidos se guardan en `$DSH_HOME/storages/dsh-composer-plus/grants.json` (archivo con permisos solo para el propietario). Un permiso cubre **una herramienta exacta en un chat**. Si esa herramienta puede escribir, el permiso también cubre cualquier escritura. Revócalo desde el chip de la cabecera.
|
|
113
|
+
- La revisión automática sigue ejecutándose en cada llamada; los fallos de la revisión nunca se permiten automáticamente.
|
|
114
|
+
- **Conexión móvil:** desactivada hasta que la actives. Mientras está activada, la parte Host ejecuta la pasarela de Tether: HTTPS en el puerto 19390, que solo acepta tu subred Wi-Fi y tu tailnet (100.64.0.0/10), y una página de emparejamiento en `127.0.0.1:19391` (solo este Mac). Un teléfono necesita un código de un solo uso del código QR (válido 5 minutos) y que hagas clic en **Approve** en el Mac. El teléfono fija el certificado de la pasarela. El Mac solo guarda un hash del token de cada teléfono (30 días, se renueva mientras se usa); **Revoke** cierra de inmediato las conexiones de ese teléfono. Los teléfonos solo pueden llamar a una lista permitida de métodos de dsh (chats, prompts, adjuntos, comandos de barra, aprobaciones, preguntas, modelos, agentes, objetivos), no a la configuración, las credenciales, el explorador de archivos ni la terminal. Datos: `$DSH_HOME/storages/dsh-composer-plus/mobile/`. Detalles: [tether/README.md](tether/README.md).
|
|
115
|
+
- **Actualizaciones:** la parte Host pide a `api.github.com` la última versión publicada y a `registry.npmjs.org` esa versión exacta; no se envía nada sobre ti ni sobre tus chats. La instalación usa el gestor de plugins de dsh (`pnpm add dsh-composer-plus@<version>`; cuando dsh 0.2.1 lo rechaza para un plugin ya instalado, `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`, y después el perfil indica esa URL como origen del plugin), así que se aplican las comprobaciones propias de dsh del registro, de los scripts y de la compatibilidad de versiones. Nunca se instalan etiquetas de prerelease ni versiones anteriores.
|
|
116
|
+
|
|
117
|
+
## Solución de problemas
|
|
118
|
+
|
|
119
|
+
- **No hay notificaciones en macOS:** Ajustes del Sistema → Notificaciones → DeepSeek Harness → permitir. Elige **Alertas** para que se queden en pantalla.
|
|
120
|
+
- **Faltan ▶, las asas de la cola, el estado del proyecto, la opción de proyectos recientes, Contraer todos los proyectos, Copiar ruta, Permitir en este chat o el clic derecho después de actualizar dsh:** estos elementos se enganchan al HTML actual de dsh, porque dsh aún no tiene un espacio para ellos. Si dsh cambia ese marcado, se ocultan solos; nada más se rompe. Por favor, abre una [incidencia](https://github.com/furkancak1r/dsh-composer-plus/issues).
|
|
121
|
+
- **«Error al actualizar» o «no se instaló desde npm»:** una copia enlazada desde una carpeta local o renombrada no puede actualizarse sola; reinstala `dsh-composer-plus` desde Configuración → Plugins. En los demás casos, el mensaje muestra la primera línea del error de pnpm; **Buscar actualizaciones** lo vuelve a intentar.
|
|
122
|
+
- **Conexión móvil dice que la pasarela no está en ejecución:** "no IPv4 address on en0" significa que este Mac no tiene dirección Wi-Fi ni Ethernet; "EADDRINUSE" significa que otro dsh (u otra app) usa el puerto 19390 o 19391. Solo un dsh a la vez puede ejecutar Conexión móvil.
|
|
123
|
+
- **Conexión móvil, Reanudar tras reiniciar o Búsqueda en el contenido dicen «Reinicia dsh»:** el plugin se actualizó mientras dsh estaba en ejecución (o, en el caso de Búsqueda en el contenido, cambiaste el interruptor); el nuevo estado se carga tras reiniciar.
|
|
124
|
+
- **La búsqueda solo encuentra títulos:** Búsqueda en el contenido está desactivada, dsh no se ha reiniciado desde que la activaste o instalaste el plugin, o la palabra solo está en la salida de una herramienta (consulta Límites).
|
|
125
|
+
- **No hay botón ↶ en mis mensajes:** Revertir turno está desactivado, el chat es un chat de subagente, o dsh-rewind-plugin está instalado (usa su botón ↶). Después de una actualización, reinicia dsh.
|
|
126
|
+
- **Chat y archivos aparece en gris:** el proyecto no es un repositorio git, no hay ninguna instantánea de antes de ese mensaje (el mensaje es anterior al plugin, o una de las 50 instantáneas más recientes la sustituyó), o no cambió ningún archivo.
|
|
127
|
+
- **Eliminar dice que otro dsh tiene abierto este chat:** un segundo dsh que usa el mismo directorio home de dsh tiene el bloqueo del chat. Cierra esa ventana o ese dsh y vuelve a eliminarlo. Mientras tanto, el chat sigue archivado.
|
|
128
|
+
- **Un chat no continuó tras un reinicio:** Reanudar tras reiniciar estaba desactivado cuando dsh se cerró, detuviste tú mismo ese turno, el turno ya había terminado (completado o fallido), el chat estaba archivado, o había más de 20 chats en ejecución (continúan los 20 más recientes).
|
|
129
|
+
- **La instalación falla justo después de una versión nueva:** añade la versión (`dsh-composer-plus@1.10.0`); consulta la nota de instalación de más arriba.
|
|
130
|
+
|
|
131
|
+
## Límites
|
|
132
|
+
|
|
133
|
+
- Continuar sin mensaje depende del ciclo de vida `agent/pre-step` → `agent/request` de dsh. Vuelve a comprobar la compatibilidad cuando actualices dsh.
|
|
134
|
+
- **Ideas de funciones** guarda las tarjetas en memoria para cada chat hasta que dsh o la página se recargan; después, **Sugerir funciones** vuelve a preguntar al modelo. Las tarjetas llegan en el idioma de la interfaz que tiene dsh cuando haces clic; si cambias el idioma, las tarjetas que ya están en el montón conservan el suyo y **Más ideas** usa el nuevo. El modelo solo ve el breve resumen del proyecto, no el código, así que una idea puede repetir algo que el proyecto ya tiene: omítela. El nuevo chat solo se ejecuta en modo plan cuando el perfil tiene el comando `/plan` de dsh; si no, la idea se envía como un primer mensaje normal. La lista **Después** pertenece a la ruta de la carpeta del chat: la misma carpeta abierta a través de un enlace simbólico tiene su propia lista. Guarda como máximo 50 ideas por proyecto (quita una para añadir más) y cada título solo una vez. Arrastrar una tarjeta solo decide entre izquierda y derecha; usa **↓** para guardarla y **▶** para crearla ahora. Una repetición se detecta solo por su título: el modelo aún puede sugerir una idea anterior con otro nombre; omítela. Cuando el modelo responde solo con ideas anteriores, no aparece nada nuevo: vuelve a hacer clic.
|
|
135
|
+
- **Reanudar tras reiniciar** continúa el turno; no lo repite. Una llamada a herramienta que estaba en ejecución al cerrar termina con el resultado “outcome unknown” de dsh, y se le indica al modelo que no repita el trabajo terminado, pero un comando que no es seguro ejecutar dos veces puede volver a ejecutarse. Los subagentes, las aprobaciones y las preguntas que estaban abiertos no se restauran: su chat padre continúa y vuelve a preguntar. Como máximo continúan 20 chats en cada inicio.
|
|
136
|
+
|
|
137
|
+
- **Búsqueda en el contenido** es la búsqueda propia de dsh, así que tiene los límites de dsh. Solo busca en los mensajes del usuario y del asistente: no busca en la salida de las herramientas (comandos, contenido de archivos, resultados) ni en el razonamiento, y no tiene ningún filtro por mensajes del usuario, del asistente o de herramientas. Coincide con palabras completas, no con partes de una palabra (`deploy` no encuentra `deployment`); las letras con acento coinciden sin él (`seker` encuentra `şeker`). Muestra una fila por chat, con el fragmento de 240 caracteres de dsh, y como máximo 20 filas.
|
|
138
|
+
- **Búsqueda en el contenido**: coste medido en una copia de 247 registros de chat reales (159 MB, dsh 0.2.1-rc.2, Apple Silicon, 32 GB). La primera búsqueda tras un inicio crea el índice en unos 15 s. Durante ese tiempo, el Host de dsh no responde a nada durante unos 7 s, así que los demás chats dejan de transmitir en ese momento (la página en sí no se congela). La memoria del Host crece en torno a 1,1 GB en el pico; un minuto después sigue unos 0,5–0,6 GB por encima del inicio, hasta que dsh se cierra. El archivo de índice ocupa unos 165 MB. Las búsquedas posteriores tardan unos 0,5 s. Tras un reinicio, la primera búsqueda tarda aproximadamente 1 s (solo se añaden los chats nuevos o cambiados) y añade unos 70 MB. Desactívala si tu equipo tiene poca memoria.
|
|
139
|
+
- **Búsqueda en el contenido** solo se aplica después de reiniciar dsh, y todos los dsh que usan el mismo directorio home de dsh comparten el archivo de índice: ejecuta solo uno de esos dsh a la vez (dsh permite un único propietario por archivo de índice).
|
|
140
|
+
- **Revertir turno** solo restaura archivos en un repositorio git, y solo en la carpeta del chat. Conserva las 50 instantáneas más recientes de cada chat. Los archivos ignorados (`.gitignore`, `info/exclude`, tu archivo global de ignorados), las carpetas vacías, los enlaces simbólicos y los submódulos no se restauran; un archivo que estaba ignorado cuando se tomó la instantánea nunca se elimina, aunque el turno haya cambiado las reglas de ignorado. Un archivo que git no puede leer queda fuera de la instantánea. Cada uno de tus mensajes ejecuta un `git add --all` de la carpeta del chat en el almacén privado: en una carpeta muy grande con muchos archivos sin seguimiento, esto puede tardar unos segundos, y la siguiente llamada a herramienta lo espera (como máximo 10 s; después, la instantánea termina en segundo plano). Si el `git gc` de tu repositorio elimina un objeto que necesita una instantánea antigua, ese archivo aparece como no restaurado. Solo vuelve al editor el texto del mensaje: añade otra vez sus imágenes o archivos. Los chats de subagentes no tienen ↶ (los cambios de archivos de un subagente cuentan como cambios del chat que lo inició). El chat exportado (`/export`) sigue teniendo los mensajes retirados. La idea de un marcador oculto que retira parte de un chat viene de [dsh-rewind-plugin](https://github.com/SiriLee/dsh-rewind) de SiriLee (MIT); Composer Plus no usa nada de su código.
|
|
141
|
+
- **Eliminar chat** necesita el archivado de dsh (dsh 0.2.0 y posteriores). Un chat (o uno de los chats de sus subagentes) que no se detiene en 15 s, o que tiene abierto otro dsh, sigue archivado y no se mueve nada. En sistemas distintos de macOS, la carpeta de la papelera tiene que estar en el mismo disco que el historial de chats. Un chat abierto que eliminas se queda en la memoria de dsh, archivado y oculto, hasta que dsh se reinicia. Vacía tú la Papelera; dsh no lo hace.
|
|
142
|
+
- La cola de dsh no tiene una acción `move`, así que al reordenar se reescribe el texto de las filas afectadas. Si el agente toma una fila en medio del movimiento, el movimiento se deshace y no se pierde nada. Los mensajes con imágenes o archivos no se pueden mover.
|
|
143
|
+
- dsh 0.2.1 carga una actualización de inmediato cuando la nueva versión no cambia ningún ajuste de dsh; en caso contrario, y en dsh 0.2.0, reinicia dsh para cargarla. El plugin nunca reinicia dsh por ti. Los perfiles web/CLI sin el gestor de plugins de dsh solo avisan de que hay una versión nueva.
|
|
144
|
+
- **Mantener el foco en el editor** solo devuelve el foco después de un comando `/` o una skill. Mientras dsh resuelve el comando, el editor queda en solo lectura unos milisegundos, así que las teclas que pulses en ese tiempo se pierden. Si el menú `/` de dsh sigue abierto, `Enter` elige la fila resaltada y no envía.
|
|
145
|
+
- **Conexión móvil** solo funciona en macOS (usa `en0`, `openssl`, `swift` y `dns-sd`). Usa los puertos fijos 19390 y 19391, así que solo un dsh por Mac puede ejecutarla a la vez (cada Mac es una entrada en la lista de Mac del teléfono). El teléfono solo recibe notificaciones mientras Tether está abierta o acaba de pasar a segundo plano (no hay servicio push). La app de iOS aún no está en la App Store: compílala desde `tether/ios` con Xcode.
|
|
146
|
+
- Un enlace de sesión funciona dentro de los chats; hacer clic en él no abre el chat.
|
|
147
|
+
- Al hacer clic en una notificación enviada antes de un reinicio, solo se trae dsh al frente.
|
|
148
|
+
- Los proyectos activos se mueven con el orden de proyectos guardado de dsh, así que el nuevo orden se mantiene tras un reinicio. Los chats que no pertenecen a ningún proyecto («Sin agrupar») no se pueden mover; dsh siempre los muestra al final.
|
|
149
|
+
- dsh no tiene un punto de extensión en el menú de opciones de vista de la barra lateral, así que la opción de proyectos recientes se añade al menú propio de dsh. Si una actualización de dsh cambia ese menú, la opción no aparece y todos los proyectos siguen visibles. El filtro funciona sobre las filas de proyecto, así que **En una sola lista** no se filtra. Úsalo con **Espacio de trabajo**: en **Árbol de espacios de trabajo**, una carpeta padre oculta también oculta los proyectos activos que contiene. **Por estado** tiene el mismo tipo de límite: dsh no tiene un espacio para el orden, así que la opción y el orden de las filas se enganchan al marcado del menú y de la lista de dsh.
|
|
150
|
+
- dsh tampoco tiene un menú de fila de proyecto ni un espacio en la cabecera de Espacios de trabajo. **Copiar ruta** encuentra la fila del proyecto por el marcado de filas de dsh, y **Contraer todos los proyectos** se coloca en la cabecera de dsh y cierra cada proyecto abierto con el mismo clic que la fila del proyecto. Si una actualización de dsh cambia ese marcado, el clic derecho muestra el menú del navegador y el botón no aparece.
|
|
151
|
+
- Se ha pedido soporte integrado en el proyecto original: `move` para la cola en [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773) y un estado de Continuar en [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269).
|
|
152
|
+
|
|
153
|
+
## Preguntas frecuentes
|
|
154
|
+
|
|
155
|
+
**¿Cómo añado un panel de cambios / diff de git a DeepSeek Harness?** Instala `dsh-composer-plus` y luego ve a barra lateral derecha → `+` → **Cambios**.
|
|
156
|
+
|
|
157
|
+
**¿Puede dsh sugerir funciones para mi proyecto, deslizando tarjetas como en Tinder?** Sí: barra lateral derecha → `+` → **Ideas de funciones** → **Sugerir funciones**. Desliza a la derecha para iniciar un nuevo chat que planifique la función, haz clic en **▶ Crear ahora** para iniciar un chat que la cree enseguida sin plan, o desliza a la izquierda para omitirla.
|
|
158
|
+
|
|
159
|
+
**¿Puede la búsqueda de la barra lateral de dsh encontrar un chat por una palabra de sus mensajes, no solo por su título?** Sí, con **Búsqueda en el contenido** (activada de forma predeterminada): reinicia dsh una vez después de instalar el plugin y usa la lupa junto a **Espacios de trabajo**. Los chats que coinciden muestran el texto alrededor de la palabra.
|
|
160
|
+
|
|
161
|
+
**¿Puedo deshacer un turno y editar mi prompt, como en OpenCode o Claude Code?** Sí, con **Revertir turno**: haz clic en **↶** en el mensaje, elige **Chat y archivos**, edita el texto que vuelve al editor y envíalo.
|
|
162
|
+
|
|
163
|
+
**¿Puedo eliminar un chat en lugar de archivarlo?** Sí, con **Eliminar chat**: **…** → **Eliminar…**. El historial va a la Papelera, así que un error se puede deshacer.
|
|
164
|
+
|
|
165
|
+
**¿Cómo veo a qué proyecto pertenece un chat?** Mira la fila que hay debajo del editor: con **Nombre del proyecto en el compositor** (activada de forma predeterminada) empieza con el nombre del proyecto. Pasa el puntero por encima para ver la ruta de la carpeta.
|
|
166
|
+
|
|
167
|
+
**¿Cómo tengo historial de mensajes con ↑/↓ en el editor de dsh?** Instala este plugin; con el editor vacío, `↑` / `↓` recorren los mensajes que enviaste.
|
|
168
|
+
|
|
169
|
+
**¿Cómo continúo un turno de dsh detenido o fallido sin escribir «continúa»?** Con este plugin, el botón de enviar se convierte en **▶** después de un turno detenido, fallido o cortado; un clic lo reanuda.
|
|
170
|
+
|
|
171
|
+
**¿dsh sigue con los chats en ejecución después de cerrarlo y volver a abrirlo?** No por sí solo: dsh marca ese turno como interrumpido y espera (un objetivo también espera a `/goal resume`). Activa **Configuración → Composer Plus → Reanudar tras reiniciar**: los chats que estaban trabajando cuando dsh se cerró continúan solos en el siguiente inicio.
|
|
172
|
+
|
|
173
|
+
**¿Cómo reordeno los mensajes en cola en dsh?** Arrastra el asa ⠿ de un mensaje en cola, o pon el foco en ella y pulsa `↑` / `↓`.
|
|
174
|
+
|
|
175
|
+
**¿Cómo evito que la revisión automática pregunte por la misma herramienta en un chat?** Haz clic en **Permitir en este chat** en la tarjeta de aprobación. Solo cubre esa herramienta exacta en ese chat; revoca el permiso desde el chip de la cabecera.
|
|
176
|
+
|
|
177
|
+
**¿Cómo muestro en la barra lateral de dsh solo los proyectos que usé hoy?** Barra lateral → opciones de vista (icono de controles deslizantes) → **Activos en las últimas 2 horas**. Selecciónalo otra vez para mostrar todos los proyectos.
|
|
178
|
+
|
|
179
|
+
**¿Cómo copio la ruta de la carpeta de un proyecto en dsh?** Haz clic derecho en el proyecto en la barra lateral → **Copiar ruta**.
|
|
180
|
+
|
|
181
|
+
**¿Cómo contraigo a la vez todos los proyectos de la barra lateral de dsh?** Haz clic en el botón de contraer, junto a las opciones de vista (icono de controles deslizantes). Aparece mientras hay al menos un proyecto abierto.
|
|
182
|
+
|
|
183
|
+
**¿Cómo recibo notificaciones de macOS / Windows cuando una tarea de dsh termina o necesita aprobación?** Deja activada **Notificaciones en segundo plano** (lo está de forma predeterminada) y permite las notificaciones de DeepSeek Harness en los ajustes del sistema operativo.
|
|
184
|
+
|
|
185
|
+
**¿Cómo cambio la interfaz de DeepSeek Harness a turco, español, japonés…?** Configuración → Composer Plus → **Idioma de la aplicación**.
|
|
186
|
+
|
|
187
|
+
**¿Cómo uso dsh desde mi iPhone?** Compila la app Tether desde `tether/ios` (Xcode), activa **Configuración → Composer Plus → Conexión móvil (iPhone)**, haz clic en **Conexión móvil** abajo a la izquierda, escanea el código QR en Tether y haz clic en **Approve**. Fuera de casa, usa Tailscale en los dos dispositivos.
|
|
188
|
+
|
|
189
|
+
**¿Funciona con la app de escritorio?** Sí: Configuración → Plugins → **Añadir plugin** → `dsh-composer-plus`. Probado en dsh 0.2.0-rc.2 (escritorio y web) y 0.2.1-rc.2 (web).
|
|
190
|
+
|
|
191
|
+
## Desarrollo
|
|
192
|
+
|
|
193
|
+
Las capturas se regeneran desde un dsh desechable con un modelo falso y proyectos de demostración inventados (`acme-web`, `weather-cli`, `docs-site`), así que no contienen datos reales. Las miniaturas de las funciones van a `assets/features/` (se incluyen en el paquete y se muestran en Configuración); las imágenes que solo usa el README van a `docs/images/` (no están en el paquete de npm):
|
|
194
|
+
|
|
195
|
+
```sh
|
|
196
|
+
PLAYWRIGHT=/path/to/playwright node scripts/capture-screenshots.mjs /path/to/dsh/lib/bin.js
|
|
197
|
+
# sidebar project features (recent filter, Copy path, Collapse all): real-app test + their thumbnails
|
|
198
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /path/to/dsh/lib/bin.js
|
|
199
|
+
# recent filter + a finished chat older than 2 hours (fake model): the project stays until you open the chat
|
|
200
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
|
|
201
|
+
# Order by status (fake model + Schedule): real-app test + its thumbnail
|
|
202
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
|
|
203
|
+
# every Settings feature row shows a loading screenshot
|
|
204
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
|
|
205
|
+
# Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
|
|
206
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
|
|
207
|
+
# Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
|
|
208
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
|
|
209
|
+
# Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
|
|
210
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-resume-restart.mjs /path/to/dsh/lib/bin.js
|
|
211
|
+
# Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list + its thumbnail
|
|
212
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-feature-ideas.mjs /path/to/dsh/lib/bin.js
|
|
213
|
+
# Content search (fake model, made-up chats): a message-only word finds its chat with the snippet, switch off + restart = titles only + its thumbnail
|
|
214
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path/to/dsh/lib/bin.js
|
|
215
|
+
# Turn rollback + Delete chat (fake model, made-up git project): bash edit → ↶ Chat and files → files back, .git unchanged; Delete… → Trash + its thumbnails
|
|
216
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-turn-rollback.mjs /path/to/dsh/lib/bin.js
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
```sh
|
|
220
|
+
npm run build:locales # after editing locales/<id>.json
|
|
221
|
+
npm test
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Regla para las funciones nuevas:** cada fila de función en Configuración → Composer Plus muestra una captura. Añade el id de la función a `SHOT_OF` en `client.js` y a `SHOTS` en `index.js`, e incluye `assets/features/<id>.webp` (tomada del dsh de demostración desechable, con la interfaz en inglés, de unos 60 kB o menos). Añade la función a la tabla del README con la misma imagen, en `README.md` y en cada `README.<id>.md` traducido. `test/shots.test.mjs` falla cuando una función no tiene captura, y `test/browser-settings-shots.mjs` comprueba la página de Configuración real. La lista completa de comprobaciones para cada cambio está en [AGENTS.md](AGENTS.md).
|
|
225
|
+
|
|
226
|
+
Las pruebas ejecutan el `client.js` real contra un React/DOM falso, y el `index.js` real (la parte Host) contra un repositorio git temporal. Las pruebas de la pasarela de Tether (`test/tether-gateway.test.mjs`) usan un host de dsh simulado y una pasarela TLS real. La app de iPhone está en `tether/ios` (consulta [tether/README.md](tether/README.md) y [tether/AGENTS.md](tether/AGENTS.md)). `node test/browser-history.mjs '<dsh web URL with ?token=…>'` comprueba el historial de entrada en un navegador real contra un `dsh web` desechable con su propio `DSH_HOME`.
|
|
227
|
+
|
|
228
|
+
Los paquetes de idioma son archivos JSON solo de datos en `locales/<id>.json`, que `npm run build:locales` incrusta en la única entrada del cliente (sin servicio de traducción ni descarga en tiempo de ejecución). `npm test` comprueba en cada paquete que estén todas las claves, que los marcadores de posición y los saltos de línea sean idénticos, y el comportamiento del idioma del sistema y de la elección manual. Para comprobaciones aisladas en la app real con un Playwright instalado localmente:
|
|
229
|
+
|
|
230
|
+
```sh
|
|
231
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-language.mjs /path/to/dsh/lib/bin.js
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## License
|
|
235
|
+
|
|
236
|
+
MIT
|