🛡️ dsh-defend

September 2, 2026 · View on GitHub

🛡️ dsh-defend

  • Canal 1024 store: npm i -g dsh1024 uma vez, depois dsh1024 plugin --profile web add dsh-defend (conta para o ranking de instalações do deepseek1024.com).

Defesa contra injeção de prompts, jailbreak e vazamento de segredos para o DeepSeek Harness.

Regras decidem o conhecido. A interceptação decide o resto — e tudo fica auditado.

License DSH plugin Node CI Version npm version npm downloads

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


Compatibilidade

SuperfícieStatus
HarnessDeepSeek Harness 0.1.2-alpha.5 (intervalos de peer >=0.1.0-rc.8 <0.2.0; adaptado em 2026-09-02): o envelope de sessão mantém seu campo ignorable apenas para compatibilidade de leitura de logs armazenados - o Session.append ainda não consegue estampá-lo, então o comportamento da porta não muda.
Node^22.19.0 || >=24.0.0
PlataformasTodas (somente host; sem código nativo, sem rede)
ModeloQualquer (a detecção ocorre antes de o conteúdo chegar ao modelo)

O que você ganha

O dsh-defend coloca duas camadas independentes diante do agente:

  1. Guarda de exclusão destrutiva — a forma executável da lição do postmortem 8·14/8·16. Em tools/pre-execute, comandos de shell que apagam recursivamente são recusados a menos que cada alvo seja um caminho absoluto explícito dentro do workspace da sessão e fora dos prefixos protegidos (configuração do home, .dsh/.claude, diretórios do sistema). Marcadores de dry-run (-WhatIf, --dry-run, git clean -n) passam, porque são exatamente a verificação que a lição exige.
  2. Camada de detecção — portada de quatro ativos upstream (todos Apache-2.0, veja THIRD_PARTY_NOTICES.md): 25 regras do Prompt-Injection-Payloads, 25 padrões do Jailbreak-Detector por um autômato Aho-Corasick em TypeScript puro, 12 gramáticas de segredos do Secret-Key-Leaker-Detect mais as referências públicas dos emissores, e o Prompt-Attack-Dataset mantido literalmente como referência de regressão.

Três pontos de interceptação, um modelo de decisão:

PontoConteúdo escaneadoDecisão
agent/pre-stepmensagens de entradaallow → next(); ask → aprovação; block → rejeitar o passo
tools/pre-executeargumentos de ferramentasallow → next(); ask → aprovação; block → deny
tools/post-executeresultados de ferramentasallow → next(); ask → aprovação; block → feedback corretivo

Padrões: ask para cada família, block para segredos critical (a semântica de interrupção imediata do upstream). Sem respondedor de aprovação = falha fechada. Todo repasse chama next() — plugins de política a jusante nunca são curto-circuitados.

Início rápido

# 1. instale o bundle no seu perfil
dsh plugin --profile web add "github:PerryLink/dsh-defend#main"

# ou pelo npm (versões publicadas)
dsh plugin --profile web add dsh-defend

# 2. reinicie e verifique a linha
dsh --profile web --dump-config | grep -A3 'id: dsh-defend'

Instalação e desinstalação

  • Canal git (último main): dsh plugin --profile web add "github:PerryLink/dsh-defend#main" — o script prepare compila apenas com dependências de produção.
  • Canal npm (versões publicadas): dsh plugin --profile web add dsh-defend.
  • Canal tarball: pnpm pack neste repositório e então dsh plugin --profile web add ./dsh-defend-<version>.tgz.
  • Desinstalar: dsh plugin --profile web remove dsh-defend (ou remova a linha do patch do perfil).

Configuração

Todos os ajustes são campos Config do Schemastery (alteráveis pelo cordis.yml). Uma sobrescrita direcionada por id substitui a linha inteira — redeclare cada chave. O cordis.patch.yml documenta cada chave em linha.

ChavePadrãoSignificado
enabledtrueInterruptor mestre das duas camadas
actiondenyAção da guarda de exclusão destrutiva (deny / ask)
toolNames['bash','persistent-bash','terminal-bash']Ferramentas cujos argumentos a guarda revisa
detection.enabledtrueInterruptor da camada de detecção
detection.maxScanChars10000Limite de escaneamento por interceptação (somente a cabeça)
detection.normalizeUnicodetrueNormalizar NFKC o texto antes de escanear (bloqueia o bypass de Unicode lookalike)
detection.secretMinEntropy3.0Entropia de Shannon mínima (bits/caractere) para admitir um acerto de segredo; 0 desativa
detection.injectionActionaskFamília injeção: allow / ask / block
detection.jailbreakActionaskFamília jailbreak: allow / ask / block
detection.secretActionaskFamília segredos: allow / ask / block
detection.secretBlockCriticaltrueSegredos critical sempre bloqueiam, independente de secretAction
detection.audittrueGravar eventos de auditoria defend/detection
detection.allowUnmarkedAuditfalseContinuar gravando auditoria de sessão em hosts cujo Session.append é anterior ao marcador ignorable (todas as linhas publicadas até agora), aceitando o risco de sessões irrecuperáveis
detection.maxReportEntries200Limite do buffer circular em memória
registerCommandtrueRegistrar o comando /defend
registerTooltrueRegistrar a ferramenta defend_report

Ferramentas e superfícies

SuperfícieTipoNotas
defend_reportferramentaTotais (registrados/bloqueados/perguntados), contagens por família e as 20 correspondências mais recentes — nunca texto coincidente
/defendcomandoO mesmo resumo em texto
agent/pre-steplistenerEscaneamento de mensagens de entrada (enter/reject)
tools/pre-executelistenerEscaneamento de argumentos (deny/ask) + a guarda de exclusão destrutiva
tools/post-executelistenerEscaneamento de resultados (feedback de bloqueio)

Permissões e dados

  • Permissões: decisões ask seguem a costura oficial de aprovação; nada é reimplementado ou contornado. O plugin declara session:append e network:none no seu manifesto de workshop.
  • Dados: nada é gravado em disco; o buffer circular do relatório vive em memória e é limitado. Sem requisições de rede, sem subprocessos.
  • Registro de sessão: eventos defend/detection carregam id da regra, família, categoria, severidade, tipo de segredo, decisão e fatos do escaneamento — texto coincidente nunca chega ao registro, e correspondências de segredos são somente-tipo por construção.

Limites de segurança

  • Detecção, não execução. A guarda e a camada de detecção apenas produzem decisões deny/ask/block nas costuras oficiais; o sandbox e os sistemas de aprovação continuam sendo a autoridade de execução.
  • Falha fechada. Sem respondedor de aprovação, sem sessão ou sem superfície de serviços, degrada para a decisão mais estrita — nunca para o repasse silencioso.
  • Nenhum conteúdo sai do processo. O escaneamento é local; eventos de auditoria são sanitizados; segredos nunca são registrados, exibidos ou reportados.
  • Trabalho limitado. Limites de escaneamento, uma correspondência por regra e cotas do buffer circular impedem que entradas hostis consumam recursos sem limite.

Limitações conhecidas

  • Lacunas de detecção. A biblioteca de regras cobre os vocabulários portados e suas variantes tolerantes; frases novas, codificações Unicode lookalike (a normalização NFKC está como trabalho futuro) e ataques multi-passo podem escapar. A referência fixa o piso medido (27/28 no dataset upstream) para que regressões fiquem visíveis.
  • Sem veredictos no nível do modelo. O dsh-defend é determinístico; nunca chama um modelo e não julga intenção nova.
  • A rejeição de mensagens é silenciosa. O reject de agent/pre-step não leva razão ao modelo (a costura não tem campo de razão); o evento de auditoria registra os fatos da regra.
  • Auditoria de sessão e o marcador ignorable. Os appends de auditoria solicitam o marcador ignorable: true do envelope para que qualquer build do harness consiga carregar o registro. Todas as linhas publicadas até agora (0.1.0-rc.10.1.0-rc.8, 0.1.1-rc.10.1.1-rc.2) o descartam silenciosamente — o evento fica sem marcação e torna a sessão irrecuperável em builds mais estritos, então o dsh-defend detecta esses hosts no primeiro uso (pré-checagem da versão do peer + sondagem do envelope devolvido) e desativa a auditoria do registro de sessão com um aviso único. Defina detection.allowUnmarkedAudit: true para reativar; linhas defend/detection existentes sem marcação podem ser reparadas adicionando "ignorable": true aos envelopes. Veja issue #2.

Desenvolvimento

pnpm install        # node ^22.19 || >=24
pnpm run typecheck  # tsc: src + tests contra o checkout local do harness
pnpm run typecheck:ci  # tsc contra os tipos publicados 0.1.2-alpha.5 (sem paths)
pnpm test           # vitest: 75 testes, 8 suítes (inclui a referência de detecção)
pnpm run build      # bundle tsdown + declarações tsc (lib/)
pnpm run verify:self-contained  # especificações de dependências resolvem pelo registry
pnpm run verify:artifacts       # face ESM construída + arquivos publicados presentes
pnpm pack           # o tarball publicado

Benchmark

O benchmark red-team (P/R/F1 por categoria em 105 amostras, mais o piso 27/28 do fixture) está em benchmark/RESULTS.md; regenere-o com node --experimental-strip-types benchmark/run.mjs (zero dependências novas, sem build).

Topics

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

Contributors

  • @PerryLink — criador e mantenedor: guarda de exclusão destrutiva, portado de detecção de quatro ativos, fiação de interceptação, superfície de auditoria e a documentação em cinco idiomas.
  • @cuohua — o relatório preciso sobre eventos defend/detection gravados sem marcação tornando sessões irrecuperáveis em builds mais estritos (#2); a detecção de capacidade de host em runtime e a disciplina do marcador ignorable derivam diretamente dessa análise.

Este projeto é um dos 33 plugins de DeepSeek Harness mantidos por PerryLink. Se este ajuda você, os outros provavelmente também:

PluginOne-liner
dsh-dsh-auto-reviewAuto-revisão de segundo modelo na cadeia de aprovação, com falha fechada por padrão
dsh-dsh-background-agentsAgentes filhos em segundo plano duráveis com barra lateral de UI web, mensagens e interrupção
dsh-dsh-budgetGovernança de custos para DeepSeek Harness: orçamentos, carbono e latência em um painel.
dsh-dsh-checkpoint-rewindEquivalente ao /rewind do Claude Code: instantâneos, bifurcações de sessão, restauração de uso único
dsh-dsh-claude-moveMigre sessões, memória, habilidades e CLAUDE.md do Claude Code para o DSH
dsh-dsh-clickControle de desktop nativo multiplataforma para DeepSeek Harness — Windows primeiro.
dsh-dsh-composer-historyHistórico de entrada estilo terminal para o compositor web: setas, busca Ctrl+R
dsh-dsh-data-qualityVerificações de qualidade de datasets e verificação de citações (a ponte numérica opcional consumida aqui)
dsh-dsh-doublecheckGuardião de disciplina de engenharia: sabatina de requisitos, portões de teste, revisão adversária
dsh-dsh-drawRoteamento unificado de geração de imagens estáticas para DeepSeek Harness.
dsh-dsh-fastDiagnóstico de desempenho só de leitura para DeepSeek Harness.
dsh-dsh-fund-researchRelatórios de pesquisa deterministas para fundos mútuos públicos chineses
dsh-dsh-githubIntegração de PR/issues do GitHub para o DSH, cada escrita controlada por aprovação
dsh-dsh-industry-researchOrquestração de pesquisa setorial que sela as suas entregas através do ctx.researchReport.assemble deste plugin
dsh-dsh-libraryBase de conhecimento documental local para DeepSeek Harness.
dsh-dsh-local-aiIntegração de modelos locais (Ollama) para DeepSeek Harness.
dsh-dsh-lsp-actionsDiagnósticos, formatação, autocompletar, ações de código e renomeação LSP sobre servidores de linguagem
dsh-dsh-maskMiddleware de mascaramento de PII: anonimiza no limite do modelo, restaura na camada de exibição
dsh-dsh-mcp-panelPainel de tempo de execução MCP somente leitura: comando /mcp + aba Settings com status, ferramentas e erros
dsh-dsh-mementoMemória entre sessões controlada por aprovação: costura ctx.memory + SQLite + ferramenta de memória
dsh-dsh-observeExportador de observabilidade OpenTelemetry e Langfuse para DeepSeek Harness.
dsh-dsh-output-stylesTroca de estilo em tempo de execução equivalente ao outputStyles do Claude Code
dsh-dsh-permission-rulesRegras de permissão declarativas allow/deny/ask estilo Claude Code com auditoria
dsh-dsh-plugin-guideBase de conhecimento de desenvolvimento de plugins como habilidade de agente sob demanda
dsh-dsh-research-reportMotor de relatórios de pesquisa verificáveis com evidência endereçada por conteúdo
dsh-dsh-scorePontuação de qualidade multidimensional para plugins de DeepSeek Harness.
dsh-dsh-session-pinFixe sessões na barra lateral web com ordenação durável
dsh-dsh-session-syncSincronização de sessões entre dispositivos para DeepSeek Harness — um espelho git dedicado do seu armazenamento de sessões.
dsh-dsh-skill-pack-securityPacote de habilidades de auditoria de segurança: varredura de segredos, revisão de dependências e cadeia de suprimentos
dsh-dsh-talkLoop de sessão com voz para DeepSeek Harness: fale e ouça a resposta.
dsh-dsh-test-driveTest drives isolados de instalação e smoke para plugins de DeepSeek Harness.
dsh-dsh-translateTradução de parâmetros entre fornecedores e reparo determinístico de JSON para DeepSeek Harness.

License

Apache License 2.0 © 2026 dsh-defend contributors