dsh-click 0.3.26 → 0.3.28
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/CHANGELOG.md +14 -5
- package/README.en.md +441 -0
- package/README.es.md +441 -0
- package/README.hi.md +441 -0
- package/README.md +262 -194
- package/README.pt.md +441 -0
- package/lib/index.js +31 -16
- package/lib/types/version.d.ts +1 -1
- package/native/win32/dsh-click-helper.ps1 +70 -0
- package/package.json +32 -29
- package/README-es.md +0 -377
- package/README-hi.md +0 -377
- package/README-pt.md +0 -377
- package/README-zh.md +0 -377
package/README-pt.md
DELETED
|
@@ -1,377 +0,0 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
|
|
3
|
-
# 🖱️ dsh-click
|
|
4
|
-
- **Canal 1024 store**: `npm i -g dsh1024` uma vez, depois `dsh1024 plugin --profile web add dsh-click` (conta para o ranking de instalações do [deepseek1024.com](https://deepseek1024.com)).
|
|
5
|
-
|
|
6
|
-
**Controle nativo de desktop multiplataforma para o DeepSeek Harness — Windows primeiro.**
|
|
7
|
-
|
|
8
|
-
*Olhe para a tela e então aja — cada clique autorizado, cada ação auditada.*
|
|
9
|
-
|
|
10
|
-
[](LICENSE)
|
|
11
|
-
[](https://gitee.com/perrylink/dsh-click)
|
|
12
|
-
[](https://github.com/topics/dsh-plugin)
|
|
13
|
-
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
14
|
-
[](https://dsh.market/)
|
|
15
|
-
[](#)
|
|
16
|
-
[](https://github.com/PerryLink/dsh-click/actions)
|
|
17
|
-
[](https://github.com/PerryLink/dsh-click/releases)
|
|
18
|
-
[](https://www.npmjs.com/package/dsh-click)
|
|
19
|
-
[](https://www.npmjs.com/package/dsh-click)
|
|
20
|
-
[](https://dshfind.com/pt/plugins/PerryLink/dsh-click?ref=badge)
|
|
21
|
-
|
|
22
|
-
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
23
|
-
|
|
24
|
-
```sh
|
|
25
|
-
dsh plugin --profile <name> add dsh-click
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
**📖 Base de conhecimento do ecossistema** — dados medidos, não marketing: [guia de desenvolvimento · dados de seleção · critérios de manutenção](https://perrylink.github.io/dsh-plugin-guide/).
|
|
35
|
-
|
|
36
|
-
<!-- star-cta -->
|
|
37
|
-
## Instalação e desinstalação
|
|
38
|
-
|
|
39
|
-
- **Canal git** (último `main`): `dsh plugin --profile web add github:PerryLink/dsh-click` — o script `prepare` compila apenas com dependências de produção.
|
|
40
|
-
- **Canal npm** (versões publicadas): `dsh plugin --profile web add dsh-click`.
|
|
41
|
-
- **Canal tarball**: `pnpm pack` neste repositório e então `dsh plugin --profile web add ./dsh-click-<version>.tgz`.
|
|
42
|
-
- **Desinstalar**: `dsh plugin --profile web remove dsh-click` (ou remova a linha do patch do perfil).
|
|
43
|
-
|
|
44
|
-
> Se o pnpm reportar `ERR_PNPM_IGNORED_BUILDS` para este pacote (a validação inofensiva do binário de plataforma do esbuild), adicione `allowBuilds: { esbuild: true }` ao seu `pnpm-workspace.yaml` — o CLI `dsh` imprime o trecho exato.
|
|
45
|
-
|
|
46
|
-
## ⭐ 如果它帮到了你
|
|
47
|
-
|
|
48
|
-
Este plugin faz parte da [família de plugins DSH](https://github.com/PerryLink) (mais de 40, todos Apache-2.0). Se for útil, **deixe uma estrela**: não desbloqueia nada, mas ajuda a próxima pessoa a encontrá-lo.
|
|
49
|
-
|
|
50
|
-
*English:* part of a 95 plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** — nothing is gated behind it.
|
|
51
|
-
|
|
52
|
-
## What is dsh-click?
|
|
53
|
-
|
|
54
|
-
Controle nativo de desktop multiplataforma para o DeepSeek Harness — Windows primeiro.
|
|
55
|
-
|
|
56
|
-
Olhe para a tela e então aja — cada clique autorizado, cada ação auditada.
|
|
57
|
-
|
|
58
|
-

|
|
59
|
-
|
|
60
|
-
*Visão geral do fluxo: instalar → abrir painel → agir. Os exemplos abaixo usam a superfície real de comandos.*
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
*A mesma execução, animada.*
|
|
64
|
-
|
|
65
|
-
## Compatibilidade
|
|
66
|
-
|
|
67
|
-
| Superfície | Status |
|
|
68
|
-
|---|---|
|
|
69
|
-
| Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (tag do GitHub, verificado em 2026-09-25). Verificado em 2026-09-11 contra o checkout master dsh-v0.1.7-alpha.1 (cadeia completa de gates + smoke de instalação de perfil). |
|
|
70
|
-
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
71
|
-
| Plataformas | **Windows primeiro** (UIAutomation + entrada Win32, via um helper PowerShell embutido); os backends macOS/Linux estão reservados e falham fechado com um motivo claro |
|
|
72
|
-
| Modelo | Modelos somente texto totalmente suportados (`screen_read` retorna texto estruturado); modelos com visão recebem também as imagens do `screen_shot` |
|
|
73
|
-
|
|
74
|
-
## O que você ganha
|
|
75
|
-
|
|
76
|
-
O `dsh-click` dá ao harness um ciclo completo de observar → agir sobre aplicativos de desktop nativos:
|
|
77
|
-
|
|
78
|
-
- **`screen_shot`** — captura de uma janela (ou da tela principal), reduzida a um limite configurável. Com um modelo com visão o resultado traz a imagem; caso contrário, uma descrição em texto mantém os modelos somente texto funcionando.
|
|
79
|
-
- **`screen_read`** — a observação estruturada: a árvore de acessibilidade da janela (ids de elementos, tipos, nomes, retângulos, padrões suportados) mais dicas de pixels com cores — texto puro, sem exigir modelo de imagem.
|
|
80
|
-
- **`click` / `type` / `scroll` / `key`** — ações limitadas à janela, endereçadas por id de elemento ou coordenadas. A entrega prefere UIA invoke e recorre a mensagens de janela postadas — e **nunca rouba o foco em primeiro plano**.
|
|
81
|
-
- **`app_list` / `app_launch`** — enumera os aplicativos em execução e suas janelas; inicia um por nome ou caminho.
|
|
82
|
-
|
|
83
|
-
Toda ação mutante cruza uma mesma fronteira de segurança:
|
|
84
|
-
|
|
85
|
-
1. **Atualidade** — a ação deve citar uma observação `basedOn`; a janela é recapturada logo antes de agir e a ação é recusada se a tela mudou (hash de pixels + limite de idade).
|
|
86
|
-
2. **Aprovação** — `ctx.approval` protege cada ação por padrão; regex de título/executável podem liberar janelas específicas (ainda auditadas).
|
|
87
|
-
3. **Identidade do processo** — o pid e o caminho do executável dono são verificados antes **e** depois do ato; uma mudança recusa o resultado em voz alta.
|
|
88
|
-
4. **Auditoria** — observações e ações entram no registro de sessão como eventos `dsh-click/observed` / `dsh-click/action` (sanitizados, somente registro).
|
|
89
|
-
|
|
90
|
-
```text
|
|
91
|
-
modelo harness
|
|
92
|
-
│ screen_read ──▶ observationId (+ elementos, pixels) ← texto estruturado
|
|
93
|
-
│ click {basedOn, target} ──▶ verificação de atualidade ──▶ aprovação ──▶ helper (UIA)
|
|
94
|
-
│ hash de pixels mudou? ── recusar + reobservar
|
|
95
|
-
│ pid/exe mudou após o ato? ── PROCESS_CHANGED
|
|
96
|
-
│ ◀── JSON canônico + eventos de auditoria (dsh-click/action)
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## Início rápido
|
|
100
|
-
|
|
101
|
-
```sh
|
|
102
|
-
dsh plugin --profile web add github:PerryLink/dsh-click
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
```sh
|
|
106
|
-
# 1. instale o bundle no seu perfil
|
|
107
|
-
dsh plugin --profile web add github:PerryLink/dsh-click
|
|
108
|
-
|
|
109
|
-
# ou pelo npm (versões publicadas)
|
|
110
|
-
dsh plugin --profile web add dsh-click
|
|
111
|
-
|
|
112
|
-
# 2. reinicie e verifique a linha
|
|
113
|
-
dsh --profile web --dump-config | grep -A2 'id: dsh-click'
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
Depois peça ao agente para olhar uma janela e agir — o aviso de aprovação aparece em toda ação mutante:
|
|
117
|
-
|
|
118
|
-
```
|
|
119
|
-
> Abra o Bloco de Notas, digite "olá" e leia de volta o que está na tela.
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Exemplos
|
|
123
|
-
|
|
124
|
-
São os pontos de entrada reais; instale e chame um.
|
|
125
|
-
|
|
126
|
-
#### Exemplo detalhado
|
|
127
|
-
|
|
128
|
-
**Comando**
|
|
129
|
-
|
|
130
|
-
~~~sh
|
|
131
|
-
app_list
|
|
132
|
-
~~~
|
|
133
|
-
|
|
134
|
-
**Entrada**
|
|
135
|
-
|
|
136
|
-
~~~json
|
|
137
|
-
{}
|
|
138
|
-
~~~
|
|
139
|
-
|
|
140
|
-
**Saída**
|
|
141
|
-
|
|
142
|
-
~~~text
|
|
143
|
-
1 running application(s) with windows:
|
|
144
|
-
- Demo (pid 4242, C:\Apps\demo.exe)
|
|
145
|
-
- [windowId 1122867] "Demo App" at (10, 20) 800x600
|
|
146
|
-
~~~
|
|
147
|
-
|
|
148
|
-
*Observado em `plugins/dsh-click/tests/tools.spec.ts:159-185; renderer at src/tools.ts:933-942`*
|
|
149
|
-
|
|
150
|
-
#### Ramo de falha
|
|
151
|
-
|
|
152
|
-
**Entrada**
|
|
153
|
-
|
|
154
|
-
~~~text
|
|
155
|
-
{}
|
|
156
|
-
~~~
|
|
157
|
-
|
|
158
|
-
**Saída**
|
|
159
|
-
|
|
160
|
-
~~~text
|
|
161
|
-
Error: dsh-click backend unavailable on linux: Linux backend is reserved but not implemented yet (Windows-first); only Windows can act today
|
|
162
|
-
~~~
|
|
163
|
-
|
|
164
|
-
*Observado em `plugins/dsh-click/src/platform/selection.ts:61-62,81; plugins/dsh-click/src/tools.ts:133-136; plugins/dsh-click/tests/tools.spec.ts:226-245`*
|
|
165
|
-
|
|
166
|
-
#### Exemplos breves
|
|
167
|
-
|
|
168
|
-
- `screen_read`
|
|
169
|
-
- `app_list`
|
|
170
|
-
|
|
171
|
-
## Configuração
|
|
172
|
-
|
|
173
|
-
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 que precisar. O `cordis.patch.yml` documenta cada chave em linha.
|
|
174
|
-
|
|
175
|
-
| Chave | Padrão | Significado |
|
|
176
|
-
|---|---|---|
|
|
177
|
-
| `requireApproval` | `true` | Proteger toda ação mutante atrás da aprovação; observadores nunca perguntam |
|
|
178
|
-
| `autoApproveWindows` | `[]` | Regex de título de janela/caminho de executável que pulam a pergunta de aprovação (ainda passam por atualidade e auditoria) |
|
|
179
|
-
| `auditSessionEvents` | `true` | Acrescenta eventos de auditoria `dsh-click/observed`/`dsh-click/action` à sessão. A porta adaptativa já omite o append em hosts sem envelope (rc.6–rc.8, 0.1.1-rc.2 e 0.1.2-rc.1, que falha fechado para tipos desconhecidos na leitura); defina `false` para interromper totalmente os appends de auditoria 0.1.2-rc.1 (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. |
|
|
180
|
-
| `focusFallback` | `never` | Se uma ação pode trazer a janela alvo ao primeiro plano como último recurso (`never` / `allow`) |
|
|
181
|
-
| `imageMode` | `auto` | Renderização do `screen_shot`: `auto` (imagem quando o modelo aceita imagens, texto caso contrário) ou `text` |
|
|
182
|
-
| `helperTimeoutMs` | `30000` | Tempo limite por chamada ao helper em ms (1..300000) |
|
|
183
|
-
| `maxHelperOutputBytes` | `25165824` | Limite de uma resposta do helper em bytes (1024..67108864) |
|
|
184
|
-
| `maxScreenshotSide` | `2560` | Maior lado da captura em pixels (320..7680); capturas maiores são reduzidas |
|
|
185
|
-
| `staleCheckPixels` | `true` | Comparar um hash de pixels novo antes de cada ação e recusar se mudou |
|
|
186
|
-
| `staleCheckTree` | `target` | Frescor da árvore: `target` verifica o elemento alvo (padrão), `strict` recusa qualquer nó alterado, `off` ignora o hash da árvore |
|
|
187
|
-
| `maxObservationAgeMs` | `30000` | Idade máxima em ms de uma observação que uma ação pode citar (1000..600000) |
|
|
188
|
-
| `maxCachedObservations` | `8` | Limite LRU de observações em cache (1..64) |
|
|
189
|
-
| `maxElements` | `500` | Limite de elementos de acessibilidade por `screen_read` (1..2000) |
|
|
190
|
-
| `maxTreeDepth` | `32` | Profundidade máxima do percurso da árvore de acessibilidade (1..64) |
|
|
191
|
-
| `maxTextLength` | `200` | Comprimento de truncamento das strings visíveis ao modelo (16..10000) |
|
|
192
|
-
| `rollbackEnabled` | `true` | Fazer backup e restaurar o texto do controle quando `type` falha |
|
|
193
|
-
| `ocr.enabled` / `command` / `language` | `true` / `tesseract` / `eng` | OCR opcional para `screen_find` (detectado na montagem; degrada para indisponível sem tesseract) |
|
|
194
|
-
|
|
195
|
-
Exemplo de sobrescrita no patch do seu perfil:
|
|
196
|
-
|
|
197
|
-
```yaml
|
|
198
|
-
- insert:
|
|
199
|
-
- id: dsh-click
|
|
200
|
-
name: dsh-click
|
|
201
|
-
config:
|
|
202
|
-
requireApproval: true
|
|
203
|
-
autoApproveWindows: ['^Notepad']
|
|
204
|
-
focusFallback: never
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
## Ferramentas e superfícies
|
|
208
|
-
|
|
209
|
-
| Ferramenta | Somente leitura | Requer aprovação | Notas |
|
|
210
|
-
|---|---|---|---|
|
|
211
|
-
| `screen_shot` | ✅ | — | Retorna um `observationId` que ações posteriores citam em `basedOn`; anexo de imagem quando o modelo aceita imagens |
|
|
212
|
-
| `screen_read` | ✅ | — | Árvore de acessibilidade + dicas de pixels; os ids de elementos são o endereçamento das ações |
|
|
213
|
-
| `click` | | ✅ | Exatamente um de `elementId` ou `(x, y)`; prefere UIA invoke, com mensagens postadas como fallback |
|
|
214
|
-
| `type` | | ✅ | Somente elementos com padrão de valor; faz backup e restaura o texto do controle em falha |
|
|
215
|
-
| `scroll` | | ✅ | Elemento (padrão scroll) ou janela (roda postada) |
|
|
216
|
-
| `key` | | ✅ | Combinações de teclas postadas (`"Ctrl+S"`); apps que ignoram entrada postada recusam em voz alta |
|
|
217
|
-
| `app_list` | ✅ | — | Aplicativos em execução e suas janelas visíveis |
|
|
218
|
-
| `app_launch` | | ✅ | Por nome ou caminho do executável, com argumentos opcionais |
|
|
219
|
-
|
|
220
|
-
## Permissões e dados
|
|
221
|
-
|
|
222
|
-
- **Permissões**: ações mutantes cruzam a costura oficial `ctx.approval` — o plugin nunca a reimplementa nem a contorna. A lista de permissão apenas *pula a pergunta para janelas específicas*; não pode desativar as verificações de atualidade nem de identidade do processo.
|
|
223
|
-
- **Dados**: o plugin não grava nada em disco além das capturas mantidas pelo armazenamento de anexos (endereçadas por conteúdo, sob a política de anexos do harness). Observações ficam em memória (LRU limitado). Sem requisições de rede, sem armazenamento de credenciais.
|
|
224
|
-
- **Registro de sessão**: `dsh-click/observed` e `dsh-click/action` são eventos de auditoria somente-registro com fatos sanitizados de janela/processo — títulos, caminhos e texto livre são redigidos e truncados antes de serem gravados ou exibidos.
|
|
225
|
-
|
|
226
|
-
## Limites de segurança
|
|
227
|
-
|
|
228
|
-
- **Observe antes de agir, sempre.** Ações devem citar uma observação atual; uma tela mudada (hash de pixels) ou uma observação expirada é recusada com um motivo legível pelo modelo exigindo nova observação.
|
|
229
|
-
- **Aprovação é o padrão.** `requireApproval: true` a menos que você libere explicitamente janelas específicas; toda ação — liberada ou não — é auditada.
|
|
230
|
-
- **Sem roubo de foco.** O helper nunca traz a janela alvo ao primeiro plano (`focusFallback: 'never'` por padrão); a entrada é entregue via UIA ou mensagens postadas para não perturbar janelas em segundo plano.
|
|
231
|
-
- **A identidade do processo é reverificada** imediatamente antes e depois de cada ação; uma troca de processo no meio faz o resultado falhar (`PROCESS_CHANGED`).
|
|
232
|
-
- **Saída sanitizada.** Caracteres de controle são removidos, tabulações colapsam e valores com forma de credencial (chaves, tokens, JWT, cabeçalhos bearer) são redigidos antes de chegar ao modelo ou ao registro.
|
|
233
|
-
- **Falha fechada.** Plataformas não suportadas, um serviço de subprocesso ausente ou um helper indisponível recusam cada chamada em voz alta — perfis continuam inicializando em todo lugar.
|
|
234
|
-
|
|
235
|
-
## Limitações conhecidas
|
|
236
|
-
|
|
237
|
-
- **Windows primeiro.** Os backends macOS e Linux estão reservados; nessas plataformas cada chamada falha fechado com um motivo claro.
|
|
238
|
-
- **Fidelidade somente texto.** O `screen_read` depende de o aplicativo expor UIAutomation; apps sem árvore acessível oferecem apenas dicas de pixels. Cliques por coordenadas continuam disponíveis.
|
|
239
|
-
- **Apps de entrada postada.** Alguns aplicativos ignoram mensagens de janela postadas (jogos, algumas superfícies Electron); o `key` informa isso com honestidade em vez de fingir sucesso.
|
|
240
|
-
- **Auditoria de sessão em builds do harness sem envelope.** Os eventos de auditoria cruzam uma porta adaptativa: hosts que conhecem o vocabulário acrescentam diretamente, hosts com o envelope `ignorable` acrescentam com o marcador, e hosts sem envelope — `0.1.0-rc.6`–`0.1.0-rc.8`, `0.1.1-rc.2` e `0.1.2-rc.1` (que não consegue estampar o marcador ignorável — o campo do envelope é mantido apenas para compatibilidade de leitura de logs armazenados — e falha fechado para tipos desconhecidos na leitura) — não recebem append de auditoria; os resultados das ferramentas continuam sendo a trilha reconstruível. Defina `auditSessionEvents: false` para interromper os appends por completo.
|
|
241
|
-
|
|
242
|
-
## Desenvolvimento
|
|
243
|
-
|
|
244
|
-
```sh
|
|
245
|
-
pnpm install # node ^22.19 || >=24
|
|
246
|
-
pnpm run typecheck # tsc: src + tests contra o checkout local do harness
|
|
247
|
-
pnpm run typecheck:ci # tsc contra os tipos publicados 0.1.7-rc.2 (sem paths)
|
|
248
|
-
pnpm test # vitest: 66 testes, 11 arquivos (o smoke do helper roda no Windows)
|
|
249
|
-
pnpm run build # bundle tsdown + declarações tsc (lib/)
|
|
250
|
-
pnpm run verify:self-contained # especificações de dependências resolvem pelo registry
|
|
251
|
-
pnpm run verify:artifacts # face ESM construída + helper nativo presentes
|
|
252
|
-
pnpm pack # o tarball publicado
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
## Topics
|
|
256
|
-
|
|
257
|
-
`dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `computer-use`, `windows-automation`, `uiautomation`, `desktop-control`, `screen-reader`
|
|
258
|
-
|
|
259
|
-
## Contributors
|
|
260
|
-
|
|
261
|
-
- [@PerryLink](https://github.com/PerryLink) — criador e mantenedor: superfície de ferramentas, fronteira de segurança das ações, helper nativo do Windows, sanitizadores e a documentação em cinco idiomas.
|
|
262
|
-
- [@Mchsd](https://github.com/Mchsd) — adicionou a opção `auditSessionEvents` para harnesses cujo leitor de sessão rejeita os eventos de auditoria do `dsh-click` (#2).
|
|
263
|
-
|
|
264
|
-
## PerryLink DSH Plugin Family
|
|
265
|
-
|
|
266
|
-
Este projeto faz parte da família de plugins do DeepSeek Harness da [PerryLink](https://github.com/PerryLink). O registro fica recolhido abaixo para que cada README mantenha uma primeira tela curta; expanda para ver cada linha e seu status.
|
|
267
|
-
|
|
268
|
-
<details>
|
|
269
|
-
<summary>Expandir todos os plugins</summary>
|
|
270
|
-
|
|
271
|
-
| Plugin | Status |
|
|
272
|
-
|---|---|
|
|
273
|
-
| **[dsh-aqua-input-check](https://github.com/PerryLink/dsh-aqua-input-check)** | |
|
|
274
|
-
| **[dsh-archive-check](https://github.com/PerryLink/dsh-archive-check)** | |
|
|
275
|
-
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | |
|
|
276
|
-
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | |
|
|
277
|
-
| **[dsh-bid-ca-precheck](https://github.com/PerryLink/dsh-bid-ca-precheck)** | |
|
|
278
|
-
| **[dsh-bid-qual-check](https://github.com/PerryLink/dsh-bid-qual-check)** | |
|
|
279
|
-
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | |
|
|
280
|
-
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | |
|
|
281
|
-
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | |
|
|
282
|
-
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | |
|
|
283
|
-
| **[dsh-contract-stance](https://github.com/PerryLink/dsh-contract-stance)** | |
|
|
284
|
-
| **[dsh-customs-doc-check](https://github.com/PerryLink/dsh-customs-doc-check)** | |
|
|
285
|
-
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | |
|
|
286
|
-
| **[dsh-demurrage-ledger](https://github.com/PerryLink/dsh-demurrage-ledger)** | |
|
|
287
|
-
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | |
|
|
288
|
-
| **[dsh-drill-script-check](https://github.com/PerryLink/dsh-drill-script-check)** | |
|
|
289
|
-
| **[dsh-eia-guide-check](https://github.com/PerryLink/dsh-eia-guide-check)** | |
|
|
290
|
-
| **[dsh-emergency-plan](https://github.com/PerryLink/dsh-emergency-plan)** | |
|
|
291
|
-
| **[dsh-essay-rubric-check](https://github.com/PerryLink/dsh-essay-rubric-check)** | |
|
|
292
|
-
| **[dsh-evidence-check](https://github.com/PerryLink/dsh-evidence-check)** | |
|
|
293
|
-
| **[dsh-export-ctl-check](https://github.com/PerryLink/dsh-export-ctl-check)** | |
|
|
294
|
-
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | |
|
|
295
|
-
| **[dsh-fmea-table-check](https://github.com/PerryLink/dsh-fmea-table-check)** | |
|
|
296
|
-
| **[dsh-forecast-penalty](https://github.com/PerryLink/dsh-forecast-penalty)** | |
|
|
297
|
-
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | |
|
|
298
|
-
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | |
|
|
299
|
-
| **[dsh-gongwen-flow-check](https://github.com/PerryLink/dsh-gongwen-flow-check)** | |
|
|
300
|
-
| **[dsh-gongwen-word-check](https://github.com/PerryLink/dsh-gongwen-word-check)** | |
|
|
301
|
-
| **[dsh-guard-plan-qc](https://github.com/PerryLink/dsh-guard-plan-qc)** | |
|
|
302
|
-
| **[dsh-hazchem-check](https://github.com/PerryLink/dsh-hazchem-check)** | |
|
|
303
|
-
| **[dsh-hazplan-check](https://github.com/PerryLink/dsh-hazplan-check)** | |
|
|
304
|
-
| **[dsh-hidden-risk-map](https://github.com/PerryLink/dsh-hidden-risk-map)** | |
|
|
305
|
-
| **[dsh-hs-classify](https://github.com/PerryLink/dsh-hs-classify)** | |
|
|
306
|
-
| **[dsh-icd-rule-check](https://github.com/PerryLink/dsh-icd-rule-check)** | |
|
|
307
|
-
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | |
|
|
308
|
-
| **[dsh-lawcite-adapter](https://github.com/PerryLink/dsh-lawcite-adapter)** | |
|
|
309
|
-
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | |
|
|
310
|
-
| **[dsh-lc-doc-check](https://github.com/PerryLink/dsh-lc-doc-check)** | |
|
|
311
|
-
| **[dsh-learning-gap-check](https://github.com/PerryLink/dsh-learning-gap-check)** | |
|
|
312
|
-
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | |
|
|
313
|
-
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | |
|
|
314
|
-
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | |
|
|
315
|
-
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | |
|
|
316
|
-
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | |
|
|
317
|
-
| **[dsh-medrec-qc](https://github.com/PerryLink/dsh-medrec-qc)** | |
|
|
318
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | |
|
|
319
|
-
| **[dsh-nsfc-form-check](https://github.com/PerryLink/dsh-nsfc-form-check)** | |
|
|
320
|
-
| **[dsh-nurse-record-check](https://github.com/PerryLink/dsh-nurse-record-check)** | |
|
|
321
|
-
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | |
|
|
322
|
-
| **[dsh-origin-rvc-check](https://github.com/PerryLink/dsh-origin-rvc-check)** | |
|
|
323
|
-
| **[dsh-ota-review-check](https://github.com/PerryLink/dsh-ota-review-check)** | |
|
|
324
|
-
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | |
|
|
325
|
-
| **[dsh-paper-doc-adapter](https://github.com/PerryLink/dsh-paper-doc-adapter)** | |
|
|
326
|
-
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | |
|
|
327
|
-
| **[dsh-permit-report-check](https://github.com/PerryLink/dsh-permit-report-check)** | |
|
|
328
|
-
| **[dsh-pipeline-check](https://github.com/PerryLink/dsh-pipeline-check)** | |
|
|
329
|
-
| **[dsh-pleading-draft](https://github.com/PerryLink/dsh-pleading-draft)** | |
|
|
330
|
-
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | |
|
|
331
|
-
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | |
|
|
332
|
-
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | |
|
|
333
|
-
| **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | |
|
|
334
|
-
| **[dsh-policy-brief-draft](https://github.com/PerryLink/dsh-policy-brief-draft)** | |
|
|
335
|
-
| **[dsh-power-loss-split](https://github.com/PerryLink/dsh-power-loss-split)** | |
|
|
336
|
-
| **[dsh-power-ticket-check](https://github.com/PerryLink/dsh-power-ticket-check)** | |
|
|
337
|
-
| **[dsh-ppap-check](https://github.com/PerryLink/dsh-ppap-check)** | |
|
|
338
|
-
| **[dsh-protest-deadline](https://github.com/PerryLink/dsh-protest-deadline)** | |
|
|
339
|
-
| **[dsh-railway-window](https://github.com/PerryLink/dsh-railway-window)** | |
|
|
340
|
-
| **[dsh-repair-order-qc](https://github.com/PerryLink/dsh-repair-order-qc)** | |
|
|
341
|
-
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | |
|
|
342
|
-
| **[dsh-review-reply-check](https://github.com/PerryLink/dsh-review-reply-check)** | |
|
|
343
|
-
| **[dsh-rulefile-check](https://github.com/PerryLink/dsh-rulefile-check)** | |
|
|
344
|
-
| **[dsh-safety-brief-check](https://github.com/PerryLink/dsh-safety-brief-check)** | |
|
|
345
|
-
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | |
|
|
346
|
-
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | |
|
|
347
|
-
| **[dsh-site-log-check](https://github.com/PerryLink/dsh-site-log-check)** | |
|
|
348
|
-
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | |
|
|
349
|
-
| **[dsh-soe-decision-check](https://github.com/PerryLink/dsh-soe-decision-check)** | |
|
|
350
|
-
| **[dsh-soilwater-check](https://github.com/PerryLink/dsh-soilwater-check)** | |
|
|
351
|
-
| **[dsh-sop-sync-check](https://github.com/PerryLink/dsh-sop-sync-check)** | |
|
|
352
|
-
| **[dsh-spc-gbt-adapter](https://github.com/PerryLink/dsh-spc-gbt-adapter)** | |
|
|
353
|
-
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | |
|
|
354
|
-
| **[dsh-tender-extract](https://github.com/PerryLink/dsh-tender-extract)** | |
|
|
355
|
-
| **[dsh-tender-matrix](https://github.com/PerryLink/dsh-tender-matrix)** | |
|
|
356
|
-
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | |
|
|
357
|
-
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | |
|
|
358
|
-
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | |
|
|
359
|
-
| **[dsh-warranty-calc](https://github.com/PerryLink/dsh-warranty-calc)** | |
|
|
360
|
-
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | 🧊 CONGELADO — ver o README do repositório |
|
|
361
|
-
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | 🧊 CONGELADO — ver o README do repositório |
|
|
362
|
-
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | 🧊 CONGELADO — ver o README do repositório |
|
|
363
|
-
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | 🧊 CONGELADO — ver o README do repositório |
|
|
364
|
-
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | 🧊 CONGELADO — ver o README do repositório |
|
|
365
|
-
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | 🚫 RETIRADO — ver o README do repositório |
|
|
366
|
-
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | 🚫 RETIRADO — ver o README do repositório |
|
|
367
|
-
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | 🚫 RETIRADO — ver o README do repositório |
|
|
368
|
-
|
|
369
|
-
</details>
|
|
370
|
-
|
|
371
|
-
## License
|
|
372
|
-
|
|
373
|
-
[Apache License 2.0](LICENSE) © 2026 dsh-click contributors
|
|
374
|
-
|
|
375
|
-
### Instalar a partir do mercado do DSH Desktop
|
|
376
|
-
|
|
377
|
-
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.
|