Fija sesiones y espacios de trabajo en la parte superior de la barra lateral de DeepSeek Harness con colores por pin.
Un plugin de doble cara (host + navegador): dos niveles de pin, un botón de 8 colores por pin y un organizador de navegación — boards, etiquetas, vistas guardadas, resúmenes de salud y /goto.
| Superficie | Estado |
|---|---|
| Harness | DeepSeek Harness 0.1.1-rc.2 (paquetes de cliente 0.1.1-rc.2) |
| Node | >= 22 (base mínima de desarrollo) |
| Plataformas | Web GUI (doble cara: host + navegador) |
| Modelo | Cualquiera (solo UI — sin tráfico de modelo, sin eventos de sesión) |
dsh-session-pin mantiene arriba en la barra lateral las conversaciones que importan y las colorea para encontrarlas de un vistazo:
- Dos niveles de pin — fija espacios de trabajo enteros y sesiones individuales; un espacio fijado pasa al frente de la lista de espacios y una sesión fijada al frente de su cuenta.
- Colores de fila por pin — el botón de color tras cada pin recorre una paleta de 8 colores (Shift+clic lo limpia); la fila recibe una barra de acento a la izquierda y un tinte translúcido.
- Cuatro superficies de pin — un par
[pin][color]al pasar el cursor en cada fila, un interruptor en la cabecera de la sesión, una acción al pie de la barra lateral con un panel de fijados, y un fijado duradero por navegador que conserva pines y colores entre reinicios. - Cero cambios en el núcleo — un plugin independiente para la Web GUI oficial de DSH; cada superficie se degrada con elegancia en líneas base más antiguas.
┌─ Workspaces ────────────────────────────┐
│ 🎨 Workbench ███ │ ← espacio fijado, teñido de rojo
│ 📌 Implement login flow 3h │ ← sesión fijada, teñida de turquesa
│ Fix the auth bug 1h │ ← al pasar el cursor: pin gris + botón de color
│ Refactor the DB layer 2d │
└─────────────────────────────────────────┘
Cuatro capacidades locales del navegador organizan el trabajo multi-sesión por encima del fijado. Todo el estado vive en el mismo almacén session-pin (por navegador; nada se sube) y cada una tiene un interruptor de Config.
- Boards — los pines se agrupan con nombre; la fila de chips crea, renombra y elimina boards y los reordena arrastrando (el orden persiste por navegador), mientras el panel agrupa los pines de cada board bajo una cabecera plegable.
- Etiquetas y vistas — las entidades llevan hasta 8 etiquetas (≤24 caracteres cada una), fijadas por fila desde el botón de gestionar del panel (que también asigna el board del pin); la barra filtra por texto y etiquetas, y cualquier filtro se guarda como vista con nombre (hasta 20) para cambiar con un clic.
- Resumen de salud — cada fila de sesión fijada añade una línea de solo lectura y saneada (
N msgs · you|ai · tiempo relativo) derivada de la instantánea pública de la sesión — solo conteos y direcciones, nunca contenido. /goto <palabra>— una línea del compositor que empiece por/gotomás Enter salta: una coincidencia única abre, varias se listan, ninguna lo explica. La línea de comando nunca llega al modelo.
- Mitad host (
src/index.ts) — registra el namespace de ajustes durablesession-pin(las dos listas de ids fijados, los dos mapas de color y el estado del organizador, más la política del hostmaxPins/reorderOnLoad/pruneStale); sin eventos de sesión, sin tráfico de modelo. - Mitad navegador (
src/client.ts) — ensambla unPinStoresin framework (transporte de ajustes, degradando a un documento versionado delocalStoragecon sincronización entre pestañas), unPinController(máquina de estados de alternar / ciclo de color / purgar / reordenar) y la UI: la superposición de filas, el registro opcional del slot de fila, el interruptor de cabecera, la acción del pie y el panel de fijados. El orden pasa porctx.workspaces. - Canal de escritura respaldado por log — en builds que montan el servicio integrado
dsh-session-pin, cada cambio de sesión se confirma primero por el RPCsession.setPinned(el log de eventossession/pines la residencia canónica) y se refleja en el almacén de ajustes; un RPC fallido o lento degrada a una escritura directa. - Compilación — esbuild emite la mitad ESM del host y la mitad CJS del cliente envuelta en la factoría de arranque web (
window.__ModuleLoader__.load({ id, factory }));reactse externaliza al React del shell, y una compuerta de pureza falla el build si una importación de valor@deepseek-ai/*se filtra al bundle del navegador.
Puntos de extensión usados: settings (host); sessions, workspaces, settingsScope, connection, remote, slots (cliente); locale (cliente, opcional); conversation.session.header.actions, sidebar.footer.action, shell.overlay, y el slot de fila sessions.row.action cuando está declarado. Efectos visibles al modelo: ninguno — plugin solo de UI: no añade eventos de sesión ni tokens.
# 1. instala el bundle en tu perfil
dsh plugin --profile web add "github:PerryLink/dsh-session-pin#main"
# o desde npm (versiones publicadas)
dsh plugin --profile web add dsh-session-pin
# 2. reinicia y verifica la fila
dsh --profile web --dump-config | grep -A3 'id: session-pin'Entry id del loader. En builds del harness cuyo bundle
dsh-basemonta el servicio host integrado@deepseek-ai/dsh-session-pin(entry idsession-pin), asigna a este plugin un entry id distinto, p. ej.id: session-pin-uien la fila del patch del perfil — un idsession-pinduplicado hace fallar el arranque con "duplicate loader entry id".
- Canal git (último
main):dsh plugin --profile web add "github:PerryLink/dsh-session-pin#main"—pnpm run buildemite la mitad host (lib/index.js) y la mitad navegador (lib/client.js). - Canal npm (versiones publicadas):
dsh plugin --profile web add dsh-session-pin. - Canal tarball:
pnpm packen este repo, luegodsh plugin --profile web add ./dsh-session-pin-<version>.tgz. - Desinstalar:
dsh plugin --profile web remove dsh-session-pin(o elimina la fila del patch del perfil; la secciónsession-pindesettings.yamltambién puede borrarse).
Todas las opciones son campos Schemastery Config (modificables desde cordis.yml). cordis.patch.yml monta el bundle con los valores por defecto siguientes.
| Clave | Por defecto | Significado |
|---|---|---|
maxPins |
0 |
Máximo de entidades fijadas por nivel (sesiones y espacios de trabajo tienen presupuesto propio); 0 = ilimitado |
reorderOnLoad |
true |
Reafirma los prefijos de fijados (el pin más reciente primero) una vez que las listas están listas |
pruneStale |
true |
Elimina pines y colores de entidades ausentes de una lista preparada (borradas/archivadas) |
enableBoards |
true |
Habilita los grupos de pines (boards) en el panel lateral |
enableTags |
true |
Habilita las etiquetas de sesión/espacio de trabajo y la barra de filtros del panel |
enableViews |
true |
Habilita las vistas de filtro guardadas |
enableHealth |
true |
Habilita el resumen de salud por sesión fijada (solo lectura, saneado) |
enableGoto |
true |
Habilita el comando /goto <palabra> del compositor |
| Superficie | Tipo | Notas |
|---|---|---|
Controles de fila [pin][color] |
Slot de UI / superposición DOM | Controles al pasar el cursor en cada fila de sesión y espacio de trabajo |
| Interruptor de cabecera de sesión | Slot de UI | El mismo control en la fila de acciones de la cabecera, indexado por id de sesión |
| Pie de barra lateral + panel de fijados | Slot de UI / superposición | Lista espacios y sesiones fijados, agrupados por board (plegable) con gestión de board/etiquetas por fila y puntos de color |
/goto <palabra> |
command | Salto rápido del compositor por título/etiqueta; la línea nunca llega al modelo |
Namespace de ajustes session-pin |
servicio host | Almacén duradero por navegador de pines, colores y estado del organizador |
- Permisos: el manifiesto
dshWorkshopdeclarabrowser:local-storage,settings:readysettings:write. - Datos: pines, colores y estado del organizador viven por navegador en el namespace de ajustes
session-pin, degradando a un documento versionado delocalStorage(los documentos v1 migran) donde el proxy web no sirve el namespace. No se sube nada. - Registro de sesión: ninguno — este plugin no añade eventos de sesión ni tokens a ninguna petición del modelo.
- Solo UI. Sin efectos visibles al modelo, sin red, sin subprocesos; cada superficie se degrada con elegancia en líneas base más antiguas.
- Estado duradero y acotado. Pines y colores se podan con las entidades borradas (
pruneStale);maxPinslimita el número de fijados por nivel. - Salud de solo lectura. El resumen de salud deriva conteos y direcciones de la instantánea pública de la sesión y no escribe nada de vuelta.
- Alcance de la persistencia — donde el proxy web no sirve el namespace
session-pin, pines y colores recurren allocalStoragedel navegador; el registro del host se convierte en el almacén duradero automáticamente una vez que upstream expone el namespace. - Alcance del orden — la posición fijada es estable solo bajo el orden Manual; bajo el orden Updated la promoción por actividad del núcleo vuelve a adelantar sesiones activas, y
reorderOnLoadreafirma los prefijos al cargar. - Navegadores remotos — los RPC de ajustes son solo loopback en la línea base; los navegadores remotos recurren al
localStoragelocal. - Respaldo de la insignia de fila — donde el slot de fila de upstream no está disponible, las filas de sesión se emparejan por el texto del título; con títulos duplicados la insignia aparece en cada fila coincidente y alterna la primera coincidencia (cosmético).
- Dependencia del DOM de las filas — la superposición depende de la estructura
role="treeitem"de las filas del núcleo y debe seguir los cambios de UI de upstream.
- Entrada «Fijar» en el menú contextual / menú de fila (necesita un slot de menú a nivel de fila en el núcleo; el slot de insignia de fila ya está en upstream).
- Residencia canónica: un evento
session/pinrespaldado por log + una proyecciónpin+ un RPC de escritura (upstream) — el namespace de ajustes se retira entonces y el plugin consumeuseProjection('pin'). - Un selector de color completo en popover (colores personalizados) una vez que exista la residencia canónica; el botón de ciclo actual cubre la paleta predefinida.
pnpm install # instalar dependencias
pnpm run typecheck # tsc --noEmit
pnpm test # pruebas unitarias de vitest
pnpm run build # build de doble mitad + compuerta de pureza del cliente
node scripts/verify-live.mjs # comprobación en vivo contra un `dsh web` (env DSH_CHECKOUT)deepseek-harness, dsh, dsh-plugin, session-pin, pin, workspace
- @PerryLink — creador y mantenedor: experiencia de pin, persistencia duradera, ordenamiento de espacios de trabajo, colores por pin, el organizador de navegación y la documentación en cinco idiomas.
Este proyecto es uno de los plugins de DeepSeek Harness mantenidos por PerryLink. Si este te ayuda, los demás probablemente también:
| Plugin | En una línea |
|---|---|
| dsh-mask | Middleware de enmascaramiento de PII: anonimiza en el límite del modelo, restaura en la capa de visualización |
| dsh-mcp-panel | Panel MCP de solo lectura: comando /mcp + pestaña de ajustes con estado, herramientas y errores |
| dsh-doublecheck | Guardia de disciplina de ingeniería: interrogatorio de requisitos, puertas de pruebas, revisión adversaria |
| dsh-background-agents | Agentes hijos en segundo plano con barra lateral web, mensajería e interrupción |
| dsh-lsp-actions | Diagnóstico, formato, autocompletado, acciones de código y renombrado LSP |
| dsh-output-styles | Cambio de estilo en tiempo de ejecución equivalente a outputStyles de Claude Code |
| dsh-checkpoint-rewind | Equivalente a /rewind de Claude Code: snapshots, forks de sesión, restauración de un clic |
| dsh-permission-rules | Reglas de permisos declarativas allow/deny/ask estilo Claude Code, con auditoría |
| dsh-auto-review | Autorrevisión de segundo modelo en la cadena de aprobación, fail-closed por defecto |
| dsh-memento | Memoria entre sesiones con aprobación: seam ctx.memory + SQLite + herramienta memory |
| dsh-skill-pack-security | Paquete de skills de auditoría de seguridad: escaneo de secretos, revisión de dependencias y cadena de suministro |
| dsh-session-pin | Fija sesiones en la barra lateral web con orden duradero |
| dsh-composer-history | Historial de entrada estilo terminal para el compositor web: flechas, búsqueda Ctrl+R |
| dsh-github | Integración de PR/issues de GitHub para DSH, toda escritura con aprobación |
| dsh-plugin-guide | Base de conocimiento de desarrollo de plugins como skill de agente bajo demanda |
| dsh-claude-move | Migra sesiones, memoria, skills y CLAUDE.md de Claude Code a DSH |
Apache License 2.0 © 2026 colaboradores de dsh-session-pin