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%