dsh-github

August 30, 2026 · View on GitHub

dsh-github

PRs, revisões, issues e CI do GitHub para o DeepSeek Harness — toda gravação aprovada por um humano e o token nunca registrado em log.

Crie, revise, mescle e pesquise no GitHub a partir do agente, com uma ação composta de CI, um bot de revisão por polling e uma barreira de status-check.

License DSH plugin Node CI Version npm version

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

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


📚 Índice

Compatibilidade

SuperfícieStatus
HarnessDeepSeek Harness 0.1.1-rc.2 (compatibilidade declarada para 0.1.1-rc.2)
Node^22.19.0 || >=24.0.0
PlataformasTodas (plugin host; rede de saída para o GitHub)
ModeloQualquer (a revisão estática é determinística; reviewMode: "model" é opcional)

O que você obtém

O dsh-github preenche a lacuna do GitHub entre o dsh e ferramentas como o Claude Code e o Codex: seu agente pode ler, revisar, abrir, atualizar e mesclar pull requests, ler metadados de repositórios e arquivos, comentar e fechar issues, e pesquisar — enquanto um humano aprova toda gravação e o token permanece em segredo.

  • 14 ferramentaspr_create, pr_merge, pr_update, gh_review, review_post, gh_issue, issue_open, issue_comment, issue_close, gh_search, gh_repo, gh_file, gh_repo_search, gh_checks, todas com JSON canônico via defineTool.
  • 3 famílias de comandos/pr create, /review (start/stop/post), /issue open.
  • Ciclo de vida completo do PR — criar → revisar → atualizar (título/corpo/estado/rama base) → mesclar (merge/squash/rebase, exclusão opcional da rama head).
  • Revisões inlinereview_post publica um único comentário de resumo ou comentários de revisão ancorados por linha no commit head do PR.
  • Gravações com aprovação — toda gravação no GitHub passa por ctx.approval (padrão ask, falha fechada); os motivos de aprovação pré-visualizam títulos, tamanhos de corpo e substituições de comentários.
  • Sigilo do token — camada de credenciais → ambiente → CLI gh, resolvido por operação, nunca em logs, eventos, renderizações ou erros.
  • Jobs de revisão em segundo plano/review roda em ctx.jobs com a própria superfície job_list / job_output / job_kill do host.
  • Resiliência — nova tentativa em 429 com backoff Retry-After/x-ratelimit-reset; as ferramentas de leitura são seguras para concorrência; todas as chamadas respeitam o cancelamento.
  • Superfície de CI — a ferramenta de execução única ci_run, um bot de revisão por polling e uma barreira de status-check (ação composta action.yml).

Início rápido

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

# ou do npm (versões publicadas)
dsh plugin --profile web add @perrylink/dsh-github

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

Instalação e desinstalação

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

Configuração

Todos os ajustes são campos Config do Schemastery (modificáveis a partir do cordis.yml). Uma substituição direcionada por id troca toda a linha — redeclare cada chave de que você precisa. O cordis.patch.yml documenta cada chave em linha.

ChavePadrãoSignificado
tokenSourceautoauto (credenciais → ambiente → gh) ou um de credentials / env / gh
tokenRefGITHUB_TOKENReferência da camada de credenciais / nome da variável de ambiente
defaultOwnerRepoFallback owner/repo quando uma chamada não nomeia nenhum e o git não tem origin
autoCommitfalseSe /pr create pode instruir o modelo a fazer commit+push primeiro
maxDiffChars8000Limite de caracteres para diffs de PR lidos nas revisões
renderExcerptChars2000Limite de caracteres para o trecho de diff renderizado na saída da ferramenta
maxComments20Limite para comentários de PR listados por gh_review
reviewJobTimeoutMs600000Prazo para um job de revisão em segundo plano (falha com timeout)
maxReviewRecords50Limite para registros em memória de jobs de revisão; os registros concluídos mais antigos são removidos primeiro
maxFileChars12000Limite de caracteres para o conteúdo de arquivos lido por gh_file
maxFindings50Limite de achados do analisador por revisão
maxLineLength300Comprimento de linha a partir do qual o analisador marca um achado de linha longa
reviewModestaticMotor de revisão: static (analisador determinístico) ou model (subagente de uso único pela seam subagents do host; falha em alto e bom som quando a seam está ausente)
modelReviewProviderNome do provedor de subagente para reviewMode: "model"; usa, por padrão, o primeiro provedor registrado
maxRetries3Tentativas de nova tentativa em 429 por requisição
retryBaseMs500Base do backoff de nova tentativa (dobra a cada tentativa)
retryMaxWaitMs60000Teto do backoff de nova tentativa
requestTimeoutMs30000Timeout rígido por requisição; aborta o fetch ao exceder
apiBaseUrlhttps://api.github.comURL base da API REST do GitHub (GitHub Enterprise)
allowedActions['pr.create','pr.merge','pr.update','review.post','issue.create','issue.comment','issue.close','ci.run']Allowlist de ações de gravação; qualquer outra coisa é negada antes da aprovação
workspaceDirprocess cwdDiretório de trabalho para inspeção somente leitura do git
ci{ enabled: false, … }Seção de integração CI: bot de revisão por polling, barreira de status-check e a ferramenta de execução única ci_run (contém todas as chaves ci.*)

Ferramentas e superfícies

SuperfícieTipoObservações
pr_createferramentaCria uma pull request (gravação; com aprovação)
pr_mergeferramentaMescla uma PR (merge/squash/rebase, exclusão opcional da rama head)
pr_updateferramentaAtualiza uma PR (título/corpo/estado/rama base)
gh_reviewferramentaLê uma PR: metadados, diff limitado, comentários, CI, achados estáticos
review_postferramentaPublica um comentário de revisão (resumo ou inline ancorado por linha)
gh_issueferramentaLista / obtém / comenta issues (PRs marcados kind: "pr")
issue_openferramentaCria um issue
issue_commentferramentaComenta um issue ou PR
issue_closeferramentaFecha um issue (motivo de estado opcional)
gh_searchferramentaPesquisa issues e PRs (cota de busca separada)
gh_repoferramentaLê os metadados do repositório
gh_fileferramentaLê um arquivo em uma rama/tag/commit
gh_repo_searchferramentaBusca GraphQL de repositórios (cota de busca separada)
gh_checksferramentaChecks de status GraphQL de um PR (check runs + commit statuses)
/pr createcomandoLê o estado do git e enfileira uma instrução pr_create
/reviewcomandoInicia / para / publica um job de revisão em segundo plano
/issue opencomandoEnfileira uma instrução issue_open
ci_runferramentaRevisão CI de execução única conduzida pela ação composta / driver CI
bot de revisãosuperfícieBot de revisão por polling com comentários inline idempotentes (ci.*)
barreira de status-checksuperfíciePublica o veredito success / needs-changes por commit head de PR (action.yml)

Arquitetura

  • Camada de credenciais. tokenSource: auto resolve por operação na ordem camada de credenciais (referência GITHUB_TOKEN) → variável de ambiente → token da CLI gh. O valor é uma variável local entregue ao cliente REST; ele nunca entra em valores canônicos, renderizações, cards, saídas de comandos, avisos injetados, saídas de jobs, motivos de aprovação ou mensagens de erro.
  • Barreira de aprovação. Todas as gravações passam pelas ferramentas do modelo. Um listener waterfall tools/pre-execute retorna ask para as ferramentas de gravação, de modo que o registro pergunta ao humano por meio de ctx.approval (o host registra o par de auditoria approval/asked + approval/decided) e falha fechado sem um respondedor. Comandos nunca gravam diretamente: um comando de gravação coleta contexto somente leitura e então acorda o agente para que o modelo execute a ferramenta com aprovação dentro de um turno.
  • Job de revisão em segundo plano. /review <pr> inicia um job github-review em ctx.jobs; o job busca metadados (capturando o SHA do commit head para a publicação inline), o diff limitado, as verificações de CI e os comentários existentes, e então executa o analisador determinístico de múltiplos arquivos (src/review.ts). Com reviewMode: "model", o job entrega o diff limitado a um subagente de uso único pela seam subagents do host. A conclusão chega à sessão por meio do consumidor dsh-tool-jobs do host; o modelo a lê com job_output e a publica com review_post.
  • Ação composta de CI / bot de revisão / barreira de status-check. O repositório inclui uma ação composta (action.yml) que revisa PRs, corrige CI e escreve o relatório; um bot de revisão por polling publica comentários inline idempotentes; e uma barreira de status-check publica o veredito por commit head de PR. A ferramenta de execução única ci_run conduz a execução headless. Toda gravação permanece sujeita a aprovação.

Permissões e dados

  • Permissões: as gravações usam a camada de aprovação oficial; nada é reimplementado nem contornado. O plugin declara network:outbound e filesystem:write em seu manifesto de workshop.
  • Dados: o relatório de revisão vive na memória do processo, indexado pelo id do job; nada durável é gravado em disco.
  • Log de sessão: o plugin não adiciona tipos de evento de sessão personalizados; todo conteúdo visível ao modelo flui por superfícies registradas pelo host (tool/result, user/message, command/run, approval/asked…).

Limites de segurança

  • Aprovação, não aplicação. As gravações apenas produzem decisões ask/deny na camada oficial; o sandbox e os sistemas de aprovação continuam sendo a autoridade de aplicação.
  • Falha fechada. A ausência de respondedor de aprovação degrada para a decisão mais estrita — nunca para uma passagem silenciosa.
  • O token nunca sai do processo. É lido por operação e enviado apenas no cabeçalho Authorization; nunca é registrado, renderizado, injetado nem aparece em erros.
  • Sem gravações fora da aprovação. /pr create nunca faz commit ou push por conta própria; com autoCommit: true, o modelo realiza essas gravações pela própria barreira de aprovação da ferramenta bash. O job de revisão não realiza gravações; apenas review_post publica, após aprovação.
  • Conteúdo não confiável é escapado e marcado. formatPostBody escapa as crases e em HTML os nomes de arquivo derivados do diff, e o conteúdo externo do GitHub (arquivos, corpos, comentários, resultados de busca) é marcado como externo nas renderizações.
  • Trabalho limitado e limites de taxa. Os 429 são repetidos com backoff; a cota restante é exibida em todo resultado, incluindo falhas.

Limitações conhecidas

  • Sem eventos de sessão personalizados — deliberado (veja Arquitetura); as trilhas de auditoria dependem do próprio vocabulário de eventos do host.
  • Analisador estático por padrão — regras determinísticas (src/review.ts), zero tokens, reproduzível. reviewMode: "model" consome tokens e requer a seam subagents e um provedor registrado.
  • Jobs e registros são locais ao processo — o relatório de revisão vive na memória do plugin, indexado pelo id do job; o mapa de registros é limitado por maxReviewRecords (os registros concluídos mais antigos são removidos primeiro).
  • As dist-tags latest do npm estão desatualizadas — instale por meio do fechamento de perfil que o dsh-base fornece; nunca com um simples npm i @deepseek-ai/dsh-tools.

Desenvolvimento

pnpm install             # node ^22.19 || >=24
pnpm run build           # tsc --noEmitOnError → lib/
pnpm run prepare         # build autocontido para instalação via git (scripts/prepare.mjs)
pnpm run prepublishOnly  # compilar + testar antes de publicar
pnpm test                # vitest run
pnpm run typecheck       # tsc --noEmit
pnpm run check:readmes   # cruza âncoras de TOC, ferramentas e chaves de configuração nos 5 READMEs

Estrutura do repositório

src/index.ts          plugin entry (name/inject/apply, applyWithDeps for tests)
src/config.ts         Schemastery Config
src/types.ts          local structural views of host services + Context merging
src/credential.ts     token resolution (seam → env → gh), per operation
src/github.ts         REST client: 429 retry, rate limits, diff media type
src/git.ts            read-only git inspection + origin parsing for any API host
src/review.ts         deterministic diff analyzer + sanitized comment drafting
src/jobs.ts           github-review background job producer (metadata + diff + CI + comments)
src/approval-gate.ts  tools/pre-execute ask/deny gate with write previews
src/tools.ts          the twelve model-facing tools
src/commands.ts       /pr, /review, /issue
src/present.ts        pure UI-card presenters
test/                 vitest suite + mock host scaffolding + opt-in e2e smoke
cordis.patch.yml      bundle patch (one insert row)
scripts/prepare.mjs   self-contained git-install build

Tópicos

dsh · dsh-plugin · deepseek-harness · github · pull-request · code-review · issue-tracker

Contribuidores

  • @PerryLink — criador e mantenedor: a superfície de ferramentas do GitHub, a barreira de aprovação, os jobs de revisão em segundo plano, a ação composta de CI, o bot de revisão, a barreira de status-check e a documentação em cinco idiomas.
  • @AraragiEro — o cartão de configuração do token do GitHub na página de ajustes de Plugins (#6).
  • @alexchenzl — convidou o plugin a ser listado no DSH Directory (#5).

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-defendDefesa contra injeção de prompt, jailbreak e vazamento de segredos para DeepSeek Harness.
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-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.

Licença

Apache License 2.0 © 2026 dsh-github contributors