@lugom.io/hefesto 0.1.2 → 0.2.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-researcher.md +180 -0
- package/bin/install.js +43 -0
- package/commands/hefesto/init.md +23 -1
- package/commands/hefesto/status.md +8 -2
- package/package.json +1 -1
- package/skills/hefesto-context/SKILL.md +14 -2
- package/templates/RESEARCH.md +90 -0
|
@@ -0,0 +1,180 @@
|
|
|
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/bin/install.js
CHANGED
|
@@ -149,6 +149,7 @@ function createDefaultConfig() {
|
|
|
149
149
|
project: { name: '', language: 'pt-BR' },
|
|
150
150
|
runtime: 'claude',
|
|
151
151
|
feature: { id_prefix: 'FEAT', counter: 0 },
|
|
152
|
+
research: { id_prefix: 'RES', counter: 0 },
|
|
152
153
|
lifecycle: { auto_update_state: true },
|
|
153
154
|
};
|
|
154
155
|
}
|
|
@@ -168,6 +169,7 @@ function installHefesto() {
|
|
|
168
169
|
} else {
|
|
169
170
|
ensureDir(hefestoDir);
|
|
170
171
|
ensureDir(path.join(hefestoDir, 'features'));
|
|
172
|
+
ensureDir(path.join(hefestoDir, 'research'));
|
|
171
173
|
|
|
172
174
|
// Copiar templates como arquivos iniciais do projeto
|
|
173
175
|
const templateFiles = ['PROJECT.md', 'STATE.md', 'ROADMAP.md'];
|
|
@@ -221,6 +223,14 @@ function installRuntime(runtime) {
|
|
|
221
223
|
console.log(` ✅ Skills instaladas em ${path.relative(process.cwd(), destSkills) || destSkills}`);
|
|
222
224
|
}
|
|
223
225
|
|
|
226
|
+
// Agents
|
|
227
|
+
const srcAgents = path.join(PKG_ROOT, 'agents');
|
|
228
|
+
if (fs.existsSync(srcAgents)) {
|
|
229
|
+
const destAgents = path.join(runtimeDir, 'agents');
|
|
230
|
+
copyAgents(srcAgents, destAgents);
|
|
231
|
+
console.log(` ✅ Agents instalados em ${path.relative(process.cwd(), destAgents) || destAgents}`);
|
|
232
|
+
}
|
|
233
|
+
|
|
224
234
|
// Hooks (apenas Claude Code por enquanto)
|
|
225
235
|
if (runtime === 'claude') {
|
|
226
236
|
installHooks(runtimeDir);
|
|
@@ -253,6 +263,22 @@ function copySkills(srcDir, destDir) {
|
|
|
253
263
|
}
|
|
254
264
|
}
|
|
255
265
|
|
|
266
|
+
function copyAgents(srcDir, destDir) {
|
|
267
|
+
ensureDir(destDir);
|
|
268
|
+
const entries = fs.readdirSync(srcDir, { withFileTypes: true });
|
|
269
|
+
for (const entry of entries) {
|
|
270
|
+
if (entry.name.startsWith('hefesto-')) {
|
|
271
|
+
const srcAgent = path.join(srcDir, entry.name);
|
|
272
|
+
const destAgent = path.join(destDir, entry.name);
|
|
273
|
+
if (entry.isDirectory()) {
|
|
274
|
+
copyDir(srcAgent, destAgent);
|
|
275
|
+
} else {
|
|
276
|
+
fs.copyFileSync(srcAgent, destAgent);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
256
282
|
// ── Hooks ───────────────────────────────────────────────────────────────────
|
|
257
283
|
|
|
258
284
|
function installHooks(runtimeDir) {
|
|
@@ -395,6 +421,23 @@ function uninstallRuntime(runtime) {
|
|
|
395
421
|
}
|
|
396
422
|
}
|
|
397
423
|
|
|
424
|
+
// Remover agents hefesto-*
|
|
425
|
+
const agentsDir = path.join(runtimeDir, 'agents');
|
|
426
|
+
if (fs.existsSync(agentsDir)) {
|
|
427
|
+
const agentEntries = fs.readdirSync(agentsDir, { withFileTypes: true });
|
|
428
|
+
for (const entry of agentEntries) {
|
|
429
|
+
if (entry.name.startsWith('hefesto-')) {
|
|
430
|
+
const agentPath = path.join(agentsDir, entry.name);
|
|
431
|
+
if (entry.isDirectory()) {
|
|
432
|
+
fs.rmSync(agentPath, { recursive: true });
|
|
433
|
+
} else {
|
|
434
|
+
fs.unlinkSync(agentPath);
|
|
435
|
+
}
|
|
436
|
+
console.log(` ✅ Agent ${entry.name} removido.`);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
|
|
398
441
|
// Remover hooks (apenas Claude Code)
|
|
399
442
|
if (runtime === 'claude') {
|
|
400
443
|
uninstallHooks(runtimeDir);
|
package/commands/hefesto/init.md
CHANGED
|
@@ -21,7 +21,8 @@ Inicializa a estrutura `.hefesto/` no projeto atual.
|
|
|
21
21
|
├── ROADMAP.md
|
|
22
22
|
├── STATE.md
|
|
23
23
|
├── config.json
|
|
24
|
-
|
|
24
|
+
├── features/
|
|
25
|
+
└── research/
|
|
25
26
|
```
|
|
26
27
|
4. Preencher PROJECT.md com as respostas do usuário.
|
|
27
28
|
5. Gerar STATE.md inicial com posição "Inicializando".
|
|
@@ -33,13 +34,34 @@ Inicializa a estrutura `.hefesto/` no projeto atual.
|
|
|
33
34
|
"project": { "name": "", "language": "pt-BR" },
|
|
34
35
|
"runtime": "claude",
|
|
35
36
|
"feature": { "id_prefix": "FEAT", "counter": 0 },
|
|
37
|
+
"research": { "id_prefix": "RES", "counter": 0 },
|
|
36
38
|
"lifecycle": { "auto_update_state": true }
|
|
37
39
|
}
|
|
38
40
|
```
|
|
39
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.
|
|
40
61
|
|
|
41
62
|
## Notas
|
|
42
63
|
|
|
43
64
|
- Todos os textos gerados devem ser em Português BR.
|
|
44
65
|
- O config.json deve ser atualizado com o nome do projeto informado pelo usuário.
|
|
45
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.
|
|
@@ -31,10 +31,16 @@ Features:
|
|
|
31
31
|
📋 FEAT-004 — Título (ready)
|
|
32
32
|
📝 FEAT-005 — Título (draft)
|
|
33
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
|
+
|
|
34
39
|
Bloqueios: Nenhum
|
|
35
40
|
|
|
36
41
|
Próximo passo: Continuar execução da Fase 2 de FEAT-003
|
|
37
42
|
```
|
|
38
43
|
|
|
39
|
-
5.
|
|
40
|
-
6.
|
|
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.
|
package/package.json
CHANGED
|
@@ -15,8 +15,10 @@ O Hefesto é um toolkit spec-driven + story-driven que organiza o desenvolviment
|
|
|
15
15
|
├── ROADMAP.md # Lista de features com status e progresso
|
|
16
16
|
├── STATE.md # Memória viva — posição atual, decisões, bloqueios (~80 linhas)
|
|
17
17
|
├── config.json # Configuração (counters de ID, runtime, preferências)
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
├── features/ # Documentos narrativos unificados
|
|
19
|
+
│ └── FEAT-NNN-slug.md # Uma feature por arquivo
|
|
20
|
+
└── research/ # Pesquisas estruturadas
|
|
21
|
+
└── RES-NNN-slug.md # Uma pesquisa por arquivo
|
|
20
22
|
```
|
|
21
23
|
|
|
22
24
|
## Features
|
|
@@ -55,6 +57,15 @@ Memória viva do projeto. Máximo ~80 linhas. Contém:
|
|
|
55
57
|
- Bloqueios
|
|
56
58
|
- Informação de continuidade (última sessão, onde parou, como retomar)
|
|
57
59
|
|
|
60
|
+
## Pesquisas
|
|
61
|
+
|
|
62
|
+
Pesquisas estruturadas ficam em `.hefesto/research/` com IDs `RES-NNN`. São executadas pelo agente `hefesto-researcher` em contexto isolado.
|
|
63
|
+
|
|
64
|
+
- **ID**: `RES-NNN` (zero-padded, counter em `config.json` → `research.counter`)
|
|
65
|
+
- **Status**: `draft` → `in-progress` → `done`
|
|
66
|
+
- **Vinculação**: podem ser linked a features via campo `feature` no frontmatter
|
|
67
|
+
- Antes de pesquisar algo novo, verificar se já existe pesquisa relevante em `.hefesto/research/`
|
|
68
|
+
|
|
58
69
|
## Outputs
|
|
59
70
|
|
|
60
71
|
Outputs reais (código, documentos, manifestos) vão para o projeto (src/, docs/, etc.). O `.hefesto/` apenas rastreia o que foi produzido e onde foi colocado.
|
|
@@ -64,3 +75,4 @@ Outputs reais (código, documentos, manifestos) vão para o projeto (src/, docs/
|
|
|
64
75
|
- `/hefesto:init` — Inicializa .hefesto/ no projeto
|
|
65
76
|
- `/hefesto:new-feature` — Cria nova feature
|
|
66
77
|
- `/hefesto:status` — Mostra estado do projeto
|
|
78
|
+
- `hefesto-researcher` — Agente de pesquisa estruturada (delegação automática)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: {{RESEARCH_ID}}
|
|
3
|
+
title: "{{RESEARCH_TITLE}}"
|
|
4
|
+
type: {{RESEARCH_TYPE}}
|
|
5
|
+
depth: {{RESEARCH_DEPTH}}
|
|
6
|
+
status: draft
|
|
7
|
+
feature: {{LINKED_FEATURE}}
|
|
8
|
+
created: {{DATE}}
|
|
9
|
+
updated: {{DATE}}
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# {{RESEARCH_ID}}: {{RESEARCH_TITLE}}
|
|
13
|
+
|
|
14
|
+
## Objetivo
|
|
15
|
+
|
|
16
|
+
{{RESEARCH_OBJECTIVE}}
|
|
17
|
+
|
|
18
|
+
## Contexto
|
|
19
|
+
|
|
20
|
+
{{RESEARCH_CONTEXT}}
|
|
21
|
+
|
|
22
|
+
## Escopo
|
|
23
|
+
|
|
24
|
+
**Perguntas a responder:**
|
|
25
|
+
|
|
26
|
+
1. {{QUESTION_1}}
|
|
27
|
+
2. {{QUESTION_2}}
|
|
28
|
+
3. {{QUESTION_3}}
|
|
29
|
+
|
|
30
|
+
**Fora do escopo:**
|
|
31
|
+
|
|
32
|
+
- {{EXCLUSION_1}}
|
|
33
|
+
|
|
34
|
+
## Descobertas
|
|
35
|
+
|
|
36
|
+
### {{FINDING_TITLE_1}}
|
|
37
|
+
|
|
38
|
+
{{FINDING_CONTENT}}
|
|
39
|
+
|
|
40
|
+
**Fonte:** [{{SOURCE_TITLE}}]({{SOURCE_URL}}) — Confiabilidade: {{CONFIDENCE}}
|
|
41
|
+
|
|
42
|
+
### {{FINDING_TITLE_2}}
|
|
43
|
+
|
|
44
|
+
{{FINDING_CONTENT}}
|
|
45
|
+
|
|
46
|
+
**Fonte:** [{{SOURCE_TITLE}}]({{SOURCE_URL}}) — Confiabilidade: {{CONFIDENCE}}
|
|
47
|
+
|
|
48
|
+
## Comparativo
|
|
49
|
+
|
|
50
|
+
| Critério | {{OPTION_A}} | {{OPTION_B}} | {{OPTION_C}} |
|
|
51
|
+
| -------- | ------------ | ------------ | ------------ |
|
|
52
|
+
| — | — | — | — |
|
|
53
|
+
|
|
54
|
+
## Não Reinvente a Roda
|
|
55
|
+
|
|
56
|
+
| Problema | Solução pronta | Por que não fazer na mão |
|
|
57
|
+
| -------- | -------------- | ------------------------ |
|
|
58
|
+
| — | — | — |
|
|
59
|
+
|
|
60
|
+
## Estado da Arte
|
|
61
|
+
|
|
62
|
+
| Antes | Agora | Por quê mudou |
|
|
63
|
+
| ----- | ----- | ------------- |
|
|
64
|
+
| — | — | — |
|
|
65
|
+
|
|
66
|
+
## Armadilhas
|
|
67
|
+
|
|
68
|
+
| Severidade | Armadilha | Se ignorar | Prevenção |
|
|
69
|
+
| ---------- | --------- | ---------- | --------- |
|
|
70
|
+
| Crítico | — | — | — |
|
|
71
|
+
| Moderado | — | — | — |
|
|
72
|
+
| Menor | — | — | — |
|
|
73
|
+
|
|
74
|
+
## Fontes
|
|
75
|
+
|
|
76
|
+
| # | Título | URL | Confiabilidade |
|
|
77
|
+
| - | ------ | --- | -------------- |
|
|
78
|
+
| 1 | — | — | alta |
|
|
79
|
+
|
|
80
|
+
## Conclusão
|
|
81
|
+
|
|
82
|
+
{{CONCLUSION}}
|
|
83
|
+
|
|
84
|
+
## Recomendação
|
|
85
|
+
|
|
86
|
+
{{RECOMMENDATION}}
|
|
87
|
+
|
|
88
|
+
## Notas
|
|
89
|
+
|
|
90
|
+
{{NOTES}}
|