GitHub: versión v0.1.1 npm: versión v0.1.1 DSH plugin: listed en dsh-plugin.org

Session Remover para DSH Desktop añade una fila Delete session al menú ⋯ de cada sesión de DeepSeek Harness Desktop y borra la conversación del disco, no solo de la vista. Una confirmación que nombra la sesión, un clic, y desaparecen su log JSONL, su registro de caché de proyecciones y sus referencias en el workspace.

La diferencia está en lo que se lleva por delante. Archivar oculta; esto elimina. No hay papelera, ni página de ajustes, ni gestor de archivados: la única decisión es qué sesión borrar, y ya viene como argumento de la acción. Si la ruta no se puede validar, no se toca nada y el diálogo lo dice.

Qué es y para qué sirve

Es un plugin de DSH, no una aplicación independiente. Se instala en el perfil desktop y se apoya en tres piezas del propio DSH:

  • Una fila en el menú de sesión (sidebar.workspaces.session.menu.item), en rojo y después de las filas nativas.
  • Un diálogo de confirmación (shell.overlay) con el estilo del shell, que nombra la sesión exacta, pone el foco en Cancel y se cierra con Escape.
  • Una ruta en el Host (POST /plugins/session-remover/delete) que cierra el agente vivo y elimina el almacenamiento de esa sesión.

Sirve cuando quieres que una conversación deje de existir en tu equipo: una prueba con datos de cliente, un hilo que ya no aporta, una sesión que se quedó con un título incómodo. No toca las demás sesiones ni los ficheros de tu workspace.

Qué problema resuelve

  • Archivar no borra. La sesión sale del sidebar, pero su log sigue en disco y su texto sigue en la caché de proyecciones.
  • Quedan referencias. El registro de workspaces conserva la sesión, su pin y su marca de archivado aunque el log desaparezca.
  • Una sesión abierta bloquea el borrado. El agente mantiene el escritor del log; borrar por fuera deja ficheros bloqueados o un estado a medias. El plugin cierra el agente primero, con el mismo desmontaje ordenado que usa DSH.
  • Borrar a mano es una ruina. Hay que localizar la carpeta, el registro de caché y las referencias, y acertar las tres. Aquí es una fila del menú.

Lo que no hay, no se finge: no es una papelera, no hay deshacer y no se borran los adjuntos compartidos. El README lo dice antes de que lo eches de menos.

Instalación

El plugin se distribuye como paquete npm y también desde el repositorio. Necesita DSH Desktop >= 0.2.1-rc.3, el perfil desktop y el almacén de sesiones JSONL por sesión, el de serie; con otro backend el plugin se niega a cargar.

dsh plugin --profile desktop add @jamolpe88/dsh-session-remover

Desde el repositorio:

dsh plugin --profile desktop add github:JaMoLpE88/dsh-session-remover

Cierra DSH del todo y vuelve a abrirlo; después refresca la ventana. El reinicio no es opcional: la mitad Host intercepta el ciclo de vida de los agentes, así que solo puede cerrar sesiones abiertas después de cargarse. Las anteriores se rechazan, no se borran a medias.

Cómo se usa

  1. Abre el menú. Pasa el ratón por una sesión del sidebar y pulsa ⋯.
  2. Elige «Delete session». Es la última fila, en rojo.
  3. Comprueba el nombre en el diálogo y confirma con Delete permanently.
  4. Cancela sin miedo. Cancel tiene el foco inicial, Escape cierra el diálogo y hasta confirmar no se envía nada al Host.
Menú de una sesión en el sidebar de DeepSeek Harness Desktop con las filas Pin session, Rename, Fork session, Archive session, Copy Session ID y, al final en rojo, Delete session
En el menú. La fila Delete session se registra como un elemento más del menú nativo, en rojo y después de las filas del shell. El icono, la tipografía y el estado de hover son los del menú; el plugin solo aporta la fila y el destino. Los nombres de workspace y de sesión aparecen difuminados por privacidad.

El diálogo no adivina qué va a borrar: lo escribe.

Diálogo Delete this session permanently con el aviso de que la conversación y sus ficheros locales se eliminarán, el nombre de la sesión y los botones Cancel y Delete permanently
La confirmación. La sesión que se va a borrar aparece nombrada en el diálogo (aquí difuminada), Cancel recibe el foco inicial y Escape cierra sin tocar nada. Hasta que pulses Delete permanently no sale ninguna petición del navegador. El fondo es el chat real, difuminado por privacidad.

La interfaz del plugin está solo en inglés, igual que el resto del shell: las filas nativas y el diálogo nativo tampoco están traducidos, y añadir una capa de traducción solo para dos cadenas habría sido una pieza más que mantener.

Si la sesión está archivada

Una sesión archivada no tiene fila en el sidebar, así que no hay menú donde pulsar. Desarchívala primero desde la página de archivados nativa de DSH y bórrala después: el borrado limpia por el camino la marca de archivado y el pin, para que no quede nada obsoleto en el registro.

Qué se borra exactamente

Ruta Qué es
<almacén>/<proyecto>/<id-de-sesión>/ La carpeta propia de la sesión, con su log versionado .jsonl.zstd y lo que haya junto a él
storages/session_projcache/sessions/<id-de-sesión>.json Proyecciones en caché: el título y los valores derivados de los mensajes
storages/workspace.json Solo las referencias: la sesión se desasocia, se despina y se desarchiva
Índice SQLite de búsqueda Se reconcilia con una búsqueda barata, para que el texto borrado no siga apareciendo

Nada va a la Papelera de reciclaje: los ficheros se eliminan, así que el espacio se libera en el momento.

Qué no se borra

  • Los adjuntos. Imágenes y ficheros viven una sola vez por hash de contenido en attachments/v1/objects/. Una sesión bifurcada hereda referencias a los mismos hashes, así que borrar los objetos rompería las imágenes del fork. DSH no lleva contador de referencias y el plugin prefiere no adivinar.
  • Las demás sesiones. Ni sus logs, ni sus cachés, ni sus pines.
  • Tu workspace. Los ficheros del proyecto no se tocan.
  • Los logs de DSH, tus copias y cualquier copia que ya haya salido de la máquina.
  • Nada del agente. No añade herramientas, comandos ni una ruta de lectura: el borrado es solo del usuario y se confirma en la interfaz.

Si el objetivo es recuperar espacio, los adjuntos son lo que más pesa, y esa limpieza exige recorrer los logs restantes; queda deliberadamente fuera de alcance por ahora.

Cómo funciona

La mitad Host registra una sola ruta:

POST /plugins/session-remover/delete
x-session-remover-confirmation: delete-session
content-type: application/json

{ "sessionId": "session-<uuid>" }
  1. La petición debe pasar el filtro propio del Host y llevar la cabecera de confirmación. Un enlace, un formulario HTML o una petición de otro sitio no pueden generarla; sin ella responde 403.
  2. El id se valida (^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$) antes de poder nombrar una ruta.
  3. Un agente vivo se cierra a través del AgentHandle que devolvieron ctx.agents.create/resume. DSH no expone un dispose en el registro, así que el plugin guarda esos handles según se crean y se niega a borrar cuando no tiene uno.
  4. La carpeta se resuelve con sessionPersistence.stat + locate y se contrasta recorriendo la raíz del almacén; debe ser exactamente <raíz>/<un segmento de proyecto>/<id>, una carpeta real y contener un log de sesión.
  5. Se limpian las referencias del workspace, se elimina la carpeta y se borra el registro de caché por la API de su tabla (o por su fichero, cuando no hay API).
  6. Una búsqueda barata reconcilia el índice SQLite, que si no solo descarta sesiones borradas en su siguiente búsqueda.

La mitad Client es un client.js plano sin paso de build: registra la fila del menú y el diálogo, solo requiere react y estiliza con tokens --dsw-alias-*. No carga paquetes de cliente del Harness, así que una actualización de DSH que renombre una primitiva no puede vaciar la entrada.

Todo lo que ocurre después de comprobar la carpeta es best-effort y se reporta, nunca se da por hecho. Si algo falla, la respuesta trae un código y un mensaje:

{
  "ok": false,
  "error": {
    "code": "session-busy",
    "message": "This session was opened before Session Remover was loaded, so it cannot be closed from here. Restart DeepSeek Harness and try again; nothing was deleted."
  }
}

Si algo falla

Los errores se muestran dentro del propio diálogo y el código queda en la respuesta. La regla es la misma en todos: no se confirma un borrado si la ruta validada no termina, y el mensaje lo dice.

Mensaje o código Qué significa
This session was opened before Session Remover was loaded… El agente existía antes de cargar el plugin. Reinicia DSH y reinténtalo; no se borró nada.
DeepSeek Harness did not finish closing this session; nothing was deleted. El desmontaje no terminó en el plazo de 5 segundos. Reinténtalo.
The session directory does not contain a session log; nothing was deleted. Esa carpeta no parece el almacén de la sesión.
This session matches more than one storage directory; nothing was deleted. El mismo id existe en dos proyectos; resuélvelo a mano.
The session files could not be removed (…) El sistema operativo rechazó el borrado; el mensaje incluye el código.
The delete request did not pass the origin and confirmation checks. La petición no venía de la ventana de la app. Recarga DSH.
deletion-in-progress Ya hay un borrado en curso para esa sesión.
session-reopened La sesión se reabrió durante el borrado; no se tocó el disco.

Límites conocidos

  • Windows 11 es lo único probado. macOS y Linux no se han validado; el README lo indica y no se presenta como soporte.
  • Solo una versión de DSH está probada. El borrado depende del formato en disco del almacén JSONL y del AgentHandle del registro de agentes; una versión futura puede cambiar cualquiera de los dos.
  • Las sesiones abiertas antes de cargar el plugin no se pueden cerrar. De ahí el reinicio tras instalar o actualizar.
  • Un almacén raro se rechaza, no se fuerza. Carpetas con symlink, una carpeta sin log o la misma sesión en dos proyectos acaban en error y en cero borrados.
  • Los adjuntos se conservan. Es una decisión de integridad, no un olvido.
  • Nada de deshacer. No hay papelera ni copia de seguridad automática: si quieres poder volver, haz tu copia antes.
  • Una sesión archivada necesita desarchivarse antes, porque DSH no le da fila en el sidebar.
  • Un borrado a la vez por sesión. Una segunda petición mientras corre la primera se rechaza.
  • La interfaz está solo en inglés, por diseño.
  • No toca el agente. Sin herramientas, comandos ni proveedores.

Ficha técnica

Campo Valor
Versión 0.1.1 · 26 de octubre de 2026
Autor JaMoLpE88
Licencia MIT
Tipo Extensión de DeepSeek Harness Desktop (Host + Client)
DSH >= 0.2.1-rc.3, perfil desktop
Almacén JSONL por sesión (el de serie)
Node >= 22
Plataformas Windows 11 (probado) · macOS y Linux (sin probar)
Instalación dsh plugin --profile desktop add @jamolpe88/dsh-session-remover
Paquete npm @jamolpe88/dsh-session-remover
Repositorio github.com/JaMoLpE88/dsh-session-remover
Ficha pública dsh-plugin.org (listada)
Web jmolo.es

Preguntas frecuentes

¿Esto no es lo mismo que archivar?

No. Archivar quita la sesión del sidebar y deja el log, la caché y las referencias en disco. Session Remover elimina los tres; el espacio se libera en el momento y no hay forma de recuperarlo desde DSH.

¿Puedo deshacer el borrado?

No. No hay papelera, ni copia automática, ni comando de recuperación. Si la sesión te importa, haz una copia antes; lo borrado no vuelve porque ya no está.

¿Borra también las imágenes de la conversación?

No. Los adjuntos viven en un almacén compartido por contenido que otras sesiones pueden estar usando, y DSH no lleva la cuenta de quién referencia cada objeto. El plugin no adivina: los deja intactos.

¿Por qué tengo que reiniciar DSH después de instalarlo?

Porque la mitad Host intercepta el ciclo de vida de los agentes para poder cerrarlos antes de borrar. Solo puede hacerlo con sesiones abiertas después de cargarse. Las anteriores se rechazan con un mensaje claro, en lugar de borrarse a medias.

¿Qué pasa si el borrado falla a medio camino?

La comprobación de la carpeta ocurre antes de tocar el disco y los pasos posteriores se reportan con su código. Un fallo del sistema de ficheros deja el diálogo con el error y el log donde estaba.

¿Funciona en macOS o Linux?

Está publicado como extensión de DSH y se ha probado en Windows 11. En macOS y Linux no hay validación del autor. La ruta de borrado usa node:fs/promises, así que es portable sobre el papel; el almacén y los handles son lo que puede cambiar.

¿Hace alguna petición de red o lee mis credenciales?

No. Sin red, sin telemetría, sin cookies ni tokens. El diálogo solo envía el id de la sesión a la ruta del propio Host, y esa ruta exige una cabecera que solo puede poner la ventana de la app.

¿El agente puede borrar sesiones?

No. No hay herramienta ni comando: el borrado es una acción del usuario en la interfaz, con confirmación. El agente ni siquiera ve la ruta.

Licencia y autoría

Session Remover para DSH Desktop es un proyecto de JaMoLpE88 publicado con licencia MIT. El código, las releases y la documentación viven en github.com/JaMoLpE88/dsh-session-remover; la web del estudio es jmolo.es.

No está afiliado a DeepSeek. El README principal está en inglés; la versión española se mantiene en README.es.md. Los otros plugins de DSH del mismo autor tienen ficha en Chat DeepSeek y Uso de OpenCode Go.

Copyright (c) 2026 JaMoLpE88. El software se ofrece sin garantías. Consulta LICENSE para el texto completo.