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.

💡 Dica: O passo mais importante antes de publicar nã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

Opções de Publicação


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:

BASH
# Compilar TypeScript
pnpm build

# Confirmar saída
ls dist/
# index.js  index.d.ts  ...

▶ Exemplo 3:

BASH
# 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:

TEXT 📖 Somente leitura
# .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

BASH
# 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

JSON
{
  "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


4. Tópico GitHub dsh-plugin

(1) Adicionando um tópico

Adicione o tópico dsh-plugin nas configurações do repositório GitHub:

TEXT 📖 Somente leitura
Repository Settings → Topics → Add topic: dsh-plugin

(2) Finalidade do tópico

Outros usuários buscam plugins via tópico:

BASH
# 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

TEXT 📖 Somente leitura
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

TEXT 📖 Somente leitura
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

BASH
# 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

BASH
# 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

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

BASH
# 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:

  1. Documente todas as mudanças no CHANGELOG.md
  2. Forneça um guia de migração
  3. Mantenha a versão anterior por pelo menos 6 meses
  4. Marque "Breaking Changes" no README

7. Escrita de Documentação do Plugin

(1) Template de README

MARKDOWN
# @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

MARKDOWN
# 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

P Preciso usar o prefixo @dsh-plugin/?
R Recomendado mas não obrigatório. O prefixo @dsh-plugin/ facilita a busca e identificação. Plugins privados podem usar seu próprio escopo.
P Posso publicar apenas no GitHub sem npm?
R Sim. Usuários instalam via github:user/repo. Mas instalações via npm são mais rápidas e estáveis.
P Como despublicar uma versão lançada?
R 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.
P Devo publicar o código-fonte TypeScript?
R Recomendado. Configure "types": "dist/index.d.ts" no package.json e inclua arquivos .d.ts. Exclua o código-fonte via .npmignore.
P Como testar um plugin antes de publicar?
R 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
P O que fazer se encontrar um bug após publicar?
R Corrija o bug → incremente a versão de patch → publique. Nunca modifique uma versão já publicada.

📖 Resumo


📝 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.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%