up-cc 0.4.2 → 0.4.4

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.
@@ -21,6 +21,61 @@ Se o prompt contem um bloco `<files_to_read>`, voce DEVE usar a ferramenta `Read
21
21
  - Lidar com planejamento padrao e modo de fechamento de gaps
22
22
  - **Research inline:** Se o dominio for desconhecido, pesquisar usando WebFetch/Context7 DENTRO do processo de planejamento
23
23
  - **Self-check interno:** Apos criar PLAN.md, rodar checklist interno (tarefas especificas? dependencias identificadas? ondas atribuidas? must_haves derivados?)
24
+
25
+ **MODO SONNET-READY (quando `<sonnet_execution>true</sonnet_execution>` no prompt):**
26
+
27
+ O executor sera um modelo Sonnet (mais rapido, mais barato, mas segue instrucoes LITERALMENTE).
28
+ Sonnet NAO infere, NAO decide, NAO improvisa. Ele faz EXATAMENTE o que o plano diz.
29
+ Se o plano e vago, Sonnet entrega vago. Se o plano e preciso, Sonnet entrega preciso.
30
+
31
+ **Regras Sonnet-ready — CADA tarefa DEVE ter:**
32
+
33
+ 1. **Imports exatos** — nao dizer "importar biblioteca de validacao", dizer "import { z } from 'zod'"
34
+ 2. **Nomes de funcoes/componentes** — nao dizer "criar componente de lista", dizer "criar `TransactionList.tsx` com props `{ transactions: Transaction[], onDelete: (id: string) => void }`"
35
+ 3. **Schema/tipos definidos** — nao dizer "criar tipo do usuario", dizer:
36
+ ```typescript
37
+ interface User {
38
+ id: string;
39
+ email: string;
40
+ name: string;
41
+ role: 'admin' | 'user';
42
+ created_at: string;
43
+ }
44
+ ```
45
+ 4. **Endpoints com assinatura completa** — nao dizer "criar endpoint de login", dizer:
46
+ ```
47
+ POST /api/auth/login
48
+ Body: { email: string, password: string }
49
+ Response 200: { user: User, token: string }
50
+ Response 401: { error: "Invalid credentials" }
51
+ Validacao: zod schema z.object({ email: z.string().email(), password: z.string().min(8) })
52
+ ```
53
+ 5. **SQL/migrations literais** — nao dizer "criar tabela de transacoes", dizer:
54
+ ```sql
55
+ CREATE TABLE transactions (
56
+ id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
57
+ user_id UUID REFERENCES users(id) ON DELETE CASCADE,
58
+ amount DECIMAL(12,2) NOT NULL CHECK (amount >= 0),
59
+ description TEXT NOT NULL,
60
+ category TEXT NOT NULL,
61
+ date DATE NOT NULL DEFAULT CURRENT_DATE,
62
+ created_at TIMESTAMPTZ DEFAULT NOW()
63
+ );
64
+ CREATE INDEX idx_transactions_user_id ON transactions(user_id);
65
+ CREATE INDEX idx_transactions_date ON transactions(date);
66
+ ```
67
+ 6. **Logica de negocio explicita** — nao dizer "validar permissao", dizer "checar se `session.user.role === 'admin'`, se nao, retornar 403"
68
+ 7. **Conexoes explicitas** — nao dizer "conectar com o backend", dizer "o componente `TransactionList` deve chamar `fetch('/api/transactions', { headers: { Authorization: 'Bearer ' + token } })` no useEffect, tratar loading/error/empty states"
69
+
70
+ **Self-check Sonnet-ready (apos cada tarefa do plano):**
71
+ - [ ] A tarefa tem imports explicitados?
72
+ - [ ] A tarefa tem nomes de arquivos, funcoes, componentes, tipos?
73
+ - [ ] A tarefa tem schemas/tipos com campos e tipos definidos?
74
+ - [ ] A tarefa tem endpoints com request/response shapes?
75
+ - [ ] A tarefa tem logica de negocio descrita passo a passo?
76
+ - [ ] Um executor que NAO conhece o projeto consegue implementar SEM pensar?
77
+
78
+ Se qualquer check falha: reescrever a tarefa com mais detalhe antes de finalizar o plano.
24
79
  </role>
25
80
 
26
81
  <project_context>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "up-cc",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "Simplified spec-driven development for Claude Code, Gemini and OpenCode.",
5
5
  "bin": {
6
6
  "up-cc": "bin/install.js"
@@ -35,6 +35,27 @@ O usuario customiza uma vez e vale para todos os projetos criados com `/up:modo-
35
35
  - Linter: ESLint + Prettier
36
36
  - Git: branch main, commits diretos
37
37
 
38
+ ## Modelos por Papel
39
+
40
+ Configurar qual modelo de IA usar para cada tipo de trabalho.
41
+ Modelos disponiveis: opus, sonnet, haiku
42
+
43
+ | Papel | Modelo | Agentes |
44
+ |-------|--------|---------|
45
+ | planning | opus | arquiteto, product-analyst, system-designer, planejador, roteirista |
46
+ | execution | sonnet | executor, frontend-specialist, backend-specialist, database-specialist |
47
+ | verification | opus | verificador, code-reviewer, blind-validator, requirements-validator |
48
+ | detection | sonnet | visual-critic, exhaustive-tester, api-tester |
49
+ | research | sonnet | pesquisador-projeto, pesquisador-mercado, mapeador-codigo |
50
+ | quality | opus | qa-agent, security-reviewer, auditor-ux, auditor-performance |
51
+
52
+ Notas:
53
+ - Opus: raciocinio profundo, decisoes arquiteturais, verificacao critica. Mais lento, mais caro.
54
+ - Sonnet: execucao rapida, seguir instrucoes, volume de codigo. Mais rapido, mais barato.
55
+ - Haiku: tarefas simples. NAO recomendado para codigo de producao.
56
+ - Opus e Sonnet ambos suportam 1M de contexto.
57
+ - Se execution=sonnet, planos serao gerados com nivel extra de detalhe (Sonnet-ready).
58
+
38
59
  ## Nao usar
39
60
  - (liste aqui tecnologias que voce NAO quer em nenhum projeto)
40
61
  ```
@@ -38,6 +38,38 @@ Neste modo, TODOS os agentes devem:
38
38
  7. **Quality Gate:** Incluir clone-verifier como dimensao "Fidelidade" (20% do score).
39
39
  </core_principle>
40
40
 
41
+ <model_routing>
42
+ ## Roteamento de Modelos por Papel
43
+
44
+ **REGRA OBRIGATORIA:** Ao spawnar QUALQUER agente via Task() ou Agent(), incluir o parametro `model` baseado nesta tabela. Usar os valores de $MODEL_* extraidos do builder-defaults.md (Estagio 1.1).
45
+
46
+ | Papel | Variavel | Agentes | Default |
47
+ |-------|----------|---------|---------|
48
+ | **Planning** | $MODEL_PLANNING | up-arquiteto, up-product-analyst, up-system-designer, up-planejador, up-roteirista | opus |
49
+ | **Execution** | $MODEL_EXECUTION | up-executor, up-frontend-specialist, up-backend-specialist, up-database-specialist | sonnet |
50
+ | **Verification** | $MODEL_VERIFICATION | up-verificador, up-code-reviewer, up-blind-validator, up-requirements-validator | opus |
51
+ | **Detection** | $MODEL_DETECTION | up-visual-critic, up-exhaustive-tester, up-api-tester | sonnet |
52
+ | **Research** | $MODEL_RESEARCH | up-pesquisador-projeto, up-pesquisador-mercado, up-mapeador-codigo, up-sintetizador | sonnet |
53
+ | **Quality** | $MODEL_QUALITY | up-qa-agent, up-security-reviewer, up-auditor-ux, up-auditor-performance, up-auditor-modernidade, up-sintetizador-melhorias, up-consolidador-ideias, up-devops-agent, up-technical-writer | opus |
54
+
55
+ **Exemplo de aplicacao:**
56
+ ```python
57
+ # ANTES (sem model routing):
58
+ Task(subagent_type="up-executor", prompt="...")
59
+
60
+ # DEPOIS (com model routing):
61
+ Task(subagent_type="up-executor", model="$MODEL_EXECUTION", prompt="...")
62
+
63
+ # Equivale a (com defaults):
64
+ Task(subagent_type="up-executor", model="sonnet", prompt="...")
65
+ ```
66
+
67
+ **Ao spawnar qualquer agente, SEMPRE:**
68
+ 1. Identificar o papel do agente na tabela acima
69
+ 2. Usar a variavel $MODEL_* correspondente como parametro model
70
+ 3. Se a variavel nao foi definida (sem builder-defaults), usar o default da tabela
71
+ </model_routing>
72
+
41
73
  <process>
42
74
 
43
75
  ## Estagio 1: INTAKE (Interativo)
@@ -100,6 +132,24 @@ DEFAULTS_PATH="$HOME/.claude/up/builder-defaults.md"
100
132
 
101
133
  Ler `$DEFAULTS_PATH` se existir. Se nao existir, informar: "Sem builder-defaults.md. Usando inferencia inteligente para decisoes nao especificadas. Crie ~/.claude/up/builder-defaults.md para personalizar."
102
134
 
135
+ **Extrair configuracao de modelos:**
136
+
137
+ Se builder-defaults.md existe, procurar secao "## Modelos por Papel" e extrair mapeamento:
138
+ ```
139
+ $MODEL_PLANNING = modelo para planning (default: opus)
140
+ $MODEL_EXECUTION = modelo para execution (default: sonnet)
141
+ $MODEL_VERIFICATION = modelo para verification (default: opus)
142
+ $MODEL_DETECTION = modelo para detection (default: sonnet)
143
+ $MODEL_RESEARCH = modelo para research (default: sonnet)
144
+ $MODEL_QUALITY = modelo para quality (default: opus)
145
+ ```
146
+
147
+ Se secao nao existe: usar defaults acima (opus planeja, sonnet executa, opus verifica).
148
+
149
+ **IMPORTANTE — Sonnet-ready planning:**
150
+ Se `$MODEL_EXECUTION = sonnet`, setar flag `$SONNET_EXECUTION = true`.
151
+ Isso ativa nivel extra de detalhe nos planos (ver planejador Sonnet-ready mode).
152
+
103
153
  **Detectar modo automaticamente:**
104
154
 
105
155
  ```bash
@@ -220,13 +270,37 @@ Iniciando mapeamento do codebase...
220
270
 
221
271
  ## Estagio 2: ARQUITETURA (Autonomo)
222
272
 
223
- ### 2.1 Inicializar Projeto
273
+ ### 2.0 GATE OBRIGATORIO — Inicializar .plano/
274
+
275
+ **ESTE PASSO E OBRIGATORIO E NAO PODE SER PULADO.**
276
+ **EXECUTAR ESTES COMANDOS LITERALMENTE — NAO APENAS LER.**
224
277
 
225
278
  ```bash
226
- mkdir -p .plano .plano/captures
279
+ # GATE 1: Criar .plano/ se nao existe
280
+ mkdir -p .plano .plano/captures .plano/fases .plano/issues-carryover
281
+
282
+ # GATE 2: Verificar que foi criado
283
+ ls -d .plano/ || { echo "ERRO CRITICO: .plano/ nao foi criado"; exit 1; }
284
+
285
+ # GATE 3: Registrar inicio do builder
286
+ echo "builder_started: $(date -u +%Y-%m-%dT%H:%M:%SZ)" > .plano/LOCK.md
287
+ echo "mode: ${MODE}" >> .plano/LOCK.md
288
+ echo "stage: architecture" >> .plano/LOCK.md
289
+ echo "status: running" >> .plano/LOCK.md
290
+
291
+ # GATE 4: Init git se necessario
227
292
  git init 2>/dev/null
228
293
  ```
229
294
 
295
+ **VERIFICACAO — EXECUTAR OBRIGATORIAMENTE:**
296
+ ```bash
297
+ [ -d ".plano" ] && echo "GATE OK: .plano/ existe" || echo "GATE FALHOU: .plano/ nao existe — PARAR"
298
+ ```
299
+
300
+ **Se GATE FALHOU:** NAO continuar. Algo esta errado com permissoes ou disco. Informar usuario.
301
+
302
+ ### 2.1 Inicializar Projeto (Continuacao)
303
+
230
304
  **Iniciar Dashboard automaticamente:**
231
305
  ```bash
232
306
  node "$HOME/.claude/up/dashboard/server.js" 4040 "$(pwd)/.plano" &
@@ -480,7 +554,7 @@ Escrever .plano/PRODUCT-ANALYSIS.md
480
554
  Commit apos escrever.
481
555
  Retornar: ## PRODUCT ANALYSIS COMPLETE
482
556
  </output>
483
- ", subagent_type="up-product-analyst", description="Analisar produto e mercado")
557
+ ", subagent_type="up-product-analyst", model="$MODEL_PLANNING", description="Analisar produto e mercado")
484
558
  ```
485
559
 
486
560
  Verificar retorno `## PRODUCT ANALYSIS COMPLETE`. Se falhou: registrar e continuar (System Designer usara blueprints como fallback).
@@ -529,7 +603,7 @@ Escrever .plano/SYSTEM-DESIGN.md
529
603
  Commit apos escrever.
530
604
  Retornar: ## SYSTEM DESIGN COMPLETE
531
605
  </output>
532
- ", subagent_type="up-system-designer", description="Projetar sistema completo")
606
+ ", subagent_type="up-system-designer", model="$MODEL_PLANNING", description="Projetar sistema completo")
533
607
  ```
534
608
 
535
609
  ```
@@ -592,7 +666,7 @@ Se brownfield:
592
666
  - parallelization=true
593
667
  - Commit todos arquivos ao final
594
668
  </constraints>
595
- ", subagent_type="up-arquiteto", description="Estruturar projeto executavel")
669
+ ", subagent_type="up-arquiteto", model="$MODEL_PLANNING", description="Estruturar projeto executavel")
596
670
  ```
597
671
 
598
672
  ### 2.7 Validar Requisitos (Quality Gate de Planejamento)
@@ -606,6 +680,7 @@ Validando requisitos (13 checks)...
606
680
  ```
607
681
  Task(
608
682
  subagent_type="up-requirements-validator",
683
+ model="$MODEL_VERIFICATION",
609
684
  prompt="
610
685
  <objective>
611
686
  Validar REQUIREMENTS.md com 13 checks automaticos.
@@ -708,6 +783,28 @@ node "$HOME/.claude/up/bin/up-tools.cjs" commit "docs: adicionar persistência d
708
783
 
709
784
  ## Estagio 3: BUILD (Autonomo — Loop de Fases)
710
785
 
786
+ ### GATE OBRIGATORIO — Verificar Artefatos do Estagio 2
787
+
788
+ **ANTES de iniciar o build, verificar que a arquitetura produziu os artefatos obrigatorios.**
789
+ **EXECUTAR ESTES COMANDOS LITERALMENTE.**
790
+
791
+ ```bash
792
+ echo "=== GATE: Verificando artefatos do Estagio 2 ==="
793
+ [ -f ".plano/PROJECT.md" ] && echo "OK: PROJECT.md" || echo "FALTANDO: PROJECT.md"
794
+ [ -f ".plano/ROADMAP.md" ] && echo "OK: ROADMAP.md" || echo "FALTANDO: ROADMAP.md"
795
+ [ -f ".plano/REQUIREMENTS.md" ] && echo "OK: REQUIREMENTS.md" || echo "FALTANDO: REQUIREMENTS.md"
796
+ [ -f ".plano/BRIEFING.md" ] && echo "OK: BRIEFING.md" || echo "FALTANDO: BRIEFING.md"
797
+ [ -f ".plano/SYSTEM-DESIGN.md" ] && echo "OK: SYSTEM-DESIGN.md" || echo "FALTANDO: SYSTEM-DESIGN.md"
798
+ ```
799
+
800
+ **Se QUALQUER arquivo FALTANDO:**
801
+ - NAO continuar para o build
802
+ - Identificar qual agente falhou (Product Analyst? System Designer? Architect?)
803
+ - Re-executar o agente que falhou
804
+ - Repetir gate ate todos existirem
805
+
806
+ **Se todos OK:** Continuar para 3.0.
807
+
711
808
  ### 3.0 Carregar Roadmap e Inicializar Lock
712
809
 
713
810
  ```bash
@@ -768,13 +865,14 @@ Para cada fase no ROADMAP (da primeira a ultima):
768
865
 
769
866
  #### 3.1.1 Planejar Fase
770
867
 
771
- Spawnar up-planejador com flag de modo builder:
868
+ Spawnar up-planejador com flag de modo builder e modelo de planning:
772
869
 
773
870
  ```
774
871
  Task(prompt="
775
872
  <planning_context>
776
873
  **Fase:** {phase_number}
777
874
  **Modo:** builder (autonomo -- NAO use AskUserQuestion)
875
+ <sonnet_execution>{$SONNET_EXECUTION}</sonnet_execution>
778
876
 
779
877
  <files_to_read>
780
878
  - .plano/STATE.md (Estado do Projeto)
@@ -816,15 +914,35 @@ Se algo falhar, corrija antes de retornar.
816
914
  Escrever PLAN.md em: .plano/fases/{phase_dir}/
817
915
  Retornar: ## PLANNING COMPLETE com resumo dos planos
818
916
  </output>
819
- ", subagent_type="up-planejador", description="Planejar Fase {phase_number}")
917
+ ", subagent_type="up-planejador", model="$MODEL_PLANNING", description="Planejar Fase {phase_number}")
820
918
  ```
821
919
 
822
920
  Verificar retorno:
823
- - `## PLANNING COMPLETE` → prosseguir para execucao
921
+ - `## PLANNING COMPLETE` → prosseguir para quality gate do plano
824
922
  - `## PLANNING INCONCLUSIVE` → tentar novamente com mais contexto (max 2 tentativas)
825
923
 
924
+ **Quality Gate do Plano (se $SONNET_EXECUTION = true):**
925
+
926
+ Antes de passar pro executor, verificar qualidade do plano rapidamente:
927
+ ```bash
928
+ # Contar tarefas com detalhamento insuficiente
929
+ for plan in .plano/fases/{phase_dir}/*-PLAN.md; do
930
+ # Checar se tem imports/schemas/endpoints explicitados
931
+ DETAIL_SCORE=0
932
+ grep -c "import \|from '" "$plan" > /dev/null && DETAIL_SCORE=$((DETAIL_SCORE+1))
933
+ grep -c "interface \|type \|schema\|z\.\|zod" "$plan" > /dev/null && DETAIL_SCORE=$((DETAIL_SCORE+1))
934
+ grep -c "POST \|GET \|PUT \|DELETE \|endpoint\|route" "$plan" > /dev/null && DETAIL_SCORE=$((DETAIL_SCORE+1))
935
+ grep -c "CREATE TABLE\|migration\|ALTER" "$plan" > /dev/null && DETAIL_SCORE=$((DETAIL_SCORE+1))
936
+ echo "$plan: detail_score=$DETAIL_SCORE"
937
+ done
938
+ ```
939
+
940
+ Se algum plano tem detail_score < 2 e a fase tem mais de 3 tarefas:
941
+ - Re-spawnar planejador com instrucao extra: "Plano insuficientemente detalhado para executor Sonnet. Reescrever com imports, tipos, schemas e endpoints explicitos. Ver self-check Sonnet-ready."
942
+ - Max 1 re-tentativa de enriquecimento
943
+
826
944
  ```
827
- Fase {X}: Planejada — {N} planos em {M} waves
945
+ Fase {X}: Planejada — {N} planos em {M} waves [Sonnet-ready: {score}]
828
946
  ```
829
947
 
830
948
  #### 3.1.2 Executar Fase (com Specialist Routing)
@@ -868,6 +986,7 @@ Para cada wave, spawnar agentes especializados em paralelo (se parallelization=t
868
986
  ```
869
987
  Task(
870
988
  subagent_type="{up-frontend-specialist | up-backend-specialist | up-database-specialist | up-executor}",
989
+ model="$MODEL_EXECUTION",
871
990
  prompt="
872
991
  <objective>
873
992
  Executar plano {plan_number} da fase {phase_number}-{phase_name}.
@@ -930,6 +1049,7 @@ Spawnar code reviewer:
930
1049
  ```
931
1050
  Task(
932
1051
  subagent_type="up-code-reviewer",
1052
+ model="$MODEL_VERIFICATION",
933
1053
  prompt="
934
1054
  <objective>
935
1055
  Revisar codigo da fase {phase_number} contra production-requirements e padroes de qualidade.
@@ -985,7 +1105,8 @@ Modo builder. NAO use AskUserQuestion.
985
1105
  - Criar VERIFICATION.md
986
1106
  </builder_mode>
987
1107
  ",
988
- subagent_type="up-verificador"
1108
+ subagent_type="up-verificador",
1109
+ model="$MODEL_VERIFICATION"
989
1110
  )
990
1111
  ```
991
1112
 
@@ -1481,6 +1602,7 @@ Relatorio em .plano/ideias/RELATORIO.md
1481
1602
  ```
1482
1603
  Task(
1483
1604
  subagent_type="up-blind-validator",
1605
+ model="$MODEL_VERIFICATION",
1484
1606
  prompt="
1485
1607
  <objective>
1486
1608
  Validar requisitos SEM ler codigo. Apenas navegar o app via Playwright e curl.
@@ -1632,6 +1754,7 @@ Spawnar devops agent:
1632
1754
  ```
1633
1755
  Task(
1634
1756
  subagent_type="up-devops-agent",
1757
+ model="$MODEL_QUALITY",
1635
1758
  prompt="
1636
1759
  <objective>
1637
1760
  Gerar artefatos de producao para o projeto: Dockerfile, docker-compose, CI/CD, .env.example, seed data, scripts.
@@ -1670,6 +1793,7 @@ Spawnar technical writer:
1670
1793
  ```
1671
1794
  Task(
1672
1795
  subagent_type="up-technical-writer",
1796
+ model="$MODEL_QUALITY",
1673
1797
  prompt="
1674
1798
  <objective>
1675
1799
  Gerar documentacao completa: README.md, API docs, CHANGELOG.md, setup guide.
@@ -1711,6 +1835,7 @@ Spawnar security reviewer:
1711
1835
  ```
1712
1836
  Task(
1713
1837
  subagent_type="up-security-reviewer",
1838
+ model="$MODEL_QUALITY",
1714
1839
  prompt="
1715
1840
  <objective>
1716
1841
  Auditar codigo para vulnerabilidades de seguranca (OWASP Top 10, auth, injection, data exposure).
@@ -1748,6 +1873,7 @@ Spawnar QA agent:
1748
1873
  ```
1749
1874
  Task(
1750
1875
  subagent_type="up-qa-agent",
1876
+ model="$MODEL_QUALITY",
1751
1877
  prompt="
1752
1878
  <objective>
1753
1879
  Identificar gaps de cobertura de testes, escrever testes que faltam, executar todos.