🛡️ dsh-defend

September 3, 2026 · View on GitHub

🛡️ dsh-defend

  • Canal 1024 store: npm i -g dsh1024 una vez, luego dsh1024 plugin --profile web add dsh-defend (cuenta para el ranking de instalaciones de deepseek1024.com).

Defensa contra inyección de prompts, jailbreak y fugas de secretos para DeepSeek Harness.

Las reglas deciden lo conocido. La intercepción decide el resto — y todo queda auditado.

License DSH plugin Node CI Version npm version npm downloads

English · 简体中文 · Español · Português · हिन्दी


Compatibilidad

SuperficieEstado
HarnessDeepSeek Harness 0.1.2-alpha.5 (rangos de peer >=0.1.0-rc.8 <0.2.0; 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.
Node^22.19.0 || >=24.0.0
PlataformasTodas (solo host; sin código nativo, sin red)
ModeloCualquiera (la detección ocurre antes de que el contenido llegue al modelo)

Qué obtienes

dsh-defend coloca dos capas independientes delante del agente:

  1. Guardia de borrado destructivo — la forma ejecutable de la lección del postmortem 8·14/8·16. En tools/pre-execute, los comandos de shell que borran recursivamente se rechazan salvo que cada destino sea una ruta absoluta explícita dentro del espacio de trabajo de la sesión y fuera de los prefijos protegidos (configuración del home, .dsh/.claude, directorios del sistema). Los marcadores de dry-run (-WhatIf, --dry-run, git clean -n) pasan, porque son exactamente la verificación que la lección exige.
  2. Capa de detección — portada de cuatro activos upstream (todos Apache-2.0, véase THIRD_PARTY_NOTICES.md): 25 reglas de Prompt-Injection-Payloads, 25 patrones de Jailbreak-Detector mediante un autómata Aho-Corasick en TypeScript puro, 12 gramáticas de secretos de Secret-Key-Leaker-Detect más las referencias públicas de los emisores, y el Prompt-Attack-Dataset conservado textualmente como referencia de regresión.

Tres puntos de intercepción, un mismo modelo de decisión:

PuntoContenido escaneadoDecisión
agent/pre-stepmensajes entrantesallow → next(); ask → aprobación; block → rechazar el paso
tools/pre-executeargumentos de herramientasallow → next(); ask → aprobación; block → deny
tools/post-executeresultados de herramientasallow → next(); ask → aprobación; block → feedback correctivo

Por defecto: ask para cada familia, block para secretos critical (la semántica de interrupción inmediata del upstream). Sin respondedor de aprobación = fallo cerrado. Todo paso a través llama a next() — los plugins de política aguas abajo nunca se cortocircuitan.

Inicio rápido

# 1. instala el bundle en tu perfil
dsh plugin --profile web add "github:PerryLink/dsh-defend#main"

# o desde npm (versiones publicadas)
dsh plugin --profile web add dsh-defend

# 2. reinicia y verifica la fila
dsh --profile web --dump-config | grep -A3 'id: dsh-defend'

Instalación y desinstalación

  • Canal git (último main): dsh plugin --profile web add "github:PerryLink/dsh-defend#main" — el script prepare compila solo con dependencias de producción.
  • Canal npm (versiones publicadas): dsh plugin --profile web add dsh-defend.
  • Canal tarball: pnpm pack en este repositorio y luego dsh plugin --profile web add ./dsh-defend-<version>.tgz.
  • Desinstalar: dsh plugin --profile web remove dsh-defend (o elimina la fila del parche del perfil).

Configuración

Todos los ajustes son campos Config de Schemastery (modificables desde cordis.yml). Una sobrescritura dirigida por id reemplaza toda la fila — vuelve a declarar cada clave. cordis.patch.yml documenta cada clave en línea.

ClavePor defectoSignificado
enabledtrueInterruptor maestro de ambas capas
actiondenyAcción de la guardia de borrado destructivo (deny / ask)
toolNames['bash','persistent-bash','terminal-bash']Nombres de herramientas cuyos argumentos revisa la guardia
detection.enabledtrueInterruptor de la capa de detección
detection.maxScanChars10000Límite de escaneo por intercepción (solo la cabeza)
detection.normalizeUnicodetrueNormalizar NFKC el texto antes de escanear (bloquea el bypass de Unicode lookalike)
detection.secretMinEntropy3.0Entropía de Shannon mínima (bits/carácter) para admitir un acierto de secreto; 0 desactiva
detection.injectionActionaskFamilia inyección: allow / ask / block
detection.jailbreakActionaskFamilia jailbreak: allow / ask / block
detection.secretActionaskFamilia secretos: allow / ask / block
detection.secretBlockCriticaltrueLos secretos critical bloquean siempre, sin importar secretAction
detection.audittrueEscribir eventos de auditoría defend/detection
detection.allowUnmarkedAuditfalseSeguir escribiendo auditoría de sesión en hosts cuyo Session.append es anterior al marcador ignorable (todas las líneas publicadas hasta ahora), aceptando el riesgo de sesiones irrecuperables
detection.maxReportEntries200Límite del búfer circular en memoria
registerCommandtrueRegistrar el comando /defend
registerTooltrueRegistrar la herramienta defend_report

Herramientas y superficies

SuperficieTipoNotas
defend_reportherramientaTotales (registrados/bloqueados/preguntados), conteos por familia y las 20 coincidencias más recientes — nunca texto coincidente
/defendcomandoEl mismo resumen como texto
agent/pre-steplistenerEscaneo de mensajes entrantes (enter/reject)
tools/pre-executelistenerEscaneo de argumentos (deny/ask) + la guardia de borrado destructivo
tools/post-executelistenerEscaneo de resultados (feedback de bloqueo)

Permisos y datos

  • Permisos: las decisiones ask van por la costura oficial de aprobación; nada se reimplementa ni se esquiva. El plugin declara session:append y network:none en su manifiesto de workshop.
  • Datos: nada se guarda en disco; el búfer circular del informe vive en memoria y está acotado. Sin peticiones de red, sin subprocesos.
  • Registro de sesión: los eventos defend/detection llevan id de regla, familia, categoría, severidad, tipo de secreto, decisión y hechos del escaneo — el texto coincidente nunca llega al registro, y las coincidencias de secretos son solo de tipo por construcción.

Límites de seguridad

  • Detección, no ejecución. La guardia y la capa de detección solo producen decisiones deny/ask/block en las costuras oficiales; el sandbox y los sistemas de aprobación siguen siendo la autoridad de ejecución.
  • Fallo cerrado. Sin respondedor de aprobación, sin sesión o sin superficie de servicios, se degrada a la decisión más estricta — nunca al paso silencioso.
  • Ningún contenido sale del proceso. El escaneo es local; los eventos de auditoría están sanitizados; los secretos nunca se registran, muestran ni reportan.
  • Trabajo acotado. Límites de escaneo, una coincidencia por regla y cotas del búfer circular impiden que entradas hostiles consuman recursos sin límite.

Limitaciones conocidas

  • Huecos de detección. La librería de reglas cubre los vocabularios portados y sus variantes tolerantes; frases nuevas, codificaciones Unicode lookalike (la normalización NFKC está como trabajo futuro) y ataques multi-paso pueden evadirla. La referencia fija el piso medido (27/28 en el dataset upstream) para que las regresiones sean visibles.
  • Sin veredictos a nivel de modelo. dsh-defend es determinista; nunca llama a un modelo y no puede juzgar intención nueva.
  • El rechazo de mensajes es silencioso. El reject de agent/pre-step no lleva razón al modelo (la costura no tiene campo de razón); el evento de auditoría registra los hechos de la regla.
  • Auditoría de sesión y el marcador ignorable. Los appends de auditoría solicitan el marcador ignorable: true del envelope para que cualquier build del harness pueda cargar el registro. Todas las líneas publicadas hasta ahora (0.1.0-rc.10.1.0-rc.8, 0.1.1-rc.10.1.1-rc.2) lo descartan en silencio — el evento queda sin marcar y hace la sesión irrecuperable en builds más estrictos, por lo que dsh-defend detecta esos hosts en el primer uso (precomprobación de la versión del peer + sondeo del envelope devuelto) y desactiva la auditoría del registro de sesión con una advertencia única. Establece detection.allowUnmarkedAudit: true para reactivarla; las filas defend/detection existentes sin marcar pueden repararse añadiendo "ignorable": true a sus envelopes. Véase issue #2.

Desarrollo

pnpm install        # node ^22.19 || >=24
pnpm run typecheck  # tsc: src + tests contra el checkout local del harness
pnpm run typecheck:ci  # tsc contra los tipos publicados 0.1.2-alpha.5 (sin paths)
pnpm test           # vitest: 75 tests, 8 suites (incluye la referencia de detección)
pnpm run build      # bundle tsdown + declaraciones tsc (lib/)
pnpm run verify:self-contained  # las especificaciones de dependencias resuelven desde el registry
pnpm run verify:artifacts       # cara ESM construida + archivos publicados presentes
pnpm pack           # el tarball publicado

Benchmark

El benchmark red-team (P/R/F1 por categoría sobre 105 muestras, más el suelo 27/28 del fixture) está en benchmark/RESULTS.md; regenéralo con node --experimental-strip-types benchmark/run.mjs (cero dependencias nuevas, sin build).

Topics

dsh, dsh-plugin, deepseek-harness, deepseek, cordis, security, prompt-injection, jailbreak, secret-scanning, ai-safety

Contributors

  • @PerryLink — creador y mantenedor: guardia de borrado destructivo, portado de detección de cuatro activos, cableado de intercepción, superficie de auditoría y la documentación en cinco idiomas.
  • @cuohua — el informe preciso sobre eventos defend/detection escritos sin marcar que hacen las sesiones irrecuperables en builds más estrictos (#2); la detección de capacidad de host en runtime y la disciplina del marcador ignorable derivan directamente de ese análisis.

Este proyecto es uno de los 33 complementos de DeepSeek Harness mantenidos por PerryLink. Si este te ayuda, probablemente los demás también:

PluginOne-liner
dsh-dsh-auto-reviewAuto-revisión de segundo modelo en la cadena de aprobación, con cierre en fallo por defecto
dsh-dsh-background-agentsAgentes hijos en segundo plano durables con barra lateral de UI web, mensajería e interrupción
dsh-dsh-budgetGobernanza de costes para DeepSeek Harness: presupuestos, carbono y latencia en un panel.
dsh-dsh-checkpoint-rewindEquivalente a /rewind de Claude Code: instantáneas, bifurcaciones de sesión, restauración de un solo uso
dsh-dsh-claude-moveMigra sesiones, memoria, habilidades y CLAUDE.md de Claude Code a DSH
dsh-dsh-clickControl de escritorio nativo multiplataforma para DeepSeek Harness — Windows primero.
dsh-dsh-composer-historyHistorial de entrada estilo terminal para el compositor web: flechas, búsqueda Ctrl+R
dsh-dsh-data-qualityComprobaciones de calidad de datasets y verificación de citas (el puente numérico opcional consumido aquí)
dsh-dsh-doublecheckGuardián de disciplina de ingeniería: interrogatorio de requisitos, puertas de pruebas, revisión adversaria
dsh-dsh-drawEnrutamiento unificado de generación de imágenes estáticas para DeepSeek Harness.
dsh-dsh-fastDiagnóstico de rendimiento de solo lectura para DeepSeek Harness.
dsh-dsh-fund-researchInformes de investigación deterministas para fondos mutuos públicos chinos
dsh-dsh-githubIntegración de PR/issues de GitHub para DSH, cada escritura controlada por aprobación
dsh-dsh-industry-researchOrquestación de investigación sectorial que sella sus entregables mediante el ctx.researchReport.assemble de este plugin
dsh-dsh-libraryBase de conocimiento documental local para DeepSeek Harness.
dsh-dsh-local-aiIntegración de modelos locales (Ollama) para DeepSeek Harness.
dsh-dsh-lsp-actionsDiagnósticos, formato, autocompletado, acciones de código y renombrado LSP sobre servidores de lenguaje
dsh-dsh-maskMiddleware de enmascaramiento de PII: anonimiza en el límite del modelo, restaura en la capa de visualización
dsh-dsh-mcp-panelPanel de tiempo de ejecución MCP de solo lectura: comando /mcp + pestaña Settings con estado, herramientas y errores
dsh-dsh-mementoMemoria entre sesiones controlada por aprobación: costura ctx.memory + SQLite + herramienta de memoria
dsh-dsh-observeExportador de observabilidad OpenTelemetry y Langfuse para DeepSeek Harness.
dsh-dsh-output-stylesCambio de estilo en tiempo de ejecución equivalente a outputStyles de Claude Code
dsh-dsh-permission-rulesReglas de permisos declarativas allow/deny/ask estilo Claude Code con auditoría
dsh-dsh-plugin-guideBase de conocimiento de desarrollo de plugins como habilidad de agente bajo demanda
dsh-dsh-research-reportMotor de informes de investigación verificables con evidencia direccionada por contenido
dsh-dsh-scorePuntuación de calidad multidimensional para plugins de DeepSeek Harness.
dsh-dsh-session-pinFija sesiones en la barra lateral web con orden durable
dsh-dsh-session-syncSincronización de sesiones entre dispositivos para DeepSeek Harness — un espejo git dedicado de tu almacén de sesiones.
dsh-dsh-skill-pack-securityPaquete de habilidades de auditoría de seguridad: escaneo de secretos, revisión de dependencias y cadena de suministro
dsh-dsh-talkBucle de sesión con voz para DeepSeek Harness: háblale y escucha su respuesta.
dsh-dsh-test-drivePruebas de instalación y humo aisladas para plugins de DeepSeek Harness.
dsh-dsh-translateTraducción de parámetros entre proveedores y reparación determinista de JSON para DeepSeek Harness.

License

Apache License 2.0 © 2026 dsh-defend 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.