@perrylink/dsh-github 0.7.10 → 0.7.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-es.md +63 -51
- package/README-hi.md +57 -45
- package/README-pt.md +62 -50
- package/README-zh.md +57 -45
- package/README.md +29 -17
- package/action.yml +1 -1
- package/lib/approval-gate.d.ts.map +1 -1
- package/lib/approval-gate.js +6 -0
- package/lib/approval-gate.js.map +1 -1
- package/lib/ci/bot.d.ts.map +1 -1
- package/lib/ci/bot.js +48 -9
- package/lib/ci/bot.js.map +1 -1
- package/lib/client.d.ts +272 -0
- package/lib/client.d.ts.map +1 -0
- package/lib/client.js +291 -305
- package/lib/client.js.map +1 -0
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +5 -2
- package/lib/commands.js.map +1 -1
- package/lib/index.d.ts +13 -21
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +16 -29
- package/lib/index.js.map +1 -1
- package/lib/jobs.d.ts.map +1 -1
- package/lib/jobs.js +9 -22
- package/lib/jobs.js.map +1 -1
- package/lib/message-source.d.ts +10 -0
- package/lib/message-source.d.ts.map +1 -0
- package/lib/message-source.js +2 -0
- package/lib/message-source.js.map +1 -0
- package/lib/types.d.ts +38 -86
- package/lib/types.d.ts.map +1 -1
- package/package.json +40 -22
- package/scripts/action-patch.mjs +1 -1
- package/scripts/check-readmes.mjs +3 -1
- package/scripts/local-test.mjs +2 -2
package/README-pt.md
CHANGED
|
@@ -7,8 +7,10 @@
|
|
|
7
7
|
*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.*
|
|
8
8
|
|
|
9
9
|
[](LICENSE)
|
|
10
|
+
[](https://gitee.com/perrylink/dsh-github)
|
|
10
11
|
[](https://github.com/topics/dsh-plugin)
|
|
11
12
|
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
13
|
+
[](https://dsh.market/)
|
|
12
14
|
[](#)
|
|
13
15
|
[](https://github.com/PerryLink/dsh-github/actions)
|
|
14
16
|
[](https://github.com/PerryLink/dsh-github/releases)
|
|
@@ -38,14 +40,14 @@
|
|
|
38
40
|
- [Estrutura do repositório](#estrutura-do-repositório)
|
|
39
41
|
- [Tópicos](#tópicos)
|
|
40
42
|
- [Contribuidores](#contribuidores)
|
|
41
|
-
- [Família de plugins DSH da PerryLink](#
|
|
43
|
+
- [Família de plugins DSH da PerryLink](#perrylink-dsh-plugin-family)
|
|
42
44
|
- [Licença](#licença)
|
|
43
45
|
|
|
44
46
|
## Compatibilidade
|
|
45
47
|
|
|
46
48
|
| Superfície | Status |
|
|
47
49
|
|---|---|
|
|
48
|
-
| Harness | DeepSeek Harness `dsh-v0.1.
|
|
50
|
+
| Harness | DeepSeek Harness `dsh-v0.1.7-alpha.1` (compatibilidade declarada para `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0 \|\| >=0.1.6-0 <0.2.0`; 0.1.2-rc.1 adaptado em 2026-09-09): o job de revisão passa a pertencer a um `SessionId` puro e a fonte dos avisos usa o kind próprio do plugin `dsh-github` (a união `Agent \| SessionId` do host e o `kind: 'plugin'` genérico deixaram de existir); o cartão de configurações se registra na **página Plugins** (grupo Official, slot `plugins.item`) e renderiza a partir do form entregue por `dsh-client-ui-plugin-manager`, em vez de vincular o removido `ctx.settingsScope`; o driver de CI autoaprova pela costura oficial `ctx.approval.setPolicy`; o bot de revisão pesquisa como job em segundo plano `ctx.jobs` com fallback por temporizador. Atualizado em 2026-09-22 para `0.1.7-alpha.1` (typecheck + typecheck:ci + 185 testes unitários verdes). |
|
|
49
51
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
50
52
|
| Plataformas | Todas (plugin host; rede de saída para o GitHub) |
|
|
51
53
|
| Modelo | Qualquer (a revisão estática é determinística; `reviewMode: "model"` é opcional) |
|
|
@@ -81,12 +83,12 @@ dsh --profile web --dump-config | grep -A3 'id: dsh-github'
|
|
|
81
83
|
|
|
82
84
|
- **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.
|
|
83
85
|
- **canal npm** (versões publicadas): `dsh plugin --profile web add @perrylink/dsh-github`.
|
|
84
|
-
- **canal tarball**: `pnpm pack` neste repositório e depois `dsh plugin --profile web add ./dsh-github-<version>.tgz`.
|
|
85
|
-
- **desinstalar**: `dsh plugin --profile web remove dsh-github` (ou remova a linha do patch de perfil).
|
|
86
|
+
- **canal tarball**: `pnpm pack` neste repositório e depois `dsh plugin --profile web add ./perrylink-dsh-github-<version>.tgz`.
|
|
87
|
+
- **desinstalar**: `dsh plugin --profile web remove @perrylink/dsh-github` (ou remova a linha do patch de perfil).
|
|
86
88
|
|
|
87
89
|
## Configuração
|
|
88
90
|
|
|
89
|
-
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.
|
|
91
|
+
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. Na GUI, o **cartão de configurações da página Plugins** (grupo Official) lê `tokenRef` do próprio formulário de configuração da entrada — o host `0.1.7-alpha.1` removeu a vinculação `ctx.settingsScope` e a costura de registro de namespace por trás dela, então o cartão não possui mais um namespace de configuração. O token do GitHub não é um campo de configuração: o cartão informa se a credencial referenciada está definida e a grava pelo arquivo de credenciais, que é de onde a metade host a resolve.
|
|
90
92
|
|
|
91
93
|
| Chave | Padrão | Significado |
|
|
92
94
|
|---|---|---|
|
|
@@ -142,14 +144,14 @@ Todos os ajustes são campos `Config` do Schemastery (modificáveis a partir do
|
|
|
142
144
|
|
|
143
145
|
- **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.
|
|
144
146
|
- **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.
|
|
145
|
-
- **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`.
|
|
147
|
+
- **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`). O job pertence ao `SessionId` puro do agente que chama — o `0.1.7-alpha.1` fecha o registro sobre `SessionId`, sem união com `Agent` —, então `dsh-tool-jobs` precisa estar composto ou `start` recusa. 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`.
|
|
146
148
|
- **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.
|
|
147
149
|
|
|
148
150
|
## Permissões e dados
|
|
149
151
|
|
|
150
152
|
- **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.
|
|
151
153
|
- **Dados**: o relatório de revisão vive na memória do processo, indexado pelo id do job; nada durável é gravado em disco.
|
|
152
|
-
- **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`…).
|
|
154
|
+
- **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`…). Os avisos que os comandos enfileiram carregam o kind de origem próprio do plugin, `{ kind: 'dsh-github', form: 'notice', summary }` — o host não tem um kind `plugin` genérico e sua rota de admissão do formato de sessão o recusa de imediato.
|
|
153
155
|
|
|
154
156
|
## Limites de segurança
|
|
155
157
|
|
|
@@ -209,49 +211,6 @@ scripts/prepare.mjs self-contained git-install build
|
|
|
209
211
|
- [@AraragiEro](https://github.com/AraragiEro) — o cartão de configuração do token do GitHub na página de ajustes de Plugins (#6).
|
|
210
212
|
- [@alexchenzl](https://github.com/alexchenzl) — convidou o plugin a ser listado no DSH Directory (#5).
|
|
211
213
|
|
|
212
|
-
## Família de plugins DSH da PerryLink
|
|
213
|
-
|
|
214
|
-
Este projeto é um dos [37 plugins de DeepSeek Harness](https://github.com/PerryLink) mantidos por [PerryLink](https://github.com/PerryLink). Se este ajuda você, os outros provavelmente também:
|
|
215
|
-
|
|
216
|
-
| Plugin | One-liner |
|
|
217
|
-
|---|---|
|
|
218
|
-
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Auto-revisão de segundo modelo na cadeia de aprovação, com falha fechada por padrão | |
|
|
219
|
-
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Agentes filhos em segundo plano duráveis com barra lateral de UI web, mensagens e interrupção | |
|
|
220
|
-
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Governança de custos para DeepSeek Harness: orçamentos, carbono e latência em um painel. | |
|
|
221
|
-
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Equivalente ao /rewind do Claude Code: instantâneos, bifurcações de sessão, restauração de uso único | |
|
|
222
|
-
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migre sessões, memória, habilidades e CLAUDE.md do Claude Code para o DSH | |
|
|
223
|
-
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Controle de desktop nativo multiplataforma para DeepSeek Harness — Windows primeiro. | |
|
|
224
|
-
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Histórico de entrada estilo terminal para o compositor web: setas, busca Ctrl+R | |
|
|
225
|
-
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Verificações de qualidade de datasets e verificação de citações (a ponte numérica opcional consumida aqui) | |
|
|
226
|
-
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Defesa contra injeção de prompt, jailbreak e vazamento de segredos para DeepSeek Harness. | |
|
|
227
|
-
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Guardião de disciplina de engenharia: sabatina de requisitos, portões de teste, revisão adversária | |
|
|
228
|
-
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Roteamento unificado de geração de imagens estáticas para DeepSeek Harness. | |
|
|
229
|
-
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Diagnóstico de desempenho só de leitura para DeepSeek Harness. | |
|
|
230
|
-
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Relatórios de pesquisa deterministas para fundos mútuos públicos chineses | |
|
|
231
|
-
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Orquestração de pesquisa setorial que sela as suas entregas através do `ctx.researchReport.assemble` deste plugin | |
|
|
232
|
-
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Base de conhecimento documental local para DeepSeek Harness. | |
|
|
233
|
-
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Integração de modelos locais (Ollama) para DeepSeek Harness. | |
|
|
234
|
-
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | Diagnósticos, formatação, autocompletar, ações de código e renomeação LSP sobre servidores de linguagem | |
|
|
235
|
-
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | Middleware de mascaramento de PII: anonimiza no limite do modelo, restaura na camada de exibição | |
|
|
236
|
-
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Painel de tempo de execução MCP somente leitura: comando /mcp + aba Settings com status, ferramentas e erros | |
|
|
237
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Memória entre sessões controlada por aprovação: costura ctx.memory + SQLite + ferramenta de memória | |
|
|
238
|
-
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | Exportador de observabilidade OpenTelemetry e Langfuse para DeepSeek Harness. | |
|
|
239
|
-
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Troca de estilo em tempo de execução equivalente ao outputStyles do Claude Code | |
|
|
240
|
-
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Regras de permissão declarativas allow/deny/ask estilo Claude Code com auditoria | |
|
|
241
|
-
| **[dsh-personal-directive](https://github.com/PerryLink/dsh-personal-directive)** | Injetor de diretivas pessoais com alternância na barra superior (edição framework) |
|
|
242
|
-
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Base de conhecimento de desenvolvimento de plugins como habilidade de agente sob demanda | |
|
|
243
|
-
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Ponte multicanal de aprovação/perguntas: WeChat/Telegram/Feishu, console de sessão |
|
|
244
|
-
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Motor de relatórios de pesquisa verificáveis com evidência endereçada por conteúdo | |
|
|
245
|
-
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Pontuação de qualidade multidimensional para plugins de DeepSeek Harness. | |
|
|
246
|
-
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Fixe sessões na barra lateral web com ordenação durável | |
|
|
247
|
-
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | Sincronização de sessões entre dispositivos para DeepSeek Harness — um espelho git dedicado do seu armazenamento de sessões. | |
|
|
248
|
-
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Pacote de habilidades de auditoria de segurança: varredura de segredos, revisão de dependências e cadeia de suprimentos | |
|
|
249
|
-
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Loop de sessão com voz para DeepSeek Harness: fale e ouça a resposta. | |
|
|
250
|
-
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Test drives isolados de instalação e smoke para plugins de DeepSeek Harness. | |
|
|
251
|
-
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | Ponte de tarefas TickTick/Dida365: painel no cabeçalho da sessão + 11 ferramentas |
|
|
252
|
-
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Tradução de parâmetros entre fornecedores e reparo determinístico de JSON para DeepSeek Harness. | |
|
|
253
|
-
| **[dsh-wechat](https://github.com/PerryLink/dsh-wechat)** | Ponte WeChat ↔ DSH (bot Tencent iLink): texto/imagem/arquivo/voz, aprovações no chat |
|
|
254
|
-
|
|
255
214
|
### Instalar a partir do mercado do DSH Desktop
|
|
256
215
|
|
|
257
216
|
Todos os plugins PerryLink podem ser explorados no mercado integrado do DSH Desktop: **Market → Sources → add source → colar** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **→ selecionar**. A instalação continua passando pela verificação de identidade npm do mercado e pela sua confirmação.
|
|
@@ -259,3 +218,56 @@ Todos os plugins PerryLink podem ser explorados no mercado integrado do DSH Desk
|
|
|
259
218
|
## Licença
|
|
260
219
|
|
|
261
220
|
[Apache License 2.0](LICENSE) © 2026 dsh-github contributors
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
## PerryLink DSH Plugin Family
|
|
224
|
+
|
|
225
|
+
This project is one of the **45 DeepSeek Harness plugins** maintained by [PerryLink](https://github.com/PerryLink). If this one helps you, the others likely will too:
|
|
226
|
+
|
|
227
|
+
| Plugin | One-liner |
|
|
228
|
+
|---|---|
|
|
229
|
+
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
230
|
+
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
231
|
+
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | |
|
|
232
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | |
|
|
233
|
+
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
234
|
+
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
235
|
+
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
|
|
236
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | |
|
|
237
|
+
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
238
|
+
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
|
|
239
|
+
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
|
|
240
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | |
|
|
241
|
+
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
242
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | |
|
|
243
|
+
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
|
|
244
|
+
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
|
|
245
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
|
|
246
|
+
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry research orchestration that seals its deliverables through this plugin's `ctx.researchReport.assemble` | |
|
|
247
|
+
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | Laya typed decisions (`noul`/`choice`/`score`) as a first-class Cordis service and model-visible tools | |
|
|
248
|
+
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base for DeepSeek Harness. | |
|
|
249
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local-model (Ollama) integration for DeepSeek Harness. | |
|
|
250
|
+
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
251
|
+
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
252
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
253
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
254
|
+
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
255
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
256
|
+
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
|
257
|
+
| **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
|
|
258
|
+
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
|
|
259
|
+
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
|
|
260
|
+
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
261
|
+
| **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | One-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card | |
|
|
262
|
+
| **[dsh-plugin-upgrade-015](https://github.com/PerryLink/dsh-plugin-upgrade-015)** | Merged `0.1.3-alpha.1` → `0.1.5-rc.1` upgrade corridor card plus a zero-dependency seam scanner | |
|
|
263
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | |
|
|
264
|
+
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
|
|
265
|
+
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
|
|
266
|
+
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | |
|
|
267
|
+
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store. | |
|
|
268
|
+
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack: secret scan, dependency and supply-chain review | |
|
|
269
|
+
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. | |
|
|
270
|
+
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | |
|
|
271
|
+
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives for DeepSeek Harness plugins. | |
|
|
272
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel + 11 tools | |
|
|
273
|
+
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. | |
|
package/README-zh.md
CHANGED
|
@@ -9,8 +9,10 @@
|
|
|
9
9
|
> **官方仓库。** 本仓库是 dsh-github 的唯一官方仓库,由 PerryLink 维护。其他账号下的同名仓库与本项目无关。
|
|
10
10
|
|
|
11
11
|
[](LICENSE)
|
|
12
|
+
[](https://gitee.com/perrylink/dsh-github)
|
|
12
13
|
[](https://github.com/topics/dsh-plugin)
|
|
13
14
|
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
15
|
+
[](https://dsh.market/)
|
|
14
16
|
[](#)
|
|
15
17
|
[](https://github.com/PerryLink/dsh-github/actions)
|
|
16
18
|
[](https://github.com/PerryLink/dsh-github/releases)
|
|
@@ -40,14 +42,14 @@
|
|
|
40
42
|
- [目录结构](#目录结构)
|
|
41
43
|
- [主题](#主题)
|
|
42
44
|
- [贡献者](#贡献者)
|
|
43
|
-
- [PerryLink DSH
|
|
45
|
+
- [PerryLink DSH Plugin Family](#perrylink-dsh-plugin-family)
|
|
44
46
|
- [许可证](#许可证)
|
|
45
47
|
|
|
46
48
|
## 兼容性
|
|
47
49
|
|
|
48
50
|
| 界面 | 状态 |
|
|
49
51
|
|---|---|
|
|
50
|
-
| Harness | DeepSeek Harness `dsh-v0.1.
|
|
52
|
+
| Harness | DeepSeek Harness `dsh-v0.1.7-alpha.1`(兼容声明覆盖 `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0 \|\| >=0.1.6-0 <0.2.0`;0.1.2-rc.1 于 2026-09-09 已适配):评审任务改由裸 `SessionId` 归属、通知来源改为插件自有的 `dsh-github` kind(宿主的 `Agent \| SessionId` 联合与兜底 `kind: 'plugin'` 均已移除);设置卡注册在 **Plugins 页**(Official 组,`plugins.item` 槽),并从 `dsh-client-ui-plugin-manager` 提供的 owner form 渲染,不再绑定已删除的 `ctx.settingsScope`;CI 驱动器通过官方 `ctx.approval.setPolicy` 策略缝自动放行;评审机器人以 `ctx.jobs` 后台任务轮询,并带定时器降级。2026-09-22 升级至 `0.1.7-alpha.1`(typecheck + typecheck:ci + 185 项单元测试全绿)。 |
|
|
51
53
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
52
54
|
| Platforms | 全部(host 插件;出站网络访问 GitHub) |
|
|
53
55
|
| Model | 任意(静态审查是确定性的;`reviewMode: "model"` 为可选) |
|
|
@@ -83,12 +85,12 @@ dsh --profile web --dump-config | grep -A3 'id: dsh-github'
|
|
|
83
85
|
|
|
84
86
|
- **git 通道**(最新 `main`):`dsh plugin --profile web add "github:PerryLink/dsh-github#main"` —— `prepare` 脚本仅以生产依赖构建。
|
|
85
87
|
- **npm 通道**(已发布版本):`dsh plugin --profile web add @perrylink/dsh-github`。
|
|
86
|
-
- **tarball 通道**:在本仓库执行 `pnpm pack`,然后 `dsh plugin --profile web add ./dsh-github-<version>.tgz`。
|
|
87
|
-
- **卸载**:`dsh plugin --profile web remove dsh-github`(或从 profile patch 中移除该行)。
|
|
88
|
+
- **tarball 通道**:在本仓库执行 `pnpm pack`,然后 `dsh plugin --profile web add ./perrylink-dsh-github-<version>.tgz`。
|
|
89
|
+
- **卸载**:`dsh plugin --profile web remove @perrylink/dsh-github`(或从 profile patch 中移除该行)。
|
|
88
90
|
|
|
89
91
|
## 配置
|
|
90
92
|
|
|
91
|
-
所有可调项都是 Schemastery `Config` 字段(可从 cordis.yml 修改)。以 id 定位的覆盖会替换整行 —— 需要重新声明你所需的每个键。`cordis.patch.yml`
|
|
93
|
+
所有可调项都是 Schemastery `Config` 字段(可从 cordis.yml 修改)。以 id 定位的覆盖会替换整行 —— 需要重新声明你所需的每个键。`cordis.patch.yml` 逐键内联说明。在图形界面中,**Plugins 页设置卡**(Official 组)从该条目自己的配置表单读取 `tokenRef`:`0.1.7-alpha.1` 宿主已删除 `ctx.settingsScope` 绑定及其背后的命名空间注册缝,卡片因此不再拥有设置命名空间。GitHub 令牌根本不是配置字段:卡片只报告所引用凭证是否已配置,并通过凭证文件写入它——宿主半部正是从那里解析的。
|
|
92
94
|
|
|
93
95
|
| 键 | 默认值 | 含义 |
|
|
94
96
|
|---|---|---|
|
|
@@ -144,14 +146,14 @@ dsh --profile web --dump-config | grep -A3 'id: dsh-github'
|
|
|
144
146
|
|
|
145
147
|
- **凭证接缝。** `tokenSource: auto` 每次操作按 credentials seam(`GITHUB_TOKEN` 引用)→ 环境变量 → `gh` CLI token 的顺序解析。该值只是交给 REST 客户端的局部变量,绝不进入规范值、渲染、卡片、命令输出、注入通知、job 输出、审批理由或错误消息。
|
|
146
148
|
- **审批门。** 所有写操作都经模型工具。`tools/pre-execute` waterfall 监听器对写工具返回 `ask`,注册表即通过 `ctx.approval` 询问人类(宿主落 `approval/asked` + `approval/decided` 审计对),无应答者时 fail-closed。命令从不直接写:写命令先收集只读上下文,再唤醒 agent,让模型在 turn 内调用受审批门保护的工具。
|
|
147
|
-
- **后台审查 job。** `/review <pr>` 在 `ctx.jobs` 上启动 `github-review` job;job 抓取元数据(记录 head-commit SHA 供行级发布)、截断 diff、CI 检查与既有评论,然后运行确定性多文件分析器(`src/review.ts
|
|
149
|
+
- **后台审查 job。** `/review <pr>` 在 `ctx.jobs` 上启动 `github-review` job;job 抓取元数据(记录 head-commit SHA 供行级发布)、截断 diff、CI 检查与既有评论,然后运行确定性多文件分析器(`src/review.ts`)。该 job 由调用 agent 的裸 `SessionId` 归属 —— `0.1.7-alpha.1` 的注册表以 `SessionId` 做访问围栏、不再接受 `Agent` 联合 —— 因此必须组合 `dsh-tool-jobs`,否则 `start` 会直接拒绝。`reviewMode: "model"` 时改为把截断 diff 交给宿主 `subagents` 接缝的一次性 subagent。完成通知经宿主的 `dsh-tool-jobs` 消费者送回会话;模型用 `job_output` 读取、用 `review_post` 发布。
|
|
148
150
|
- **CI 复合动作 / 审查机器人 / 状态检查门禁。** 本仓库随附复合动作(`action.yml`),负责审查 PR、修复 CI 并产出报告;轮询式审查机器人发布幂等行内评论;状态检查门禁按 PR head commit 发布结论。一次性 `ci_run` 工具驱动 headless 运行。每个写操作都保持审批门控。
|
|
149
151
|
|
|
150
152
|
## 权限与数据
|
|
151
153
|
|
|
152
154
|
- **权限**:写操作走官方审批接缝;没有任何东西被重实现或绕过。插件在其 workshop manifest 中声明 `network:outbound` 与 `filesystem:write`。
|
|
153
155
|
- **数据**:审查报告按 job id 存于进程内存;不向磁盘写任何持久数据。
|
|
154
|
-
- **会话日志**:插件不新增任何自定义会话事件类型;所有模型可见内容都走宿主已记录的界面(`tool/result`、`user/message`、`command/run`、`approval/asked
|
|
156
|
+
- **会话日志**:插件不新增任何自定义会话事件类型;所有模型可见内容都走宿主已记录的界面(`tool/result`、`user/message`、`command/run`、`approval/asked`…)。命令排队的通知携带插件自己的可合并来源 kind `{ kind: 'dsh-github', form: 'notice', summary }` —— 宿主没有兜底的 `plugin` kind,其会话格式准入路径会直接拒绝。
|
|
155
157
|
|
|
156
158
|
## 安全边界
|
|
157
159
|
|
|
@@ -211,48 +213,58 @@ scripts/prepare.mjs self-contained git-install build
|
|
|
211
213
|
- [@AraragiEro](https://github.com/AraragiEro) —— 插件设置页的 GitHub token 设置卡片(#6)。
|
|
212
214
|
- [@alexchenzl](https://github.com/alexchenzl) —— 邀请本插件收录到 DSH Directory(#5)。
|
|
213
215
|
|
|
214
|
-
## PerryLink DSH
|
|
216
|
+
## PerryLink DSH Plugin Family
|
|
215
217
|
|
|
216
|
-
|
|
218
|
+
This project is one of the **45 DeepSeek Harness plugins** maintained by [PerryLink](https://github.com/PerryLink). If this one helps you, the others likely will too:
|
|
217
219
|
|
|
218
220
|
| Plugin | One-liner |
|
|
219
221
|
|---|---|
|
|
220
|
-
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** |
|
|
221
|
-
| **[dsh-
|
|
222
|
-
| **[dsh-
|
|
223
|
-
| **[dsh-
|
|
224
|
-
| **[dsh-
|
|
225
|
-
| **[dsh-
|
|
226
|
-
| **[dsh-
|
|
227
|
-
| **[dsh-
|
|
228
|
-
| **[dsh-
|
|
229
|
-
| **[dsh-
|
|
230
|
-
| **[dsh-
|
|
231
|
-
| **[dsh-
|
|
232
|
-
| **[dsh-
|
|
233
|
-
| **[dsh-
|
|
234
|
-
| **[dsh-
|
|
235
|
-
| **[dsh-
|
|
236
|
-
| **[dsh-
|
|
237
|
-
| **[dsh-
|
|
238
|
-
| **[dsh-
|
|
239
|
-
| **[dsh-
|
|
240
|
-
| **[dsh-
|
|
241
|
-
| **[dsh-
|
|
242
|
-
| **[dsh-
|
|
243
|
-
| **[dsh-
|
|
244
|
-
| **[dsh-
|
|
245
|
-
| **[dsh-
|
|
246
|
-
| **[dsh-
|
|
247
|
-
| **[dsh-
|
|
248
|
-
| **[dsh-
|
|
249
|
-
| **[dsh-
|
|
250
|
-
| **[dsh-
|
|
251
|
-
| **[dsh-
|
|
252
|
-
| **[dsh-
|
|
253
|
-
| **[dsh-
|
|
254
|
-
| **[dsh-
|
|
255
|
-
| **[dsh-
|
|
222
|
+
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
223
|
+
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
224
|
+
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | |
|
|
225
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | |
|
|
226
|
+
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
227
|
+
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
228
|
+
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
|
|
229
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | |
|
|
230
|
+
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
231
|
+
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
|
|
232
|
+
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
|
|
233
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | |
|
|
234
|
+
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
235
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | |
|
|
236
|
+
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
|
|
237
|
+
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
|
|
238
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
|
|
239
|
+
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry research orchestration that seals its deliverables through this plugin's `ctx.researchReport.assemble` | |
|
|
240
|
+
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | Laya typed decisions (`noul`/`choice`/`score`) as a first-class Cordis service and model-visible tools | |
|
|
241
|
+
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base for DeepSeek Harness. | |
|
|
242
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local-model (Ollama) integration for DeepSeek Harness. | |
|
|
243
|
+
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
244
|
+
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
245
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
246
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
247
|
+
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
248
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
249
|
+
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
|
250
|
+
| **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
|
|
251
|
+
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
|
|
252
|
+
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
|
|
253
|
+
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
254
|
+
| **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | One-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card | |
|
|
255
|
+
| **[dsh-plugin-upgrade-015](https://github.com/PerryLink/dsh-plugin-upgrade-015)** | Merged `0.1.3-alpha.1` → `0.1.5-rc.1` upgrade corridor card plus a zero-dependency seam scanner | |
|
|
256
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | |
|
|
257
|
+
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
|
|
258
|
+
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
|
|
259
|
+
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | |
|
|
260
|
+
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store. | |
|
|
261
|
+
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack: secret scan, dependency and supply-chain review | |
|
|
262
|
+
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. | |
|
|
263
|
+
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | |
|
|
264
|
+
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives for DeepSeek Harness plugins. | |
|
|
265
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel + 11 tools | |
|
|
266
|
+
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. | |
|
|
267
|
+
|
|
256
268
|
|
|
257
269
|
### 从 DSH Desktop 市场安装
|
|
258
270
|
|
package/README.md
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# dsh-github
|
|
4
4
|
[](https://gitee.com/perrylink/dsh-github)
|
|
5
|
+
[](https://api.securityscorecards.dev/projects/github.com/PerryLink/dsh-github)
|
|
5
6
|
|
|
6
7
|
**GitHub PRs, reviews, issues, and CI for DeepSeek Harness — every write gated by human approval, token never logged.**
|
|
7
8
|
|
|
@@ -12,6 +13,7 @@
|
|
|
12
13
|
[](LICENSE)
|
|
13
14
|
[](https://github.com/topics/dsh-plugin)
|
|
14
15
|
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
16
|
+
[](https://dsh.market/)
|
|
15
17
|
[](#)
|
|
16
18
|
[](https://github.com/PerryLink/dsh-github/actions)
|
|
17
19
|
[](https://github.com/PerryLink/dsh-github/releases)
|
|
@@ -30,11 +32,11 @@
|
|
|
30
32
|
- [Compatibility](#compatibility)
|
|
31
33
|
- [What you get](#what-you-get)
|
|
32
34
|
- [Quick start](#quick-start)
|
|
33
|
-
- [Install & uninstall](#install
|
|
35
|
+
- [Install & uninstall](#install--uninstall)
|
|
34
36
|
- [Configuration](#configuration)
|
|
35
|
-
- [Tools & surfaces](#tools
|
|
37
|
+
- [Tools & surfaces](#tools--surfaces)
|
|
36
38
|
- [Architecture](#architecture)
|
|
37
|
-
- [Permissions & data](#permissions
|
|
39
|
+
- [Permissions & data](#permissions--data)
|
|
38
40
|
- [Security boundaries](#security-boundaries)
|
|
39
41
|
- [Known limitations](#known-limitations)
|
|
40
42
|
- [Development](#development)
|
|
@@ -48,7 +50,7 @@
|
|
|
48
50
|
|
|
49
51
|
| Surface | Status |
|
|
50
52
|
|---|---|
|
|
51
|
-
| Harness | DeepSeek Harness `dsh-v0.1.
|
|
53
|
+
| Harness | DeepSeek Harness `dsh-v0.1.7-alpha.1` (compat declared for `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0 \|\| >=0.1.6-0 <0.2.0`; 0.1.2-rc.1 adapted 2026-09-09): the review job is owned by a bare `SessionId` and a notice source is the plugin-owned kind `dsh-github` (the host's `Agent \| SessionId` union and its catch-all `kind: 'plugin'` are both gone); the settings card registers on the **Plugins page** (Official group, `plugins.item` slot) and renders from the owner form `dsh-client-ui-plugin-manager` supplies, instead of binding the removed `ctx.settingsScope`; the CI driver auto-approves through the official `ctx.approval.setPolicy` policy seam; the review bot polls as a `ctx.jobs` background job with a timer fallback. Upgraded 2026-09-22 to `0.1.7-alpha.1` (typecheck + typecheck:ci + 185 unit tests green). |
|
|
52
54
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
53
55
|
| Platforms | All (host plugin; outbound network to GitHub) |
|
|
54
56
|
| Model | Any (static review is deterministic; `reviewMode: "model"` is optional) |
|
|
@@ -57,8 +59,8 @@
|
|
|
57
59
|
|
|
58
60
|
`dsh-github` fills the GitHub gap between `dsh` and tools like Claude Code and Codex: your agent can read, review, open, update, and merge pull requests, read repository metadata and files, comment on and close issues, and search — while a human approves every write and the token stays secret.
|
|
59
61
|
|
|
60
|
-
- **
|
|
61
|
-
- **
|
|
62
|
+
- **15 tools** — `pr_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`, all canonical JSON via `defineTool`, plus the one-shot `ci_run` when `ci.enabled` is on.
|
|
63
|
+
- **4 command families** — `/pr create`, `/review` (start/stop/post), `/issue open`, and `/ci` (`scan`/`status`/`start`/`stop`/`run <pr>`, registered under `ci.enabled`).
|
|
62
64
|
- **Full PR lifecycle** — create → review → update (title/body/state/base) → merge (merge/squash/rebase, optional head-branch delete).
|
|
63
65
|
- **Inline reviews** — `review_post` posts one summary comment or line-anchored review comments against the PR head commit.
|
|
64
66
|
- **Approval-gated writes** — every GitHub write goes through `ctx.approval` (default `ask`, fail-closed); approval reasons preview titles, body sizes, and comment overrides.
|
|
@@ -84,12 +86,12 @@ dsh --profile web --dump-config | grep -A3 'id: dsh-github'
|
|
|
84
86
|
|
|
85
87
|
- **git channel** (latest `main`): `dsh plugin --profile web add "github:PerryLink/dsh-github#main"` — the `prepare` script builds with production dependencies only.
|
|
86
88
|
- **npm channel** (published releases): `dsh plugin --profile web add @perrylink/dsh-github`.
|
|
87
|
-
- **tarball channel**: `pnpm pack` in this repo, then `dsh plugin --profile web add ./dsh-github-<version>.tgz`.
|
|
88
|
-
- **uninstall**: `dsh plugin --profile web remove dsh-github` (or remove the row from the profile patch).
|
|
89
|
+
- **tarball channel**: `pnpm pack` in this repo, then `dsh plugin --profile web add ./perrylink-dsh-github-<version>.tgz`.
|
|
90
|
+
- **uninstall**: `dsh plugin --profile web remove @perrylink/dsh-github` (or remove the row from the profile patch).
|
|
89
91
|
|
|
90
92
|
## Configuration
|
|
91
93
|
|
|
92
|
-
All tunables are Schemastery `Config` fields (changeable from cordis.yml). An id-targeted override replaces the whole row — restate every key you need. `cordis.patch.yml` documents each key inline.
|
|
94
|
+
All tunables are Schemastery `Config` fields (changeable from cordis.yml). An id-targeted override replaces the whole row — restate every key you need. `cordis.patch.yml` documents each key inline. In the GUI, the **Plugins page settings card** (Official group) reads `tokenRef` from the entry's own configuration form — the `0.1.7-alpha.1` host removed the `ctx.settingsScope` binding and the namespace-registration seam behind it, so the card no longer owns a settings namespace. The GitHub token is not a configuration field at all: the card reports whether the referenced credential is set and writes it through the credentials file, which is where the host half resolves it.
|
|
93
95
|
|
|
94
96
|
| Key | Default | Meaning |
|
|
95
97
|
|---|---|---|
|
|
@@ -145,14 +147,14 @@ All tunables are Schemastery `Config` fields (changeable from cordis.yml). An id
|
|
|
145
147
|
|
|
146
148
|
- **Credential seam.** `tokenSource: auto` resolves per operation in the order credentials seam (`GITHUB_TOKEN` reference) → environment variable → `gh` CLI token. The value is a local variable handed to the REST client; it never enters canonical values, renders, cards, command outputs, injected notices, job output, approval reasons, or error messages.
|
|
147
149
|
- **Approval gate.** All writes flow through model tools. A `tools/pre-execute` waterfall listener returns `ask` for the write tools, so the registry asks the human through `ctx.approval` (the host logs the `approval/asked` + `approval/decided` audit pair) and fails closed without an answerer. Commands never write directly: a write command gathers read-only context, then wakes the agent so the model runs the gated tool inside a turn.
|
|
148
|
-
- **Background review job.** `/review <pr>` starts a `github-review` job on `ctx.jobs`; the job fetches metadata (capturing the head-commit SHA for inline posting), the capped diff, CI checks, and existing comments, then runs the deterministic multi-file analyzer (`src/review.ts`). With `reviewMode: "model"`, the job hands the capped diff to a one-shot subagent through the host's `subagents` seam. Completion reaches the session through the host's `dsh-tool-jobs` consumer; the model reads it with `job_output` and publishes it with `review_post`.
|
|
150
|
+
- **Background review job.** `/review <pr>` starts a `github-review` job on `ctx.jobs`; the job fetches metadata (capturing the head-commit SHA for inline posting), the capped diff, CI checks, and existing comments, then runs the deterministic multi-file analyzer (`src/review.ts`). The job is owned by the calling agent's bare `SessionId` — `0.1.7-alpha.1` fences the registry on `SessionId` with no `Agent` union — so `dsh-tool-jobs` must be composed or `start` refuses. With `reviewMode: "model"`, the job hands the capped diff to a one-shot subagent through the host's `subagents` seam. Completion reaches the session through the host's `dsh-tool-jobs` consumer; the model reads it with `job_output` and publishes it with `review_post`.
|
|
149
151
|
- **CI composite action / review bot / status-check gate.** The repo ships a composite action (`action.yml`) that reviews PRs, fixes CI, and writes the report; a polling review bot posts idempotent inline comments; and a status-check gate publishes the verdict per PR head commit. The one-shot `ci_run` tool drives the headless run. Every write stays approval-gated.
|
|
150
152
|
|
|
151
153
|
## Permissions & data
|
|
152
154
|
|
|
153
155
|
- **Permissions**: writes ride the official approval seam; nothing is re-implemented or bypassed. The plugin declares `network:outbound` and `filesystem:write` in its workshop manifest.
|
|
154
156
|
- **Data**: the review report lives in process memory keyed by job id; nothing durable is written to disk.
|
|
155
|
-
- **Session log**: the plugin adds no custom session event types; all model-visible content flows through host-logged surfaces (`tool/result`, `user/message`, `command/run`, `approval/asked`…).
|
|
157
|
+
- **Session log**: the plugin adds no custom session event types; all model-visible content flows through host-logged surfaces (`tool/result`, `user/message`, `command/run`, `approval/asked`…). The notices commands queue carry the plugin's own merge-extensible source kind, `{ kind: 'dsh-github', form: 'notice', summary }` — the host has no catch-all `plugin` kind, and its session-format admission path refuses one outright.
|
|
156
158
|
|
|
157
159
|
## Security boundaries
|
|
158
160
|
|
|
@@ -194,7 +196,7 @@ src/git.ts read-only git inspection + origin parsing for any API host
|
|
|
194
196
|
src/review.ts deterministic diff analyzer + sanitized comment drafting
|
|
195
197
|
src/jobs.ts github-review background job producer (metadata + diff + CI + comments)
|
|
196
198
|
src/approval-gate.ts tools/pre-execute ask/deny gate with write previews
|
|
197
|
-
src/tools.ts the fourteen model-facing tools
|
|
199
|
+
src/tools.ts the fourteen model-facing tools (plus `ci_run` under src/ci/)
|
|
198
200
|
src/commands.ts /pr, /review, /issue
|
|
199
201
|
src/present.ts pure UI-card presenters
|
|
200
202
|
test/ vitest suite + mock host scaffolding + opt-in e2e smoke
|
|
@@ -214,13 +216,16 @@ scripts/prepare.mjs self-contained git-install build
|
|
|
214
216
|
|
|
215
217
|
## PerryLink DSH Plugin Family
|
|
216
218
|
|
|
217
|
-
This project is one of the
|
|
219
|
+
This project is one of the **45 DeepSeek Harness plugins** maintained by [PerryLink](https://github.com/PerryLink). If this one helps you, the others likely will too:
|
|
218
220
|
|
|
219
221
|
| Plugin | One-liner |
|
|
220
222
|
|---|---|
|
|
221
223
|
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
224
|
+
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
222
225
|
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | |
|
|
223
226
|
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | |
|
|
227
|
+
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
228
|
+
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
224
229
|
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
|
|
225
230
|
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | |
|
|
226
231
|
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
@@ -231,7 +236,9 @@ This project is one of the [37 DeepSeek Harness plugins](https://github.com/Perr
|
|
|
231
236
|
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | |
|
|
232
237
|
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
|
|
233
238
|
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
|
|
239
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
|
|
234
240
|
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry research orchestration that seals its deliverables through this plugin's `ctx.researchReport.assemble` | |
|
|
241
|
+
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | Laya typed decisions (`noul`/`choice`/`score`) as a first-class Cordis service and model-visible tools | |
|
|
235
242
|
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base for DeepSeek Harness. | |
|
|
236
243
|
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local-model (Ollama) integration for DeepSeek Harness. | |
|
|
237
244
|
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
@@ -241,19 +248,24 @@ This project is one of the [37 DeepSeek Harness plugins](https://github.com/Perr
|
|
|
241
248
|
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
242
249
|
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
243
250
|
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
|
244
|
-
| **[dsh-
|
|
251
|
+
| **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
|
|
252
|
+
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
|
|
245
253
|
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
|
|
246
|
-
| **[dsh-
|
|
254
|
+
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
255
|
+
| **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | One-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card | |
|
|
256
|
+
| **[dsh-plugin-upgrade-015](https://github.com/PerryLink/dsh-plugin-upgrade-015)** | Merged `0.1.3-alpha.1` → `0.1.5-rc.1` upgrade corridor card plus a zero-dependency seam scanner | |
|
|
257
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | |
|
|
247
258
|
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
|
|
248
259
|
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
|
|
249
260
|
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | |
|
|
250
261
|
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store. | |
|
|
251
262
|
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack: secret scan, dependency and supply-chain review | |
|
|
252
263
|
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. | |
|
|
264
|
+
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | |
|
|
253
265
|
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives for DeepSeek Harness plugins. | |
|
|
254
|
-
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel + 11 tools |
|
|
266
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel + 11 tools | |
|
|
255
267
|
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. | |
|
|
256
|
-
|
|
268
|
+
|
|
257
269
|
|
|
258
270
|
### Install from the DSH Desktop Market
|
|
259
271
|
|
package/action.yml
CHANGED
|
@@ -36,7 +36,7 @@ inputs:
|
|
|
36
36
|
model:
|
|
37
37
|
description: 'DeepSeek model id for the headless session.'
|
|
38
38
|
required: false
|
|
39
|
-
default: 'deepseek-
|
|
39
|
+
default: 'deepseek-flash'
|
|
40
40
|
engine:
|
|
41
41
|
description: "Review engine: 'static' (deterministic analyzer, zero review tokens) or 'model' (the agent authors the review body)."
|
|
42
42
|
required: false
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-gate.d.ts","sourceRoot":"","sources":["../src/approval-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAyF7C;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"approval-gate.d.ts","sourceRoot":"","sources":["../src/approval-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAyF7C;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,IAAI,CAiBjF"}
|
package/lib/approval-gate.js
CHANGED
|
@@ -105,6 +105,12 @@ export function registerApprovalGate(ctx, state) {
|
|
|
105
105
|
return { kind: 'deny', reason: `dsh-github: action "${action ?? exec.name}" is not in allowedActions` };
|
|
106
106
|
}
|
|
107
107
|
if (state.isCiDriver && state.config.ci.autoApprove.includes(action)) {
|
|
108
|
+
// The CI driver bypasses the prompt through the official policy seam:
|
|
109
|
+
// pin the calling agent's approval policy to 'never' (no escalation, no
|
|
110
|
+
// prompt) and allow the in-flight call. The host hands us its own Agent
|
|
111
|
+
// handle, which is exactly what setPolicy declares.
|
|
112
|
+
if (exec.agent !== undefined)
|
|
113
|
+
ctx.approval.setPolicy(exec.agent, 'never');
|
|
108
114
|
return { kind: 'allow' };
|
|
109
115
|
}
|
|
110
116
|
return { kind: 'ask', reason: `dsh-github: ${askReason(exec.name, argumentsAsRecord(exec), state)}` };
|