@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
|
@@ -9,36 +9,25 @@ const os = require('os');
|
|
|
9
9
|
let input = '';
|
|
10
10
|
const stdinTimeout = setTimeout(() => process.exit(0), 3000);
|
|
11
11
|
process.stdin.setEncoding('utf8');
|
|
12
|
-
process.stdin.on('data', chunk => input += chunk);
|
|
12
|
+
process.stdin.on('data', (chunk) => (input += chunk));
|
|
13
13
|
process.stdin.on('end', () => {
|
|
14
14
|
clearTimeout(stdinTimeout);
|
|
15
15
|
try {
|
|
16
16
|
const data = JSON.parse(input);
|
|
17
17
|
const model = data.model?.display_name || 'Claude';
|
|
18
18
|
const dir = data.workspace?.current_dir || process.cwd();
|
|
19
|
-
const session = data.session_id || '';
|
|
20
19
|
const remaining = data.context_window?.remaining_percentage;
|
|
21
20
|
|
|
22
21
|
// Context window (normalizado para contexto utilizável)
|
|
23
22
|
const AUTO_COMPACT_BUFFER_PCT = 16.5;
|
|
24
23
|
let ctx = '';
|
|
25
24
|
if (remaining != null) {
|
|
26
|
-
const usableRemaining = Math.max(
|
|
25
|
+
const usableRemaining = Math.max(
|
|
26
|
+
0,
|
|
27
|
+
((remaining - AUTO_COMPACT_BUFFER_PCT) / (100 - AUTO_COMPACT_BUFFER_PCT)) * 100
|
|
28
|
+
);
|
|
27
29
|
const used = Math.max(0, Math.min(100, Math.round(100 - usableRemaining)));
|
|
28
30
|
|
|
29
|
-
// Bridge file para o context-monitor
|
|
30
|
-
if (session) {
|
|
31
|
-
try {
|
|
32
|
-
const bridgePath = path.join(os.tmpdir(), `hefesto-ctx-${session}.json`);
|
|
33
|
-
fs.writeFileSync(bridgePath, JSON.stringify({
|
|
34
|
-
session_id: session,
|
|
35
|
-
remaining_percentage: remaining,
|
|
36
|
-
used_pct: used,
|
|
37
|
-
timestamp: Math.floor(Date.now() / 1000),
|
|
38
|
-
}));
|
|
39
|
-
} catch (_) {}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
31
|
// Barra de progresso (10 segmentos)
|
|
43
32
|
const filled = Math.floor(used / 10);
|
|
44
33
|
const bar = '█'.repeat(filled) + '░'.repeat(10 - filled);
|
|
@@ -68,7 +57,9 @@ process.stdin.on('end', () => {
|
|
|
68
57
|
}
|
|
69
58
|
|
|
70
59
|
const dirname = path.basename(dir);
|
|
71
|
-
process.stdout.write(
|
|
60
|
+
process.stdout.write(
|
|
61
|
+
`${updateMsg}\x1b[1;31m⚒ HEFESTO\x1b[0m │ \x1b[2m${model}\x1b[0m │ \x1b[2m${dirname}\x1b[0m${ctx}`
|
|
62
|
+
);
|
|
72
63
|
} catch (_) {
|
|
73
64
|
// Falha silenciosa
|
|
74
65
|
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Hefesto Workflow Enforcement
|
|
3
|
+
// PreToolUse hook: avisa quando Write/Edit é usado sem feature ativa
|
|
4
|
+
// Comportamento: WARN only, nunca BLOCK — Hefesto guia, não bloqueia
|
|
5
|
+
|
|
6
|
+
const fs = require('node:fs');
|
|
7
|
+
const path = require('node:path');
|
|
8
|
+
|
|
9
|
+
let input = '';
|
|
10
|
+
const stdinTimeout = setTimeout(() => process.exit(0), 3000);
|
|
11
|
+
|
|
12
|
+
process.stdin.setEncoding('utf8');
|
|
13
|
+
process.stdin.on('data', (chunk) => (input += chunk));
|
|
14
|
+
process.stdin.on('end', () => {
|
|
15
|
+
clearTimeout(stdinTimeout);
|
|
16
|
+
try {
|
|
17
|
+
const data = JSON.parse(input);
|
|
18
|
+
const toolName = data.tool_name;
|
|
19
|
+
const filePath = data.tool_input?.file_path || data.tool_input?.path || '';
|
|
20
|
+
|
|
21
|
+
// Só verificar Write e Edit
|
|
22
|
+
if (toolName !== 'Write' && toolName !== 'Edit') return;
|
|
23
|
+
|
|
24
|
+
// Se não tem file_path, não tem como verificar
|
|
25
|
+
if (!filePath) return;
|
|
26
|
+
|
|
27
|
+
const basename = path.basename(filePath);
|
|
28
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
29
|
+
|
|
30
|
+
// Escape hatches — sempre permitir:
|
|
31
|
+
// .hefesto/ (state files do próprio Hefesto)
|
|
32
|
+
if (normalized.includes('.hefesto/')) return;
|
|
33
|
+
// Configs de runtime (.claude/, .gemini/, .codex/)
|
|
34
|
+
if (
|
|
35
|
+
normalized.includes('.claude/') ||
|
|
36
|
+
normalized.includes('.gemini/') ||
|
|
37
|
+
normalized.includes('.codex/')
|
|
38
|
+
)
|
|
39
|
+
return;
|
|
40
|
+
// Testes (test, spec, __tests__)
|
|
41
|
+
if (/test|spec|__tests__/i.test(normalized)) return;
|
|
42
|
+
// Dotfiles e package.json
|
|
43
|
+
if (basename.startsWith('.') || basename === 'package.json' || basename === 'package-lock.json')
|
|
44
|
+
return;
|
|
45
|
+
// Markdown docs
|
|
46
|
+
if (basename.endsWith('.md')) return;
|
|
47
|
+
|
|
48
|
+
// Verificar se .hefesto/STATE.md existe
|
|
49
|
+
const statePath = path.join(process.cwd(), '.hefesto', 'STATE.md');
|
|
50
|
+
if (!fs.existsSync(statePath)) return;
|
|
51
|
+
|
|
52
|
+
// Ler STATE.md e checar se tem feature ativa
|
|
53
|
+
const state = fs.readFileSync(statePath, 'utf8');
|
|
54
|
+
const featureSection = state.match(/## Feature Ativa\s*\n([\s\S]*?)(?=\n## |\n---|$)/);
|
|
55
|
+
|
|
56
|
+
if (!featureSection) return;
|
|
57
|
+
|
|
58
|
+
const content = featureSection[1].trim();
|
|
59
|
+
if (content && content !== 'Nenhuma.' && content !== 'Nenhuma') return;
|
|
60
|
+
|
|
61
|
+
// Sem feature ativa — emitir warning via stderr
|
|
62
|
+
process.stderr.write(
|
|
63
|
+
'\n⚒ HEFESTO: Nenhuma feature ativa. Considere usar /hefesto-new-feature antes de implementar.\n'
|
|
64
|
+
);
|
|
65
|
+
} catch (_) {
|
|
66
|
+
// Silent failure — nunca quebrar o runtime
|
|
67
|
+
}
|
|
68
|
+
});
|
package/package.json
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lugom.io/hefesto",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "A meta-prompting, context engineering and spec-driven development system for Claude Code, Gemini and Codex by lugom.io.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"hefesto": "bin/install.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"test": "node --test tests/**/*.test.js"
|
|
10
|
+
"test": "node --test tests/**/*.test.js",
|
|
11
|
+
"lint": "eslint bin/ hooks/ tests/",
|
|
12
|
+
"lint:fix": "eslint bin/ hooks/ tests/ --fix",
|
|
13
|
+
"format": "prettier --write .",
|
|
14
|
+
"format:check": "prettier --check .",
|
|
15
|
+
"sandbox": "HEFESTO=$PWD && mkdir -p $HEFESTO/tmp/hefesto-sandbox/src && cd $HEFESTO/tmp/hefesto-sandbox && test -f package.json || echo '{\"name\":\"sandbox\",\"type\":\"module\"}' > package.json && node $HEFESTO/bin/install.js && claude"
|
|
11
16
|
},
|
|
12
17
|
"engines": {
|
|
13
18
|
"node": ">=18"
|
|
@@ -15,7 +20,6 @@
|
|
|
15
20
|
"files": [
|
|
16
21
|
"bin/",
|
|
17
22
|
"templates/",
|
|
18
|
-
"commands/",
|
|
19
23
|
"skills/",
|
|
20
24
|
"hooks/",
|
|
21
25
|
"agents/"
|
|
@@ -33,5 +37,11 @@
|
|
|
33
37
|
"codex-cli"
|
|
34
38
|
],
|
|
35
39
|
"author": "lugom.io",
|
|
36
|
-
"license": "MIT"
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@eslint/js": "^10.0.1",
|
|
43
|
+
"eslint": "^10.1.0",
|
|
44
|
+
"eslint-config-prettier": "^10.1.8",
|
|
45
|
+
"prettier": "^3.8.1"
|
|
46
|
+
}
|
|
37
47
|
}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hefesto-context
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Conhecimento sobre estrutura e convenções do Hefesto (.hefesto/).
|
|
5
|
+
ATIVAR quando: projeto tem .hefesto/, usuário menciona feature/spec/story/roadmap/STATE.md/
|
|
6
|
+
PROJECT.md/config.json, qualquer skill hefesto-* precisa de contexto do sistema, ou tarefa
|
|
7
|
+
envolve IDs (FEAT-NNN, RES-NNN), status de features ou ciclo de desenvolvimento Hefesto.
|
|
8
|
+
user-invocable: false
|
|
9
|
+
disable-model-invocation: false
|
|
4
10
|
---
|
|
5
11
|
|
|
6
12
|
# Hefesto Context
|
|
@@ -11,10 +17,10 @@ O Hefesto é um toolkit spec-driven + story-driven que organiza o desenvolviment
|
|
|
11
17
|
|
|
12
18
|
```
|
|
13
19
|
.hefesto/
|
|
14
|
-
├── PROJECT.md # Visão, valor central, restrições
|
|
15
|
-
├──
|
|
16
|
-
├──
|
|
17
|
-
├──
|
|
20
|
+
├── PROJECT.md # Visão, valor central, restrições, convenções e features
|
|
21
|
+
├── STATE.md # Memória entre sessões — posição, decisões, bloqueios (~80 linhas)
|
|
22
|
+
├── config.json # Configuração (projeto, plataforma, counters de ID)
|
|
23
|
+
├── DESIGN.md # Contrato visual (opcional, /hefesto-design)
|
|
18
24
|
├── features/ # Documentos narrativos unificados
|
|
19
25
|
│ └── FEAT-NNN-slug.md # Uma feature por arquivo
|
|
20
26
|
└── research/ # Pesquisas estruturadas
|
|
@@ -48,31 +54,78 @@ Cada feature é um documento narrativo que combina **spec** (O QUÊ) e **stories
|
|
|
48
54
|
- `done` — completa e verificada
|
|
49
55
|
- `blocked` — bloqueada por dependência
|
|
50
56
|
|
|
57
|
+
## UX: Interação com o Usuário
|
|
58
|
+
|
|
59
|
+
- **Opções predefinidas** → sempre usar seletor interativo (não texto livre). Aplica-se a qualquer pergunta com respostas fixas: escolha de plataforma, confirmações sim/não, seleção entre alternativas, etc.
|
|
60
|
+
- **Inputs abertos** → texto livre. Aplica-se a: nome do projeto, descrição, valor central, prazo, perguntas-chave, etc.
|
|
61
|
+
|
|
62
|
+
## Ciclo de Vida Completo
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
init → (design) → new-feature → (research) → execute → validate → done
|
|
66
|
+
│ │ │ │ │ │
|
|
67
|
+
▼ ▼ ▼ ▼ ▼ ▼
|
|
68
|
+
/hefesto /hefesto /hefesto athena /hefesto argos
|
|
69
|
+
-init -design -new-feature (agent) -execute (agent)
|
|
70
|
+
│
|
|
71
|
+
├→ hermes (recon)
|
|
72
|
+
├→ self-review inline
|
|
73
|
+
├→ verification gate
|
|
74
|
+
│ └→ falha após retries → /hefesto-debug
|
|
75
|
+
├→ /hefesto-simplify (pós)
|
|
76
|
+
├→ /hefesto-security (pós)
|
|
77
|
+
└→ argos (QA loop, max 3x)
|
|
78
|
+
```
|
|
79
|
+
|
|
51
80
|
## STATE.md
|
|
52
81
|
|
|
53
|
-
Memória
|
|
54
|
-
|
|
82
|
+
Memória entre sessões. Máximo ~80 linhas. Contém:
|
|
83
|
+
|
|
84
|
+
- Posição atual (features feitas vs total, progresso)
|
|
55
85
|
- Feature e fase ativa
|
|
56
86
|
- Decisões recentes
|
|
57
87
|
- Bloqueios
|
|
58
|
-
-
|
|
88
|
+
- Continuidade (última sessão, onde parou, como retomar)
|
|
59
89
|
|
|
60
90
|
## Pesquisas
|
|
61
91
|
|
|
62
|
-
Pesquisas estruturadas ficam em `.hefesto/research/` com IDs `RES-NNN`. São executadas pelo agente `hefesto-
|
|
92
|
+
Pesquisas estruturadas ficam em `.hefesto/research/` com IDs `RES-NNN`. São executadas pelo agente `hefesto-athena` em contexto isolado. O output é otimizado para consumo por agentes planners — inclui file paths, build order e verificação.
|
|
63
93
|
|
|
64
94
|
- **ID**: `RES-NNN` (zero-padded, counter em `config.json` → `research.counter`)
|
|
65
95
|
- **Status**: `draft` → `in-progress` → `done`
|
|
96
|
+
- **Profundidade**: `quick` (15-20 linhas), `standard` (completo), `deep` (exaustivo)
|
|
66
97
|
- **Vinculação**: podem ser linked a features via campo `feature` no frontmatter
|
|
67
98
|
- Antes de pesquisar algo novo, verificar se já existe pesquisa relevante em `.hefesto/research/`
|
|
68
99
|
|
|
100
|
+
## Validação
|
|
101
|
+
|
|
102
|
+
Após implementar features ou fases, delegue ao agente `hefesto-argos` para avaliação independente. O tester lê a spec, lê o código com olhar fresco (isolamento epistêmico), cria testes e retorna um veredicto estruturado (`approved` / `approved-with-notes` / `needs-work`). Delegue passando: Feature ID, fase(s) implementada(s) e paths dos arquivos alterados.
|
|
103
|
+
|
|
104
|
+
## config.json
|
|
105
|
+
|
|
106
|
+
Metadados e contadores do projeto. Sempre leia `.hefesto/config.json` para valores atuais. Estrutura canônica em `.hefesto/templates/TPL-CONFIG.json`. Seções: `project`, `feature`, `research`, `design`, `verification`. O campo `project.language` define o idioma dos artefatos (default: `pt-BR`); `project.lang` define a linguagem de programação.
|
|
107
|
+
|
|
69
108
|
## Outputs
|
|
70
109
|
|
|
71
110
|
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.
|
|
72
111
|
|
|
73
|
-
##
|
|
112
|
+
## Hooks
|
|
113
|
+
|
|
114
|
+
- **hefesto-statusline.cjs** (StatusLine) — Exibe `⚒ HEFESTO | modelo | dir | contexto%` na statusline
|
|
115
|
+
- **hefesto-check-update.cjs** (SessionStart) — Verifica versão nova no npm ao iniciar sessão
|
|
116
|
+
- **hefesto-workflow.cjs** (PreToolUse) — Avisa quando Write/Edit é usado sem feature ativa
|
|
117
|
+
|
|
118
|
+
## Skills disponíveis
|
|
119
|
+
|
|
120
|
+
- `/hefesto-init` — Inicializa .hefesto/ no projeto
|
|
121
|
+
- `/hefesto-new-feature` — Cria nova feature (com gate de validação)
|
|
122
|
+
- `/hefesto-execute` — Executa implementação de feature (decomposição, verificação, QA loop)
|
|
123
|
+
- `/hefesto-debug` — Debugging sistemático em 4 fases (causa raiz → padrão → hipótese → fix)
|
|
124
|
+
- `/hefesto-design` — Cria contrato visual do projeto (cores, tipografia, componentes, tokens CSS)
|
|
125
|
+
- `/hefesto-security` — Auditoria de segurança (OWASP, secrets, boundaries)
|
|
126
|
+
- `/hefesto-simplify` — Simplificação e reuso de código (pós-implementação)
|
|
127
|
+
- `hefesto-athena` — Agente de pesquisa estruturada (delegação automática)
|
|
128
|
+
- `hefesto-argos` — Agente de teste e validação (delegação após implementação, suporta QA loop)
|
|
129
|
+
- `hefesto-hermes` — Agente batedor de codebase (reconhecimento antes de implementar)
|
|
74
130
|
|
|
75
|
-
|
|
76
|
-
- `/hefesto:new-feature` — Cria nova feature
|
|
77
|
-
- `/hefesto:status` — Mostra estado do projeto
|
|
78
|
-
- `hefesto-researcher` — Agente de pesquisa estruturada (delegação automática)
|
|
131
|
+
> **Nota:** Skills com `/` são invocadas diretamente pelo usuário. Agents sem `/` (athena, argos, hermes) são delegados automaticamente via subagent dispatch durante a execução — não são slash commands.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hefesto-debug
|
|
3
|
+
description: >
|
|
4
|
+
Debugging sistemático: investigar causa raiz antes de corrigir. 4 fases, máximo 3 tentativas.
|
|
5
|
+
ATIVAR quando: "bug", "erro", "quebrou", "não funciona", "debugar", "regressão",
|
|
6
|
+
"parou de funcionar", "tá dando erro", ou quando um comando/teste falha repetidamente
|
|
7
|
+
durante execução de outra tarefa.
|
|
8
|
+
user-invocable: true
|
|
9
|
+
disable-model-invocation: false
|
|
10
|
+
argument-hint: '[descrição do problema]'
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Hefesto Debug
|
|
14
|
+
|
|
15
|
+
Debugging sistemático que impõe disciplina: investigar antes de corrigir. Sem investigação, cada "tentativa" empilha patches frágeis que mascaram a causa real. Este workflow força o caminho correto: entender primeiro, corrigir depois.
|
|
16
|
+
|
|
17
|
+
## Fase 1 — Causa Raiz (OBRIGATÓRIA)
|
|
18
|
+
|
|
19
|
+
1. **Reproduzir**: rodar o comando/teste que falha, ler output COMPLETO (não só última linha)
|
|
20
|
+
2. **Contexto**: `git diff`, `git log -5`, arquivos no fluxo do erro, spec da feature ativa (se houver)
|
|
21
|
+
3. **Cadeia de erro**: sintoma → função → input → origem do input (rastrear para trás)
|
|
22
|
+
4. **Output**: "A causa provável é [X] porque [evidência Y]. Manifesta em [Z], origina em [W]."
|
|
23
|
+
|
|
24
|
+
Sinais de que está pulando investigação:
|
|
25
|
+
|
|
26
|
+
- Propor solução antes de traçar o fluxo de dados
|
|
27
|
+
- "Não entendo completamente mas..." — se não entende, não pode corrigir
|
|
28
|
+
- Cada fix revela problema novo em lugar diferente → sinal arquitetural, pare e reavalie
|
|
29
|
+
|
|
30
|
+
## Fase 2 — Análise de Padrões
|
|
31
|
+
|
|
32
|
+
1. **Recorrência**: git log por fixes similares. Bug recorrente = problema estrutural
|
|
33
|
+
2. **Profundidade**: módulo isolado ou atravessa camadas? Fix cria problemas em outro lugar?
|
|
34
|
+
3. **Impacto**: módulos/features afetados, testes existentes, consumidores
|
|
35
|
+
|
|
36
|
+
## Fase 3 — Teste de Hipóteses
|
|
37
|
+
|
|
38
|
+
1. Formular 1-3 hipóteses específicas e refutáveis: "Se [causa], quando [teste], deveria [resultado]"
|
|
39
|
+
2. Testar com mínima intervenção: logging, teste focado, UMA variável por vez
|
|
40
|
+
3. Confirmada → Fase 4. Refutada → reformular. Todas refutadas → voltar à Fase 1
|
|
41
|
+
|
|
42
|
+
## Fase 4 — Fix
|
|
43
|
+
|
|
44
|
+
1. **Implementar fix mínimo**: causa raiz, não sintoma. Uma mudança por vez
|
|
45
|
+
2. **Verificar**: comando original, `verification_commands` do config.json, regressões
|
|
46
|
+
3. **Se falhar**: voltar à Fase 3 com hipótese refinada. Reverter, não empilhar
|
|
47
|
+
4. **Após 3 tentativas**: PARAR. Listar premissas e tentativas. Sugerir revisão da abordagem
|
|
48
|
+
5. **Se funcionar**: atualizar STATE.md, considerar teste de regressão
|
|
49
|
+
|
|
50
|
+
## Integração com Hefesto
|
|
51
|
+
|
|
52
|
+
- **Feature ativa**: ler spec para comportamento esperado, fix consistente com requisitos
|
|
53
|
+
- **Verification commands**: usar de config.json na Fase 4
|
|
54
|
+
- **Argos**: se bug durante `/hefesto-execute`, o debug é pausa no workflow — retomar após resolver
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hefesto-design
|
|
3
|
+
description: >
|
|
4
|
+
Contrato visual do projeto (.hefesto/DESIGN.md) — criação e enforcement do design system.
|
|
5
|
+
ATIVAR quando: .hefesto/DESIGN.md existe E tarefa envolve CSS, cores, fontes, componentes UI,
|
|
6
|
+
layout, Tailwind, styled-components, tema, dark mode, shadcn components ou qualquer decisão visual.
|
|
7
|
+
Também: /hefesto-design, "criar design", "paleta de cores", "design system", "identidade visual",
|
|
8
|
+
"look and feel", prototipar UI, fazer landing page.
|
|
9
|
+
user-invocable: true
|
|
10
|
+
disable-model-invocation: false
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Hefesto Design
|
|
14
|
+
|
|
15
|
+
Cria o contrato visual do projeto (`.hefesto/DESIGN.md`) ou aplica durante implementação.
|
|
16
|
+
|
|
17
|
+
## Princípio
|
|
18
|
+
|
|
19
|
+
O contrato visual deve ter **ponto de vista**. Cada decisão — fonte, cor, radius, shadow — deve ser uma escolha intencional que reflete o projeto, não um default seguro. Se o resultado parece que qualquer AI geraria, está errado. O teste: alguém olhando o design consegue adivinhar que tipo de projeto é?
|
|
20
|
+
|
|
21
|
+
## Detecção de Modo
|
|
22
|
+
|
|
23
|
+
1. Se invocado como `/hefesto-design` → **Modo Criação**
|
|
24
|
+
2. Se `/hefesto-design update` → **Modo Atualização**
|
|
25
|
+
3. Se ativado automaticamente durante tarefa visual → **Modo Enforcement**
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Modo Criação
|
|
30
|
+
|
|
31
|
+
### Pré-requisitos
|
|
32
|
+
|
|
33
|
+
Verificar se `.hefesto/` existe. Se não, sugerir `/hefesto-init`.
|
|
34
|
+
|
|
35
|
+
### Fase 1 — Discovery
|
|
36
|
+
|
|
37
|
+
Coletar informações com o usuário:
|
|
38
|
+
|
|
39
|
+
1. **"Descreve teu projeto em uma frase"** — input aberto
|
|
40
|
+
2. **"Quem é o público-alvo?"** — input aberto
|
|
41
|
+
3. **"Em 3 palavras, que sentimento quer provocar?"** — input aberto (ex: confiança, energia, sofisticação)
|
|
42
|
+
4. **Referência visual?** — seletor: URL de site / Imagem local (print/screenshot) / Descrição textual / Múltiplas fontes / Nenhuma
|
|
43
|
+
- Se URL: ler com WebFetch ou browser para extrair padrões visuais (cores, tipografia, layout)
|
|
44
|
+
- Se imagem: ler com Read tool para analisar padrões visuais (cores, tipografia, layout, componentes)
|
|
45
|
+
- Se descrição: usar como guia estético
|
|
46
|
+
- Se múltiplas fontes: aceitar combinação de URLs, imagens e descrições. Consolidar padrões visuais de todas as fontes numa síntese coerente, resolvendo conflitos pelo que melhor reflete o discovery
|
|
47
|
+
|
|
48
|
+
**Antes de gerar**: com base nas respostas, comprometer-se com uma direção estética clara. Não buscar equilíbrio — buscar personalidade. Uma cor dominante com acentos afiados supera paletas distribuídas uniformemente. Uma fonte com caráter supera uma fonte "segura". Documentar a direção escolhida e o porquê em 1-2 frases antes de iniciar a geração.
|
|
49
|
+
|
|
50
|
+
### Fase 2 — Geração
|
|
51
|
+
|
|
52
|
+
1. Ler `.hefesto/templates/TPL-DESIGN.md` como guia de estrutura
|
|
53
|
+
2. Gerar contrato **completo** — todas seções, todos componentes
|
|
54
|
+
3. Cada valor é **exato**: HEX, px, font-family, CSS value. Zero ambiguidade
|
|
55
|
+
4. Validar contrastes WCAG AA (ver seção Validação WCAG AA)
|
|
56
|
+
5. Do's/Don'ts específicos deste projeto — se servem para qualquer projeto, são genéricos demais
|
|
57
|
+
6. Validar contra Checklist de Qualidade (ver seção abaixo)
|
|
58
|
+
7. Apresentar resumo para aprovação:
|
|
59
|
+
- Nome e descrição do design
|
|
60
|
+
- Paleta (brand + semantic)
|
|
61
|
+
- Tipografia (fonts + scale resumido)
|
|
62
|
+
- Filosofia (radius, shadows, spacing)
|
|
63
|
+
- 3 Do's e 3 Don'ts mais importantes
|
|
64
|
+
8. Seletor: **Aprovar** / **Ajustar** (especificar o quê) / **Refazer** (novo discovery)
|
|
65
|
+
|
|
66
|
+
### Fase 3 — Gravação
|
|
67
|
+
|
|
68
|
+
1. Salvar `.hefesto/DESIGN.md`
|
|
69
|
+
2. Atualizar `.hefesto/config.json` → `design.status: "active"`
|
|
70
|
+
3. Atualizar `.hefesto/STATE.md` com decisão
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Modo Enforcement
|
|
75
|
+
|
|
76
|
+
Ativado automaticamente quando o modelo detecta tarefa visual (criar componente, CSS, Tailwind, estilizar, layout, tema, cores, fontes).
|
|
77
|
+
|
|
78
|
+
### Protocolo
|
|
79
|
+
|
|
80
|
+
1. Ler `.hefesto/config.json` → `design.status`
|
|
81
|
+
- Se `"none"` → sair silenciosamente, sem output
|
|
82
|
+
- Se `"active"` → prosseguir
|
|
83
|
+
2. Ler `.hefesto/DESIGN.md`
|
|
84
|
+
3. **Todas** decisões visuais usam valores do contrato:
|
|
85
|
+
- Cores → paleta declarada
|
|
86
|
+
- Fontes → font stack declarado
|
|
87
|
+
- Tamanhos → type scale declarado
|
|
88
|
+
- Espaçamento → scale declarado
|
|
89
|
+
- Componentes → specs declaradas (estados, variantes, dimensões)
|
|
90
|
+
- Radius, shadows → filosofia declarada
|
|
91
|
+
- Animações → motion tokens declarados (durations, easings)
|
|
92
|
+
4. Se o contrato **não cobre** algo necessário → **propor extensão** ao usuário, não inventar
|
|
93
|
+
5. Se o contrato é ambíguo em algum ponto → perguntar ao usuário
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Modo Atualização
|
|
98
|
+
|
|
99
|
+
Invocado com `/hefesto-design update`.
|
|
100
|
+
|
|
101
|
+
1. Ler `.hefesto/DESIGN.md` existente
|
|
102
|
+
2. Perguntar o que quer ajustar (seletor: Cores / Tipografia / Componentes / Do's-Don'ts / Outro)
|
|
103
|
+
3. Propor mudanças mantendo coerência com o restante do contrato
|
|
104
|
+
4. Validar WCAG AA e checklist de qualidade
|
|
105
|
+
5. Salvar com diff claro do que mudou
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Validação WCAG AA
|
|
110
|
+
|
|
111
|
+
Fórmula para verificar contraste de cores inline, sem dependências externas:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
Converter HEX para sRGB (0-1):
|
|
115
|
+
R = parseInt(hex.slice(1,3), 16) / 255
|
|
116
|
+
G = parseInt(hex.slice(3,5), 16) / 255
|
|
117
|
+
B = parseInt(hex.slice(5,7), 16) / 255
|
|
118
|
+
|
|
119
|
+
Linearizar cada canal:
|
|
120
|
+
Se C <= 0.03928 → C / 12.92
|
|
121
|
+
Senão → ((C + 0.055) / 1.055) ^ 2.4
|
|
122
|
+
|
|
123
|
+
Luminância relativa:
|
|
124
|
+
L = 0.2126 * R + 0.7152 * G + 0.0722 * B
|
|
125
|
+
|
|
126
|
+
Contrast ratio:
|
|
127
|
+
(L_lighter + 0.05) / (L_darker + 0.05)
|
|
128
|
+
|
|
129
|
+
Thresholds WCAG AA:
|
|
130
|
+
>= 4.5:1 — texto normal (< 18px regular, < 14px bold)
|
|
131
|
+
>= 3.0:1 — texto grande (>= 18px regular, >= 14px bold)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Verificar obrigatoriamente:
|
|
135
|
+
|
|
136
|
+
- Text Primary sobre Background
|
|
137
|
+
- Text Primary sobre Surface
|
|
138
|
+
- Text Secondary sobre Background
|
|
139
|
+
- Text Secondary sobre Surface
|
|
140
|
+
- Semantic colors (Success, Warning, Error) sobre Background
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Anti-patterns
|
|
145
|
+
|
|
146
|
+
Erros comuns que o modelo comete ao gerar design systems. Detectar e corrigir antes de apresentar o contrato:
|
|
147
|
+
|
|
148
|
+
- **Contrato genérico** — Inter + blue primary + rounded 8px + subtle shadows = output padrão de qualquer modelo. Se o contrato parece genérico, refazer com mais personalidade baseada no discovery
|
|
149
|
+
- **Inconsistência interna** — cores declaradas na paleta mas não usadas nos componentes, ou cores nos componentes que não existem na paleta
|
|
150
|
+
- **Valores órfãos** — tokens mencionados em uma seção que não aparecem em outra
|
|
151
|
+
- **Filosofia ausente** — listar valores sem explicar o "porquê". O Overview existe para dar contexto narrativo a cada decisão
|
|
152
|
+
- **Componentes incompletos** — definir apenas default state, esquecendo hover, focus, active, disabled, error
|
|
153
|
+
- **Do's/Don'ts genéricos** — "Use cores consistentes" ou "Mantenha espaçamento uniforme" servem para qualquer projeto. Cada regra deve ser consequência direta da filosofia deste design específico
|
|
154
|
+
- **Spacing desalinhado** — base unit 8px mas usando valores como 10px, 15px, 22px que quebram o grid
|
|
155
|
+
- **Contrastes não verificados** — declarar paleta sem rodar WCAG AA nas combinações text-on-surface
|
|
156
|
+
- **Dark mode esquecido** — se o projeto suporta dark mode, todas surfaces e content colors precisam de variantes declaradas
|
|
157
|
+
- **Default seguro** — escolher a fonte, cor ou layout "que funciona para tudo" é escolher nada. Cada valor deve ser consequência da direção estética, não uma aposta conservadora
|
|
158
|
+
- **Convergência** — se o contrato resultante é indistinguível de outro projeto, falta personalidade. O discovery existe para diferenciar
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Checklist de Qualidade
|
|
163
|
+
|
|
164
|
+
Validar antes de apresentar o contrato ao usuário:
|
|
165
|
+
|
|
166
|
+
- [ ] **Completude** — todas seções do TPL-DESIGN.md preenchidas com valores reais?
|
|
167
|
+
- [ ] **Coerência narrativa** — Overview reflete as decisões visuais? Do's/Don'ts derivam da filosofia?
|
|
168
|
+
- [ ] **Especificidade** — todos valores são copy-paste ready (HEX, px, font-family, CSS value)? Nenhum "algo como" ou "variação de"?
|
|
169
|
+
- [ ] **Consistência interna** — tokens usados nos componentes batem com a paleta? Font specs batem com o type scale?
|
|
170
|
+
- [ ] **WCAG AA** — todas combinações text-on-surface verificadas com a fórmula?
|
|
171
|
+
- [ ] **Componentes completos** — todos estados definidos (default, hover, active, focus, disabled)?
|
|
172
|
+
- [ ] **Anti-patterns** — nenhum item da lista acima presente no contrato?
|
|
173
|
+
- [ ] **Personalidade** — o contrato reflete o projeto, não um template genérico?
|
|
174
|
+
- [ ] **Memorabilidade** — alguém vendo apenas a paleta + tipografia consegue intuir o tipo de projeto?
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Regras
|
|
179
|
+
|
|
180
|
+
- **DESIGN.md em Inglês** — o contrato é consumido por agentes e código
|
|
181
|
+
- **Zero dependências** — validação WCAG AA inline, sem scripts
|
|
182
|
+
- **Valores exatos** — nunca gerar "algo entre X e Y" ou "variação de"
|
|
183
|
+
- **Font stack com fallbacks** — sempre incluir fallback CSS completo (system fonts)
|
|
184
|
+
- **Filosofia explícita** — border radius, shadows e spacing devem ter justificativa, não apenas valores
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hefesto-execute
|
|
3
|
+
description: >
|
|
4
|
+
Executa a implementação de uma feature Hefesto. Decompõe em fases atômicas, roda verificação
|
|
5
|
+
após cada fase, e invoca Argos para QA final (max 3 iterações).
|
|
6
|
+
Usar com: /hefesto-execute [FEAT-NNN]. Requer feature com status "ready" ou "active".
|
|
7
|
+
Para criar o spec da feature, usar /hefesto-new-feature primeiro.
|
|
8
|
+
user-invocable: true
|
|
9
|
+
disable-model-invocation: true
|
|
10
|
+
argument-hint: '[FEAT-NNN]'
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Hefesto Execute
|
|
14
|
+
|
|
15
|
+
Executa a implementação de uma feature, do reconhecimento à validação final.
|
|
16
|
+
|
|
17
|
+
Ciclo: identificar feature → reconhecer codebase → detectar verificação → executar fases → validar com Argos → QA loop → concluir.
|
|
18
|
+
|
|
19
|
+
## Pré-requisitos
|
|
20
|
+
|
|
21
|
+
Verificar se `.hefesto/` existe. Se não, sugerir `/hefesto-init`.
|
|
22
|
+
|
|
23
|
+
## Workflow
|
|
24
|
+
|
|
25
|
+
### Fase 1 — Identificar Feature
|
|
26
|
+
|
|
27
|
+
1. Se argumento `FEAT-NNN` fornecido, buscar em `.hefesto/features/FEAT-NNN-*.md`
|
|
28
|
+
2. Senão, ler `.hefesto/STATE.md` → feature ativa
|
|
29
|
+
3. Se nenhuma feature ativa: listar features `ready`, apresentar via seletor interativo. Se não houver, sugerir `/hefesto-new-feature`
|
|
30
|
+
4. Validar status:
|
|
31
|
+
- `ready` ou `active` → prosseguir
|
|
32
|
+
- `draft` → "Promova para ready antes de executar"
|
|
33
|
+
- `done` → informar e sair
|
|
34
|
+
- `blocked` → informar, seletor: desbloquear (status → `ready`) / cancelar (mantém `blocked`)
|
|
35
|
+
|
|
36
|
+
### Fase 2 — Reconhecimento
|
|
37
|
+
|
|
38
|
+
Sempre delegar para `hefesto-hermes` com: ID, título, requisitos, fases. O Hermes calibra a profundidade automaticamente — features simples recebem relatório curto, complexas recebem mapeamento completo. Usar output para informar execução: padrões, pontos de integração, ordem de ataque.
|
|
39
|
+
|
|
40
|
+
**Dispatch paralelo**: se a feature também precisa de pesquisa, Athena e Hermes podem rodar simultaneamente — exceto quando a pesquisa pode mudar a abordagem (executar Athena primeiro).
|
|
41
|
+
|
|
42
|
+
### Fase 3 — Detectar Verificação
|
|
43
|
+
|
|
44
|
+
1. Ler `.hefesto/config.json` → `verification`
|
|
45
|
+
2. Se `commands` vazio e `auto_detect` true:
|
|
46
|
+
- Ler `package.json`, buscar scripts: `test`, `lint`, `typecheck`, `tsc`, `check`, `format:check`
|
|
47
|
+
- Seletor: "Detectei estes comandos: [lista]. Confirmar?" (Sim / Editar / Pular)
|
|
48
|
+
3. Se nada detectado, perguntar ao usuário
|
|
49
|
+
4. Salvar em `config.json → verification.commands` e frontmatter da feature
|
|
50
|
+
|
|
51
|
+
### Fase 4 — Executar Fases
|
|
52
|
+
|
|
53
|
+
Para **cada Fase** da seção "Implementação" da feature:
|
|
54
|
+
|
|
55
|
+
#### Fases em paralelo (quando aplicável)
|
|
56
|
+
|
|
57
|
+
Critérios (TODOS devem ser verdadeiros): sem arquivos compartilhados, sem dependência de dados, verificação independente. Na dúvida, sequencial.
|
|
58
|
+
|
|
59
|
+
#### 4.1 Preparar
|
|
60
|
+
|
|
61
|
+
- Ler tarefas, avaliar granularidade (2-5 min cada)
|
|
62
|
+
- Se primeira fase: status → `active`, atualizar STATE.md
|
|
63
|
+
|
|
64
|
+
#### 4.2 Executar tarefas
|
|
65
|
+
|
|
66
|
+
Executar no contexto principal (sem subagents para implementação). Para cada tarefa:
|
|
67
|
+
|
|
68
|
+
1. **Implementar**: ler arquivos antes de modificar, seguir padrões do Hermes
|
|
69
|
+
2. **Self-review inline** (~30s):
|
|
70
|
+
- [ ] Requisito(s) atendido(s)?
|
|
71
|
+
- [ ] Nenhum placeholder/TODO no código?
|
|
72
|
+
- [ ] Segue padrões do codebase?
|
|
73
|
+
- [ ] Escopo respeitado?
|
|
74
|
+
- [ ] Nenhuma lógica duplicada? (Grep antes de criar helpers)
|
|
75
|
+
- [ ] Se tarefa visual e `.hefesto/DESIGN.md` existe: valores seguem o contrato?
|
|
76
|
+
3. Se falhar, corrigir antes de prosseguir
|
|
77
|
+
4. Marcar tarefa concluída no checklist
|
|
78
|
+
|
|
79
|
+
#### 4.3 Verification Gate
|
|
80
|
+
|
|
81
|
+
Após todas as tarefas da fase:
|
|
82
|
+
|
|
83
|
+
1. Rodar cada `verification_command` via Bash
|
|
84
|
+
2. Se falhar: analisar erro, auto-fix, re-rodar. **Max 3 tentativas**
|
|
85
|
+
3. Se falhar após retries: marcar blocker em STATE.md, informar usuário, sugerir `/hefesto-debug`. Não prosseguir
|
|
86
|
+
4. **Stuck detection**: mesmo erro 3x = PARAR e pedir orientação
|
|
87
|
+
|
|
88
|
+
#### 4.4 Atualizar Tracking
|
|
89
|
+
|
|
90
|
+
1. Incrementar `phases_done` no frontmatter
|
|
91
|
+
2. Atualizar STATE.md (barra de progresso, fase atual)
|
|
92
|
+
|
|
93
|
+
### Fase 4.5 — Revisão de Qualidade e Segurança
|
|
94
|
+
|
|
95
|
+
Após todas as fases de implementação, antes do Argos:
|
|
96
|
+
|
|
97
|
+
1. `/hefesto-simplify` nos arquivos modificados
|
|
98
|
+
2. `/hefesto-security` nos mesmos arquivos
|
|
99
|
+
3. Re-rodar verificação se fixes aplicados
|
|
100
|
+
4. Pular se o usuário pedir para acelerar
|
|
101
|
+
|
|
102
|
+
### Fase 5 — Validação (Argos)
|
|
103
|
+
|
|
104
|
+
Após TODAS as fases executadas: delegar para `hefesto-argos` com feature ID, fases, paths. Aguardar veredicto.
|
|
105
|
+
|
|
106
|
+
### Fase 6 — QA Loop
|
|
107
|
+
|
|
108
|
+
O protocolo detalhado do QA loop (foco em itens falhos, detecção de regressão, campos do veredicto) está em `hefesto-argos`. Aqui, o fluxo de decisão:
|
|
109
|
+
|
|
110
|
+
**Se `needs-work`:**
|
|
111
|
+
|
|
112
|
+
1. Incrementar `qa_iterations` no frontmatter
|
|
113
|
+
2. Se `qa_iterations >= 3`: **PARAR** — problema arquitetural. Sugerir `/hefesto-debug`. Atualizar STATE.md
|
|
114
|
+
3. Se < 3: aplicar fixes, re-rodar verificação, re-delegar para Argos com veredicto anterior
|
|
115
|
+
|
|
116
|
+
**Se `approved` ou `approved-with-notes`:**
|
|
117
|
+
|
|
118
|
+
1. Status → `done`, limpar feature ativa em STATE.md
|
|
119
|
+
2. Se `approved-with-notes`: exibir notas ao usuário
|
|
120
|
+
|
|
121
|
+
### Fase 7 — Wrap Up
|
|
122
|
+
|
|
123
|
+
1. Atualizar STATE.md (posição, última atividade, continuidade)
|
|
124
|
+
2. Exibir resumo: feature, fases executadas, iterações QA, veredicto
|
|
125
|
+
3. Sugerir `/hefesto-new-feature` para a próxima
|
|
126
|
+
|
|
127
|
+
## Regras
|
|
128
|
+
|
|
129
|
+
- **Implementação no contexto principal** — subagents só para Hermes (recon) e Argos (validação)
|
|
130
|
+
- **Self-review após cada tarefa**, verification gate após cada fase
|
|
131
|
+
- **QA loop max 3 iterações** — regressão = `needs-work` obrigatório
|
|
132
|
+
- **STATE.md atualizado** a cada mudança significativa
|
|
133
|
+
- **Campos ausentes**: inicializar com defaults (qa_iterations: 0, last_verdict: null)
|