DeepSeek Harness: Publicação de Plugins
Última atualização: 2026-08-31
Um plugin bem escrito rodando apenas na sua própria máquina tem valor limitado. Publicar no npm e no GitHub permite que outros usuários do DSH instalem e usem, integrando seu plugin ao ecossistema. Esta aula cobre o processo completo do código à publicação.
npm publish — é escrever um bom README e declaração de compatibilidade. Se os usuários conseguem usar seu plugin depende de documentação clara.
📋 Pré-requisitos: Completou 15-define-tool.md, capaz de escrever plugins de tool completos
1. O Que Você Vai Aprender
- Processo de publicação no npm
- Campo dsh no package.json
- Tópico GitHub dsh-plugin
- Gerenciamento de versão e semver
- Declarações de compatibilidade
- Escrita de documentação do plugin
2. Processo de Publicação no npm
(1) Checklist Pré-Publicação
| Item de Verificação | Comando/Método |
|---|---|
| Código compila | pnpm build |
| Testes passam | pnpm test |
| package.json correto | Verificar name/version/main |
| README existe | Arquivo existe com conteúdo completo |
| .npmignore configurado | Excluir src/ e outros arquivos de dev |
| Logado no npm | npm whoami |
▶ Exemplo 2:
# Compilar TypeScript
pnpm build
# Confirmar saída
ls dist/
# index.js index.d.ts ...
▶ Exemplo 3:
# Primeira publicação
npm publish --access public
# Publicar após atualização de versão
npm version patch # 1.0.0 → 1.0.1
npm publish
▶ Exemplo 4:
# .npmignore
src/
tests/
tsconfig.json
*.tsbuildinfo
.git/
.vscode/
Publicar apenas a saída compilada, não o código-fonte.
(5) Verificação Pós-Publicação
# Instalar em outro projeto
pnpm add @dsh-plugin/my-tool
# Verificar importação
node -e "console.log(require('@dsh-plugin/my-tool'))"
3. Campo dsh no package.json
(1) Estrutura do Campo dsh
{
"name": "@dsh-plugin/my-tool",
"version": "1.0.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"dsh": {
"name": "my-tool",
"description": "A custom tool for DSH",
"services": ["tools"],
"inject": ["tools"],
"capabilities": [],
"compatibility": {
"dsh": ">=0.5.0",
"cordis": ">=1.0.0"
},
"permissions": [
"fs.read",
"network.outbound"
],
"config": {
"apiKey": {
"type": "string",
"required": true,
"description": "API key for the service"
}
}
}
}
(2) Descrições dos Campos
| Campo | Tipo | Descrição |
|---|---|---|
name |
string | Identificador do plugin (corresponde ao nome da export const) |
description |
string | Descrição do plugin |
services |
string[] | Lista de serviços fornecidos |
inject |
string[] | Lista de serviços necessários |
capabilities |
string[] | Lista de capacidades implementadas |
compatibility |
object | Requisitos de compatibilidade |
permissions |
string[] | Permissões necessárias |
config |
object | Descrições dos itens de configuração |
(3) Finalidade do Campo dsh
- Na instalação: O DSH lê permissões para exibir solicitações de permissão
- No carregamento: O DSH lê compatibilidade para verificar compatibilidade de versão
- Na descoberta: Busca no npm pode filtrar pelo campo dsh
4. Tópico GitHub dsh-plugin
(1) Adicionando um tópico
Adicione o tópico dsh-plugin nas configurações do repositório GitHub:
Repository Settings → Topics → Add topic: dsh-plugin
(2) Finalidade do tópico
Outros usuários buscam plugins via tópico:
# Busca via GitHub CLI
gh search repos --topic dsh-plugin --sort stars
# Busca web no GitHub
https://github.com/topics/dsh-plugin
(3) Combinações de Tópicos Recomendadas
dsh-plugin ← Obrigatório
deepseek-harness ← Opcional, aumenta descobribilidade
Tipo de Tool ← ex.: database, search, devops
(4) Convenções de Nomenclatura
| Local | Nomenclatura | Exemplo |
|---|---|---|
| Nome do pacote npm | @dsh-plugin/xxx |
@dsh-plugin/database |
| Nome do repo GitHub | dsh-plugin-xxx |
dsh-plugin-database |
| Nome do plugin | xxx |
database |
5. Gerenciamento de Versão e Semver
(1) Regras do Semver
Formato de versão: MAJOR.MINOR.PATCH
| Tipo de Mudança | Mudança de Versão | Descrição |
|---|---|---|
| PATCH | 1.0.0 → 1.0.1 | Correção de bug, compatível com versões anteriores |
| MINOR | 1.0.0 → 1.1.0 | Nova funcionalidade, compatível com versões anteriores |
| MAJOR | 1.0.0 → 2.0.0 | Mudança incompatível (breaking change) |
(2) Guia de Mudança de Versão
Quando incrementar PATCH:
- Corrigir um bug de tool
- Corrigir um problema de validação de config
- Atualização de documentação
Quando incrementar MINOR:
- Adicionar uma nova tool
- Adicionar uma opção de config (com valor padrão)
- Adicionar uma implementação de capability
- Adicionar dependências opcionais
Quando incrementar MAJOR:
- Remover uma tool
- Alterar formato de parâmetro de tool
- Remover uma opção de config
- Alterar lista de inject
- Alterar interface de Capability
(3) Comando npm version
# Incrementar PATCH
npm version patch -m "fix: resolve timeout issue"
# Incrementar MINOR
npm version minor -m "feat: add batch query tool"
# Incrementar MAJOR
npm version major -m "breaking: change tool parameter format"
(4) Versões de Pré-Lançamento
# Versão Alpha
npm version prealpha --preid alpha
# 1.0.0 → 1.1.0-alpha.0
# Versão Beta
npm version prebeta --preid beta
# 1.0.0 → 1.1.0-beta.0
# Versão RC
npm version prerelease --preid rc
# 1.1.0-beta.0 → 1.1.0-rc.0
6. Declarações de Compatibilidade
(1) Declaração no package.json
{
"dsh": {
"compatibility": {
"dsh": ">=0.5.0",
"cordis": ">=1.0.0",
"node": ">=18.0.0"
}
},
"peerDependencies": {
"@deepseek-ai/dsh": ">=0.5.0",
"@deepseek-ai/cordis": ">=1.0.0"
}
}
(2) Sintaxe de Intervalo de Versão
| Sintaxe | Significado | Versões Correspondentes |
|---|---|---|
>=0.5.0 |
Maior ou igual | 0.5.0, 0.6.0, 1.0.0 |
^0.5.0 |
Compatível com 0.5.x | 0.5.0 ~ 0.5.9 |
~0.5.0 |
Compatível com 0.5.0.x | 0.5.0 ~ 0.5.0.9 |
0.5.x |
Qualquer patch de 0.5 | 0.5.0 ~ 0.5.99 |
(3) Verificação de Compatibilidade
# Verificação integrada do DSH
dsh plugin check @dsh-plugin/my-tool
# Saída
✅ Compatible with dsh@0.5.0
✅ Compatible with cordis@1.0.0
⚠️ Requires Node.js >= 18.0.0 (current: 16.20.0)
(4) Tratamento de Breaking Changes
Ao publicar uma versão MAJOR:
- Documente todas as mudanças no CHANGELOG.md
- Forneça um guia de migração
- Mantenha a versão anterior por pelo menos 6 meses
- Marque "Breaking Changes" no README
7. Escrita de Documentação do Plugin
(1) Template de README
# @dsh-plugin/my-tool
> DSH plugin for [descrição da funcionalidade]
## Instalação
\```bash
dsh plugin add @dsh-plugin/my-tool
\```
## Configuração
\```yaml
plugins:
'@dsh-plugin/my-tool':
config:
apiKey: sk-xxx
maxRetries: 3
\```
## Tools Fornecidas
| Tool | Descrição |
|:-----|:----------|
| `my_tool` | Faz algo útil |
## Dependências
- DSH >= 0.5.0
- Cordis >= 1.0.0
## Permissões
- fs.read
- network.outbound
### ▶ Exemplo:
\```text
👤 Alice: Analyze project with my_tool
🤖 Agent:
🔧 Using tool: my_tool
→ Result: ...
\```
## Licença
MIT
(2) Elementos da Documentação
| Elemento | Obrigatório | Descrição |
|---|---|---|
| Instruções de instalação | ✅ | Comando de instalação em uma linha |
| Instruções de configuração | ✅ | Exemplo de config YAML |
| Lista de tools | ✅ | Todas as tools fornecidas |
| Declaração de dependências | ✅ | Requisitos de versão DSH/Cordis |
| Declaração de permissões | ✅ | Permissões necessárias e motivos |
| Exemplo de uso | ✅ | Pelo menos um exemplo completo |
| Docs de API | ⚠️ | Se fornecer um Service |
| Guia de migração | ❌ | Apenas para versões MAJOR |
(3) Manutenção do CHANGELOG
# Changelog
## 1.1.0 (2026-08-20)
### Added
- batch_query tool para consultar múltiplos caminhos
- Opção de config `maxDepth` para análise recursiva
### Fixed
- Tratamento de timeout para diretórios grandes
## 1.0.0 (2026-08-01)
### Breaking
- Alterado formato de parâmetro de `dir_path` para `path`
### Added
- Lançamento inicial com ferramenta file_info
❓ Perguntas Frequentes
@dsh-plugin/?@dsh-plugin/ facilita a busca e identificação. Plugins privados podem usar seu próprio escopo.github:user/repo. Mas instalações via npm são mais rápidas e estáveis.bash npm unpublish @dsh-plugin/my-tool@1.0.0 Apenas dentro de 24 horas após a publicação, e não é possível despublicar versões com dependentes existentes."types": "dist/index.d.ts" no package.json e inclua arquivos .d.ts. Exclua o código-fonte via .npmignore.bash # Teste com link local cd dsh-plugin-my-tool npm link cd ../my-dsh-project npm link @dsh-plugin/my-tool # Verificar dsh plugin list 📖 Resumo
- Fluxo de publicação no npm: build → verificação →
npm publish - Campo
dshno package.json descreve metadados do plugin: services, dependências, permissões, compatibilidade - Tópico GitHub
dsh-pluginpermite que outros descubram plugins via busca por tópicos - Gerenciamento de versão semver: PATCH (correção de bug), MINOR (nova funcionalidade), MAJOR (breaking change)
- Compatibilidade declarada em
dsh.compatibilityepeerDependencies - README deve incluir: instalação, configuração, lista de tools, dependências, permissões, exemplos
📝 Exercícios
1. ⭐ Básico: Adicione um package.json completo (com campo dsh) e README.md para o plugin file_count que você escreveu anteriormente. Teste localmente com npm link.
2. ⭐⭐ Intermediário: Seguindo as convenções semver, adicione uma nova funcionalidade (nova tool) ao seu plugin, incremente a versão MINOR. Depois corrija um bug, incremente a versão PATCH. Registre a saída de cada comando npm version.
3. ⭐⭐⭐ Desafio: Publique seu plugin no npm (pode ser --access public ou um registro local). Após publicar, instale a partir de outro projeto e verifique se toda a funcionalidade funciona. Escreva um CHANGELOG.md documentando o histórico de versões.