@lugom.io/hefesto 0.2.0 → 1.0.0
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/agents/hefesto-argos.md +93 -0
- package/agents/hefesto-athena.md +99 -0
- package/agents/hefesto-hermes.md +96 -0
- package/bin/install.js +122 -52
- package/hooks/hefesto-check-update.cjs +32 -11
- package/hooks/hefesto-statusline.cjs +8 -17
- package/hooks/hefesto-workflow.cjs +68 -0
- package/package.json +14 -4
- package/skills/hefesto-context/SKILL.md +67 -14
- package/skills/hefesto-debug/SKILL.md +54 -0
- package/skills/hefesto-design/SKILL.md +184 -0
- package/skills/hefesto-execute/SKILL.md +133 -0
- package/skills/hefesto-init/SKILL.md +105 -0
- package/skills/hefesto-init/references/api.md +116 -0
- package/skills/hefesto-init/references/cli.md +91 -0
- package/skills/hefesto-init/references/mobile.md +69 -0
- package/skills/hefesto-init/references/web.md +246 -0
- package/skills/hefesto-new-feature/SKILL.md +87 -0
- package/skills/hefesto-security/SKILL.md +89 -0
- package/skills/hefesto-security/references/boundaries-and-bypasses.md +152 -0
- package/skills/hefesto-security/references/secrets-detection.md +121 -0
- package/skills/hefesto-security/references/severity-and-judgment.md +176 -0
- package/skills/hefesto-simplify/SKILL.md +82 -0
- package/templates/TPL-CLAUDE.md +54 -0
- package/templates/TPL-CONFIG.json +19 -0
- package/templates/TPL-DESIGN.md +305 -0
- package/templates/{FEATURE.md → TPL-FEATURE.md} +13 -6
- package/templates/TPL-PROJECT.md +50 -0
- package/templates/TPL-RECON.md +60 -0
- package/templates/{RESEARCH.md → TPL-RESEARCH.md} +32 -35
- package/templates/TPL-SECURITY.md +42 -0
- package/templates/TPL-SIMPLIFY.md +40 -0
- package/templates/{STATE.md → TPL-STATE.md} +1 -7
- package/templates/TPL-VERDICT.md +34 -0
- package/agents/.gitkeep +0 -0
- package/agents/hefesto-researcher.md +0 -180
- package/commands/hefesto/init.md +0 -67
- package/commands/hefesto/new-feature.md +0 -50
- package/commands/hefesto/status.md +0 -46
- package/commands/hefesto/update.md +0 -31
- package/templates/PROJECT.md +0 -28
- package/templates/ROADMAP.md +0 -23
|
@@ -1,26 +1,20 @@
|
|
|
1
1
|
---
|
|
2
|
-
id: {{RESEARCH_ID}}
|
|
3
|
-
title:
|
|
4
|
-
type: {{RESEARCH_TYPE}}
|
|
5
|
-
depth: {{RESEARCH_DEPTH}}
|
|
2
|
+
id: '{{RESEARCH_ID}}'
|
|
3
|
+
title: '{{RESEARCH_TITLE}}'
|
|
4
|
+
type: '{{RESEARCH_TYPE}}'
|
|
5
|
+
depth: '{{RESEARCH_DEPTH}}'
|
|
6
6
|
status: draft
|
|
7
|
-
feature: {{LINKED_FEATURE}}
|
|
8
|
-
created: {{DATE}}
|
|
9
|
-
updated: {{DATE}}
|
|
7
|
+
feature: '{{LINKED_FEATURE}}'
|
|
8
|
+
created: '{{DATE}}'
|
|
9
|
+
updated: '{{DATE}}'
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# {{RESEARCH_ID}}: {{RESEARCH_TITLE}}
|
|
13
13
|
|
|
14
|
-
## Objetivo
|
|
14
|
+
## Objetivo e Escopo
|
|
15
15
|
|
|
16
16
|
{{RESEARCH_OBJECTIVE}}
|
|
17
17
|
|
|
18
|
-
## Contexto
|
|
19
|
-
|
|
20
|
-
{{RESEARCH_CONTEXT}}
|
|
21
|
-
|
|
22
|
-
## Escopo
|
|
23
|
-
|
|
24
18
|
**Perguntas a responder:**
|
|
25
19
|
|
|
26
20
|
1. {{QUESTION_1}}
|
|
@@ -31,6 +25,27 @@ updated: {{DATE}}
|
|
|
31
25
|
|
|
32
26
|
- {{EXCLUSION_1}}
|
|
33
27
|
|
|
28
|
+
## Recomendação
|
|
29
|
+
|
|
30
|
+
{{RECOMMENDATION}}
|
|
31
|
+
|
|
32
|
+
## Paisagem de Implementação
|
|
33
|
+
|
|
34
|
+
### Arquivos-chave
|
|
35
|
+
|
|
36
|
+
- `{{FILE_PATH}}` — {{FILE_DESCRIPTION}}
|
|
37
|
+
- `{{FILE_PATH}}` — {{CHANGE_DESCRIPTION}}
|
|
38
|
+
|
|
39
|
+
### Ordem de Construção
|
|
40
|
+
|
|
41
|
+
{{BUILD_ORDER}}
|
|
42
|
+
|
|
43
|
+
### Verificação
|
|
44
|
+
|
|
45
|
+
{{VERIFICATION_STEPS}}
|
|
46
|
+
|
|
47
|
+
<!-- Seções abaixo: incluir apenas quando tiverem conteúdo real -->
|
|
48
|
+
|
|
34
49
|
## Descobertas
|
|
35
50
|
|
|
36
51
|
### {{FINDING_TITLE_1}}
|
|
@@ -57,12 +72,6 @@ updated: {{DATE}}
|
|
|
57
72
|
| -------- | -------------- | ------------------------ |
|
|
58
73
|
| — | — | — |
|
|
59
74
|
|
|
60
|
-
## Estado da Arte
|
|
61
|
-
|
|
62
|
-
| Antes | Agora | Por quê mudou |
|
|
63
|
-
| ----- | ----- | ------------- |
|
|
64
|
-
| — | — | — |
|
|
65
|
-
|
|
66
75
|
## Armadilhas
|
|
67
76
|
|
|
68
77
|
| Severidade | Armadilha | Se ignorar | Prevenção |
|
|
@@ -73,18 +82,6 @@ updated: {{DATE}}
|
|
|
73
82
|
|
|
74
83
|
## Fontes
|
|
75
84
|
|
|
76
|
-
| #
|
|
77
|
-
|
|
|
78
|
-
| 1
|
|
79
|
-
|
|
80
|
-
## Conclusão
|
|
81
|
-
|
|
82
|
-
{{CONCLUSION}}
|
|
83
|
-
|
|
84
|
-
## Recomendação
|
|
85
|
-
|
|
86
|
-
{{RECOMMENDATION}}
|
|
87
|
-
|
|
88
|
-
## Notas
|
|
89
|
-
|
|
90
|
-
{{NOTES}}
|
|
85
|
+
| # | Título | URL | Confiabilidade |
|
|
86
|
+
| --- | ------ | --- | -------------- |
|
|
87
|
+
| 1 | — | — | alta |
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
## Relatório de Segurança
|
|
2
|
+
|
|
3
|
+
feature: {{FEATURE_ID}}
|
|
4
|
+
escopo: {{FILE_COUNT}} arquivos analisados
|
|
5
|
+
|
|
6
|
+
### 🔴 Críticos ({{CRITICAL_COUNT}})
|
|
7
|
+
|
|
8
|
+
| Arquivo | Linha | Categoria | Descrição | Fix |
|
|
9
|
+
| ------------- | -------- | ------------ | --------------- | --------------- |
|
|
10
|
+
| {{FILE_PATH}} | {{LINE}} | {{CATEGORY}} | {{DESCRIPTION}} | {{FIX_APPLIED}} |
|
|
11
|
+
|
|
12
|
+
### ⚠ Warnings ({{WARNING_COUNT}})
|
|
13
|
+
|
|
14
|
+
| Arquivo | Linha | Categoria | Descrição | Fix |
|
|
15
|
+
| ------------- | -------- | ------------ | --------------- | ----------------------------- |
|
|
16
|
+
| {{FILE_PATH}} | {{LINE}} | {{CATEGORY}} | {{DESCRIPTION}} | {{FIX_APPLIED_OR_SUGGESTION}} |
|
|
17
|
+
|
|
18
|
+
### ℹ Info ({{INFO_COUNT}})
|
|
19
|
+
|
|
20
|
+
- `{{FILE_PATH}}:{{LINE}}` — {{DESCRIPTION}}
|
|
21
|
+
|
|
22
|
+
## Cobertura por Fase
|
|
23
|
+
|
|
24
|
+
| Fase | Issues | Status |
|
|
25
|
+
| ------------------ | ---------------- | ---------------- |
|
|
26
|
+
| Vulnerabilidades | {{VULN_COUNT}} | {{PHASE_STATUS}} |
|
|
27
|
+
| Falhas silenciosas | {{SILENT_COUNT}} | {{PHASE_STATUS}} |
|
|
28
|
+
| Segredos | {{SECRET_COUNT}} | {{PHASE_STATUS}} |
|
|
29
|
+
|
|
30
|
+
## Fixes Aplicados
|
|
31
|
+
|
|
32
|
+
- `{{FILE_PATH}}:{{LINE}}` — {{FIX_DESCRIPTION}}
|
|
33
|
+
|
|
34
|
+
## Não Corrigidos (requer decisão)
|
|
35
|
+
|
|
36
|
+
- `{{FILE_PATH}}:{{LINE}}` — {{REASON_NOT_FIXED}}
|
|
37
|
+
|
|
38
|
+
## Verification
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
{{VERIFICATION_COMMAND}} — {{PASS_OR_FAIL}}
|
|
42
|
+
```
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
## Relatório de Simplificação
|
|
2
|
+
|
|
3
|
+
feature: {{FEATURE_ID}}
|
|
4
|
+
escopo: {{FILE_COUNT}} arquivos revisados
|
|
5
|
+
|
|
6
|
+
### Reuso
|
|
7
|
+
|
|
8
|
+
| Arquivo | Linha | Issue | Fix |
|
|
9
|
+
| ------------- | -------- | --------------- | --------------- |
|
|
10
|
+
| {{FILE_PATH}} | {{LINE}} | {{REUSE_ISSUE}} | {{FIX_APPLIED}} |
|
|
11
|
+
|
|
12
|
+
### Qualidade
|
|
13
|
+
|
|
14
|
+
| Arquivo | Linha | Issue | Fix |
|
|
15
|
+
| ------------- | -------- | ----------------- | --------------- |
|
|
16
|
+
| {{FILE_PATH}} | {{LINE}} | {{QUALITY_ISSUE}} | {{FIX_APPLIED}} |
|
|
17
|
+
|
|
18
|
+
### Eficiência
|
|
19
|
+
|
|
20
|
+
| Arquivo | Linha | Issue | Fix |
|
|
21
|
+
| ------------- | -------- | -------------------- | --------------- |
|
|
22
|
+
| {{FILE_PATH}} | {{LINE}} | {{EFFICIENCY_ISSUE}} | {{FIX_APPLIED}} |
|
|
23
|
+
|
|
24
|
+
## Resumo
|
|
25
|
+
|
|
26
|
+
| Dimensão | Issues | Corrigidos | Ignorados |
|
|
27
|
+
| ---------- | -------------------- | -------------------- | ---------------------- |
|
|
28
|
+
| Reuso | {{REUSE_COUNT}} | {{REUSE_FIXED}} | {{REUSE_SKIPPED}} |
|
|
29
|
+
| Qualidade | {{QUALITY_COUNT}} | {{QUALITY_FIXED}} | {{QUALITY_SKIPPED}} |
|
|
30
|
+
| Eficiência | {{EFFICIENCY_COUNT}} | {{EFFICIENCY_FIXED}} | {{EFFICIENCY_SKIPPED}} |
|
|
31
|
+
|
|
32
|
+
## Não Corrigidos
|
|
33
|
+
|
|
34
|
+
- `{{FILE_PATH}}:{{LINE}}` — {{REASON_SKIPPED}}
|
|
35
|
+
|
|
36
|
+
## Verification
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
{{VERIFICATION_COMMAND}} — {{PASS_OR_FAIL}}
|
|
40
|
+
```
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
# Estado do Projeto
|
|
2
2
|
|
|
3
|
-
## Referência
|
|
4
|
-
|
|
5
|
-
**Projeto:** {{PROJECT_NAME}}
|
|
6
|
-
**Valor central:** {{CORE_VALUE}}
|
|
7
|
-
**Foco atual:** {{CURRENT_FOCUS}}
|
|
8
|
-
|
|
9
3
|
## Posição Atual
|
|
10
4
|
|
|
11
5
|
- Features: 0 de 0 completas
|
|
@@ -30,7 +24,7 @@ Nenhum.
|
|
|
30
24
|
|
|
31
25
|
- Última sessão: {{DATE}}
|
|
32
26
|
- Parou em: Inicialização do projeto
|
|
33
|
-
- Retomar: Criar primeira feature com /hefesto
|
|
27
|
+
- Retomar: Criar primeira feature com /hefesto-new-feature
|
|
34
28
|
|
|
35
29
|
---
|
|
36
30
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
## Veredicto
|
|
2
|
+
|
|
3
|
+
status: {{VERDICT_STATUS}}
|
|
4
|
+
feature: {{FEATURE_ID}}
|
|
5
|
+
fase: {{PHASE_NUMBER}}
|
|
6
|
+
|
|
7
|
+
## Requisitos
|
|
8
|
+
|
|
9
|
+
| ID | Requisito | Status | Evidência |
|
|
10
|
+
| ---------- | ------------------- | -------------- | ---------------- |
|
|
11
|
+
| {{REQ_ID}} | {{REQ_DESCRIPTION}} | {{REQ_STATUS}} | {{REQ_EVIDENCE}} |
|
|
12
|
+
|
|
13
|
+
## Testes Criados
|
|
14
|
+
|
|
15
|
+
- `{{TEST_FILE_PATH}}` — {{TEST_COUNT}} testes, {{PASS_COUNT}} pass, {{FAIL_COUNT}} fail
|
|
16
|
+
|
|
17
|
+
## Edge Cases Encontrados
|
|
18
|
+
|
|
19
|
+
- {{EDGE_CASE_DESCRIPTION}}
|
|
20
|
+
|
|
21
|
+
## Fora do Escopo (confirmado)
|
|
22
|
+
|
|
23
|
+
- {{OUT_OF_SCOPE_ITEM}}
|
|
24
|
+
|
|
25
|
+
## Questões para o Implementador
|
|
26
|
+
|
|
27
|
+
1. {{IMPLEMENTER_QUESTION}}
|
|
28
|
+
|
|
29
|
+
## QA Loop (re-avaliação)
|
|
30
|
+
|
|
31
|
+
qa_iteration: {{QA_ITERATION}}
|
|
32
|
+
items_fixed: {{ITEMS_FIXED}}
|
|
33
|
+
items_remaining: {{ITEMS_REMAINING}}
|
|
34
|
+
regression_detected: {{REGRESSION_DETECTED}}
|
package/agents/.gitkeep
DELETED
|
File without changes
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: hefesto-researcher
|
|
3
|
-
description: "Pesquisador estruturado do Hefesto. Investiga tecnologias, APIs, padrões e soluções usando WebSearch e WebFetch, sintetiza descobertas e salva em .hefesto/research/. Deve ser usado proativamente sempre que uma decisão técnica precisa de embasamento.\n\nExemplos:\n\n- User: \"Preciso escolher entre Prisma e Drizzle para o ORM\"\n → Delegar ao hefesto-researcher com tipo tech-eval, profundidade standard\n\n- User: \"Quero entender como fazer autenticação com passkeys\"\n → Delegar ao hefesto-researcher com tipo best-practices, profundidade standard\n\n- User: \"Pesquise a API do Stripe para integração de pagamentos\"\n → Delegar ao hefesto-researcher com tipo api-docs, profundidade deep\n\n- User: \"Qual o melhor padrão para organizar um monorepo Node.js?\"\n → Delegar ao hefesto-researcher com tipo architecture, profundidade standard"
|
|
4
|
-
allowed-tools: WebSearch, WebFetch, Read, Write, Edit, Glob, Grep, mcp__context7__resolve-library-id, mcp__context7__get-library-docs
|
|
5
|
-
model: opus
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Você é um pesquisador técnico do Hefesto. Sua função é investigar temas técnicos a fundo usando a web, e produzir um documento estruturado com descobertas, fontes verificadas e uma recomendação acionável em `.hefesto/research/`.
|
|
9
|
-
|
|
10
|
-
## Mentalidade: desconfiança epistêmica
|
|
11
|
-
|
|
12
|
-
Seu training data é uma **hipótese, não uma fonte**. Você pode "saber" que uma lib usa determinada API, que um padrão é recomendado, ou que uma ferramenta tem certa limitação — mas esse conhecimento pode estar desatualizado, incompleto ou simplesmente errado.
|
|
13
|
-
|
|
14
|
-
Antes de afirmar qualquer coisa no documento final, verifique com fontes externas. Se não conseguir verificar, marque explicitamente como "não verificado — baseado em conhecimento do modelo". O usuário precisa saber o que foi confirmado e o que é suposição.
|
|
15
|
-
|
|
16
|
-
## Antes de pesquisar
|
|
17
|
-
|
|
18
|
-
1. Verificar se `.hefesto/` existe. Se não existir, informar que o projeto precisa ser inicializado com `/hefesto:init`.
|
|
19
|
-
2. Se `.hefesto/research/` não existir, criar o diretório.
|
|
20
|
-
3. Ler `.hefesto/config.json`. Se não tiver a key `research`, adicionar: `"research": { "id_prefix": "RES", "counter": 0 }`.
|
|
21
|
-
4. Verificar se já existe pesquisa relevante em `.hefesto/research/` — ler frontmatter dos arquivos existentes. Se já existir pesquisa sobre o mesmo tema, informar e perguntar se deve atualizar ou criar nova.
|
|
22
|
-
|
|
23
|
-
## Definir escopo
|
|
24
|
-
|
|
25
|
-
Você pode receber o escopo pronto do prompt, ou precisar perguntar. As informações necessárias são:
|
|
26
|
-
|
|
27
|
-
- **Tema** da pesquisa (título curto e descritivo)
|
|
28
|
-
- **Tipo**: `tech-eval | best-practices | api-docs | architecture | competitive | general`
|
|
29
|
-
- **Profundidade**: `quick | standard | deep`
|
|
30
|
-
- **Perguntas-chave** a responder (2-5)
|
|
31
|
-
- **Feature vinculada** (opcional, `FEAT-NNN`)
|
|
32
|
-
|
|
33
|
-
Com o escopo definido, gerar o ID `RES-NNN` (counter + 1, zero-padded) e slug a partir do título (lowercase, hifenizado, max 40 chars, sem acentos).
|
|
34
|
-
|
|
35
|
-
## Como pesquisar
|
|
36
|
-
|
|
37
|
-
### 1. Consulte o Context7 (se disponível)
|
|
38
|
-
|
|
39
|
-
Se o MCP Context7 estiver configurado, ele é a **melhor fonte para documentação de bibliotecas** — retorna docs versionados e atualizados direto da fonte oficial.
|
|
40
|
-
|
|
41
|
-
Para cada lib/framework no escopo:
|
|
42
|
-
1. `mcp__context7__resolve-library-id(libraryName: "next.js", query: "middleware setup")` → obtém o ID
|
|
43
|
-
2. `mcp__context7__get-library-docs(libraryId: "/vercel/next.js", query: "middleware setup")` → obtém docs atualizados
|
|
44
|
-
|
|
45
|
-
Se o Context7 não estiver disponível (tool call falha), siga adiante sem ele — não é bloqueante.
|
|
46
|
-
|
|
47
|
-
Informações do Context7 têm confiabilidade `alta` — são docs oficiais versionados.
|
|
48
|
-
|
|
49
|
-
### 2. Busque `llms.txt`
|
|
50
|
-
|
|
51
|
-
Muitas ferramentas e frameworks publicam um `/llms.txt` — documentação otimizada para LLMs, mantida pelo próprio projeto. É a fonte mais confiável que existe porque vem direto do mantenedor e é atualizada junto com o projeto.
|
|
52
|
-
|
|
53
|
-
Para cada ferramenta/lib no escopo, tente via WebFetch:
|
|
54
|
-
|
|
55
|
-
- `{site-oficial}/llms.txt`
|
|
56
|
-
- `{site-oficial}/llms-full.txt`
|
|
57
|
-
- `{site-oficial}/.well-known/llms.txt`
|
|
58
|
-
|
|
59
|
-
Se encontrar, use como base da pesquisa. Se não, siga adiante.
|
|
60
|
-
|
|
61
|
-
### 3. Busque com queries variadas
|
|
62
|
-
|
|
63
|
-
Formule todas as queries em **inglês** — a esmagadora maioria do conteúdo técnico de qualidade está em inglês. O documento final será em Português BR, mas a pesquisa em si deve ser em inglês para maximizar a cobertura e qualidade das fontes.
|
|
64
|
-
|
|
65
|
-
Uma única query retorna uma visão parcial. Para ter perspectiva real, formule buscas complementares:
|
|
66
|
-
|
|
67
|
-
**Exemplo** (tema: "React vs Vue"):
|
|
68
|
-
|
|
69
|
-
- `"React vs Vue 2026 comparison"`
|
|
70
|
-
- `"Vue advantages over React"`
|
|
71
|
-
- `"React migration problems"`
|
|
72
|
-
- `"Vue 3 production experience"`
|
|
73
|
-
|
|
74
|
-
Quantidade proporcional à profundidade:
|
|
75
|
-
|
|
76
|
-
- `quick`: 2-3 buscas, 1-3 fontes — para dúvidas pontuais
|
|
77
|
-
- `standard`: 4-6 buscas, 3-6 fontes — para decisões com impacto
|
|
78
|
-
- `deep`: 8+ buscas, 6+ fontes — para decisões arquiteturais críticas
|
|
79
|
-
|
|
80
|
-
Inclua sempre `"{ferramenta} llms.txt"` nas buscas — pode descobrir docs AI-friendly que não encontrou na fase anterior.
|
|
81
|
-
|
|
82
|
-
### 4. Extraia e classifique
|
|
83
|
-
|
|
84
|
-
Use WebFetch nas melhores URLs. Para cada fonte, registre:
|
|
85
|
-
|
|
86
|
-
| Confiabilidade | Critério | Por quê |
|
|
87
|
-
| -------------- | ------------------------------------------------------- | ------------------------------------- |
|
|
88
|
-
| `alta` | Context7, llms.txt, docs oficiais, release notes, repos oficiais | Fonte primária, mantida pelo autor |
|
|
89
|
-
| `media` | Múltiplas fontes concordam, blogs técnicos reconhecidos | Verificável, mas secundária |
|
|
90
|
-
| `baixa` | Fonte única, não-oficial, conteúdo com 12+ meses | Pode estar desatualizado ou enviesado |
|
|
91
|
-
|
|
92
|
-
### 5. Valide cruzadamente (standard/deep)
|
|
93
|
-
|
|
94
|
-
Afirmações importantes precisam de mais de uma fonte concordando. Siga este protocolo:
|
|
95
|
-
|
|
96
|
-
- **Claims negativos** ("X não suporta Y", "Y foi descontinuado"): exigem verificação com docs oficiais. Negativas falsas levam a decisões ruins.
|
|
97
|
-
- **Fonte única**: se apenas uma fonte afirma algo, marque como confiabilidade `baixa` independente de quão confiável a fonte pareça.
|
|
98
|
-
- **Contradições**: quando duas fontes se contradizem, documente a divergência explicitamente com ambas as URLs — o usuário precisa saber.
|
|
99
|
-
- **Conteúdo com 12+ meses**: marque como "potencialmente desatualizado" e busque confirmação recente.
|
|
100
|
-
|
|
101
|
-
Para pesquisas `quick`, esta fase pode ser pulada — o custo-benefício não compensa.
|
|
102
|
-
|
|
103
|
-
### 6. Sintetize por tema
|
|
104
|
-
|
|
105
|
-
Organize as descobertas por **tema**, não por fonte. Se cada seção for "o que a fonte X disse", o documento vira uma lista de resumos desconectados. Agrupando por tema, as conexões e contradições ficam evidentes.
|
|
106
|
-
|
|
107
|
-
Para tipo `tech-eval`: inclua obrigatoriamente uma tabela comparativa com critérios objetivos.
|
|
108
|
-
|
|
109
|
-
Escreva uma conclusão que seja **acionável** — "depende" sem qualificação não ajuda ninguém. Se realmente depender, explique de quê.
|
|
110
|
-
|
|
111
|
-
Além das descobertas organizadas por tema, o documento deve incluir estas seções quando relevantes:
|
|
112
|
-
|
|
113
|
-
#### Não Reinvente a Roda
|
|
114
|
-
|
|
115
|
-
Liste soluções prontas que o projeto deve usar em vez de implementar do zero. Para cada uma, inclua: o que resolve, qual lib/serviço usar, e por que não fazer na mão. Isso evita que o projeto gaste tempo em problemas já resolvidos.
|
|
116
|
-
|
|
117
|
-
**Exemplo:**
|
|
118
|
-
|
|
119
|
-
- **Validação de email**: use uma lib como `zod` ou `valibot` — regex customizado vai falhar em edge cases (emails com `+`, domínios internacionais).
|
|
120
|
-
|
|
121
|
-
#### Estado da Arte
|
|
122
|
-
|
|
123
|
-
Compare a abordagem antiga vs. a moderna para o domínio pesquisado. Frameworks evoluem, padrões mudam — o que era best practice há 2 anos pode ser anti-pattern hoje.
|
|
124
|
-
|
|
125
|
-
**Exemplo:**
|
|
126
|
-
| Antes | Agora | Por quê mudou |
|
|
127
|
-
|---|---|---|
|
|
128
|
-
| REST + polling | WebSockets / SSE | Menor latência, menos overhead |
|
|
129
|
-
| JWT em localStorage | HttpOnly cookies | XSS não consegue ler cookies httponly |
|
|
130
|
-
|
|
131
|
-
#### Armadilhas
|
|
132
|
-
|
|
133
|
-
Liste erros comuns e riscos do domínio pesquisado, classificados por severidade:
|
|
134
|
-
|
|
135
|
-
- **Crítico** — pode exigir reescrita se ignorado (ex: escolher banco sem suporte a transações quando o domínio exige ACID)
|
|
136
|
-
- **Moderado** — causa retrabalho significativo (ex: não paginar queries desde o início)
|
|
137
|
-
- **Menor** — incômodo, mas corrigível facilmente (ex: não configurar logging estruturado)
|
|
138
|
-
|
|
139
|
-
Para cada armadilha, inclua: o que acontece se ignorar e como prevenir.
|
|
140
|
-
|
|
141
|
-
### 7. Checklist de qualidade
|
|
142
|
-
|
|
143
|
-
Antes de salvar o documento, passe por cada item. Se algum falhar, corrija antes de prosseguir:
|
|
144
|
-
|
|
145
|
-
- [ ] Todas as perguntas do escopo foram respondidas
|
|
146
|
-
- [ ] Claims críticos verificados em 2+ fontes independentes
|
|
147
|
-
- [ ] Claims negativos ("X não suporta Y") verificados com docs oficiais
|
|
148
|
-
- [ ] Nenhuma afirmação baseada apenas em training data sem marcação
|
|
149
|
-
- [ ] URLs presentes para todas as fontes autoritativas
|
|
150
|
-
- [ ] Confiabilidade (alta/media/baixa) atribuída a cada fonte
|
|
151
|
-
- [ ] Contradições entre fontes documentadas explicitamente
|
|
152
|
-
- [ ] Seção "Não Reinvente a Roda" incluída (quando relevante)
|
|
153
|
-
- [ ] Seção "Armadilhas" incluída (quando relevante)
|
|
154
|
-
- [ ] Conclusão é acionável — dá uma direção clara
|
|
155
|
-
- [ ] Revisão final: "O que posso ter deixado passar?"
|
|
156
|
-
|
|
157
|
-
## O que você entrega
|
|
158
|
-
|
|
159
|
-
1. Leia o template de `.hefesto/templates/RESEARCH.md` para a estrutura base
|
|
160
|
-
2. Crie `.hefesto/research/RES-NNN-slug.md` preenchido com as descobertas
|
|
161
|
-
3. No frontmatter, defina `status: done`
|
|
162
|
-
4. Atualize `.hefesto/config.json` incrementando `research.counter`
|
|
163
|
-
5. Atualize `.hefesto/STATE.md` mencionando a pesquisa concluída
|
|
164
|
-
6. Se vinculada a feature, adicione em "Notas Técnicas" da feature: `Pesquisa: [RES-NNN — Título](../research/RES-NNN-slug.md)`
|
|
165
|
-
|
|
166
|
-
Retorne:
|
|
167
|
-
|
|
168
|
-
- Caminho do arquivo criado
|
|
169
|
-
- Resumo em 2-3 frases com as principais descobertas e a recomendação
|
|
170
|
-
|
|
171
|
-
## Regras
|
|
172
|
-
|
|
173
|
-
- Todos os textos no documento devem ser em Português BR
|
|
174
|
-
- Organize por tema, não por fonte — isso é o que torna a pesquisa realmente útil
|
|
175
|
-
- Se WebSearch/WebFetch não estiverem disponíveis, informe e peça ao usuário para fornecer URLs manualmente
|
|
176
|
-
- Nunca invente fontes ou URLs — se não encontrou, diga que não encontrou
|
|
177
|
-
- Para `tech-eval`, a tabela comparativa não é opcional — é o core do entregável
|
|
178
|
-
- Se uma fonte é de baixa confiabilidade, marque como tal em vez de omiti-la — transparência é mais útil que curadoria silenciosa
|
|
179
|
-
- Se seu training data contradiz as fontes verificadas, as fontes vencem — atualize sua conclusão
|
|
180
|
-
- IDs são sequenciais e nunca reutilizados
|
package/commands/hefesto/init.md
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: "Inicializa o Hefesto no projeto atual. Use /hefesto:init para criar a estrutura .hefesto/ e começar a organizar o desenvolvimento."
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Hefesto Init
|
|
6
|
-
|
|
7
|
-
Inicializa a estrutura `.hefesto/` no projeto atual.
|
|
8
|
-
|
|
9
|
-
## O que fazer
|
|
10
|
-
|
|
11
|
-
1. Verificar se `.hefesto/` já existe. Se existir, avisar o usuário e perguntar se quer reinicializar.
|
|
12
|
-
2. Perguntar ao usuário:
|
|
13
|
-
- Nome do projeto
|
|
14
|
-
- Descrição curta (2-3 frases)
|
|
15
|
-
- Valor central (a única coisa que DEVE funcionar)
|
|
16
|
-
- Restrições principais (stack, prazo, plataforma, etc.)
|
|
17
|
-
3. Criar a estrutura de diretórios:
|
|
18
|
-
```
|
|
19
|
-
.hefesto/
|
|
20
|
-
├── PROJECT.md
|
|
21
|
-
├── ROADMAP.md
|
|
22
|
-
├── STATE.md
|
|
23
|
-
├── config.json
|
|
24
|
-
├── features/
|
|
25
|
-
└── research/
|
|
26
|
-
```
|
|
27
|
-
4. Preencher PROJECT.md com as respostas do usuário.
|
|
28
|
-
5. Gerar STATE.md inicial com posição "Inicializando".
|
|
29
|
-
6. Gerar ROADMAP.md vazio.
|
|
30
|
-
7. Gerar config.json com valores padrão:
|
|
31
|
-
```json
|
|
32
|
-
{
|
|
33
|
-
"version": "0.1.0",
|
|
34
|
-
"project": { "name": "", "language": "pt-BR" },
|
|
35
|
-
"runtime": "claude",
|
|
36
|
-
"feature": { "id_prefix": "FEAT", "counter": 0 },
|
|
37
|
-
"research": { "id_prefix": "RES", "counter": 0 },
|
|
38
|
-
"lifecycle": { "auto_update_state": true }
|
|
39
|
-
}
|
|
40
|
-
```
|
|
41
|
-
8. Informar o usuário que o projeto foi inicializado e sugerir `/hefesto:new-feature` para criar a primeira feature.
|
|
42
|
-
9. Verificar se o MCP Context7 está configurado (checar se `.mcp.json` existe e contém `context7`). Se não estiver, sugerir a instalação:
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
O Hefesto usa o Context7 para consultar documentação atualizada de bibliotecas
|
|
46
|
-
durante pesquisas. Para habilitar, adicione ao .mcp.json do projeto:
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
```json
|
|
50
|
-
{
|
|
51
|
-
"mcpServers": {
|
|
52
|
-
"context7": {
|
|
53
|
-
"command": "npx",
|
|
54
|
-
"args": ["-y", "@upstash/context7-mcp"]
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
Se o usuário quiser instalar, criar ou atualizar o `.mcp.json` adicionando a entrada do Context7 (preservando outros MCPs existentes). Se não quiser, seguir sem — o Context7 é opcional.
|
|
61
|
-
|
|
62
|
-
## Notas
|
|
63
|
-
|
|
64
|
-
- Todos os textos gerados devem ser em Português BR.
|
|
65
|
-
- O config.json deve ser atualizado com o nome do projeto informado pelo usuário.
|
|
66
|
-
- Se `.hefesto/` já existir e o usuário não quiser reinicializar, abortar sem modificar nada.
|
|
67
|
-
- O Context7 é opcional mas recomendado — melhora a qualidade das pesquisas com docs versionados.
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: "Cria uma nova feature no Hefesto. Use /hefesto:new-feature para definir uma nova feature com visão, fluxo do usuário, requisitos e fases de implementação."
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Hefesto New Feature
|
|
6
|
-
|
|
7
|
-
Cria um novo documento de feature em `.hefesto/features/`.
|
|
8
|
-
|
|
9
|
-
## Pré-requisitos
|
|
10
|
-
|
|
11
|
-
Verificar se `.hefesto/` existe. Se não existir, sugerir `/hefesto:init` primeiro.
|
|
12
|
-
|
|
13
|
-
## O que fazer
|
|
14
|
-
|
|
15
|
-
1. Ler `.hefesto/templates/FEATURE.md` como base para o novo arquivo de feature.
|
|
16
|
-
2. Ler `.hefesto/config.json` para obter o próximo ID disponível.
|
|
17
|
-
3. Perguntar ao usuário:
|
|
18
|
-
- Título da feature (curto, descritivo)
|
|
19
|
-
- Visão (o que entrega e por que existe)
|
|
20
|
-
- Fluxo do usuário (passos que o usuário percorre)
|
|
21
|
-
- Requisitos principais (testáveis, centrados no usuário)
|
|
22
|
-
- O que está fora do escopo
|
|
23
|
-
4. Com base nas respostas, propor fases de implementação:
|
|
24
|
-
- Cada fase deve ser atômica (executável em uma sessão)
|
|
25
|
-
- Listar arquivos que serão criados/modificados
|
|
26
|
-
- Definir tarefas concretas e critérios de aceitação
|
|
27
|
-
5. Gerar o ID: `FEAT-NNN` onde NNN é o counter + 1, zero-padded.
|
|
28
|
-
6. Gerar o slug a partir do título (lowercase, hifenizado, max 40 chars).
|
|
29
|
-
7. Criar o arquivo `.hefesto/features/FEAT-NNN-slug.md` com o conteúdo.
|
|
30
|
-
8. Atualizar `.hefesto/config.json` incrementando o counter.
|
|
31
|
-
9. Atualizar `.hefesto/ROADMAP.md` adicionando a nova feature na tabela.
|
|
32
|
-
10. Atualizar `.hefesto/STATE.md` se for a primeira feature ou se nenhuma estiver ativa.
|
|
33
|
-
|
|
34
|
-
## Formato do arquivo
|
|
35
|
-
|
|
36
|
-
O arquivo segue o template narrativo unificado com frontmatter YAML:
|
|
37
|
-
|
|
38
|
-
```yaml
|
|
39
|
-
---
|
|
40
|
-
id: FEAT-NNN
|
|
41
|
-
title: "Título"
|
|
42
|
-
status: draft
|
|
43
|
-
created: YYYY-MM-DD
|
|
44
|
-
updated: YYYY-MM-DD
|
|
45
|
-
phases_total: N
|
|
46
|
-
phases_done: 0
|
|
47
|
-
---
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Seguido pelas seções: Visão, Fluxo do Usuário, Requisitos, Fora do Escopo, Implementação (com Fases), Notas Técnicas.
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: "Mostra o estado atual do projeto Hefesto. Use /hefesto:status para ver progresso, features ativas, bloqueios e próximos passos."
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Hefesto Status
|
|
6
|
-
|
|
7
|
-
Exibe o estado atual do projeto gerenciado pelo Hefesto.
|
|
8
|
-
|
|
9
|
-
## Pré-requisitos
|
|
10
|
-
|
|
11
|
-
Verificar se `.hefesto/` existe. Se não existir, informar que o projeto não foi inicializado e sugerir `/hefesto:init`.
|
|
12
|
-
|
|
13
|
-
## O que fazer
|
|
14
|
-
|
|
15
|
-
1. Ler `.hefesto/STATE.md` e exibir o conteúdo formatado.
|
|
16
|
-
2. Ler `.hefesto/ROADMAP.md` e calcular progresso geral.
|
|
17
|
-
3. Listar todas as features em `.hefesto/features/` com seus status (ler frontmatter de cada arquivo).
|
|
18
|
-
4. Apresentar um resumo ao usuário:
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
📊 Estado do Projeto: [nome]
|
|
22
|
-
|
|
23
|
-
Progresso: [██████░░░░] 60% (3 de 5 features)
|
|
24
|
-
|
|
25
|
-
Feature ativa: FEAT-003 — Título (Fase 2 de 4)
|
|
26
|
-
|
|
27
|
-
Features:
|
|
28
|
-
✅ FEAT-001 — Título (done)
|
|
29
|
-
✅ FEAT-002 — Título (done)
|
|
30
|
-
🔄 FEAT-003 — Título (active — fase 2/4)
|
|
31
|
-
📋 FEAT-004 — Título (ready)
|
|
32
|
-
📝 FEAT-005 — Título (draft)
|
|
33
|
-
|
|
34
|
-
Pesquisas: 2 concluídas, 1 em andamento
|
|
35
|
-
🔍 RES-001 — Avaliação de ORMs (done)
|
|
36
|
-
🔍 RES-002 — Padrões de autenticação (done)
|
|
37
|
-
🔄 RES-003 — APIs de pagamento (in-progress)
|
|
38
|
-
|
|
39
|
-
Bloqueios: Nenhum
|
|
40
|
-
|
|
41
|
-
Próximo passo: Continuar execução da Fase 2 de FEAT-003
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
5. Listar pesquisas em `.hefesto/research/` com seus status (ler frontmatter de cada arquivo).
|
|
45
|
-
6. Se houver bloqueios em STATE.md, destacá-los.
|
|
46
|
-
7. Sugerir próxima ação com base no estado atual.
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: "Atualiza o Hefesto para a versão mais recente. Use /hefesto:update para atualizar commands, skills, hooks e templates sem perder o estado do projeto."
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Hefesto Update
|
|
6
|
-
|
|
7
|
-
Atualiza o toolkit Hefesto para a versão mais recente do npm.
|
|
8
|
-
|
|
9
|
-
## Pré-requisitos
|
|
10
|
-
|
|
11
|
-
Verificar se `.hefesto/` existe. Se não existir, informar que o projeto não foi inicializado e sugerir `/hefesto:init`.
|
|
12
|
-
|
|
13
|
-
## O que fazer
|
|
14
|
-
|
|
15
|
-
1. Ler `.hefesto/config.json` e anotar a versão atual (`version`).
|
|
16
|
-
2. Executar o comando de atualização:
|
|
17
|
-
```bash
|
|
18
|
-
npx @lugom.io/hefesto@latest
|
|
19
|
-
```
|
|
20
|
-
3. Verificar o output do comando. Se houver erro, informar o usuário e sugerir ação corretiva.
|
|
21
|
-
4. Ler `.hefesto/config.json` novamente e comparar a versão com a anterior.
|
|
22
|
-
5. Informar o resultado ao usuário:
|
|
23
|
-
- Se atualizou: mostrar versão anterior → nova versão
|
|
24
|
-
- Se já estava na última versão: informar que está atualizado
|
|
25
|
-
|
|
26
|
-
## Notas
|
|
27
|
-
|
|
28
|
-
- O installer preserva `.hefesto/` existente (PROJECT.md, STATE.md, ROADMAP.md, features/, config.json).
|
|
29
|
-
- O que é atualizado: commands, skills, hooks, templates.
|
|
30
|
-
- Não usar `--global` a menos que o usuário peça explicitamente.
|
|
31
|
-
- Se o usuário pedir para atualizar um runtime específico (ex: `--gemini`), passar a flag correspondente.
|
package/templates/PROJECT.md
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# {{PROJECT_NAME}}
|
|
2
|
-
|
|
3
|
-
## O Que É
|
|
4
|
-
|
|
5
|
-
{{PROJECT_DESCRIPTION}}
|
|
6
|
-
|
|
7
|
-
## Valor Central
|
|
8
|
-
|
|
9
|
-
{{CORE_VALUE}}
|
|
10
|
-
|
|
11
|
-
## Contexto
|
|
12
|
-
|
|
13
|
-
{{CONTEXT}}
|
|
14
|
-
|
|
15
|
-
## Restrições
|
|
16
|
-
|
|
17
|
-
- **Stack**: {{STACK_CONSTRAINT}}
|
|
18
|
-
- **Prazo**: {{DEADLINE_CONSTRAINT}}
|
|
19
|
-
|
|
20
|
-
## Decisões
|
|
21
|
-
|
|
22
|
-
| Decisão | Justificativa | Resultado |
|
|
23
|
-
| ------- | ------------- | --------- |
|
|
24
|
-
| — | — | — |
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
_Última atualização: {{DATE}}_
|
package/templates/ROADMAP.md
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# Roadmap
|
|
2
|
-
|
|
3
|
-
## Visão Geral
|
|
4
|
-
|
|
5
|
-
{{PROJECT_NAME}} — {{PROJECT_DESCRIPTION}}
|
|
6
|
-
|
|
7
|
-
## Features
|
|
8
|
-
|
|
9
|
-
| ID | Título | Status | Fases | Progresso |
|
|
10
|
-
| --- | ------ | ------ | ----- | --------- |
|
|
11
|
-
| — | — | — | — | — |
|
|
12
|
-
|
|
13
|
-
## Legenda
|
|
14
|
-
|
|
15
|
-
- `draft` — Em definição
|
|
16
|
-
- `ready` — Pronta para execução
|
|
17
|
-
- `active` — Em andamento
|
|
18
|
-
- `done` — Completa e verificada
|
|
19
|
-
- `blocked` — Bloqueada
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
_Atualizado automaticamente ao concluir features._
|