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.
- Compatibilidade
- O que você obtém
- Início rápido
- Instalação e desinstalação
- Configuração
- Ferramentas e superfícies
- Arquitetura
- Permissões e dados
- Limites de segurança
- Limitações conhecidas
- Desenvolvimento
- Estrutura do repositório
- Tópicos
- Contribuidores
- Família de plugins DSH da PerryLink
- Licença
| Superfície | Status |
|---|---|
| Harness | DeepSeek Harness 0.1.0-rc.6 (compatibilidade declarada para 0.1.0-rc.5–0.1.0-rc.6) |
| Node | ^22.19.0 || >=24.0.0 |
| Plataformas | Todas (plugin host; rede de saída para o GitHub) |
| Modelo | Qualquer (a revisão estática é determinística; reviewMode: "model" é opcional) |
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.
- 12 ferramentas —
pr_create,pr_merge,pr_update,gh_review,review_post,gh_issue,issue_open,issue_comment,issue_close,gh_search,gh_repo,gh_file, todas com JSON canônico viadefineTool. - 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 inline —
review_postpublica 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ãoask, 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 —
/reviewroda emctx.jobscom a própria superfíciejob_list/job_output/job_killdo 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 compostaaction.yml).
# 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'- canal git (último
main):dsh plugin --profile web add "github:PerryLink/dsh-github#main"— o scriptpreparecompila apenas com dependências de produção. - canal npm (versões publicadas):
dsh plugin --profile web add @perrylink/dsh-github. - canal tarball:
pnpm packneste repositório e depoisdsh plugin --profile web add ./dsh-github-<version>.tgz. - desinstalar:
dsh plugin --profile web remove dsh-github(ou remova a linha do patch de perfil).
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.
| Chave | Padrão | Significado |
|---|---|---|
tokenSource |
auto |
auto (credenciais → ambiente → gh) ou um de credentials / env / gh |
tokenRef |
GITHUB_TOKEN |
Referência da camada de credenciais / nome da variável de ambiente |
defaultOwnerRepo |
— | Fallback owner/repo quando uma chamada não nomeia nenhum e o git não tem origin |
autoCommit |
false |
Se /pr create pode instruir o modelo a fazer commit+push primeiro |
maxDiffChars |
8000 |
Limite de caracteres para diffs de PR lidos nas revisões |
renderExcerptChars |
2000 |
Limite de caracteres para o trecho de diff renderizado na saída da ferramenta |
maxComments |
20 |
Limite para comentários de PR listados por gh_review |
reviewJobTimeoutMs |
600000 |
Prazo para um job de revisão em segundo plano (falha com timeout) |
maxReviewRecords |
50 |
Limite para registros em memória de jobs de revisão; os registros concluídos mais antigos são removidos primeiro |
maxFileChars |
12000 |
Limite de caracteres para o conteúdo de arquivos lido por gh_file |
maxFindings |
50 |
Limite de achados do analisador por revisão |
maxLineLength |
300 |
Comprimento de linha a partir do qual o analisador marca um achado de linha longa |
reviewMode |
static |
Motor 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) |
modelReviewProvider |
— | Nome do provedor de subagente para reviewMode: "model"; usa, por padrão, o primeiro provedor registrado |
maxRetries |
3 |
Tentativas de nova tentativa em 429 por requisição |
retryBaseMs |
500 |
Base do backoff de nova tentativa (dobra a cada tentativa) |
retryMaxWaitMs |
60000 |
Teto do backoff de nova tentativa |
requestTimeoutMs |
30000 |
Timeout rígido por requisição; aborta o fetch ao exceder |
apiBaseUrl |
https://api.github.com |
URL 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 |
workspaceDir |
process cwd | Diretó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.*) |
| Superfície | Tipo | Observações |
|---|---|---|
pr_create |
ferramenta | Cria uma pull request (gravação; com aprovação) |
pr_merge |
ferramenta | Mescla uma PR (merge/squash/rebase, exclusão opcional da rama head) |
pr_update |
ferramenta | Atualiza uma PR (título/corpo/estado/rama base) |
gh_review |
ferramenta | Lê uma PR: metadados, diff limitado, comentários, CI, achados estáticos |
review_post |
ferramenta | Publica um comentário de revisão (resumo ou inline ancorado por linha) |
gh_issue |
ferramenta | Lista / obtém / comenta issues (PRs marcados kind: "pr") |
issue_open |
ferramenta | Cria um issue |
issue_comment |
ferramenta | Comenta um issue ou PR |
issue_close |
ferramenta | Fecha um issue (motivo de estado opcional) |
gh_search |
ferramenta | Pesquisa issues e PRs (cota de busca separada) |
gh_repo |
ferramenta | Lê os metadados do repositório |
gh_file |
ferramenta | Lê um arquivo em uma rama/tag/commit |
/pr create |
comando | Lê o estado do git e enfileira uma instrução pr_create |
/review |
comando | Inicia / para / publica um job de revisão em segundo plano |
/issue open |
comando | Enfileira uma instrução issue_open |
ci_run |
ferramenta | Revisão CI de execução única conduzida pela ação composta / driver CI |
| bot de revisão | superfície | Bot de revisão por polling com comentários inline idempotentes (ci.*) |
| barreira de status-check | superfície | Publica o veredito success / needs-changes por commit head de PR (action.yml) |
- Camada de credenciais.
tokenSource: autoresolve por operação na ordem camada de credenciais (referênciaGITHUB_TOKEN) → variável de ambiente → token da CLIgh. 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-executeretornaaskpara as ferramentas de gravação, de modo que o registro pergunta ao humano por meio dectx.approval(o host registra o par de auditoriaapproval/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 jobgithub-reviewemctx.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). ComreviewMode: "model", o job entrega o diff limitado a um subagente de uso único pela seamsubagentsdo host. A conclusão chega à sessão por meio do consumidordsh-tool-jobsdo host; o modelo a lê comjob_outpute a publica comreview_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 únicaci_runconduz a execução headless. Toda gravação permanece sujeita a aprovação.
- Permissões: as gravações usam a camada de aprovação oficial; nada é reimplementado nem contornado. O plugin declara
network:outboundefilesystem:writeem 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…).
- 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 createnunca faz commit ou push por conta própria; comautoCommit: 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; apenasreview_postpublica, após aprovação. - Conteúdo não confiável é escapado e marcado.
formatPostBodyescapa 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.
- 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 seamsubagentse 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
latestdo npm estão desatualizadas — instale por meio do fechamento de perfil que odsh-basefornece; nunca com um simplesnpm i @deepseek-ai/dsh-tools.
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 READMEssrc/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 builddsh · dsh-plugin · deepseek-harness · github · pull-request · code-review · issue-tracker
- @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.
Este projeto é um dos 15 plugins do DeepSeek Harness mantidos por PerryLink. Se este lhe ajuda, os outros provavelmente também ajudarão:
| Plugin | Descrição |
|---|---|
| dsh-mcp-panel | Painel MCP de somente leitura em tempo de execução: comando /mcp + aba de ajustes com status, ferramentas e erros |
| dsh-doublecheck | Guardião de disciplina de engenharia: interrogatório de requisitos, portões de testes, revisão adversária |
| dsh-background-agents | Agentes filhos em segundo plano duráveis com barra lateral web, mensagens e interrupção |
| dsh-lsp-actions | Diagnósticos, formatação, conclusão, ações de código e renomeação LSP sobre servidores de linguagem |
| dsh-output-styles | Troca de estilo em tempo de execução equivalente ao outputStyles do Claude Code |
| dsh-checkpoint-rewind | Equivalente ao /rewind do Claude Code: instantâneos, bifurcações de sessão, restauração de uso único |
| dsh-permission-rules | Regras de permissão declarativas allow/deny/ask estilo Claude Code com auditoria |
| dsh-auto-review | Auto-revisão por segundo modelo na cadeia de aprovação, falha fechada por padrão |
| dsh-memento | Memória entre sessões com aprovação: seam ctx.memory + SQLite + ferramenta de memória |
| dsh-skill-pack-security | Pacote de habilidades de auditoria de segurança: varredura de segredos, revisão de dependências e cadeia de suprimentos |
| dsh-session-pin | Fixa sessões na barra lateral web com ordenação durável |
| dsh-composer-history | Histórico de entrada estilo terminal para o compositor web: setas, busca Ctrl+R |
| dsh-github | Integração de PR/issues do GitHub para DSH, toda gravação com aprovação |
| dsh-plugin-guide | Base de conhecimento de desenvolvimento de plugins como habilidade de agente sob demanda |
| dsh-claude-move | Migra sessões, memória, habilidades e CLAUDE.md do Claude Code para o DSH |
Apache License 2.0 © 2026 dsh-github contributors