@gabrihhh/jarvis 2.6.2 → 2.7.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/README.md CHANGED
@@ -41,7 +41,7 @@ Reinicie o Claude Code após o setup.
41
41
  | `jarvis --line` | Saída de uma linha usada internamente pela status bar |
42
42
  | `jarvis --help` | Lista todos os comandos |
43
43
 
44
- **Slash commands** *(dentro do Claude Code)*:
44
+ **Slash commands** *(dentro do Claude Code — instalados por `jarvis --setup`)*:
45
45
 
46
46
  | Comando | Descrição |
47
47
  |---|---|
@@ -49,6 +49,8 @@ Reinicie o Claude Code após o setup.
49
49
  | `/create-memory` | Indexa um repositório no grafo de memória (primeira vez) |
50
50
  | `/update-memory` | Atualiza o grafo com as mudanças recentes do repositório |
51
51
  | `/configure-memory` | Personaliza o schema, regras e fluxos da arquitetura de memória |
52
+ | `/reset-folder` | Reseta todos os repos filhos para um branch (`qa`/`main`), tratando alterações interativamente |
53
+ | `/folder-submit` | Cria branches, commita e faz push das alterações de todos os repos filhos |
52
54
 
53
55
  ---
54
56
 
package/bin/jarvis.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import { run } from '../src/index.js';
3
3
  import { renderLine } from '../src/statusline.js';
4
4
  import { readTheme, writeTheme, isValidHex, DEFAULT_COLORS, VALID_NAMES, THEME_PATH } from '../src/theme.js';
5
- import { readFileSync, writeFileSync, existsSync, mkdirSync, copyFileSync } from 'fs';
5
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, copyFileSync, readdirSync } from 'fs';
6
6
  import { join, dirname } from 'path';
7
7
  import { homedir } from 'os';
8
8
  import { exec, execSync } from 'child_process';
@@ -87,11 +87,12 @@ if (args.includes('--help') || args.includes('-h')) {
87
87
  jarvis --token off Disable token display
88
88
  jarvis --help Show this help
89
89
 
90
- Slash commands (inside Claude Code):
90
+ Slash commands (inside Claude Code — installed by --setup):
91
91
  /setup-memory Setup Docker + Neo4j + register MCP server
92
92
  /create-memory Index a repository into the memory graph (first time)
93
93
  /update-memory Update an existing memory graph with recent changes
94
94
  /configure-memory Customize the memory graph architecture (schema, rules, flows)
95
+ /gerar-estimativa Gera documento de estimativa técnica a partir de um monorepo
95
96
 
96
97
  Data source: ~/.claude/projects/
97
98
  `);
@@ -126,18 +127,19 @@ if (args.includes('--graph')) {
126
127
  writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
127
128
  console.log(' ✓ Status bar configured');
128
129
 
129
- // Slash commands → ~/.claude/skills/<name>/SKILL.md
130
- const skillsDir = join(homedir(), '.claude', 'skills');
131
- const srcSkills = join(__dir, '../.claude/skills');
132
- for (const skill of ['setup-memory', 'create-memory', 'update-memory', 'configure-memory']) {
133
- const destDir = join(skillsDir, skill);
134
- mkdirSync(destDir, { recursive: true });
135
- copyFileSync(join(srcSkills, skill, 'SKILL.md'), join(destDir, 'SKILL.md'));
136
- console.log(` ✓ Slash command /${skill} installed`);
130
+ // Slash commands → ~/.claude/commands/<name>.md
131
+ const commandsDir = join(homedir(), '.claude', 'commands');
132
+ const srcSlash = join(__dir, '../slash');
133
+ mkdirSync(commandsDir, { recursive: true });
134
+ const slashFiles = readdirSync(srcSlash).filter(f => f.endsWith('.md') && f !== 'MEMORY_ARCHITECTURE.md');
135
+ for (const file of slashFiles) {
136
+ copyFileSync(join(srcSlash, file), join(commandsDir, file));
137
+ const name = file.replace('.md', '');
138
+ console.log(` ✓ Slash command /${name} installed`);
137
139
  }
138
140
 
139
- // Arquitetura de memória (referenciada pelas skills)
140
- copyFileSync(join(srcSkills, 'MEMORY_ARCHITECTURE.md'), join(skillsDir, 'MEMORY_ARCHITECTURE.md'));
141
+ // Arquivo de suporte (referenciado pelos comandos)
142
+ copyFileSync(join(srcSlash, 'MEMORY_ARCHITECTURE.md'), join(commandsDir, 'MEMORY_ARCHITECTURE.md'));
141
143
  console.log(' ✓ MEMORY_ARCHITECTURE.md installed');
142
144
 
143
145
  // Trigger padrão: session
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gabrihhh/jarvis",
3
- "version": "2.6.2",
3
+ "version": "2.7.0",
4
4
  "description": "Claude Code terminal dashboard + semantic memory graph via Neo4j",
5
5
  "bin": {
6
6
  "jarvis": "bin/jarvis.js",
@@ -13,7 +13,7 @@
13
13
  "files": [
14
14
  "bin/",
15
15
  "src/",
16
- ".claude/skills/"
16
+ "slash/"
17
17
  ],
18
18
  "keywords": [
19
19
  "claude",
@@ -6,7 +6,7 @@ description: Configurar a arquitetura do grafo de memória semântica — person
6
6
  # /configure-memory — Configurar Arquitetura de Memória
7
7
 
8
8
  Você vai guiar o usuário para criar ou modificar a arquitetura do grafo de memória semântica.
9
- O resultado será salvo em `~/.claude/skills/MEMORY_ARCHITECTURE.md`, substituindo o padrão e sendo usado pelo `/create-memory` e `/update-memory`.
9
+ O resultado será salvo em `~/.claude/commands/MEMORY_ARCHITECTURE.md`, substituindo o padrão e sendo usado pelo `/create-memory` e `/update-memory`.
10
10
 
11
11
  ## REGRA GLOBAL
12
12
 
@@ -18,7 +18,7 @@ O resultado será salvo em `~/.claude/skills/MEMORY_ARCHITECTURE.md`, substituin
18
18
 
19
19
  ## Passo 0 — Ler arquitetura atual
20
20
 
21
- Leia o arquivo `~/.claude/skills/MEMORY_ARCHITECTURE.md`.
21
+ Leia o arquivo `~/.claude/commands/MEMORY_ARCHITECTURE.md`.
22
22
 
23
23
  Se não existir, informe: "Nenhuma arquitetura customizada encontrada. Usarei a arquitetura padrão como base."
24
24
  Nesse caso, use o conteúdo padrão definido internamente (schema básico com Project, Module, File, Concept, Pattern, Dependency).
@@ -161,7 +161,7 @@ Com base na conversa, gere o arquivo completo `MEMORY_ARCHITECTURE.md` seguindo
161
161
 
162
162
  Mostre o arquivo **completo** gerado ao usuário.
163
163
 
164
- Diga: **"Esta é a arquitetura que vou salvar em `~/.claude/skills/MEMORY_ARCHITECTURE.md`. Revise, corrija o que quiser, e me diga 'pode salvar' quando estiver pronto."**
164
+ Diga: **"Esta é a arquitetura que vou salvar em `~/.claude/commands/MEMORY_ARCHITECTURE.md`. Revise, corrija o que quiser, e me diga 'pode salvar' quando estiver pronto."**
165
165
 
166
166
  Se o usuário pedir ajustes:
167
167
  - Aplique, mostre o trecho alterado
@@ -175,7 +175,7 @@ Se o usuário pedir ajustes:
175
175
  Após aprovação explícita, salve o conteúdo gerado em:
176
176
 
177
177
  ```
178
- ~/.claude/skills/MEMORY_ARCHITECTURE.md
178
+ ~/.claude/commands/MEMORY_ARCHITECTURE.md
179
179
  ```
180
180
 
181
181
  Informe ao usuário:
@@ -7,7 +7,7 @@ description: Indexar repositório atual no grafo de memória semântica (Neo4j)
7
7
 
8
8
  Você vai analisar o repositório atual de forma exaustiva e indexar seu entendimento no Neo4j.
9
9
 
10
- **Antes de iniciar:** leia `.claude/skills/MEMORY_ARCHITECTURE.md` — ele define o schema do grafo, as regras de indexação e os critérios de qualidade que você deve seguir durante toda a execução desta skill.
10
+ **Antes de iniciar:** leia `~/.claude/commands/MEMORY_ARCHITECTURE.md` — ele define o schema do grafo, as regras de indexação e os critérios de qualidade que você deve seguir durante toda a execução desta skill.
11
11
 
12
12
  ## PRÉ-REQUISITO — Verificar ambiente
13
13
 
@@ -0,0 +1,286 @@
1
+ ---
2
+ name: folder-submit
3
+ description: Cria branches, commita e faz push das alterações em todos os repositórios git filhos com mudanças locais pendentes
4
+ ---
5
+
6
+ # /folder-submit — Submeter Alterações dos Repositórios Filhos
7
+
8
+ ## Uso
9
+
10
+ ```
11
+ /folder-submit qa
12
+ /folder-submit main
13
+ ```
14
+
15
+ ---
16
+
17
+ ## REGRA GLOBAL
18
+
19
+ - Nunca executar `git add`, `commit` ou `push` sem aprovação explícita do usuário
20
+ - Nunca subir arquivos de ambiente ou segredos — bloquear e avisar sempre que encontrado
21
+ - Se travar em qualquer ponto — erro inesperado, ambiguidade — **pare e pergunte ao usuário**
22
+ - Tratar cada repositório de forma independente: um erro em um repo não impede os demais
23
+ - Sempre tentar usar o MCP do GitHub quando disponível; se não estiver, usar linha de comando
24
+
25
+ ---
26
+
27
+ ## Passo 1 — Ler argumento
28
+
29
+ O alvo é o branch passado como argumento: `qa` ou `main`.
30
+
31
+ Se nenhum argumento for fornecido, informe:
32
+ **"Qual o branch alvo? Use: `/folder-submit qa` ou `/folder-submit main`"**
33
+ Interrompa aqui.
34
+
35
+ Defina internamente:
36
+ - `BRANCH_ALVO` = argumento recebido (ex: `qa`)
37
+ - `LABEL` = argumento em maiúsculas (ex: `QA`)
38
+
39
+ ---
40
+
41
+ ## Passo 2 — Descobrir repositórios com alterações
42
+
43
+ Execute na pasta atual:
44
+
45
+ ```bash
46
+ for d in */; do
47
+ [ -d "${d}.git" ] && echo "${d%/}"
48
+ done
49
+ ```
50
+
51
+ Para cada repositório encontrado, verifique se há alterações pendentes:
52
+
53
+ ```bash
54
+ git -C <repo> status --short
55
+ ```
56
+
57
+ Considere "com alterações" qualquer repo que retorne output não-vazio (arquivos modificados, staged, untracked).
58
+
59
+ Se nenhum repositório tiver alterações:
60
+ **"Nenhuma alteração encontrada nos repositórios de `$(pwd)`. Nada a submeter."**
61
+ Interrompa aqui.
62
+
63
+ ---
64
+
65
+ ## Passo 3 — Apresentar panorama e pedir confirmação
66
+
67
+ Liste os repositórios com alterações e o que cada um tem:
68
+
69
+ ```
70
+ Repositórios com alterações pendentes:
71
+
72
+ 📦 api-service
73
+ M src/auth/login.js
74
+ M src/auth/middleware.js
75
+ ?? src/utils/newHelper.js
76
+
77
+ 📦 frontend
78
+ M src/components/LoginForm.tsx
79
+ D src/components/OldModal.tsx
80
+
81
+ Total: 2 repositórios com alterações.
82
+
83
+ Deseja criar branches e submeter as alterações de todos eles?
84
+ ```
85
+
86
+ Aguarde resposta:
87
+ - **Sim / confirmar / pode ir:** prossiga para o Passo 4
88
+ - **Não / cancelar / parar:** interrompa aqui sem modificar nada
89
+
90
+ ---
91
+
92
+ ## Passo 4 — Verificar arquivos de ambiente (BLOQUEIO DE SEGURANÇA)
93
+
94
+ Antes de qualquer `git add`, verifique em **cada repositório** se há arquivos sensíveis nas alterações:
95
+
96
+ ```bash
97
+ # Arquivos modificados e não-rastreados
98
+ git -C <repo> diff --name-only
99
+ git -C <repo> ls-files --others --exclude-standard
100
+ ```
101
+
102
+ Considere bloqueados arquivos que correspondam a qualquer um destes padrões:
103
+
104
+ ```
105
+ .env
106
+ .env.*
107
+ *.env
108
+ *.pem
109
+ *.key
110
+ *.p12
111
+ *.pfx
112
+ secrets.*
113
+ *secret*
114
+ *credentials*
115
+ *password*
116
+ *.token
117
+ ```
118
+
119
+ Se encontrar qualquer arquivo bloqueado em algum repositório, **não prossiga** nesse repo. Informe:
120
+
121
+ ```
122
+ ⛔ Arquivo sensível detectado em <repo>:
123
+ • .env.local
124
+ • config/secrets.json
125
+
126
+ Esse repositório será ignorado por segurança.
127
+ Corrija o .gitignore ou remova os arquivos antes de tentar novamente.
128
+ ```
129
+
130
+ Continue normalmente com os demais repositórios.
131
+
132
+ ---
133
+
134
+ ## Passo 5 — Coletar informações para cada repositório
135
+
136
+ Para cada repositório aprovado (sem arquivos sensíveis), **um de cada vez**:
137
+
138
+ **5.1 — Mostrar resumo das alterações:**
139
+
140
+ ```bash
141
+ git -C <repo> diff --stat
142
+ git -C <repo> status --short
143
+ ```
144
+
145
+ **5.2 — Perguntar tipo e mensagem:**
146
+
147
+ ```
148
+ Repositório: api-service
149
+
150
+ Alterações:
151
+ M src/auth/login.js
152
+ M src/auth/middleware.js
153
+ ?? src/utils/newHelper.js
154
+
155
+ [1] fix — correção de bug, ajuste, hotfix
156
+ [2] feature — funcionalidade nova, melhoria
157
+
158
+ Qual o tipo? E qual a mensagem curta da branch? (será usada em camelCase)
159
+ Exemplo: "correcaoValidacaoToken" ou "novaTelaLogin"
160
+ ```
161
+
162
+ Aguarde a resposta do usuário. Valide:
163
+ - Tipo deve ser `fix` ou `feature`
164
+ - Mensagem deve ser curta (sem espaços — se o usuário mandar com espaços, converta para camelCase automaticamente)
165
+
166
+ Monte o nome da branch:
167
+ ```
168
+ <tipo>/<branch-alvo>/<mensagem>
169
+ Exemplo: fix/qa/correcaoValidacaoToken
170
+ ```
171
+
172
+ **5.3 — Gerar mensagem de commit:**
173
+
174
+ Analise o diff para entender o que foi alterado:
175
+
176
+ ```bash
177
+ git -C <repo> diff
178
+ ```
179
+
180
+ Proponha uma mensagem de commit no padrão:
181
+
182
+ ```
183
+ [<LABEL>] <título breve da alteração>
184
+
185
+ <descrição do que foi feito e por quê, baseada no diff>
186
+ ```
187
+
188
+ Exemplo:
189
+ ```
190
+ [QA] Correção na validação do token de autenticação
191
+
192
+ Ajustado o middleware de autenticação para rejeitar tokens expirados
193
+ corretamente. O comportamento anterior permitia tokens com expiração
194
+ inválida passarem pela validação em edge cases de timezone.
195
+ ```
196
+
197
+ Mostre a mensagem proposta e pergunte:
198
+ **"Essa mensagem está correta? Pode ajustar o título ou a descrição se quiser."**
199
+
200
+ Só prossiga após aprovação ou ajuste do usuário.
201
+
202
+ ---
203
+
204
+ ## Passo 6 — Executar: branch, add, commit, push
205
+
206
+ Para cada repositório, com as informações coletadas:
207
+
208
+ **6.1 — Criar a branch:**
209
+
210
+ Tente via MCP do GitHub se disponível:
211
+ ```
212
+ create_branch(repo: "<repo>", branch: "<nova-branch>", from: "<branch-alvo>")
213
+ ```
214
+
215
+ Se o MCP não estiver disponível ou retornar erro, use CLI:
216
+ ```bash
217
+ git -C <repo> checkout -b <nova-branch>
218
+ ```
219
+
220
+ **6.2 — Adicionar arquivos:**
221
+
222
+ ```bash
223
+ git -C <repo> add .
224
+ ```
225
+
226
+ Confirme o que foi staged:
227
+ ```bash
228
+ git -C <repo> status --short
229
+ ```
230
+
231
+ Se arquivos inesperados aparecerem no stage (ex: arquivos que não estavam no resumo), avise o usuário antes de continuar.
232
+
233
+ **6.3 — Fazer commit:**
234
+
235
+ ```bash
236
+ git -C <repo> commit -m "$(cat <<'EOF'
237
+ [<LABEL>] <título>
238
+
239
+ <descrição>
240
+ EOF
241
+ )"
242
+ ```
243
+
244
+ Se o commit falhar (hook rejeitou, nada para commitar, etc.), informe o erro e pergunte o que fazer.
245
+
246
+ **6.4 — Fazer push:**
247
+
248
+ Tente via MCP do GitHub se disponível:
249
+ ```
250
+ push_branch(repo: "<repo>", branch: "<nova-branch>")
251
+ ```
252
+
253
+ Se o MCP não estiver disponível, use CLI:
254
+ ```bash
255
+ git -C <repo> push origin <nova-branch>
256
+ ```
257
+
258
+ Se o push falhar, informe o erro e pergunte ao usuário o que fazer.
259
+
260
+ ---
261
+
262
+ ## Passo 7 — Resumo Final
263
+
264
+ Ao concluir todos os repositórios, apresente o resultado:
265
+
266
+ ```
267
+ Resumo — folder-submit <branch-alvo>
268
+
269
+ ✅ api-service
270
+ Branch: fix/qa/correcaoValidacaoToken
271
+ Commit: [QA] Correção na validação do token de autenticação
272
+ Push: origin/fix/qa/correcaoValidacaoToken ✓
273
+
274
+ ✅ frontend
275
+ Branch: feature/qa/novaTelaLogin
276
+ Commit: [QA] Nova tela de login com validação em tempo real
277
+ Push: origin/feature/qa/novaTelaLogin ✓
278
+
279
+ ⛔ config-service → ignorado (arquivo .env detectado)
280
+
281
+ Concluído. 2 branches criadas e publicadas, 1 ignorado por segurança.
282
+
283
+ Branches criadas:
284
+ • fix/qa/correcaoValidacaoToken
285
+ • feature/qa/novaTelaLogin
286
+ ```
@@ -0,0 +1,289 @@
1
+ # Prompt — Gerador de Estimativa Técnica
2
+
3
+ > **Como usar:**
4
+ > 1. Abra o terminal na pasta pai que contém os repositórios do projeto
5
+ > 2. Execute `claude` para abrir o Claude Code
6
+ > 3. Cole o conteúdo deste arquivo no chat
7
+ > 4. Siga as fases na ordem — o Claude irá conduzir o processo
8
+
9
+ ---
10
+
11
+ ## Regras Absolutas (leia antes de qualquer coisa)
12
+
13
+ 1. **Zero chutes** — toda afirmação sobre código deve ser verificada lendo o arquivo. Cite sempre `caminho/arquivo.ts:linha`. Se não leu, não afirme.
14
+ 2. **Perguntas ilimitadas** — qualquer informação que não possa ser confirmada no código deve ser perguntada ao usuário. Não existe limite de perguntas. Agrupe-as por tema e apresente todas de uma vez.
15
+ 3. **CLAUDE.md primeiro** — ao entrar em qualquer repositório, leia o `CLAUDE.md` antes de qualquer outro arquivo.
16
+ 4. **Siga o fluxo, não o monorepo** — identifique apenas os repos que participam do caminho descrito pelo usuário. Se o front chama a API 1 e existe uma API 2 que não faz parte do fluxo, não leia a API 2.
17
+ 5. **Português** — todo o documento gerado deve estar em português.
18
+ 6. **Estimativa dupla** — estime usando a escala Fibonacci e preencha a coluna de horas, mas deixe a coluna do PO/Tech Lead sempre em branco para revisão humana.
19
+ 7. **Saída no Desktop** — salvar o documento final em `~/Desktop/[nome-da-demanda].md`.
20
+
21
+ ---
22
+
23
+ ## FASE 1 — Contexto Inicial
24
+
25
+ Antes de qualquer pesquisa no código, solicite ao usuário:
26
+
27
+ - **Nome da demanda** — será o nome do arquivo gerado (ex: `amazon-fba-nfe.md`)
28
+ - **Número do PPM** — identificador da demanda (ex: `DMND0002177`)
29
+ - **Descrição do que precisa ser feito** — pode ser em linguagem natural, com o máximo de detalhes disponíveis
30
+ - **Ponto de entrada no fluxo** (opcional) — se souber por onde começa (ex: "webhook AnyMarket", "rota POST /pedidos", "evento SQS"), informe
31
+
32
+ > Não avance para a Fase 2 sem ter ao menos o **nome da demanda** e a **descrição do que precisa ser feito**.
33
+
34
+ ---
35
+
36
+ ## FASE 2 — Mapeamento do Monorepo
37
+
38
+ Execute nessa ordem:
39
+
40
+ ### 2.1 — Inventariar os repositórios
41
+
42
+ Liste todas as pastas no diretório atual. Para cada pasta, verifique:
43
+ - Se é um repositório git (presença de `.git/`)
44
+ - Se tem `CLAUDE.md`
45
+ - Se tem `package.json` — registre o valor de `name`
46
+
47
+ Registre esse inventário internamente. Não apresente ao usuário ainda.
48
+
49
+ ### 2.2 — Identificar repos candidatos
50
+
51
+ Com base na descrição do usuário, identifique quais repos provavelmente participam do fluxo. Critérios:
52
+ - Nome sugere relação com o que foi descrito
53
+ - `package.json` ou `CLAUDE.md` menciona tecnologias ou domínios relevantes
54
+
55
+ ### 2.3 — Ler CLAUDE.md dos candidatos
56
+
57
+ Para cada repo candidato, leia o `CLAUDE.md` antes de qualquer outro arquivo. Use o conteúdo para:
58
+ - Confirmar se o repo é realmente relevante para o fluxo
59
+ - Entender a arquitetura e convenções do projeto
60
+ - Identificar os pontos de entrada (automations, controllers, routes)
61
+
62
+ ### 2.4 — Traçar o fluxo e descartar o que não é relevante
63
+
64
+ A partir do ponto de entrada descrito pelo usuário (ou identificado no CLAUDE.md):
65
+ - Siga o caminho da requisição/evento passo a passo
66
+ - Identifique exatamente quais repos estão no caminho
67
+ - **Pare de explorar repos que não estão no fluxo**
68
+
69
+ Exemplo de raciocínio correto:
70
+ > "O usuário quer alterar o webhook. O webhook vive no repo `ServiceBUSMigrationJitter`. Ele chama internamente o `AnymarketOrderRepository`. Existe também um repo `FastshopFrontend` — mas o fluxo não passa por ele → não leio."
71
+
72
+ ---
73
+
74
+ ## FASE 3 — Deep Search nos Repos Relevantes
75
+
76
+ Para cada repo no fluxo, pesquise em profundidade seguindo esta sequência:
77
+
78
+ 1. **Ponto de entrada** — automation, route, trigger, controller principal
79
+ 2. **Controller / Handler** — como recebe, valida e despacha o request
80
+ 3. **Use Case / Service** — lógica de negócio central
81
+ 4. **Repository / Infrastructure** — acesso a banco, filas, APIs externas
82
+ 5. **DTOs e validações** — tipagem, decorators, transformações
83
+ 6. **Configurações** — config files, variáveis de ambiente, staging vs production
84
+ 7. **Testes existentes** — se houver, entenda o que já está coberto
85
+
86
+ Para cada arquivo lido, registre internamente:
87
+ - Caminho completo + linhas relevantes (ex: `src/http/controllers/AnymarketController.ts:16-31`)
88
+ - O que o trecho faz
89
+ - Como se conecta com o próximo passo do fluxo
90
+
91
+ > Se encontrar algo que não entende, que parece incompleto, ou que depende de informação externa (nome de fila, credencial, schema de terceiro): **não assuma** — adicione à lista de perguntas da Fase 4.
92
+
93
+ ---
94
+
95
+ ## FASE 4 — Perguntas ao Usuário
96
+
97
+ Após o mapeamento completo, compile todas as perguntas que não puderam ser respondidas pelo código. Agrupe por categoria e apresente **todas de uma vez**:
98
+
99
+ - **Negócio / Requisitos** — comportamentos esperados que o código não define
100
+ - **Infraestrutura** — nomes de filas, hosts, credenciais, ambientes (HML/PRD)
101
+ - **Contrato externo** — schemas de APIs de terceiros, autenticação, retry, sandbox
102
+ - **Operacional** — volume estimado, SLA, responsáveis, deduplicação no consumidor
103
+
104
+ Aguarde todas as respostas antes de gerar o documento.
105
+
106
+ > Sem limite de perguntas. Prefira perguntar a inventar.
107
+
108
+ ---
109
+
110
+ ## FASE 5 — Geração do Documento
111
+
112
+ Com contexto completo, gere o documento em `~/Desktop/[nome-da-demanda].md` usando o template abaixo.
113
+
114
+ Substitua todos os campos entre `[colchetes]` com informações reais verificadas no código ou confirmadas pelo usuário. Não deixe nenhum `[colchete]` no documento final.
115
+
116
+ ---
117
+
118
+ ## Template do Documento
119
+
120
+ ```markdown
121
+ # Estimativa — PPM [NUMERO_PPM] [NOME DA DEMANDA]
122
+
123
+ > Documento de estimativa e planejamento técnico. **Rascunho para refinamento.**
124
+ > Pontuação Fibonacci: **PP (1–3h), P (3–6h), M (6–9h), G (9–12h), GG (18h), XG (24h)**.
125
+ > As horas finais serão preenchidas pelo PO/Tech Lead após refinamento.
126
+
127
+ ---
128
+
129
+ ## Contexto
130
+
131
+ [Descrição do que precisa ser feito. Combine a descrição do usuário com o que foi encontrado no código. Cite repos e arquivos onde o contexto foi confirmado. Inclua o impacto no fluxo existente.]
132
+
133
+ ---
134
+
135
+ ## Estado Atual (AS IS)
136
+
137
+ **Repo:** `[nome-do-repo-principal]`
138
+
139
+ Fluxo:
140
+
141
+ 1. [Passo 1 — ex: Gateway → `automations/XAutomation.ts`]
142
+ 2. [Passo 2 — ex: `src/http/controllers/XController.ts` → `xMethod(ctx)`]
143
+ 3. [Passo N — com caminho:linha verificado]
144
+
145
+ **Observações importantes para o desenho TO BE** (verificadas no código):
146
+
147
+ - [Observação 1 — `caminho/arquivo.ts:linha` — o que foi encontrado e por que é relevante]
148
+ - [Observação 2 — idem]
149
+
150
+ Infraestrutura reutilizável já existente:
151
+
152
+ - `[caminho/Classe.ts]` — [o que faz e como pode ser reaproveitada]
153
+ - [...]
154
+
155
+ ---
156
+
157
+ ## Estado Alvo (TO BE)
158
+
159
+ [Descrição do novo fluxo proposto. Se houver ramificação de roteamento, use diagrama ASCII:]
160
+
161
+ ```
162
+ [Ponto de entrada]
163
+ switch [discriminador]:
164
+ case "[TIPO_A]" → [UseCase existente] (fluxo atual, INTOCADO)
165
+ case "[TIPO_B]" → [Novo UseCase]
166
+ ├── [passo 1]
167
+ ├── [passo 2]
168
+ └── [passo N]
169
+ default → log + 200 (não-bloqueante)
170
+ ```
171
+
172
+ **Por que [decisão técnica chave tomada]:**
173
+
174
+ - [Justificativa 1 — baseada no código existente]
175
+ - [Justificativa 2 — baseada nas respostas do usuário]
176
+
177
+ ---
178
+
179
+ ## Contratos e Integrações Externas
180
+
181
+ > Seção por integração externa identificada no fluxo.
182
+
183
+ ### [Nome da integração — ex: API AnyMarket, Fila IBM MQ]
184
+
185
+ **Fonte:** [documentação oficial, código, resposta do usuário]
186
+
187
+ **Payload / Schema:**
188
+
189
+ ```json
190
+ {
191
+ "[campo]": "[valor de exemplo]"
192
+ }
193
+ ```
194
+
195
+ **Autenticação:** [como é feita, onde o token está armazenado, confirmado em `arquivo:linha`]
196
+
197
+ **Retry / Contingência:** [comportamento em falha — confirmado ou perguntado]
198
+
199
+ **Idempotência:** [estratégia adotada e por quê]
200
+
201
+ ---
202
+
203
+ ## Perguntas Remanescentes para [Nome do time/cliente]
204
+
205
+ > Apenas o que é genuinamente do lado deles: negócio, infra interna, credenciais, contratos externos.
206
+
207
+ ### [Categoria 1 — ex: Fila GAN]
208
+
209
+ 1. [Pergunta objetiva]
210
+ 2. [Pergunta objetiva]
211
+
212
+ ### [Categoria 2 — ex: Cadastro / Credenciais]
213
+
214
+ 1. [Pergunta objetiva]
215
+
216
+ ### [Categoria 3 — ex: Operacional]
217
+
218
+ 1. [Pergunta objetiva]
219
+
220
+ ---
221
+
222
+ ## Estrutura — Épico, Features, Histórias e Tarefas
223
+
224
+ ### ÉPICO: [Título do épico — resumo da demanda em uma linha]
225
+
226
+ ---
227
+
228
+ #### FEATURE 1 — [Nome da feature]
229
+
230
+ > [Descrição curta do objetivo desta feature — uma linha]
231
+
232
+ | # | História / Tarefa | Tipo | Estimativa | Horas (Claude) | Horas (PO/TL) |
233
+ | --- | ----------------- | -------- | -------------- | -------------- | ------------- |
234
+ | 1.1 | [Descrição] | Tarefa | **PP** | 2 | |
235
+ | 1.2 | [Descrição] | História | **M** | 9 | |
236
+
237
+ ---
238
+
239
+ #### FEATURE 2 — [Nome da feature]
240
+
241
+ > [Descrição curta]
242
+
243
+ | # | História / Tarefa | Tipo | Estimativa | Horas (Claude) | Horas (PO/TL) |
244
+ | --- | ----------------- | ------ | ---------- | -------------- | ------------- |
245
+ | 2.1 | [Descrição] | Tarefa | **P** | 4 | |
246
+
247
+ [Repetir para cada feature identificada]
248
+
249
+ ---
250
+
251
+ ## Riscos & Buffers
252
+
253
+ - **[Risco 1 — ex: Contrato externo indefinido]**: [Descrição do risco e qual tarefa pode ser impactada]. Se [condição], estimativa X pode subir de **[tamanho]** para **[tamanho maior]**.
254
+ - **[Risco 2 — ex: Dependência de provisionamento externo]**: [Descrição — não conta como esforço de dev mas pode bloquear cronograma].
255
+ - **[Risco 3 — ex: Ausência de testes no repo]**: [Impacto no escopo de testes].
256
+ - **Buffer recomendado**: **+[X]%** sobre o total para [motivo específico — ex: imprevistos de integração, retrabalho pós-validação].
257
+
258
+ ---
259
+
260
+ ## Arquivos Críticos a Modificar
261
+
262
+ - `[caminho/Arquivo.ts]` — [o que será alterado]
263
+ - `[caminho/Arquivo.ts]` — [o que será alterado]
264
+ - [Novos arquivos a criar:]
265
+ - `[caminho/NovoArquivo.ts]` — [o que fará]
266
+
267
+ ---
268
+
269
+ ## Verificação
270
+
271
+ [Preencha apenas com comandos e passos confirmados no código — scripts definidos no `package.json`, comandos de teste encontrados no repo, etc. Não inclua comandos de plataforma ou deploy que não foram verificados.]
272
+
273
+ 1. Build local: `[comando confirmado no package.json]`
274
+ 2. Testes: `[comando confirmado no package.json]`
275
+ 3. [Passo de validação manual que pode ser inferido do fluxo]
276
+ ```
277
+
278
+ ---
279
+
280
+ ## Checklist antes de salvar o documento
281
+
282
+ - [ ] Todos os arquivos citados foram lidos (nenhum chute)
283
+ - [ ] Todo `caminho/arquivo.ts:linha` foi verificado no código
284
+ - [ ] Nenhum `[colchete]` permaneceu no documento final
285
+ - [ ] Perguntas remanescentes são do lado do cliente, não dúvidas técnicas suas
286
+ - [ ] Estimativas usam escala Fibonacci correta: PP / P / M / G / GG / XG
287
+ - [ ] Coluna "Horas (PO/TL)" está em branco em todas as tabelas
288
+ - [ ] Documento está em português
289
+ - [ ] Arquivo salvo em `~/Desktop/[nome-da-demanda].md`
@@ -0,0 +1,203 @@
1
+ ---
2
+ name: reset-folder
3
+ description: Reseta todos os repositórios git filhos da pasta atual para um branch específico (qa/main), tratando alterações locais de forma interativa
4
+ ---
5
+
6
+ # /reset-folder — Sincronizar Repositórios para um Branch
7
+
8
+ ## Uso
9
+
10
+ ```
11
+ /reset-folder qa
12
+ /reset-folder main
13
+ ```
14
+
15
+ ---
16
+
17
+ ## REGRA GLOBAL
18
+
19
+ - Nunca executar `checkout`, `pull`, `stash` ou `reset` sem que o comportamento esperado esteja claro
20
+ - Se travar em qualquer ponto — conflito inesperado, permissão negada, output estranho — **pare e pergunte ao usuário** antes de continuar
21
+ - Tratar cada repositório de forma independente: um erro em um repo não deve impedir a execução nos demais
22
+
23
+ ---
24
+
25
+ ## Passo 1 — Ler argumento
26
+
27
+ O branch alvo é o argumento passado após `/reset-folder`. Exemplos: `qa`, `main`.
28
+
29
+ Se nenhum argumento for fornecido, informe:
30
+ **"Qual branch deseja usar? Use: `/reset-folder qa` ou `/reset-folder main`"**
31
+ Interrompa aqui.
32
+
33
+ ---
34
+
35
+ ## Passo 2 — Descobrir repositórios
36
+
37
+ Execute na pasta atual:
38
+
39
+ ```bash
40
+ for d in */; do
41
+ [ -d "${d}.git" ] && echo "${d%/}"
42
+ done
43
+ ```
44
+
45
+ Se nenhum repositório for encontrado:
46
+ **"Nenhum repositório git encontrado como subpasta direta de `$(pwd)`. Certifique-se de estar na pasta pai correta."**
47
+ Interrompa aqui.
48
+
49
+ ---
50
+
51
+ ## Passo 3 — Escanear status de cada repositório
52
+
53
+ Para cada repositório encontrado, colete as informações abaixo **sem modificar nada ainda**:
54
+
55
+ ```bash
56
+ # Branch atual
57
+ git -C <repo> branch --show-current
58
+
59
+ # Alterações locais (staged + unstaged + untracked)
60
+ git -C <repo> status --short
61
+
62
+ # Branch alvo existe localmente ou no remote?
63
+ git -C <repo> show-ref --verify --quiet refs/heads/<branch> 2>/dev/null \
64
+ || git -C <repo> ls-remote --heads origin <branch> 2>/dev/null | grep -q .
65
+ # exit 0 = existe, exit 1 = não existe
66
+ ```
67
+
68
+ Classifique cada repositório em uma das categorias:
69
+
70
+ | Categoria | Critério |
71
+ |---|---|
72
+ | `PRONTO` | Branch existe, sem alterações locais |
73
+ | `COM ALTERAÇÕES` | Branch existe, mas tem mudanças locais |
74
+ | `SEM BRANCH` | Branch alvo não existe no repo |
75
+
76
+ ---
77
+
78
+ ## Passo 4 — Apresentar panorama ao usuário
79
+
80
+ Antes de qualquer ação, mostre o resumo completo:
81
+
82
+ ```
83
+ Repositórios encontrados em <pasta atual>:
84
+
85
+ ✅ PRONTOS (serão atualizados automaticamente):
86
+ • api-service [main → qa]
87
+ • frontend [main → qa]
88
+
89
+ ⚠️ COM ALTERAÇÕES LOCAIS (aguardando decisão):
90
+ • backend [qa] — 3 arquivos modificados
91
+
92
+ ✗ SEM BRANCH "qa" (serão ignorados):
93
+ • legacy-app — branch "qa" não encontrado
94
+
95
+ Total: 4 repositórios | 2 prontos | 1 com alterações | 1 sem branch
96
+ ```
97
+
98
+ Pergunte: **"Posso prosseguir? Vou tratar os repositórios com alterações um a um antes de continuar."**
99
+
100
+ Aguarde confirmação antes de continuar.
101
+
102
+ ---
103
+
104
+ ## Passo 5 — Tratar repositórios COM ALTERAÇÕES (interativo)
105
+
106
+ Para cada repositório da categoria `COM ALTERAÇÕES`, **um de cada vez**:
107
+
108
+ **5.1 — Mostrar o que mudou:**
109
+
110
+ ```bash
111
+ git -C <repo> status --short
112
+ git -C <repo> diff --stat
113
+ ```
114
+
115
+ Apresente ao usuário:
116
+
117
+ ```
118
+ Repositório: backend (branch atual: qa)
119
+
120
+ Arquivos modificados:
121
+ M src/auth/login.js
122
+ M src/auth/middleware.js
123
+ ?? src/auth/newfile.js
124
+
125
+ O que deseja fazer com essas alterações?
126
+
127
+ [1] Stash — guardar as alterações e continuar o reset (pode recuperar depois)
128
+ [2] Commit — fazer commit das alterações no branch atual antes de mudar
129
+ [3] Descartar — apagar todas as alterações locais (irreversível)
130
+ [4] Pular — deixar este repositório como está, sem alterar
131
+ ```
132
+
133
+ **5.2 — Executar conforme escolha:**
134
+
135
+ - **[1] Stash:**
136
+ ```bash
137
+ git -C <repo> stash push -m "reset-folder: stash antes de mudar para <branch> — $(date +%Y-%m-%d)"
138
+ ```
139
+ Confirme que o stash foi criado. Se falhar, informe e pergunte o que fazer.
140
+
141
+ - **[2] Commit:**
142
+ Pergunte: **"Qual mensagem de commit para as alterações em `<repo>`?"**
143
+ Aguarde a resposta, então:
144
+ ```bash
145
+ git -C <repo> add -A
146
+ git -C <repo> commit -m "<mensagem do usuário>"
147
+ ```
148
+ Se falhar (ex: nada para commitar, hook rejeitou), informe o erro e pergunte o que fazer.
149
+
150
+ - **[3] Descartar:**
151
+ Confirme com o usuário: **"Confirma que deseja DESCARTAR todas as alterações em `<repo>`? Isso é irreversível."**
152
+ Só prossiga após confirmação explícita:
153
+ ```bash
154
+ git -C <repo> checkout -- .
155
+ git -C <repo> clean -fd
156
+ ```
157
+
158
+ - **[4] Pular:**
159
+ Marque o repo como `PULADO` no resumo final. Não execute nada nele.
160
+
161
+ ---
162
+
163
+ ## Passo 6 — Executar checkout + pull
164
+
165
+ Para cada repositório das categorias `PRONTO` e `COM ALTERAÇÕES` (que não foi pulado):
166
+
167
+ ```bash
168
+ # Mudar para o branch alvo
169
+ git -C <repo> checkout <branch>
170
+ ```
171
+
172
+ Se o checkout falhar:
173
+ **"Erro ao fazer checkout em `<repo>`: <mensagem de erro>. O que deseja fazer?"**
174
+ Aguarde instrução antes de tentar o pull.
175
+
176
+ ```bash
177
+ # Atualizar com o remote
178
+ git -C <repo> pull origin <branch>
179
+ ```
180
+
181
+ Se o pull gerar conflito:
182
+ **"Conflito de merge em `<repo>` ao fazer pull de `<branch>`. Os conflitos estão em: <arquivos>. O que deseja fazer?"**
183
+ Opções sugeridas: resolver manualmente, usar `--ours`, abortar o merge.
184
+
185
+ ---
186
+
187
+ ## Passo 7 — Resumo Final
188
+
189
+ Ao concluir, apresente o resultado de cada repositório:
190
+
191
+ ```
192
+ Resumo — reset-folder <branch>
193
+
194
+ ✅ api-service → <branch> atualizado (pull: 3 commits novos)
195
+ ✅ frontend → <branch> atualizado (pull: já estava atualizado)
196
+ ✅ backend → <branch> atualizado (stash criado antes do pull)
197
+ ⏭️ legacy-app → ignorado (branch "<branch>" não existe)
198
+
199
+ Concluído. 3 repositórios atualizados, 1 ignorado.
200
+ ```
201
+
202
+ Se algum repositório ficou com stash pendente, lembre o usuário:
203
+ **"O repositório `<repo>` tem um stash salvo com as alterações anteriores. Use `git stash pop` dentro dele quando quiser recuperá-las."**
@@ -7,7 +7,7 @@ description: Atualizar o índice de memória semântica (Neo4j) de um repositór
7
7
 
8
8
  Você vai identificar o que mudou no repositório desde a última indexação e aplicar as atualizações no grafo de memória.
9
9
 
10
- **Antes de iniciar:** leia `.claude/skills/MEMORY_ARCHITECTURE.md` — ele define o schema, as regras de indexação e os critérios de qualidade que guiam esta skill.
10
+ **Antes de iniciar:** leia `~/.claude/commands/MEMORY_ARCHITECTURE.md` — ele define o schema, as regras de indexação e os critérios de qualidade que guiam esta skill.
11
11
 
12
12
  ## PRÉ-REQUISITO — Verificar ambiente
13
13