CommunityEscrita e Ediçãogithub.com

FuzzyTG/doc-review-skill

Skill do OpenClaw para implantar páginas de revisão de documentos protegidas por senha, com anotações inline no Cloudflare Pages.

O que é doc-review-skill?

Este skill permite que um agente de IA implante artigos e documentos no Cloudflare Pages com suporte a anotações inline de texto. Os revisores podem selecionar trechos e adicionar comentários, que são persistentes no banco de dados D1 do Cloudflare. O agente pode então ler o feedback e iterar sobre o conteúdo, garantindo um ciclo de revisão colaborativo e seguro. É compatível com ambientes OpenClaw e requer credenciais da Cloudflare com permissão D1 Edit. O processo de deploy é totalmente automatizado por scripts shell, que criam bancos de dados D1 dedicados para cada projeto (com nomenclatura `review-<project-name>`), configuram a proteção por senha via Cloudflare Secrets e geram os arquivos HTML necessários. O skill oferece quatro temas visuais (editorial, magazine, swiss, refined) para adaptar a apresentação do documento. A estrutura de metadados (`meta.json`) armazena informações essenciais como caminho do arquivo fonte, tipo de fonte e tema utilizado, permitindo iterações futuras sem perda de dados. Para reimplantação, é crucial usar o mesmo nome de projeto para preservar o banco de dados e as anotações existentes. A limpeza envolve três etapas: exclusão do projeto Pages, do banco D1 e do diretório local de persistência.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add FuzzyTG/doc-review-skill

Installed? Explore more Escrita e Edição skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Skill de Revisão de Documento

Implante artigos/documentos no Cloudflare Pages com suporte a anotação inline de texto. Os revisores selecionam texto e adicionam comentários. Os comentários persistem no Cloudflare D1. O agente pode ler o feedback e iterar. Este skill é sempre protegido por senha.

Pré-requisitos

  • Credenciais da Cloudflare: $HOME/.openclaw/credentials/cloudflare.json
  • O token de API da Cloudflare deve ter a permissão D1 Edit
  • O banco de dados D1 é criado automaticamente pelo deploy.sh — Proibido criar manualmente ou passar parâmetros DB

Regras Principais

  1. O nome do projeto deve terminar com -review — o deploy.sh exige isso
  2. Cada página de revisão tem seu próprio banco de dados D1 — regra de nomenclatura review-<project-name>, criado automaticamente, proibido reutilizar
  3. Diretório de persistência: $HOME/.openclaw/published-content/<project-name>/ — armazena meta.json, content.html, index.html
  4. content.html é o artefato de build — ao reimplantar, regere a partir do arquivo fonte, não altere o content.html diretamente

Fluxo de Trabalho

1. Implantar para Revisão (primeira publicação)

  1. Identifique o arquivo fonte, gere HTML semântico puro (consulte as Regras de HTML de Conteúdo abaixo) → salve como content.html
  2. Execute o render.js para envolver com o tema → produz index.html:
    node references/render.js \
      --input /tmp/<project-name>/content.html \
      --output /tmp/<project-name>/index.html \
      --theme editorial
    
  3. Implante (a injeção de anotações + criação do D1 é totalmente automática):
    bash scripts/deploy.sh <project-name> /tmp/<project-name>
    
  4. Após a implantação, atualize imediatamente o meta.json (o deploy.sh cria automaticamente um meta.json inicial; o agente deve complementar com as informações do arquivo fonte):
    python3 -c "
    import json
    meta_path = '$HOME/.openclaw/published-content/<project-name>/meta.json'
    with open(meta_path) as f: meta = json.load(f)
    meta['source'] = '<caminho do arquivo fonte, ex: /caminho/para/seu/arquivo/fonte.md>'
    meta['sourceType'] = '<markdown|pdf|text|generated>'
    meta['theme'] = '<tema realmente usado>'
    with open(meta_path, 'w') as f: json.dump(meta, f, indent=2, ensure_ascii=False)
    "
    

Protegido por Senha com Senha Definida pelo Usuário

bash scripts/deploy.sh <project-name> /tmp/<project-name> --password <senha>

O script de implantação automaticamente:

  • Cria um banco de dados D1 dedicado chamado review-<project-name> (1:1 por projeto, nunca reutilizado)
  • Cria as tabelas de anotações + comentários
  • Copia functions/api/annotations.js de references/annotations-api.js
  • Copia functions/_middleware.js de references/middleware-template.js
  • Define PAGE_PASSWORD via wrangler pages secret put (senha nunca no código fonte)
  • Gera wrangler.toml com a vinculação do D1
  • Persiste content.html, index.html e meta.json em $HOME/.openclaw/published-content/<project-name>/

⚠️ Proibido passar manualmente db-name ou db-id. O script gerencia tudo automaticamente, garantindo que cada página de revisão tenha seu próprio banco de dados D1.

Gerenciamento de senha:

  • Primeira implantação: parâmetro --password especificado, ou gerado automaticamente
  • A senha é armazenada como Cloudflare Secret, não no meta.json nem no código fonte
  • Trocar senha: deploy.sh <project-name> --change-password <nova-senha> (atualiza secret + reimplanta + meta.json)
  • Reimplantação não requer redefinição de senha (secret persiste entre implantações)

2. Ler Feedback

Consulte o D1 para obter todas as anotações e comentários (o nome do banco é sempre review-<project-name>):

npx wrangler d1 execute review-<project-name> --remote --command "
  SELECT a.text as highlighted, c.author, c.text as comment, c.created_at
  FROM comments c JOIN annotations a ON c.annotation_id = a.id
  ORDER BY c.created_at
"

Apresente o feedback como uma tabela ao usuário.

3. Iterar (Reimplante)

Quando o usuário solicitar alterações com base no feedback da revisão:

  1. Leia $HOME/.openclaw/published-content/<project-name>/meta.json — obtenha o caminho do source e o sourceType
  2. Leia o feedback do D1 (igual à Seção 2)
  3. Com base no sourceType, decida como atualizar:
    • markdown/text: releia o arquivo fonte do caminho source → regere o content.html
    • pdf: se o arquivo fonte ainda existir, reextraia; caso contrário, use $HOME/.openclaw/published-content/<project-name>/content.html
    • generated: use $HOME/.openclaw/published-content/<project-name>/content.html como base para modificar
  4. Renderize com o mesmo tema → index.html
  5. Reimplante com exatamente o mesmo project-name:
    bash scripts/deploy.sh <project-name> /tmp/<project-name>
    
    • Mesmo nome de projeto → mesmo banco de dados → anotações são preservadas
    • Ao reimplantar, é necessário passar --password para manter a senha original, caso contrário uma nova senha será gerada, sobrescrevendo o secret antigo

⚠️ Reimplantação deve usar o mesmo project-name. Trocar de nome = nova página + novo banco de dados, perda dos dados antigos.

Anotações processadas desaparecerão automaticamente (o texto destacado não corresponderá mais na nova página).

4. Limpeza (Remover)

Ao excluir um projeto, é necessário limpar também o banco de dados D1 e o diretório local de persistência, sem deixar resíduos.

# 1. Excluir o projeto Pages
npx wrangler pages project delete <project-name>

# 2. Excluir o banco de dados D1 correspondente (regra de nomenclatura fixa: review-<project-name>)
npx wrangler d1 delete review-<project-name>

# 3. Excluir o diretório local de persistência
rm -rf $HOME/.openclaw/published-content/<project-name>

As três etapas devem ser concluídas para que a limpeza seja considerada completa.

Schema meta.json

{
  "type": "review",
  "project": "my-report-review",
  "source": "/caminho/para/seu/arquivo/fonte.md",
  "sourceType": "markdown",
  "theme": "editorial",
  "dbName": "review-my-report-review",
  "dbId": "uuid-aqui",
  "created": "2026-04-12T13:20:00+08:00",
  "lastDeployed": "2026-04-12T15:30:00+08:00"
}

Valores de sourceType:

  • markdown — arquivo .md em knowledge-base ou outro caminho (mais comum)
  • pdf — arquivo PDF
  • text — arquivo de texto simples
  • generated — gerado diretamente na conversa, sem arquivo fonte

Configuração do Ambiente

Todos os comandos wrangler precisam de:

source <(python3 -c "
import json
with open('$HOME/.openclaw/credentials/cloudflare.json') as f:
    c = json.load(f)
print(f'export CLOUDFLARE_ACCOUNT_ID={c[\"account_id\"]}')
print(f'export CLOUDFLARE_API_TOKEN={c[\"api_token\"]}')
")

Notas

  • A senha é armazenada como Cloudflare Secret (PAGE_PASSWORD), nunca no código fonte ou meta.json
  • Os comentários são armazenados com o nome de autor "Reviewer" por padrão (nenhum login necessário)
  • Nível gratuito do D1: 5M leituras/dia, 100K escritas/dia — mais que suficiente
  • A correspondência de anotações é baseada em texto; se o texto fonte mudar, os destaques antigos desaparecem naturalmente
  • O estado persistente reside em $HOME/.openclaw/published-content/<project-name>/ — compartilhado entre todos os agentes
  • Os arquivos de tema são sincronizados a partir de cloudflare-pages — não edite themes/ ou render.js diretamente aqui. Modifique em cloudflare-pages/references/ e depois execute bash scripts/sync-themes.sh (do skill cloudflare-pages)

Regras de HTML de Conteúdo

Ao gerar conteúdo HTML para páginas de revisão, siga estas regras rigorosamente:

HTML Semântico Apenas

  • Gere HTML semântico puro — sem tags <style>, sem estilos inline, sem wrappers <html>/<head>/<body>
  • Use tags padrão: <h1>-<h4>, <p>, <table>, <ul>/<ol>, <blockquote>, <details>, <hr>

Convenções Estruturais

  • <table> para comparações, pontuações, grades de dados
  • <blockquote> para principais conclusões ou citações importantes
  • <details><summary> para seções recolhíveis
  • <div class="toc"> para índice
  • <p class="meta"> para linhas de metadados (data, autor, etc.)
  • <div class="footer"> para texto de rodapé

Classes de Badge

  • <span class="badge badge-green">Pass</span> — positivo
  • <span class="badge badge-yellow">Aviso</span> — cautela
  • <span class="badge badge-red">Miss</span> — negativo

Biblioteca de Componentes (Importante — Deve Ser Usada)

Ao gerar content.html, é obrigatório usar ativamente os seguintes componentes para dar hierarquia visual ao conteúdo. HTML simples com <p> + <ul> é inaceitável.

Caixas de Destaque — destacar informações-chave

<div class="callout">Callout padrão: informações importantes em geral</div>
<div class="callout callout-conclusion"><strong>Conclusão:</strong> julgamento central e recomendação final</div>
<div class="callout callout-warning"><strong>Atenção:</strong> riscos, preocupações, problemas a serem observados</div>
<div class="callout callout-important"><strong>Importante:</strong> dados críticos, fatos que não podem ser ignorados</div>

Cartões de Caminho — comparação de opções/caminhos

<div class="path-card">
  <div class="path-label">Plano A</div>
  <p>Descrição...</p>
</div>
<div class="path-card recommended">
  <div class="path-label">Plano B (Recomendado)</div>
  <p>Descrição...</p>
</div>

Cadeia de Raciocínio — cadeia de raciocínio lógico

<div class="reasoning-chain">
  <ol>
    <li>Primeiro passo do raciocínio...</li>
    <li>Segundo passo do raciocínio...</li>
    <li>Portanto, concluímos que...</li>
  </ol>
</div>

Itens de Ação — sugestões de ação

<div class="action-items">
  <ol>
    <li><strong>Curto prazo (1 semana):</strong> ação específica...</li>
    <li><strong>Médio prazo (1 mês):</strong> ação específica...</li>
  </ol>
</div>

Recomendação Final — bloco escuro

<div class="final-rec">
  <p><strong>Recomendação final:</strong> conclusão central em uma frase, colocada ao final como encerramento.</p>
</div>

Palavras-chave — tags

<div class="keywords">
  <span class="kw">Tag1</span>
  <span class="kw">Tag2</span>
</div>

Divisores de Seção — melhor efeito nos temas magazine/refined

<div class="section-divider"><span class="num">Seção 01</span></div>

Aviso Legal — ao final do documento

<p class="disclaimer">Este relatório foi gerado por IA, é apenas para referência e não constitui aconselhamento profissional.</p>

Padrões de Qualidade do Conteúdo

Ao gerar content.html, certifique-se de:

  1. Cada seção h2 contém pelo menos 1 componente (callout / path-card / table / reasoning-chain etc.)
  2. Conclusões-chave devem usar callout-conclusion, não fique escondida em parágrafos comuns
  3. Se houver comparação, use path-card ou table, não apenas texto corrido
  4. Deve haver um final-rec ao final (se o conteúdo tiver conclusão/recomendação clara)
  5. TOC deve ser envolvido por <div class="toc">, não use <ul> simples

Temas Disponíveis

  • editorial — estilo de análise de texto longo (serifa no corpo + sans-serif nos títulos, fundo cinza quente, acentos azul-acinzentados escuros, coluna estreita de 740px). Melhor para análises profundas, relatórios de pesquisa. Recursos: caixas de destaque, cartões de caminho, cadeias de raciocínio, itens de ação.
  • magazine — estilo de revista de texto longo (Playfair Display nos títulos + DM Sans no corpo, cabeçalho escuro hero, acento vermelho, numeração "Seção 01", divisores ***). Melhor para peças editoriais de alto impacto, relatórios visualmente marcantes. Requer Google Fonts.
  • swiss — estilo internacional suíço (IBM Plex Mono no corpo + Instrument Serif nos títulos, fundo branco puro, preto+vermelho+azul, layout de grade, 900px). Melhor para documentos ultra-limpos, racionais, com sensação de engenharia. Requer Google Fonts.
  • refined — estilo premium refinado (Cormorant Garamond serifa no corpo + Outfit sans-serif nos rótulos, fundo creme com textura de pergaminho, ouro + verde sálvia + rosa, layout centralizado, 700px). Melhor para white papers premium, briefings executivos. Requer Google Fonts.

Seleção de Tema

  • Se o usuário especificar um tema (por exemplo, "editorial", "magazine", "swiss", "refined"), use esse tema.
  • Se o usuário não especificar, selecione automaticamente com base no tipo de conteúdo:
    • editorial: análise profunda, argumentos longos, comparações de escolas/produtos, briefings de pesquisa, relatórios formais, avaliações — escolha padrão
    • magazine: peças editoriais de alto impacto que se beneficiam de apresentação visual dramática
    • swiss: documentos ultra-limpos, racionais, estilo engenharia, especificações técnicas, comparações, resumos de dados
    • refined: white papers premium, briefings executivos, documentos com sensação de luxo, análise de alto risco
  • Se não tiver certeza, o padrão é editorial.

Habilidades Relacionadas