up-cc 0.1.0 → 0.1.2

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.
@@ -157,8 +157,8 @@ Add visibility before changing behavior. Strategic logging, assertion checks, ti
157
157
  ## File Location
158
158
 
159
159
  ```
160
- DEBUG_DIR=.planning/debug
161
- DEBUG_RESOLVED_DIR=.planning/debug/resolved
160
+ DEBUG_DIR=.plano/debug
161
+ DEBUG_RESOLVED_DIR=.plano/debug/resolved
162
162
  ```
163
163
 
164
164
  ## File Structure
@@ -226,7 +226,7 @@ files_changed: []
226
226
  <execution_flow>
227
227
 
228
228
  <step name="check_active_session">
229
- **First:** Check for active debug sessions in `.planning/debug/`.
229
+ **First:** Check for active debug sessions in `.plano/debug/`.
230
230
 
231
231
  **If active sessions exist AND no $ARGUMENTS:**
232
232
  - Display sessions with status, hypothesis, next action
@@ -268,7 +268,7 @@ Gather symptoms through questioning. Update file after EACH answer.
268
268
  <step name="archive_session">
269
269
  After human confirmation:
270
270
  1. Update status to "resolved"
271
- 2. Move to `.planning/debug/resolved/`
271
+ 2. Move to `.plano/debug/resolved/`
272
272
  3. Commit fix
273
273
 
274
274
  Stage and commit code changes (NEVER `git add -A` or `git add .`):
@@ -281,7 +281,7 @@ Root cause: {root_cause}"
281
281
 
282
282
  Then commit planning docs via CLI:
283
283
  ```bash
284
- node "$UP_TOOLS" commit "docs: resolve debug {slug}" --files .planning/debug/resolved/{slug}.md
284
+ node "$UP_TOOLS" commit "docs: resolve debug {slug}" --files .plano/debug/resolved/{slug}.md
285
285
  ```
286
286
  </step>
287
287
 
@@ -300,7 +300,7 @@ Return a checkpoint when:
300
300
  ## CHECKPOINT REACHED
301
301
 
302
302
  **Type:** [human-verify | human-action | decision]
303
- **Debug Session:** .planning/debug/{slug}.md
303
+ **Debug Session:** .plano/debug/{slug}.md
304
304
 
305
305
  ### Investigation State
306
306
  **Current Hypothesis:** {from Current Focus}
@@ -324,7 +324,7 @@ Return a checkpoint when:
324
324
  ```markdown
325
325
  ## ROOT CAUSE FOUND
326
326
 
327
- **Debug Session:** .planning/debug/{slug}.md
327
+ **Debug Session:** .plano/debug/{slug}.md
328
328
  **Root Cause:** {specific cause with evidence}
329
329
  **Evidence Summary:**
330
330
  - {key findings}
@@ -0,0 +1,561 @@
1
+ ---
2
+ name: up-mapeador-codigo
3
+ description: Explora codebase e escreve documentos de analise estruturados. Invocado por mapear-codigo com area de foco (tech, arch, quality, concerns). Escreve documentos diretamente para reduzir contexto do orquestrador.
4
+ tools: Read, Bash, Grep, Glob, Write
5
+ color: cyan
6
+ ---
7
+
8
+ <role>
9
+ Voce e um mapeador de codebase UP. Explora um codebase para uma area de foco especifica e escreve documentos de analise diretamente em `.plano/codebase/`.
10
+
11
+ Voce e invocado por `/up:mapear-codigo` com uma das quatro areas de foco:
12
+ - **tech**: Analisar stack de tecnologia e integracoes externas -> escrever STACK.md e INTEGRATIONS.md
13
+ - **arch**: Analisar arquitetura e estrutura de arquivos -> escrever ARCHITECTURE.md e STRUCTURE.md
14
+ - **quality**: Analisar convencoes de codigo e padroes de teste -> escrever CONVENTIONS.md e TESTING.md
15
+ - **concerns**: Identificar divida tecnica e problemas -> escrever CONCERNS.md
16
+
17
+ Seu trabalho: Explorar profundamente, escrever documento(s) diretamente. Retornar apenas confirmacao.
18
+
19
+ **CRITICO: Leitura Inicial Obrigatoria**
20
+ Se o prompt contem um bloco `<files_to_read>`, voce DEVE usar a ferramenta `Read` para carregar cada arquivo listado antes de qualquer outra acao.
21
+ </role>
22
+
23
+ <why_this_matters>
24
+ **Estes documentos sao consumidos por outros comandos UP:**
25
+
26
+ **`/up:planejar-fase`** carrega documentos relevantes do codebase ao criar planos de implementacao:
27
+ | Tipo de Fase | Documentos Carregados |
28
+ |------------|------------------|
29
+ | UI, frontend, componentes | CONVENTIONS.md, STRUCTURE.md |
30
+ | API, backend, endpoints | ARCHITECTURE.md, CONVENTIONS.md |
31
+ | banco de dados, schema, modelos | ARCHITECTURE.md, STACK.md |
32
+ | testes | TESTING.md, CONVENTIONS.md |
33
+ | integracao, API externa | INTEGRATIONS.md, STACK.md |
34
+ | refatoracao, cleanup | CONCERNS.md, ARCHITECTURE.md |
35
+ | setup, configuracao | STACK.md, STRUCTURE.md |
36
+
37
+ **`/up:executar-fase`** referencia documentos do codebase para:
38
+ - Seguir convencoes existentes ao escrever codigo
39
+ - Saber onde colocar novos arquivos (STRUCTURE.md)
40
+ - Seguir padroes de teste (TESTING.md)
41
+ - Evitar introduzir mais divida tecnica (CONCERNS.md)
42
+
43
+ **O que isso significa para seu output:**
44
+
45
+ 1. **Caminhos de arquivos sao criticos** - O planejador/executor precisa navegar diretamente. `src/services/user.ts` nao "o servico de usuario"
46
+
47
+ 2. **Padroes importam mais que listas** - Mostre COMO as coisas sao feitas (exemplos de codigo) nao apenas O QUE existe
48
+
49
+ 3. **Seja prescritivo** - "Use camelCase para funcoes" ajuda o executor a escrever codigo correto. "Algumas funcoes usam camelCase" nao ajuda.
50
+
51
+ 4. **CONCERNS.md direciona prioridades** - Problemas identificados podem virar fases futuras. Seja especifico sobre impacto e abordagem de correcao.
52
+
53
+ 5. **STRUCTURE.md responde "onde coloco isso?"** - Inclua orientacao para adicionar novo codigo, nao apenas descreva o que existe.
54
+ </why_this_matters>
55
+
56
+ <philosophy>
57
+ **Qualidade do documento acima de brevidade:**
58
+ Inclua detalhe suficiente para ser util como referencia. Um TESTING.md de 200 linhas com padroes reais e mais valioso que um resumo de 74 linhas.
59
+
60
+ **Sempre inclua caminhos de arquivos:**
61
+ Descricoes vagas como "UserService lida com usuarios" nao sao acionaveis. Sempre inclua caminhos reais com backticks: `src/services/user.ts`.
62
+
63
+ **Escreva apenas estado atual:**
64
+ Descreva apenas o que E, nunca o que FOI ou o que voce considerou. Sem linguagem temporal.
65
+
66
+ **Seja prescritivo, nao descritivo:**
67
+ Seus documentos guiam futuras instancias Claude escrevendo codigo. "Use o padrao X" e mais util que "O padrao X e usado."
68
+ </philosophy>
69
+
70
+ <process>
71
+
72
+ <step name="parse_focus">
73
+ Leia a area de foco do seu prompt. Sera uma de: `tech`, `arch`, `quality`, `concerns`.
74
+
75
+ Baseado no foco, determine quais documentos escrever:
76
+ - `tech` -> STACK.md, INTEGRATIONS.md
77
+ - `arch` -> ARCHITECTURE.md, STRUCTURE.md
78
+ - `quality` -> CONVENTIONS.md, TESTING.md
79
+ - `concerns` -> CONCERNS.md
80
+ </step>
81
+
82
+ <step name="explore_codebase">
83
+ Explore o codebase profundamente para sua area de foco.
84
+
85
+ **Para foco tech:**
86
+ ```bash
87
+ # Manifestos de pacote
88
+ ls package.json requirements.txt Cargo.toml go.mod pyproject.toml 2>/dev/null
89
+ cat package.json 2>/dev/null | head -100
90
+
91
+ # Arquivos de config (listar apenas - NAO leia .env)
92
+ ls -la *.config.* tsconfig.json .nvmrc .python-version 2>/dev/null
93
+ ls .env* 2>/dev/null # Note existencia apenas, nunca leia conteudo
94
+
95
+ # Encontrar imports de SDK/API
96
+ grep -r "import.*stripe\|import.*supabase\|import.*aws\|import.*@" src/ --include="*.ts" --include="*.tsx" 2>/dev/null | head -50
97
+ ```
98
+
99
+ **Para foco arch:**
100
+ ```bash
101
+ # Estrutura de diretorios
102
+ find . -type d -not -path '*/node_modules/*' -not -path '*/.git/*' | head -50
103
+
104
+ # Entry points
105
+ ls src/index.* src/main.* src/app.* src/server.* app/page.* 2>/dev/null
106
+
107
+ # Padroes de import para entender camadas
108
+ grep -r "^import" src/ --include="*.ts" --include="*.tsx" 2>/dev/null | head -100
109
+ ```
110
+
111
+ **Para foco quality:**
112
+ ```bash
113
+ # Config de linting/formatacao
114
+ ls .eslintrc* .prettierrc* eslint.config.* biome.json 2>/dev/null
115
+ cat .prettierrc 2>/dev/null
116
+
117
+ # Arquivos de teste e config
118
+ ls jest.config.* vitest.config.* 2>/dev/null
119
+ find . -name "*.test.*" -o -name "*.spec.*" | head -30
120
+
121
+ # Arquivos fonte exemplo para analise de convencoes
122
+ ls src/**/*.ts 2>/dev/null | head -10
123
+ ```
124
+
125
+ **Para foco concerns:**
126
+ ```bash
127
+ # Comentarios TODO/FIXME
128
+ grep -rn "TODO\|FIXME\|HACK\|XXX" src/ --include="*.ts" --include="*.tsx" 2>/dev/null | head -50
129
+
130
+ # Arquivos grandes (complexidade potencial)
131
+ find src/ -name "*.ts" -o -name "*.tsx" | xargs wc -l 2>/dev/null | sort -rn | head -20
132
+
133
+ # Returns vazios/stubs
134
+ grep -rn "return null\|return \[\]\|return {}" src/ --include="*.ts" --include="*.tsx" 2>/dev/null | head -30
135
+ ```
136
+
137
+ Leia arquivos-chave identificados durante exploracao. Use Glob e Grep liberalmente.
138
+ </step>
139
+
140
+ <step name="write_documents">
141
+ Escreva documento(s) em `.plano/codebase/` usando os templates abaixo.
142
+
143
+ **Nomeacao:** UPPERCASE.md (ex: STACK.md, ARCHITECTURE.md)
144
+
145
+ **Preenchimento do template:**
146
+ 1. Substitua `[YYYY-MM-DD]` pela data atual
147
+ 2. Substitua `[Placeholder text]` com descobertas da exploracao
148
+ 3. Se algo nao foi encontrado, use "Nao detectado" ou "Nao aplicavel"
149
+ 4. Sempre inclua caminhos de arquivo com backticks
150
+
151
+ **SEMPRE use a ferramenta Write para criar arquivos** -- nunca use `Bash(cat << 'EOF')` ou heredoc.
152
+ </step>
153
+
154
+ <step name="return_confirmation">
155
+ Retorne uma confirmacao breve. NAO inclua conteudo dos documentos.
156
+
157
+ Formato:
158
+ ```
159
+ ## Mapeamento Completo
160
+
161
+ **Foco:** {foco}
162
+ **Documentos escritos:**
163
+ - `.plano/codebase/{DOC1}.md` ({N} linhas)
164
+ - `.plano/codebase/{DOC2}.md` ({N} linhas)
165
+
166
+ Pronto para resumo do orquestrador.
167
+ ```
168
+ </step>
169
+
170
+ </process>
171
+
172
+ <templates>
173
+
174
+ ## STACK.md Template (foco tech)
175
+
176
+ ```markdown
177
+ # Stack de Tecnologia
178
+
179
+ **Data da Analise:** [YYYY-MM-DD]
180
+
181
+ ## Linguagens
182
+
183
+ **Principal:**
184
+ - [Linguagem] [Versao] - [Onde usada]
185
+
186
+ **Secundaria:**
187
+ - [Linguagem] [Versao] - [Onde usada]
188
+
189
+ ## Runtime
190
+
191
+ **Ambiente:**
192
+ - [Runtime] [Versao]
193
+
194
+ **Gerenciador de Pacotes:**
195
+ - [Gerenciador] [Versao]
196
+ - Lockfile: [presente/ausente]
197
+
198
+ ## Frameworks
199
+
200
+ **Core:**
201
+ - [Framework] [Versao] - [Proposito]
202
+
203
+ **Testes:**
204
+ - [Framework] [Versao] - [Proposito]
205
+
206
+ **Build/Dev:**
207
+ - [Ferramenta] [Versao] - [Proposito]
208
+
209
+ ## Dependencias Chave
210
+
211
+ **Criticas:**
212
+ - [Pacote] [Versao] - [Por que importa]
213
+
214
+ **Infraestrutura:**
215
+ - [Pacote] [Versao] - [Proposito]
216
+
217
+ ## Configuracao
218
+
219
+ **Ambiente:**
220
+ - [Como configurado]
221
+ - [Configs necessarias]
222
+
223
+ **Build:**
224
+ - [Arquivos de config do build]
225
+
226
+ ## Requisitos de Plataforma
227
+
228
+ **Desenvolvimento:**
229
+ - [Requisitos]
230
+
231
+ **Producao:**
232
+ - [Alvo de deploy]
233
+ ```
234
+
235
+ ## INTEGRATIONS.md Template (foco tech)
236
+
237
+ ```markdown
238
+ # Integracoes Externas
239
+
240
+ **Data da Analise:** [YYYY-MM-DD]
241
+
242
+ ## APIs e Servicos Externos
243
+
244
+ **[Categoria]:**
245
+ - [Servico] - [Para que e usado]
246
+ - SDK/Cliente: [pacote]
247
+ - Auth: [nome da env var]
248
+
249
+ ## Armazenamento de Dados
250
+
251
+ **Bancos de Dados:**
252
+ - [Tipo/Provedor]
253
+ - Conexao: [env var]
254
+ - Cliente: [ORM/cliente]
255
+
256
+ **Armazenamento de Arquivos:**
257
+ - [Servico ou "Apenas sistema de arquivos local"]
258
+
259
+ **Cache:**
260
+ - [Servico ou "Nenhum"]
261
+
262
+ ## Autenticacao e Identidade
263
+
264
+ **Provedor de Auth:**
265
+ - [Servico ou "Customizado"]
266
+ - Implementacao: [abordagem]
267
+
268
+ ## Monitoramento e Observabilidade
269
+
270
+ **Rastreamento de Erros:**
271
+ - [Servico ou "Nenhum"]
272
+
273
+ **Logs:**
274
+ - [Abordagem]
275
+
276
+ ## CI/CD e Deploy
277
+
278
+ **Hospedagem:**
279
+ - [Plataforma]
280
+
281
+ **Pipeline CI:**
282
+ - [Servico ou "Nenhum"]
283
+
284
+ ## Webhooks e Callbacks
285
+
286
+ **Entrada:**
287
+ - [Endpoints ou "Nenhum"]
288
+
289
+ **Saida:**
290
+ - [Endpoints ou "Nenhum"]
291
+ ```
292
+
293
+ ## ARCHITECTURE.md Template (foco arch)
294
+
295
+ ```markdown
296
+ # Arquitetura
297
+
298
+ **Data da Analise:** [YYYY-MM-DD]
299
+
300
+ ## Visao Geral do Padrao
301
+
302
+ **Geral:** [Nome do padrao]
303
+
304
+ **Caracteristicas Chave:**
305
+ - [Caracteristica 1]
306
+ - [Caracteristica 2]
307
+ - [Caracteristica 3]
308
+
309
+ ## Camadas
310
+
311
+ **[Nome da Camada]:**
312
+ - Proposito: [O que esta camada faz]
313
+ - Localizacao: `[caminho]`
314
+ - Contem: [Tipos de codigo]
315
+ - Depende de: [O que usa]
316
+ - Usado por: [O que a usa]
317
+
318
+ ## Fluxo de Dados
319
+
320
+ **[Nome do Fluxo]:**
321
+
322
+ 1. [Passo 1]
323
+ 2. [Passo 2]
324
+ 3. [Passo 3]
325
+
326
+ **Gerenciamento de Estado:**
327
+ - [Como o estado e tratado]
328
+
329
+ ## Abstracoes Chave
330
+
331
+ **[Nome da Abstracao]:**
332
+ - Proposito: [O que representa]
333
+ - Exemplos: `[caminhos de arquivo]`
334
+ - Padrao: [Padrao usado]
335
+
336
+ ## Pontos de Entrada
337
+
338
+ **[Ponto de Entrada]:**
339
+ - Localizacao: `[caminho]`
340
+ - Gatilhos: [O que invoca]
341
+ - Responsabilidades: [O que faz]
342
+
343
+ ## Tratamento de Erros
344
+
345
+ **Estrategia:** [Abordagem]
346
+
347
+ ## Preocupacoes Transversais
348
+
349
+ **Logging:** [Abordagem]
350
+ **Validacao:** [Abordagem]
351
+ **Autenticacao:** [Abordagem]
352
+ ```
353
+
354
+ ## STRUCTURE.md Template (foco arch)
355
+
356
+ ```markdown
357
+ # Estrutura do Codebase
358
+
359
+ **Data da Analise:** [YYYY-MM-DD]
360
+
361
+ ## Layout de Diretorios
362
+
363
+ [arvore de diretorios com propositos]
364
+
365
+ ## Propositos dos Diretorios
366
+
367
+ **[Nome do Diretorio]:**
368
+ - Proposito: [O que vive aqui]
369
+ - Contem: [Tipos de arquivos]
370
+ - Arquivos chave: `[arquivos importantes]`
371
+
372
+ ## Localizacoes Chave
373
+
374
+ **Entry Points:**
375
+ - `[caminho]`: [Proposito]
376
+
377
+ **Configuracao:**
378
+ - `[caminho]`: [Proposito]
379
+
380
+ **Logica Core:**
381
+ - `[caminho]`: [Proposito]
382
+
383
+ ## Onde Adicionar Novo Codigo
384
+
385
+ **Nova Feature:**
386
+ - Codigo principal: `[caminho]`
387
+ - Testes: `[caminho]`
388
+
389
+ **Novo Componente/Modulo:**
390
+ - Implementacao: `[caminho]`
391
+
392
+ **Utilitarios:**
393
+ - Helpers compartilhados: `[caminho]`
394
+ ```
395
+
396
+ ## CONVENTIONS.md Template (foco quality)
397
+
398
+ ```markdown
399
+ # Convencoes de Codigo
400
+
401
+ **Data da Analise:** [YYYY-MM-DD]
402
+
403
+ ## Padroes de Nomeacao
404
+
405
+ **Arquivos:** [Padrao observado]
406
+ **Funcoes:** [Padrao observado]
407
+ **Variaveis:** [Padrao observado]
408
+ **Tipos:** [Padrao observado]
409
+
410
+ ## Estilo de Codigo
411
+
412
+ **Formatacao:** [Ferramenta e configuracoes]
413
+ **Linting:** [Ferramenta e regras]
414
+
415
+ ## Organizacao de Imports
416
+
417
+ **Ordem:**
418
+ 1. [Primeiro grupo]
419
+ 2. [Segundo grupo]
420
+ 3. [Terceiro grupo]
421
+
422
+ ## Tratamento de Erros
423
+
424
+ **Padroes:** [Como erros sao tratados]
425
+
426
+ ## Design de Funcoes
427
+
428
+ **Tamanho:** [Diretrizes]
429
+ **Parametros:** [Padrao]
430
+ **Valores de Retorno:** [Padrao]
431
+ ```
432
+
433
+ ## TESTING.md Template (foco quality)
434
+
435
+ ```markdown
436
+ # Padroes de Teste
437
+
438
+ **Data da Analise:** [YYYY-MM-DD]
439
+
440
+ ## Framework de Teste
441
+
442
+ **Runner:** [Framework] [Versao]
443
+ **Config:** `[arquivo de config]`
444
+
445
+ **Comandos:**
446
+ [comando para rodar todos os testes]
447
+ [comando para watch mode]
448
+ [comando para coverage]
449
+
450
+ ## Organizacao dos Arquivos de Teste
451
+
452
+ **Localizacao:** [co-localizados ou separados]
453
+ **Nomeacao:** [Padrao]
454
+
455
+ ## Estrutura dos Testes
456
+
457
+ [Mostrar padrao real do codebase]
458
+
459
+ ## Mocking
460
+
461
+ **Framework:** [Ferramenta]
462
+ [Mostrar padrao real de mocking do codebase]
463
+
464
+ ## Cobertura
465
+
466
+ **Requisitos:** [Alvo ou "Nenhum imposto"]
467
+
468
+ ## Tipos de Teste
469
+
470
+ **Unitarios:** [Escopo e abordagem]
471
+ **Integracao:** [Escopo e abordagem]
472
+ **E2E:** [Framework ou "Nao usado"]
473
+ ```
474
+
475
+ ## CONCERNS.md Template (foco concerns)
476
+
477
+ ```markdown
478
+ # Preocupacoes do Codebase
479
+
480
+ **Data da Analise:** [YYYY-MM-DD]
481
+
482
+ ## Divida Tecnica
483
+
484
+ **[Area/Componente]:**
485
+ - Problema: [Qual e o atalho/workaround]
486
+ - Arquivos: `[caminhos]`
487
+ - Impacto: [O que quebra ou degrada]
488
+ - Abordagem de correcao: [Como resolver]
489
+
490
+ ## Bugs Conhecidos
491
+
492
+ **[Descricao do bug]:**
493
+ - Sintomas: [O que acontece]
494
+ - Arquivos: `[caminhos]`
495
+ - Gatilho: [Como reproduzir]
496
+
497
+ ## Consideracoes de Seguranca
498
+
499
+ **[Area]:**
500
+ - Risco: [O que pode dar errado]
501
+ - Arquivos: `[caminhos]`
502
+ - Mitigacao atual: [O que existe]
503
+
504
+ ## Gargalos de Performance
505
+
506
+ **[Operacao lenta]:**
507
+ - Problema: [O que e lento]
508
+ - Arquivos: `[caminhos]`
509
+ - Causa: [Por que e lento]
510
+
511
+ ## Areas Frageis
512
+
513
+ **[Componente/Modulo]:**
514
+ - Arquivos: `[caminhos]`
515
+ - Por que fragil: [O que faz quebrar facilmente]
516
+ - Cobertura de testes: [Lacunas]
517
+
518
+ ## Lacunas de Cobertura de Teste
519
+
520
+ **[Area nao testada]:**
521
+ - O que nao e testado: [Funcionalidade especifica]
522
+ - Arquivos: `[caminhos]`
523
+ - Risco: [O que pode quebrar sem ser notado]
524
+ - Prioridade: [Alta/Media/Baixa]
525
+ ```
526
+
527
+ </templates>
528
+
529
+ <forbidden_files>
530
+ **NUNCA leia ou cite conteudo destes arquivos (mesmo que existam):**
531
+
532
+ - `.env`, `.env.*`, `*.env` - Variaveis de ambiente com segredos
533
+ - `credentials.*`, `secrets.*`, `*secret*`, `*credential*` - Arquivos de credenciais
534
+ - `*.pem`, `*.key`, `*.p12`, `*.pfx`, `*.jks` - Certificados e chaves privadas
535
+ - `id_rsa*`, `id_ed25519*`, `id_dsa*` - Chaves privadas SSH
536
+ - `.npmrc`, `.pypirc`, `.netrc` - Tokens de auth de gerenciadores de pacote
537
+ - `serviceAccountKey.json`, `*-credentials.json` - Credenciais de servicos cloud
538
+
539
+ **Se encontrar estes arquivos:**
540
+ - Note apenas a EXISTENCIA: "Arquivo `.env` presente - contem configuracao de ambiente"
541
+ - NUNCA cite conteudo, mesmo parcialmente
542
+ - NUNCA inclua valores como `API_KEY=...` ou `sk-...` em qualquer output
543
+
544
+ **Por que importa:** Seu output e commitado no git. Segredos vazados = incidente de seguranca.
545
+ </forbidden_files>
546
+
547
+ <critical_rules>
548
+
549
+ **ESCREVA DOCUMENTOS DIRETAMENTE.** Nao retorne descobertas ao orquestrador. O objetivo e reduzir transferencia de contexto.
550
+
551
+ **SEMPRE INCLUA CAMINHOS DE ARQUIVO.** Toda descoberta precisa de caminho com backticks. Sem excecoes.
552
+
553
+ **USE OS TEMPLATES.** Preencha a estrutura do template. Nao invente seu proprio formato.
554
+
555
+ **SEJA MINUCIOSO.** Explore profundamente. Leia arquivos reais. Nao adivinhe. **Mas respeite <forbidden_files>.**
556
+
557
+ **RETORNE APENAS CONFIRMACAO.** Sua resposta deve ter ~10 linhas max. Apenas confirme o que foi escrito.
558
+
559
+ **NAO FACA COMMIT.** O orquestrador lida com operacoes git.
560
+
561
+ </critical_rules>
package/bin/install.js CHANGED
@@ -507,6 +507,49 @@ function uninstall(targetDir, runtime) {
507
507
  }
508
508
  }
509
509
 
510
+ // Remove UP hooks
511
+ const hooksDir = path.join(targetDir, 'hooks');
512
+ if (fs.existsSync(hooksDir)) {
513
+ for (const file of fs.readdirSync(hooksDir)) {
514
+ if (file.startsWith('up-') && file.endsWith('.js')) {
515
+ fs.unlinkSync(path.join(hooksDir, file));
516
+ removed++;
517
+ }
518
+ }
519
+ console.log(` ${green}✓${reset} Removed UP hooks`);
520
+ }
521
+
522
+ // Clean settings.json references
523
+ if (runtime === 'claude') {
524
+ const settingsPath = path.join(targetDir, 'settings.json');
525
+ if (fs.existsSync(settingsPath)) {
526
+ try {
527
+ const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
528
+ let changed = false;
529
+
530
+ if (settings.statusLine && settings.statusLine.command && settings.statusLine.command.includes('up-statusline')) {
531
+ delete settings.statusLine;
532
+ changed = true;
533
+ }
534
+
535
+ if (settings.hooks && settings.hooks.PostToolUse) {
536
+ settings.hooks.PostToolUse = settings.hooks.PostToolUse.filter(entry => {
537
+ const hooks = entry.hooks || [];
538
+ return !hooks.some(h => h.command && h.command.includes('up-context-monitor'));
539
+ });
540
+ if (settings.hooks.PostToolUse.length === 0) delete settings.hooks.PostToolUse;
541
+ if (Object.keys(settings.hooks).length === 0) delete settings.hooks;
542
+ changed = true;
543
+ }
544
+
545
+ if (changed) {
546
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
547
+ console.log(` ${green}✓${reset} Cleaned settings.json`);
548
+ }
549
+ } catch (e) {}
550
+ }
551
+ }
552
+
510
553
  if (removed === 0) {
511
554
  console.log(` ${dim}Nothing to remove — UP is not installed here.${reset}`);
512
555
  } else {
@@ -600,12 +643,84 @@ function install(isGlobal, runtime) {
600
643
  }
601
644
  }
602
645
 
603
- // 4. Write VERSION file
646
+ // 4. Install hooks (Claude Code only)
647
+ if (runtime === 'claude') {
648
+ const hooksSrc = path.join(packageRoot, 'hooks');
649
+ if (fs.existsSync(hooksSrc)) {
650
+ const hooksDest = path.join(targetDir, 'hooks');
651
+ fs.mkdirSync(hooksDest, { recursive: true });
652
+
653
+ // Remove old UP hooks
654
+ if (fs.existsSync(hooksDest)) {
655
+ for (const file of fs.readdirSync(hooksDest)) {
656
+ if (file.startsWith('up-') && file.endsWith('.js')) {
657
+ fs.unlinkSync(path.join(hooksDest, file));
658
+ }
659
+ }
660
+ }
661
+
662
+ // Copy new UP hooks
663
+ let hookCount = 0;
664
+ for (const file of fs.readdirSync(hooksSrc)) {
665
+ if (file.endsWith('.js')) {
666
+ fs.copyFileSync(path.join(hooksSrc, file), path.join(hooksDest, file));
667
+ hookCount++;
668
+ }
669
+ }
670
+
671
+ if (hookCount > 0) {
672
+ console.log(` ${green}✓${reset} Installed ${hookCount} hooks`);
673
+ }
674
+
675
+ // Configure statusLine and hooks in settings.json
676
+ const settingsPath = path.join(targetDir, 'settings.json');
677
+ let settings = {};
678
+ if (fs.existsSync(settingsPath)) {
679
+ try { settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8')); } catch (e) {}
680
+ }
681
+
682
+ const statuslineCmd = `node "${path.join(hooksDest, 'up-statusline.js')}"`;
683
+ const contextMonitorCmd = `node "${path.join(hooksDest, 'up-context-monitor.js')}"`;
684
+
685
+ // Set statusLine
686
+ settings.statusLine = { type: 'command', command: statuslineCmd };
687
+
688
+ // Set PostToolUse hook for context monitor
689
+ if (!settings.hooks) settings.hooks = {};
690
+ const postToolHooks = settings.hooks.PostToolUse || [];
691
+ // Remove old GSD/UP context monitor entries
692
+ const filtered = postToolHooks.filter(entry => {
693
+ const hooks = entry.hooks || [];
694
+ return !hooks.some(h => h.command && (h.command.includes('gsd-context-monitor') || h.command.includes('up-context-monitor')));
695
+ });
696
+ filtered.push({ hooks: [{ type: 'command', command: contextMonitorCmd }] });
697
+ settings.hooks.PostToolUse = filtered;
698
+
699
+ // Remove old GSD SessionStart hook if present
700
+ if (settings.hooks.SessionStart) {
701
+ settings.hooks.SessionStart = settings.hooks.SessionStart.filter(entry => {
702
+ const hooks = entry.hooks || [];
703
+ return !hooks.some(h => h.command && h.command.includes('gsd-'));
704
+ });
705
+ if (settings.hooks.SessionStart.length === 0) delete settings.hooks.SessionStart;
706
+ }
707
+
708
+ // Clean old GSD statusLine reference
709
+ if (settings.statusLine && settings.statusLine.command && settings.statusLine.command.includes('gsd-statusline')) {
710
+ settings.statusLine = { type: 'command', command: statuslineCmd };
711
+ }
712
+
713
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
714
+ console.log(` ${green}✓${reset} Configured statusLine and context monitor`);
715
+ }
716
+ }
717
+
718
+ // 5. Write VERSION file
604
719
  const versionDest = path.join(upDest, 'VERSION');
605
720
  fs.writeFileSync(versionDest, VERSION);
606
721
  console.log(` ${green}✓${reset} Wrote VERSION (${VERSION})`);
607
722
 
608
- // 5. Write package.json for CommonJS mode (prevents ESM conflicts)
723
+ // 6. Write package.json for CommonJS mode (prevents ESM conflicts)
609
724
  if (runtime !== 'opencode') {
610
725
  const pkgDest = path.join(targetDir, 'package.json');
611
726
  if (!fs.existsSync(pkgDest)) {
package/bin/up-tools.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  /**
4
4
  * UP Tools — CLI utility for UP workflow operations
5
5
  *
6
- * Simplified version of GSD Tools. Single file (+ core.cjs).
6
+ * UP Tools Single file CLI (+ core.cjs).
7
7
  *
8
8
  * Usage: node up-tools.cjs <command> [args] [--raw] [--cwd <path>]
9
9
  *
package/commands/ajuda.md CHANGED
@@ -28,6 +28,7 @@ Sistema de desenvolvimento orientado a fases para projetos de software.
28
28
  | Comando | Descricao | Uso |
29
29
  |---------|-----------|-----|
30
30
  | `/up:novo-projeto` | Inicializar novo projeto com coleta de contexto | `/up:novo-projeto` |
31
+ | `/up:mapear-codigo` | Analisar codebase existente com agentes paralelos | `/up:mapear-codigo` |
31
32
  | `/up:retomar` | Restaurar contexto da sessao anterior | `/up:retomar` |
32
33
 
33
34
  ### Ciclo de Fase
@@ -87,6 +88,13 @@ Sistema de desenvolvimento orientado a fases para projetos de software.
87
88
 
88
89
  ## Fluxos de Trabalho Comuns
89
90
 
91
+ ### Projeto com Codigo Existente (brownfield)
92
+ ```
93
+ /up:mapear-codigo
94
+ /up:novo-projeto
95
+ /up:discutir-fase 1
96
+ ```
97
+
90
98
  ### Novo Projeto (do zero)
91
99
  ```
92
100
  /up:novo-projeto
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: up:mapear-codigo
3
+ description: Analisar codebase existente com agentes mapeadores paralelos
4
+ argument-hint: "[opcional: area especifica, ex: 'api' ou 'auth']"
5
+ allowed-tools:
6
+ - Read
7
+ - Bash
8
+ - Glob
9
+ - Grep
10
+ - Write
11
+ - Task
12
+ ---
13
+
14
+ <objective>
15
+ Analyze existing codebase using parallel up-mapeador-codigo agents to produce structured codebase documents.
16
+
17
+ Each mapper agent explores a focus area and **writes documents directly** to `.plano/codebase/`. The orchestrator only receives confirmations, keeping context usage minimal.
18
+
19
+ Output: .plano/codebase/ folder with 7 structured documents about the codebase state.
20
+ </objective>
21
+
22
+ <execution_context>
23
+ @~/.claude/up/workflows/mapear-codigo.md
24
+ @~/.claude/up/references/ui-brand.md
25
+ </execution_context>
26
+
27
+ <context>
28
+ Focus area: $ARGUMENTS (optional - if provided, tells agents to focus on specific subsystem)
29
+
30
+ **Load project state if exists:**
31
+ Check for .plano/STATE.md - loads context if project already initialized
32
+
33
+ **This command can run:**
34
+ - Before /up:novo-projeto (brownfield codebases) - creates codebase map first
35
+ - After /up:novo-projeto (greenfield codebases) - updates codebase map as code evolves
36
+ - Anytime to refresh codebase understanding
37
+ </context>
38
+
39
+ <when_to_use>
40
+ **Use mapear-codigo for:**
41
+ - Projetos brownfield antes da inicializacao (entender codigo existente primeiro)
42
+ - Atualizar mapa do codebase apos mudancas significativas
43
+ - Onboarding em codebase desconhecido
44
+ - Antes de refatoracao grande (entender estado atual)
45
+
46
+ **Skip mapear-codigo for:**
47
+ - Projetos greenfield sem codigo ainda (nada para mapear)
48
+ - Codebases triviais (<5 arquivos)
49
+ </when_to_use>
50
+
51
+ <process>
52
+ 1. Check if .plano/codebase/ already exists (offer to refresh or skip)
53
+ 2. Create .plano/codebase/ directory structure
54
+ 3. Spawn 4 parallel up-mapeador-codigo agents:
55
+ - Agent 1: tech focus -> writes STACK.md, INTEGRATIONS.md
56
+ - Agent 2: arch focus -> writes ARCHITECTURE.md, STRUCTURE.md
57
+ - Agent 3: quality focus -> writes CONVENTIONS.md, TESTING.md
58
+ - Agent 4: concerns focus -> writes CONCERNS.md
59
+ 4. Wait for agents to complete, collect confirmations (NOT document contents)
60
+ 5. Verify all 7 documents exist with line counts
61
+ 6. Commit codebase map
62
+ 7. Offer next steps (typically: /up:novo-projeto or /up:planejar-fase)
63
+ </process>
@@ -0,0 +1,112 @@
1
+ #!/usr/bin/env node
2
+ // Context Monitor - PostToolUse hook
3
+ // Reads context metrics from the statusline bridge file and injects
4
+ // warnings when context usage is high.
5
+
6
+ const fs = require('fs');
7
+ const os = require('os');
8
+ const path = require('path');
9
+
10
+ const WARNING_THRESHOLD = 35;
11
+ const CRITICAL_THRESHOLD = 25;
12
+ const STALE_SECONDS = 60;
13
+ const DEBOUNCE_CALLS = 5;
14
+
15
+ let input = '';
16
+ const stdinTimeout = setTimeout(() => process.exit(0), 3000);
17
+ process.stdin.setEncoding('utf8');
18
+ process.stdin.on('data', chunk => input += chunk);
19
+ process.stdin.on('end', () => {
20
+ clearTimeout(stdinTimeout);
21
+ try {
22
+ const data = JSON.parse(input);
23
+ const sessionId = data.session_id;
24
+
25
+ if (!sessionId) {
26
+ process.exit(0);
27
+ }
28
+
29
+ const tmpDir = os.tmpdir();
30
+ const metricsPath = path.join(tmpDir, `claude-ctx-${sessionId}.json`);
31
+
32
+ if (!fs.existsSync(metricsPath)) {
33
+ process.exit(0);
34
+ }
35
+
36
+ const metrics = JSON.parse(fs.readFileSync(metricsPath, 'utf8'));
37
+ const now = Math.floor(Date.now() / 1000);
38
+
39
+ if (metrics.timestamp && (now - metrics.timestamp) > STALE_SECONDS) {
40
+ process.exit(0);
41
+ }
42
+
43
+ const remaining = metrics.remaining_percentage;
44
+ const usedPct = metrics.used_pct;
45
+
46
+ if (remaining > WARNING_THRESHOLD) {
47
+ process.exit(0);
48
+ }
49
+
50
+ // Debounce
51
+ const warnPath = path.join(tmpDir, `claude-ctx-${sessionId}-warned.json`);
52
+ let warnData = { callsSinceWarn: 0, lastLevel: null };
53
+ let firstWarn = true;
54
+
55
+ if (fs.existsSync(warnPath)) {
56
+ try {
57
+ warnData = JSON.parse(fs.readFileSync(warnPath, 'utf8'));
58
+ firstWarn = false;
59
+ } catch (e) {}
60
+ }
61
+
62
+ warnData.callsSinceWarn = (warnData.callsSinceWarn || 0) + 1;
63
+
64
+ const isCritical = remaining <= CRITICAL_THRESHOLD;
65
+ const currentLevel = isCritical ? 'critical' : 'warning';
66
+
67
+ const severityEscalated = currentLevel === 'critical' && warnData.lastLevel === 'warning';
68
+ if (!firstWarn && warnData.callsSinceWarn < DEBOUNCE_CALLS && !severityEscalated) {
69
+ fs.writeFileSync(warnPath, JSON.stringify(warnData));
70
+ process.exit(0);
71
+ }
72
+
73
+ warnData.callsSinceWarn = 0;
74
+ warnData.lastLevel = currentLevel;
75
+ fs.writeFileSync(warnPath, JSON.stringify(warnData));
76
+
77
+ // Detect if UP is active (has .plano/STATE.md in working directory)
78
+ const cwd = data.cwd || process.cwd();
79
+ const isUpActive = fs.existsSync(path.join(cwd, '.plano', 'STATE.md'));
80
+
81
+ let message;
82
+ if (isCritical) {
83
+ message = isUpActive
84
+ ? `CONTEXT CRITICAL: Usage at ${usedPct}%. Remaining: ${remaining}%. ` +
85
+ 'Context is nearly exhausted. Do NOT start new complex work or write handoff files -- ' +
86
+ 'UP state is already tracked in STATE.md. Inform the user so they can run ' +
87
+ '/up:pausar at the next natural stopping point.'
88
+ : `CONTEXT CRITICAL: Usage at ${usedPct}%. Remaining: ${remaining}%. ` +
89
+ 'Context is nearly exhausted. Inform the user that context is low and ask how they ' +
90
+ 'want to proceed. Do NOT autonomously save state or write handoff files unless the user asks.';
91
+ } else {
92
+ message = isUpActive
93
+ ? `CONTEXT WARNING: Usage at ${usedPct}%. Remaining: ${remaining}%. ` +
94
+ 'Context is getting limited. Avoid starting new complex work. If not between ' +
95
+ 'defined plan steps, inform the user so they can prepare to pause.'
96
+ : `CONTEXT WARNING: Usage at ${usedPct}%. Remaining: ${remaining}%. ` +
97
+ 'Be aware that context is getting limited. Avoid unnecessary exploration or ' +
98
+ 'starting new complex work.';
99
+ }
100
+
101
+ const output = {
102
+ hookSpecificOutput: {
103
+ hookEventName: "PostToolUse",
104
+ additionalContext: message
105
+ }
106
+ };
107
+
108
+ process.stdout.write(JSON.stringify(output));
109
+ } catch (e) {
110
+ process.exit(0);
111
+ }
112
+ });
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env node
2
+ // Claude Code Statusline - UP Edition
3
+ // Shows: model | current task | directory | context usage
4
+
5
+ const fs = require('fs');
6
+ const path = require('path');
7
+ const os = require('os');
8
+
9
+ let input = '';
10
+ const stdinTimeout = setTimeout(() => process.exit(0), 3000);
11
+ process.stdin.setEncoding('utf8');
12
+ process.stdin.on('data', chunk => input += chunk);
13
+ process.stdin.on('end', () => {
14
+ clearTimeout(stdinTimeout);
15
+ try {
16
+ const data = JSON.parse(input);
17
+ const model = data.model?.display_name || 'Claude';
18
+ const dir = data.workspace?.current_dir || process.cwd();
19
+ const session = data.session_id || '';
20
+ const remaining = data.context_window?.remaining_percentage;
21
+
22
+ // Context window display (shows USED percentage scaled to usable context)
23
+ const AUTO_COMPACT_BUFFER_PCT = 16.5;
24
+ let ctx = '';
25
+ if (remaining != null) {
26
+ const usableRemaining = Math.max(0, ((remaining - AUTO_COMPACT_BUFFER_PCT) / (100 - AUTO_COMPACT_BUFFER_PCT)) * 100);
27
+ const used = Math.max(0, Math.min(100, Math.round(100 - usableRemaining)));
28
+
29
+ // Write context metrics to bridge file for the context-monitor hook
30
+ if (session) {
31
+ try {
32
+ const bridgePath = path.join(os.tmpdir(), `claude-ctx-${session}.json`);
33
+ const bridgeData = JSON.stringify({
34
+ session_id: session,
35
+ remaining_percentage: remaining,
36
+ used_pct: used,
37
+ timestamp: Math.floor(Date.now() / 1000)
38
+ });
39
+ fs.writeFileSync(bridgePath, bridgeData);
40
+ } catch (e) {}
41
+ }
42
+
43
+ // Build progress bar (10 segments)
44
+ const filled = Math.floor(used / 10);
45
+ const bar = '\u2588'.repeat(filled) + '\u2591'.repeat(10 - filled);
46
+
47
+ if (used < 50) {
48
+ ctx = ` \x1b[32m${bar} ${used}%\x1b[0m`;
49
+ } else if (used < 65) {
50
+ ctx = ` \x1b[33m${bar} ${used}%\x1b[0m`;
51
+ } else if (used < 80) {
52
+ ctx = ` \x1b[38;5;208m${bar} ${used}%\x1b[0m`;
53
+ } else {
54
+ ctx = ` \x1b[5;31m${bar} ${used}%\x1b[0m`;
55
+ }
56
+ }
57
+
58
+ // Current task from todos
59
+ let task = '';
60
+ const homeDir = os.homedir();
61
+ const claudeDir = process.env.CLAUDE_CONFIG_DIR || path.join(homeDir, '.claude');
62
+ const todosDir = path.join(claudeDir, 'todos');
63
+ if (session && fs.existsSync(todosDir)) {
64
+ try {
65
+ const files = fs.readdirSync(todosDir)
66
+ .filter(f => f.startsWith(session) && f.includes('-agent-') && f.endsWith('.json'))
67
+ .map(f => ({ name: f, mtime: fs.statSync(path.join(todosDir, f)).mtime }))
68
+ .sort((a, b) => b.mtime - a.mtime);
69
+
70
+ if (files.length > 0) {
71
+ try {
72
+ const todos = JSON.parse(fs.readFileSync(path.join(todosDir, files[0].name), 'utf8'));
73
+ const inProgress = todos.find(t => t.status === 'in_progress');
74
+ if (inProgress) task = inProgress.activeForm || '';
75
+ } catch (e) {}
76
+ }
77
+ } catch (e) {}
78
+ }
79
+
80
+ // Output
81
+ const dirname = path.basename(dir);
82
+ if (task) {
83
+ process.stdout.write(`\x1b[2m${model}\x1b[0m \u2502 \x1b[1m${task}\x1b[0m \u2502 \x1b[2m${dirname}\x1b[0m${ctx}`);
84
+ } else {
85
+ process.stdout.write(`\x1b[2m${model}\x1b[0m \u2502 \x1b[2m${dirname}\x1b[0m${ctx}`);
86
+ }
87
+ } catch (e) {}
88
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "up-cc",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Simplified spec-driven development for Claude Code, Gemini and OpenCode.",
5
5
  "bin": {
6
6
  "up-cc": "bin/install.js"
@@ -11,7 +11,8 @@
11
11
  "commands",
12
12
  "workflows",
13
13
  "templates",
14
- "references"
14
+ "references",
15
+ "hooks"
15
16
  ],
16
17
  "keywords": [
17
18
  "claude",
@@ -0,0 +1,258 @@
1
+ <purpose>
2
+ Orquestrar agentes mapeadores de codebase paralelos para analisar codebase e produzir documentos estruturados em .plano/codebase/
3
+
4
+ Cada agente tem contexto fresco, explora uma area de foco especifica, e **escreve documentos diretamente**. O orquestrador recebe apenas confirmacao + contagem de linhas, depois escreve um resumo.
5
+
6
+ Output: Pasta .plano/codebase/ com 7 documentos estruturados sobre o estado do codebase.
7
+ </purpose>
8
+
9
+ <philosophy>
10
+ **Por que agentes mapeadores dedicados:**
11
+ - Contexto fresco por dominio (sem contaminacao de tokens)
12
+ - Agentes escrevem documentos diretamente (sem transferencia de contexto de volta ao orquestrador)
13
+ - Orquestrador apenas resume o que foi criado (uso minimo de contexto)
14
+ - Execucao mais rapida (agentes rodam simultaneamente)
15
+
16
+ **Qualidade do documento acima de tamanho:**
17
+ Inclua detalhe suficiente para ser util como referencia. Priorize exemplos praticos (especialmente padroes de codigo) sobre brevidade arbitraria.
18
+
19
+ **Sempre inclua caminhos de arquivo:**
20
+ Documentos sao material de referencia para Claude ao planejar/executar. Sempre inclua caminhos reais com backticks: `src/services/user.ts`.
21
+ </philosophy>
22
+
23
+ <process>
24
+
25
+ <step name="check_existing">
26
+ Verifique se .plano/codebase/ ja existe.
27
+
28
+ ```bash
29
+ ls -la .plano/codebase/ 2>/dev/null
30
+ ```
31
+
32
+ **Se existir:**
33
+
34
+ ```
35
+ .plano/codebase/ ja existe com estes documentos:
36
+ [Listar arquivos encontrados]
37
+
38
+ O que fazer?
39
+ 1. Atualizar - Deletar existente e remapear codebase
40
+ 2. Pular - Usar mapa existente como esta
41
+ ```
42
+
43
+ Aguardar resposta do usuario.
44
+
45
+ Se "Atualizar": Deletar .plano/codebase/, continuar para create_structure
46
+ Se "Pular": Encerrar workflow
47
+
48
+ **Se nao existir:**
49
+ Continuar para create_structure.
50
+ </step>
51
+
52
+ <step name="create_structure">
53
+ Criar diretorio .plano/codebase/:
54
+
55
+ ```bash
56
+ mkdir -p .plano/codebase
57
+ ```
58
+
59
+ **Arquivos de saida esperados:**
60
+ - STACK.md (do mapeador tech)
61
+ - INTEGRATIONS.md (do mapeador tech)
62
+ - ARCHITECTURE.md (do mapeador arch)
63
+ - STRUCTURE.md (do mapeador arch)
64
+ - CONVENTIONS.md (do mapeador quality)
65
+ - TESTING.md (do mapeador quality)
66
+ - CONCERNS.md (do mapeador concerns)
67
+
68
+ Continuar para spawn_agents.
69
+ </step>
70
+
71
+ <step name="spawn_agents">
72
+ Spawnar 4 agentes up-mapeador-codigo paralelos.
73
+
74
+ Usar ferramenta Agent com `subagent_type="up-mapeador-codigo"` e `run_in_background=true` para execucao paralela.
75
+
76
+ **CRITICO:** Use o agente dedicado `up-mapeador-codigo`, NAO `Explore`. O agente mapeador escreve documentos diretamente.
77
+
78
+ **Agente 1: Foco Tech**
79
+
80
+ ```
81
+ Agent(
82
+ subagent_type="up-mapeador-codigo",
83
+ run_in_background=true,
84
+ description="Mapear stack de tecnologia",
85
+ prompt="Foco: tech
86
+
87
+ Analise este codebase para stack de tecnologia e integracoes externas.
88
+
89
+ Escreva estes documentos em .plano/codebase/:
90
+ - STACK.md - Linguagens, runtime, frameworks, dependencias, configuracao
91
+ - INTEGRATIONS.md - APIs externas, bancos de dados, provedores de auth, webhooks
92
+
93
+ Explore profundamente. Escreva documentos diretamente usando templates. Retorne apenas confirmacao."
94
+ )
95
+ ```
96
+
97
+ **Agente 2: Foco Arquitetura**
98
+
99
+ ```
100
+ Agent(
101
+ subagent_type="up-mapeador-codigo",
102
+ run_in_background=true,
103
+ description="Mapear arquitetura do codebase",
104
+ prompt="Foco: arch
105
+
106
+ Analise a arquitetura e estrutura de diretorios deste codebase.
107
+
108
+ Escreva estes documentos em .plano/codebase/:
109
+ - ARCHITECTURE.md - Padrao, camadas, fluxo de dados, abstracoes, entry points
110
+ - STRUCTURE.md - Layout de diretorios, localizacoes chave, convencoes de nomeacao
111
+
112
+ Explore profundamente. Escreva documentos diretamente usando templates. Retorne apenas confirmacao."
113
+ )
114
+ ```
115
+
116
+ **Agente 3: Foco Qualidade**
117
+
118
+ ```
119
+ Agent(
120
+ subagent_type="up-mapeador-codigo",
121
+ run_in_background=true,
122
+ description="Mapear convencoes do codebase",
123
+ prompt="Foco: quality
124
+
125
+ Analise este codebase para convencoes de codigo e padroes de teste.
126
+
127
+ Escreva estes documentos em .plano/codebase/:
128
+ - CONVENTIONS.md - Estilo de codigo, nomeacao, padroes, tratamento de erros
129
+ - TESTING.md - Framework, estrutura, mocking, cobertura
130
+
131
+ Explore profundamente. Escreva documentos diretamente usando templates. Retorne apenas confirmacao."
132
+ )
133
+ ```
134
+
135
+ **Agente 4: Foco Preocupacoes**
136
+
137
+ ```
138
+ Agent(
139
+ subagent_type="up-mapeador-codigo",
140
+ run_in_background=true,
141
+ description="Mapear preocupacoes do codebase",
142
+ prompt="Foco: concerns
143
+
144
+ Analise este codebase para divida tecnica, problemas conhecidos e areas de preocupacao.
145
+
146
+ Escreva este documento em .plano/codebase/:
147
+ - CONCERNS.md - Divida tecnica, bugs, seguranca, performance, areas frageis
148
+
149
+ Explore profundamente. Escreva documento diretamente usando template. Retorne apenas confirmacao."
150
+ )
151
+ ```
152
+
153
+ Continuar para collect_confirmations.
154
+ </step>
155
+
156
+ <step name="collect_confirmations">
157
+ Aguardar todos os 4 agentes completarem.
158
+
159
+ Ler output de cada agente para coletar confirmacoes.
160
+
161
+ **Formato de confirmacao esperado de cada agente:**
162
+ ```
163
+ ## Mapeamento Completo
164
+
165
+ **Foco:** {foco}
166
+ **Documentos escritos:**
167
+ - `.plano/codebase/{DOC1}.md` ({N} linhas)
168
+ - `.plano/codebase/{DOC2}.md` ({N} linhas)
169
+
170
+ Pronto para resumo do orquestrador.
171
+ ```
172
+
173
+ **O que voce recebe:** Apenas caminhos de arquivo e contagem de linhas. NAO conteudo dos documentos.
174
+
175
+ Se algum agente falhou, note a falha e continue com documentos bem-sucedidos.
176
+
177
+ Continuar para verify_output.
178
+ </step>
179
+
180
+ <step name="verify_output">
181
+ Verificar se todos os documentos foram criados:
182
+
183
+ ```bash
184
+ ls -la .plano/codebase/
185
+ wc -l .plano/codebase/*.md
186
+ ```
187
+
188
+ **Checklist de verificacao:**
189
+ - Todos os 7 documentos existem
190
+ - Nenhum documento vazio (cada um deve ter >20 linhas)
191
+
192
+ Se documentos faltando ou vazios, note quais agentes podem ter falhado.
193
+
194
+ Continuar para scan_for_secrets.
195
+ </step>
196
+
197
+ <step name="scan_for_secrets">
198
+ **CHECAGEM DE SEGURANCA CRITICA:** Escanear arquivos de saida para segredos acidentalmente vazados antes de commitar.
199
+
200
+ ```bash
201
+ grep -E '(sk-[a-zA-Z0-9]{20,}|sk_live_[a-zA-Z0-9]+|sk_test_[a-zA-Z0-9]+|ghp_[a-zA-Z0-9]{36}|gho_[a-zA-Z0-9]{36}|glpat-[a-zA-Z0-9_-]+|AKIA[A-Z0-9]{16}|xox[baprs]-[a-zA-Z0-9-]+|-----BEGIN.*PRIVATE KEY|eyJ[a-zA-Z0-9_-]+\.eyJ[a-zA-Z0-9_-]+\.)' .plano/codebase/*.md 2>/dev/null && SECRETS_FOUND=true || SECRETS_FOUND=false
202
+ ```
203
+
204
+ **Se SECRETS_FOUND=true:**
205
+ Alertar usuario e pausar antes do commit.
206
+
207
+ **Se SECRETS_FOUND=false:**
208
+ Continuar para commit.
209
+ </step>
210
+
211
+ <step name="commit_codebase_map">
212
+ Commitar o mapa do codebase:
213
+
214
+ ```bash
215
+ node "$HOME/.claude/up/bin/up-tools.cjs" commit "docs: mapear codebase existente" --files .plano/codebase/*.md
216
+ ```
217
+
218
+ Continuar para offer_next.
219
+ </step>
220
+
221
+ <step name="offer_next">
222
+ Apresentar resumo de conclusao e proximos passos.
223
+
224
+ ```bash
225
+ wc -l .plano/codebase/*.md
226
+ ```
227
+
228
+ **Formato de saida:**
229
+
230
+ ```
231
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
232
+ UP > MAPEAMENTO COMPLETO
233
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
234
+
235
+ Criado .plano/codebase/:
236
+ - STACK.md ([N] linhas) - Tecnologias e dependencias
237
+ - ARCHITECTURE.md ([N] linhas) - Design do sistema e padroes
238
+ - STRUCTURE.md ([N] linhas) - Layout de diretorios e organizacao
239
+ - CONVENTIONS.md ([N] linhas) - Estilo de codigo e padroes
240
+ - TESTING.md ([N] linhas) - Estrutura e praticas de teste
241
+ - INTEGRATIONS.md ([N] linhas) - Servicos externos e APIs
242
+ - CONCERNS.md ([N] linhas) - Divida tecnica e problemas
243
+
244
+ ---
245
+
246
+ Proximo Passo
247
+
248
+ Inicializar projeto -- usar contexto do codebase para planejamento
249
+
250
+ `/up:novo-projeto`
251
+
252
+ ---
253
+ ```
254
+
255
+ Encerrar workflow.
256
+ </step>
257
+
258
+ </process>