up-cc 0.4.3 → 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.3",
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
@@ -504,7 +554,7 @@ Escrever .plano/PRODUCT-ANALYSIS.md
504
554
  Commit apos escrever.
505
555
  Retornar: ## PRODUCT ANALYSIS COMPLETE
506
556
  </output>
507
- ", subagent_type="up-product-analyst", description="Analisar produto e mercado")
557
+ ", subagent_type="up-product-analyst", model="$MODEL_PLANNING", description="Analisar produto e mercado")
508
558
  ```
509
559
 
510
560
  Verificar retorno `## PRODUCT ANALYSIS COMPLETE`. Se falhou: registrar e continuar (System Designer usara blueprints como fallback).
@@ -553,7 +603,7 @@ Escrever .plano/SYSTEM-DESIGN.md
553
603
  Commit apos escrever.
554
604
  Retornar: ## SYSTEM DESIGN COMPLETE
555
605
  </output>
556
- ", subagent_type="up-system-designer", description="Projetar sistema completo")
606
+ ", subagent_type="up-system-designer", model="$MODEL_PLANNING", description="Projetar sistema completo")
557
607
  ```
558
608
 
559
609
  ```
@@ -616,7 +666,7 @@ Se brownfield:
616
666
  - parallelization=true
617
667
  - Commit todos arquivos ao final
618
668
  </constraints>
619
- ", subagent_type="up-arquiteto", description="Estruturar projeto executavel")
669
+ ", subagent_type="up-arquiteto", model="$MODEL_PLANNING", description="Estruturar projeto executavel")
620
670
  ```
621
671
 
622
672
  ### 2.7 Validar Requisitos (Quality Gate de Planejamento)
@@ -630,6 +680,7 @@ Validando requisitos (13 checks)...
630
680
  ```
631
681
  Task(
632
682
  subagent_type="up-requirements-validator",
683
+ model="$MODEL_VERIFICATION",
633
684
  prompt="
634
685
  <objective>
635
686
  Validar REQUIREMENTS.md com 13 checks automaticos.
@@ -814,13 +865,14 @@ Para cada fase no ROADMAP (da primeira a ultima):
814
865
 
815
866
  #### 3.1.1 Planejar Fase
816
867
 
817
- Spawnar up-planejador com flag de modo builder:
868
+ Spawnar up-planejador com flag de modo builder e modelo de planning:
818
869
 
819
870
  ```
820
871
  Task(prompt="
821
872
  <planning_context>
822
873
  **Fase:** {phase_number}
823
874
  **Modo:** builder (autonomo -- NAO use AskUserQuestion)
875
+ <sonnet_execution>{$SONNET_EXECUTION}</sonnet_execution>
824
876
 
825
877
  <files_to_read>
826
878
  - .plano/STATE.md (Estado do Projeto)
@@ -862,15 +914,35 @@ Se algo falhar, corrija antes de retornar.
862
914
  Escrever PLAN.md em: .plano/fases/{phase_dir}/
863
915
  Retornar: ## PLANNING COMPLETE com resumo dos planos
864
916
  </output>
865
- ", subagent_type="up-planejador", description="Planejar Fase {phase_number}")
917
+ ", subagent_type="up-planejador", model="$MODEL_PLANNING", description="Planejar Fase {phase_number}")
866
918
  ```
867
919
 
868
920
  Verificar retorno:
869
- - `## PLANNING COMPLETE` → prosseguir para execucao
921
+ - `## PLANNING COMPLETE` → prosseguir para quality gate do plano
870
922
  - `## PLANNING INCONCLUSIVE` → tentar novamente com mais contexto (max 2 tentativas)
871
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
+
872
944
  ```
873
- Fase {X}: Planejada — {N} planos em {M} waves
945
+ Fase {X}: Planejada — {N} planos em {M} waves [Sonnet-ready: {score}]
874
946
  ```
875
947
 
876
948
  #### 3.1.2 Executar Fase (com Specialist Routing)
@@ -914,6 +986,7 @@ Para cada wave, spawnar agentes especializados em paralelo (se parallelization=t
914
986
  ```
915
987
  Task(
916
988
  subagent_type="{up-frontend-specialist | up-backend-specialist | up-database-specialist | up-executor}",
989
+ model="$MODEL_EXECUTION",
917
990
  prompt="
918
991
  <objective>
919
992
  Executar plano {plan_number} da fase {phase_number}-{phase_name}.
@@ -976,6 +1049,7 @@ Spawnar code reviewer:
976
1049
  ```
977
1050
  Task(
978
1051
  subagent_type="up-code-reviewer",
1052
+ model="$MODEL_VERIFICATION",
979
1053
  prompt="
980
1054
  <objective>
981
1055
  Revisar codigo da fase {phase_number} contra production-requirements e padroes de qualidade.
@@ -1031,7 +1105,8 @@ Modo builder. NAO use AskUserQuestion.
1031
1105
  - Criar VERIFICATION.md
1032
1106
  </builder_mode>
1033
1107
  ",
1034
- subagent_type="up-verificador"
1108
+ subagent_type="up-verificador",
1109
+ model="$MODEL_VERIFICATION"
1035
1110
  )
1036
1111
  ```
1037
1112
 
@@ -1527,6 +1602,7 @@ Relatorio em .plano/ideias/RELATORIO.md
1527
1602
  ```
1528
1603
  Task(
1529
1604
  subagent_type="up-blind-validator",
1605
+ model="$MODEL_VERIFICATION",
1530
1606
  prompt="
1531
1607
  <objective>
1532
1608
  Validar requisitos SEM ler codigo. Apenas navegar o app via Playwright e curl.
@@ -1678,6 +1754,7 @@ Spawnar devops agent:
1678
1754
  ```
1679
1755
  Task(
1680
1756
  subagent_type="up-devops-agent",
1757
+ model="$MODEL_QUALITY",
1681
1758
  prompt="
1682
1759
  <objective>
1683
1760
  Gerar artefatos de producao para o projeto: Dockerfile, docker-compose, CI/CD, .env.example, seed data, scripts.
@@ -1716,6 +1793,7 @@ Spawnar technical writer:
1716
1793
  ```
1717
1794
  Task(
1718
1795
  subagent_type="up-technical-writer",
1796
+ model="$MODEL_QUALITY",
1719
1797
  prompt="
1720
1798
  <objective>
1721
1799
  Gerar documentacao completa: README.md, API docs, CHANGELOG.md, setup guide.
@@ -1757,6 +1835,7 @@ Spawnar security reviewer:
1757
1835
  ```
1758
1836
  Task(
1759
1837
  subagent_type="up-security-reviewer",
1838
+ model="$MODEL_QUALITY",
1760
1839
  prompt="
1761
1840
  <objective>
1762
1841
  Auditar codigo para vulnerabilidades de seguranca (OWASP Top 10, auth, injection, data exposure).
@@ -1794,6 +1873,7 @@ Spawnar QA agent:
1794
1873
  ```
1795
1874
  Task(
1796
1875
  subagent_type="up-qa-agent",
1876
+ model="$MODEL_QUALITY",
1797
1877
  prompt="
1798
1878
  <objective>
1799
1879
  Identificar gaps de cobertura de testes, escrever testes que faltam, executar todos.