dsh-mask
September 6, 2026 · View on GitHub
dsh-mask
- Canal 1024 store:
npm i -g dsh1024una vez, luegodsh1024 plugin --profile web add dsh-mask(cuenta para el ranking de instalaciones de deepseek1024.com).
Middleware de enmascaramiento de PII para DeepSeek Harness: anonimiza los datos personales antes de que lleguen al modelo y los restaura en la capa de visualización.
Teléfonos, correos, documentos, tarjetas, claves y más se convierten en marcadores de posición en el límite del modelo; el texto plano nunca entra en tu registro de sesión.
Compatibility
| Superficie | Estado |
|---|---|
| Harness | DeepSeek Harness dsh-v0.1.3-alpha.1 (adaptado el 2026-09-02): el sobre de sesión conserva su campo ignorable solo para compatibilidad de lectura de logs almacenados - Session.append aún no puede estamparlo, por lo que el comportamiento de la puerta no cambia. Verificado el 2026-09-06 contra el checkout master dsh-v0.1.3-alpha.1 (cadena completa de puertas + smoke de instalación de perfil). |
| Node | ^22.19.0 || >=24.0.0 |
| Plataformas | Donde corra DSH (host puro, regex sin dependencias; sin mitad de navegador) |
| Modelo | Modelos de texto totalmente soportados |
What you get
dsh-mask anonimiza datos personales en el límite del modelo y mantiene una tabla de restauración para volver de los marcadores a los originales:
- Enmascarado antes de la petición — reescribe los mensajes de
agent/pre-steppara que teléfonos, correos, documentos, tarjetas, claves e IP (opt-in) se vuelvan marcadores como<PHONE_1>. El texto enmascarado es lo que se registra y se envía al modelo. - Tabla de restauración — el mapa
marcador → originalvive solo en memoria y en un dominio de almacenamiento controlado (dsh_mask); el texto plano nunca entra en el registro de sesión. - Auditoría sin texto plano — el evento
mask/appliedsolo registra «N valores reemplazados + distribución por tipo». - Comando
/mask—status,on/off,restore <text>,help. - Herramienta
mask_test— prueba un fragmento y ve el resultado con marcadores; nunca revela los valores originales.
mensaje de usuario ──agent/pre-step──▶ marcadores ──modelo──▶ marcadores ──restore──▶ pantalla
▲ │
└──── tabla de restauración (memoria + dsh_mask) ─┘
Quick start
dsh plugin --profile web add "github:PerryLink/dsh-mask#main"
# o desde npm
dsh plugin --profile web add dsh-mask
dsh --profile web --dump-config | grep -A2 'id: mask'
- insert:
- id: mask
name: dsh-mask
config:
entities: [phone, email, id-card, bank-card, key]
> /mask status
> /mask restore <PHONE_1>
Install & uninstall
- Canal git:
dsh plugin --profile web add "github:PerryLink/dsh-mask#main"(equivale agit+https://github.com/PerryLink/dsh-mask.git). Sin paso de build. - Canal npm:
dsh plugin --profile web add dsh-mask. - Canal tarball:
pnpm packy luegodsh plugin --profile web add ./dsh-mask-<version>.tgz. - Desinstalar:
dsh plugin --profile web remove dsh-mask.
dsh-mask ya no incluye la pila de almacenamiento. Los perfiles que ya la componen (el perfil web lo hace, vía @deepseek-ai/dsh-web-app) aportan storageDomain, así que la persistencia funciona de inmediato. En un perfil bare sin almacenamiento el plugin se monta y enmascara igualmente, pero la tabla es solo en memoria (se pierde al reiniciar): compón la pila de almacenamiento en tu parche de perfil, o pon persistRestoreTable: false.
Configuration
Todas las opciones son campos Schemastery Config (modificables desde cordis.yml). cordis.patch.yml documenta cada clave.
| Clave | Predeterminado | Significado |
|---|---|---|
enabled | true | Interruptor maestro |
mode | regex | Solo regex implementado (regex+ner reservado) |
entities | [phone, email, id-card, bank-card, key] | Tipos de PII a enmascarar; ip opt-in, person/address requieren NER |
scope | [messages] | Superficies: messages (mensajes agent/pre-step) y tools (texto de resultados de herramientas). Acepta una cadena o un array, p. ej. [messages, tools] |
registerCommand | true | Registra el comando /mask |
registerTools | true | Registra la herramienta mask_test |
persistRestoreTable | true | Persiste la tabla en el dominio dsh_mask |
maxRestoreEntriesPerSession | 500 | Tope de entradas por sesión |
maxSessions | 1000 | Tope de sesiones en memoria |
Tools & surfaces
| Superficie | Revela texto plano | Notas |
|---|---|---|
Enmascarado agent/pre-step | nunca | Reescribe mensajes a marcadores |
/mask status | nunca | Estado, total reemplazado, distribución |
/mask on / /mask off | nunca | Alternancia en tiempo de ejecución |
/mask restore <text> | sí (explícito) | Desmapea marcadores a los valores de esta sesión |
mask_test | nunca | Enmascara un fragmento y reporta el resultado |
Permissions & data
- Permisos: sin red, sin credenciales (
network:none,credentials:none). - Datos: la tabla
marcador → originalvive en memoria y, conpersistRestoreTable: true, en el dominiodsh_mask; nunca en el registro de sesión. - Registro de sesión:
mask/appliedse declara entypes.d.tsy se añade solo cuando el host registra el tipo.
Security boundaries
- El texto plano nunca entra en el registro de sesión. Lo registrado y enviado es la forma enmascarada; los originales quedan en la tabla de restauración.
- Sanitizar antes de mostrar/registrar.
lib/sanitize.mjsredacta PII, secretos y credenciales de URL. - Restauración controlada.
/mask restorees la única superficie de revelado explícita. - Fallo cerrado.
mode/scope/entidades no implementados y números fuera de rango fallan al cargar. - Registros como efectos. Listener, comando, herramienta y cierre de dominio son efectos Cordis.
Known limitations
- Solo regex.
personyaddressrequieren un reconocedor NER externo; fallan al cargar. Cubierto de serie: teléfono, correo, documento, tarjeta, clave e IP (opt-in). - La restauración visual necesita una mitad de cliente. Enmascarar es host-side; desenmascarar burbujas en la UI es una función de navegador que esta forma host puro no incluye. La tabla y
restore()son el seam host-side completo. - Eventos en
0.1.2-rc.1. El host aún no registramask/*, así que los appends de auditoría se omiten (las sesiones siguen cargando).
Development
pnpm install
pnpm run typecheck && pnpm run typecheck:ci
pnpm test
pnpm run verify:self-contained
pnpm run verify:artifacts
pnpm run check:readmes
pnpm pack
Sin paso de build: ESM puro, index.mjs y lib/ son los artefactos enviados.
Benchmark
El benchmark de PII (P/R/F1 por tipo sobre 108 muestras sintéticas) está en benchmark/RESULTS.md; regenéralo con node benchmark/run.mjs (sin build, cero dependencias nuevas).
Topics
dsh, dsh-plugin, deepseek-harness, deepseek, cordis, pii, mask, privacy, anonymization, security
Contributors
- @PerryLink — creador y mantenedor.
PerryLink DSH Plugin Family
Este proyecto es uno de los 33 complementos de DeepSeek Harness mantenidos por PerryLink. Si este te ayuda, probablemente los demás también:
| Plugin | One-liner |
|---|---|
| dsh-dsh-auto-review | Auto-revisión de segundo modelo en la cadena de aprobación, con cierre en fallo por defecto |
| dsh-dsh-background-agents | Agentes hijos en segundo plano durables con barra lateral de UI web, mensajería e interrupción |
| dsh-dsh-budget | Gobernanza de costes para DeepSeek Harness: presupuestos, carbono y latencia en un panel. |
| dsh-dsh-checkpoint-rewind | Equivalente a /rewind de Claude Code: instantáneas, bifurcaciones de sesión, restauración de un solo uso |
| dsh-dsh-claude-move | Migra sesiones, memoria, habilidades y CLAUDE.md de Claude Code a DSH |
| dsh-dsh-click | Control de escritorio nativo multiplataforma para DeepSeek Harness — Windows primero. |
| dsh-dsh-composer-history | Historial de entrada estilo terminal para el compositor web: flechas, búsqueda Ctrl+R |
| dsh-dsh-data-quality | Comprobaciones de calidad de datasets y verificación de citas (el puente numérico opcional consumido aquí) |
| dsh-dsh-defend | Defensa contra inyección de prompts, jailbreak y fuga de secretos para DeepSeek Harness. |
| dsh-dsh-doublecheck | Guardián de disciplina de ingeniería: interrogatorio de requisitos, puertas de pruebas, revisión adversaria |
| dsh-dsh-draw | Enrutamiento unificado de generación de imágenes estáticas para DeepSeek Harness. |
| dsh-dsh-fast | Diagnóstico de rendimiento de solo lectura para DeepSeek Harness. |
| dsh-dsh-fund-research | Informes de investigación deterministas para fondos mutuos públicos chinos |
| dsh-dsh-github | Integración de PR/issues de GitHub para DSH, cada escritura controlada por aprobación |
| dsh-dsh-industry-research | Orquestación de investigación sectorial que sella sus entregables mediante el ctx.researchReport.assemble de este plugin |
| dsh-dsh-library | Base de conocimiento documental local para DeepSeek Harness. |
| dsh-dsh-local-ai | Integración de modelos locales (Ollama) para DeepSeek Harness. |
| dsh-dsh-lsp-actions | Diagnósticos, formato, autocompletado, acciones de código y renombrado LSP sobre servidores de lenguaje |
| dsh-dsh-mcp-panel | Panel de tiempo de ejecución MCP de solo lectura: comando /mcp + pestaña Settings con estado, herramientas y errores |
| dsh-dsh-memento | Memoria entre sesiones controlada por aprobación: costura ctx.memory + SQLite + herramienta de memoria |
| dsh-dsh-observe | Exportador de observabilidad OpenTelemetry y Langfuse para DeepSeek Harness. |
| dsh-dsh-output-styles | Cambio de estilo en tiempo de ejecución equivalente a outputStyles de Claude Code |
| dsh-dsh-permission-rules | Reglas de permisos declarativas allow/deny/ask estilo Claude Code con auditoría |
| dsh-dsh-plugin-guide | Base de conocimiento de desarrollo de plugins como habilidad de agente bajo demanda |
| dsh-dsh-research-report | Motor de informes de investigación verificables con evidencia direccionada por contenido |
| dsh-dsh-score | Puntuación de calidad multidimensional para plugins de DeepSeek Harness. |
| dsh-dsh-session-pin | Fija sesiones en la barra lateral web con orden durable |
| dsh-dsh-session-sync | Sincronización de sesiones entre dispositivos para DeepSeek Harness — un espejo git dedicado de tu almacén de sesiones. |
| dsh-dsh-skill-pack-security | Paquete de habilidades de auditoría de seguridad: escaneo de secretos, revisión de dependencias y cadena de suministro |
| dsh-dsh-talk | Bucle de sesión con voz para DeepSeek Harness: háblale y escucha su respuesta. |
| dsh-dsh-test-drive | Pruebas de instalación y humo aisladas para plugins de DeepSeek Harness. |
| dsh-dsh-translate | Traducción de parámetros entre proveedores y reparación determinista de JSON para DeepSeek Harness. |
License
LICENSE (Apache License 2.0) © 2026 dsh-mask contributors
Instalar desde el mercado de DSH Desktop
Todos los plugins de PerryLink pueden explorarse en el mercado integrado de DSH Desktop: Market → Sources → add source → pegar https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → seleccionarlo. La instalación sigue pasando por la verificación de identidad npm del mercado y tu confirmación.