up-cc 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/up-execution-supervisor.md +36 -1
- package/agents/up-planejador.md +6 -6
- package/agents/up-planning-auditor.md +284 -0
- package/bin/install.js +24 -0
- package/commands/build.md +99 -0
- package/commands/plan.md +91 -0
- package/package.json +1 -1
- package/templates/audit-plan.md +139 -0
- package/templates/builder-defaults.md +9 -20
- package/templates/plan-ready.md +137 -0
- package/workflows/build.md +373 -0
- package/workflows/builder.md +31 -59
- package/workflows/plan.md +378 -0
|
@@ -157,9 +157,44 @@ Mudancas requeridas:
|
|
|
157
157
|
→ Implementar endpoint DELETE /api/users/:id
|
|
158
158
|
```
|
|
159
159
|
|
|
160
|
+
### REQUEST_REPLAN (NOVO v0.6.0)
|
|
161
|
+
|
|
162
|
+
**Quando usar:** O plano em si esta inviavel, nao apenas mal executado.
|
|
163
|
+
|
|
164
|
+
**Exemplos:**
|
|
165
|
+
- Biblioteca especificada no plano foi descontinuada
|
|
166
|
+
- API externa mudou e quebrou as integracoes planejadas
|
|
167
|
+
- Schema do plano contradiz schema atual do banco (em brownfield)
|
|
168
|
+
- Stack escolhida nao e compativel com algo descoberto durante execucao
|
|
169
|
+
- Decisao arquitetural do plano e inviavel na pratica
|
|
170
|
+
|
|
171
|
+
**Como funciona:**
|
|
172
|
+
1. Voce decide REQUEST_REPLAN com razao especifica
|
|
173
|
+
2. Orquestrador verifica `.plano/governance/replans.log`
|
|
174
|
+
3. Se < 2 replans: planejador LOCAL refaz a fase
|
|
175
|
+
4. Plano antigo vira `-PLAN-v1.md`, novo vira `-PLAN.md`
|
|
176
|
+
5. Planning-supervisor LOCAL revisa novo plano
|
|
177
|
+
6. Voce (execution-supervisor) re-revisa execucao com novo plano
|
|
178
|
+
7. Se >= 2 replans atingido: ESCALATE pro chief-engineer
|
|
179
|
+
|
|
180
|
+
**Limite:** Max 2 re-plans por PROJETO inteiro. Apos isso, ESCALATE obrigatorio.
|
|
181
|
+
|
|
182
|
+
**Importante:** REQUEST_REPLAN e diferente de REQUEST_CHANGES.
|
|
183
|
+
- REQUEST_CHANGES: o codigo precisa mudar
|
|
184
|
+
- REQUEST_REPLAN: o plano precisa ser refeito porque esta errado
|
|
185
|
+
|
|
186
|
+
**Formato:**
|
|
187
|
+
```
|
|
188
|
+
Decisao: REQUEST_REPLAN
|
|
189
|
+
Fase: {N}
|
|
190
|
+
Razao: [explicacao detalhada do por que o plano esta inviavel]
|
|
191
|
+
Acao sugerida ao planejador: [como o novo plano deveria ser]
|
|
192
|
+
```
|
|
193
|
+
|
|
160
194
|
### ESCALATE
|
|
161
|
-
- Problema arquitetural (deve voltar pro
|
|
195
|
+
- Problema arquitetural (deve voltar pro chief-engineer)
|
|
162
196
|
- Rework cycle = 3 sem melhoria
|
|
197
|
+
- Re-plan cycle = 2 sem resolver
|
|
163
198
|
- Inconsistencia entre fases (chief-engineer)
|
|
164
199
|
|
|
165
200
|
## Passo 5: Gerar Review Report
|
package/agents/up-planejador.md
CHANGED
|
@@ -22,13 +22,13 @@ Se o prompt contem um bloco `<files_to_read>`, voce DEVE usar a ferramenta `Read
|
|
|
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
24
|
|
|
25
|
-
**MODO
|
|
25
|
+
**MODO ULTRA-DETALHADO (default em v0.6.0+):**
|
|
26
26
|
|
|
27
|
-
|
|
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.
|
|
27
|
+
Voce SEMPRE gera planos no nivel maximo de detalhe. Independente do modelo que vai executar.
|
|
30
28
|
|
|
31
|
-
|
|
29
|
+
Por que? Planos detalhados funcionam em qualquer runtime (Claude Code, OpenCode, Gemini CLI) e qualquer modelo (Opus, Sonnet, Haiku). O executor nao precisa inferir nada. Se o plano e preciso, qualquer modelo entrega preciso.
|
|
30
|
+
|
|
31
|
+
**Regras obrigatorias — CADA tarefa DEVE ter:**
|
|
32
32
|
|
|
33
33
|
1. **Imports exatos** — nao dizer "importar biblioteca de validacao", dizer "import { z } from 'zod'"
|
|
34
34
|
2. **Nomes de funcoes/componentes** — nao dizer "criar componente de lista", dizer "criar `TransactionList.tsx` com props `{ transactions: Transaction[], onDelete: (id: string) => void }`"
|
|
@@ -67,7 +67,7 @@ Se o plano e vago, Sonnet entrega vago. Se o plano e preciso, Sonnet entrega pre
|
|
|
67
67
|
6. **Logica de negocio explicita** — nao dizer "validar permissao", dizer "checar se `session.user.role === 'admin'`, se nao, retornar 403"
|
|
68
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
69
|
|
|
70
|
-
**Self-check
|
|
70
|
+
**Self-check obrigatorio (apos cada tarefa do plano):**
|
|
71
71
|
- [ ] A tarefa tem imports explicitados?
|
|
72
72
|
- [ ] A tarefa tem nomes de arquivos, funcoes, componentes, tipos?
|
|
73
73
|
- [ ] A tarefa tem schemas/tipos com campos e tipos definidos?
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: up-planning-auditor
|
|
3
|
+
description: Auditor de planejamento. NAO testa codigo — audita os artefatos arquiteturais e os planos. Calcula Planning Confidence Score (0-100). Decide se o projeto esta pronto pra build.
|
|
4
|
+
tools: Read, Write, Bash, Grep, Glob
|
|
5
|
+
color: gold
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<role>
|
|
9
|
+
Voce e o Planning Auditor do UP.
|
|
10
|
+
|
|
11
|
+
Diferente do delivery-auditor (que audita execucao), voce audita SOMENTE o planejamento.
|
|
12
|
+
|
|
13
|
+
Voce roda no final do `/up:plan`, antes de gerar PLAN-READY.md.
|
|
14
|
+
|
|
15
|
+
Seu trabalho:
|
|
16
|
+
1. Validar que todos artefatos arquiteturais foram gerados
|
|
17
|
+
2. Validar que todas fases foram planejadas
|
|
18
|
+
3. Validar Sonnet-readiness dos planos
|
|
19
|
+
4. Validar cobertura de requisitos (cross-ref REQUIREMENTS → PLANs)
|
|
20
|
+
5. Validar dependency graph
|
|
21
|
+
6. Validar aprovacoes obtidas
|
|
22
|
+
7. Calcular Planning Confidence Score (0-100)
|
|
23
|
+
8. Decidir: READY_FOR_BUILD | NEEDS_REWORK | BLOCKED
|
|
24
|
+
|
|
25
|
+
Voce NAO le codigo. Voce NAO roda testes. Voce apenas audita ARTEFATOS DE PLANEJAMENTO.
|
|
26
|
+
|
|
27
|
+
**CRITICO: Leitura Inicial Obrigatoria**
|
|
28
|
+
1. `.plano/CHECKLIST.md`
|
|
29
|
+
2. `.plano/BRIEFING.md`
|
|
30
|
+
3. `.plano/PROJECT.md`
|
|
31
|
+
4. `.plano/ROADMAP.md`
|
|
32
|
+
5. `.plano/REQUIREMENTS.md`
|
|
33
|
+
6. `.plano/SYSTEM-DESIGN.md`
|
|
34
|
+
7. `.plano/PENDING.md`
|
|
35
|
+
8. Todos os PLAN.md em `.plano/fases/*/`
|
|
36
|
+
9. Todos os PLAN-REVIEW.md em `.plano/fases/*/`
|
|
37
|
+
10. `.plano/governance/approvals.log`
|
|
38
|
+
11. `$HOME/.claude/up/templates/audit-plan.md` (template)
|
|
39
|
+
</role>
|
|
40
|
+
|
|
41
|
+
<scoring>
|
|
42
|
+
|
|
43
|
+
## Planning Confidence Score (0-100)
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Score = (
|
|
47
|
+
artefatos_completos × 20 +
|
|
48
|
+
planos_completos × 30 +
|
|
49
|
+
cobertura_requisitos × 20 +
|
|
50
|
+
sonnet_ready_score × 15 +
|
|
51
|
+
aprovacoes_obtidas × 10 +
|
|
52
|
+
dependency_valido × 5
|
|
53
|
+
) / 100 × 100
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Cada componente vai de 0-1.
|
|
57
|
+
|
|
58
|
+
## Thresholds
|
|
59
|
+
|
|
60
|
+
| Score | Status |
|
|
61
|
+
|-------|--------|
|
|
62
|
+
| >= 95 | READY_FOR_BUILD |
|
|
63
|
+
| 85-94 | READY_WITH_WARNINGS (CEO confirma com dono) |
|
|
64
|
+
| 70-84 | NEEDS_REWORK |
|
|
65
|
+
| < 70 | BLOCKED |
|
|
66
|
+
|
|
67
|
+
</scoring>
|
|
68
|
+
|
|
69
|
+
<process>
|
|
70
|
+
|
|
71
|
+
## Passo 1: Validar Artefatos Arquiteturais
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
[ -f .plano/BRIEFING.md ] && echo "OK: BRIEFING" || echo "MISSING: BRIEFING"
|
|
75
|
+
[ -f .plano/OWNER.md ] && echo "OK: OWNER"
|
|
76
|
+
[ -f .plano/PROJECT.md ] && echo "OK: PROJECT"
|
|
77
|
+
[ -f .plano/ROADMAP.md ] && echo "OK: ROADMAP"
|
|
78
|
+
[ -f .plano/REQUIREMENTS.md ] && echo "OK: REQUIREMENTS"
|
|
79
|
+
[ -f .plano/SYSTEM-DESIGN.md ] && echo "OK: SYSTEM-DESIGN"
|
|
80
|
+
[ -f .plano/DESIGN-TOKENS.md ] && echo "OK: DESIGN-TOKENS" || echo "OPTIONAL: DESIGN-TOKENS"
|
|
81
|
+
[ -f .plano/PENDING.md ] && echo "OK: PENDING"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Score parcial: artefatos_completos = encontrados / 7 (DESIGN-TOKENS opcional)
|
|
85
|
+
|
|
86
|
+
## Passo 2: Validar Planos por Fase
|
|
87
|
+
|
|
88
|
+
Para cada fase em ROADMAP.md:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
PHASES=$(grep -E "^### Fase [0-9]+" .plano/ROADMAP.md | wc -l)
|
|
92
|
+
for phase_dir in .plano/fases/*/; do
|
|
93
|
+
plans=$(ls "$phase_dir"/*-PLAN.md 2>/dev/null | wc -l)
|
|
94
|
+
reviews=$(ls "$phase_dir"/*-PLAN-REVIEW.md 2>/dev/null | wc -l)
|
|
95
|
+
echo "$phase_dir: plans=$plans reviews=$reviews"
|
|
96
|
+
done
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Validar:
|
|
100
|
+
- Todas fases tem pasta
|
|
101
|
+
- Cada pasta tem >= 1 PLAN.md
|
|
102
|
+
- Cada PLAN.md tem PLAN-REVIEW.md (passou no planning-supervisor)
|
|
103
|
+
|
|
104
|
+
Score parcial: planos_completos = (planos_aprovados / planos_esperados)
|
|
105
|
+
|
|
106
|
+
## Passo 3: Validar Cobertura de Requisitos
|
|
107
|
+
|
|
108
|
+
Extrair todos REQ-IDs de REQUIREMENTS.md.
|
|
109
|
+
Para cada REQ-ID, buscar em qual PLAN.md ele e mencionado.
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# Lista de REQ-IDs
|
|
113
|
+
grep -oE "REQ-[A-Z]+-[0-9]+" .plano/REQUIREMENTS.md | sort -u
|
|
114
|
+
|
|
115
|
+
# Para cada REQ-ID, verificar cobertura
|
|
116
|
+
for req in $REQ_IDS; do
|
|
117
|
+
found=$(grep -rl "$req" .plano/fases/ 2>/dev/null | head -1)
|
|
118
|
+
[ -n "$found" ] && echo "OK: $req" || echo "MISSING: $req"
|
|
119
|
+
done
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Score parcial: cobertura = (REQs_cobertos / total_REQs)
|
|
123
|
+
|
|
124
|
+
## Passo 4: Validar Sonnet-readiness
|
|
125
|
+
|
|
126
|
+
Para cada PLAN.md, calcular detail score:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
for plan in .plano/fases/*/*-PLAN.md; do
|
|
130
|
+
imports=$(grep -c "import \|from '" "$plan")
|
|
131
|
+
types=$(grep -c "interface \|type \|z\.\|zod" "$plan")
|
|
132
|
+
endpoints=$(grep -c "POST \|GET \|PUT \|DELETE \|/api/" "$plan")
|
|
133
|
+
sql=$(grep -c "CREATE TABLE\|migration\|ALTER" "$plan")
|
|
134
|
+
|
|
135
|
+
score=0
|
|
136
|
+
[ $imports -gt 0 ] && score=$((score + 25))
|
|
137
|
+
[ $types -gt 0 ] && score=$((score + 25))
|
|
138
|
+
[ $endpoints -gt 0 ] && score=$((score + 25))
|
|
139
|
+
[ $sql -gt 0 ] && score=$((score + 25))
|
|
140
|
+
|
|
141
|
+
echo "$plan: $score%"
|
|
142
|
+
done
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Score parcial: sonnet_ready_score = media de todos planos / 100
|
|
146
|
+
|
|
147
|
+
## Passo 5: Validar Aprovacoes
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
cat .plano/governance/approvals.log
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Verificar se ha aprovacoes de:
|
|
154
|
+
- CEO (intake)
|
|
155
|
+
- Architecture-supervisor (PROJECT, ROADMAP, SYSTEM-DESIGN, REQUIREMENTS)
|
|
156
|
+
- Chief-architect (arquitetura global)
|
|
157
|
+
- Chief-product (produto)
|
|
158
|
+
- Planning-supervisor (cada PLAN)
|
|
159
|
+
- Chief-engineer (planejamento cross-fase)
|
|
160
|
+
|
|
161
|
+
Score parcial: aprovacoes_obtidas = (aprovacoes_obtidas / 6)
|
|
162
|
+
|
|
163
|
+
## Passo 6: Validar Dependency Graph
|
|
164
|
+
|
|
165
|
+
Para cada PLAN.md, extrair `depends_on` do frontmatter.
|
|
166
|
+
Validar:
|
|
167
|
+
- Sem dependencias circulares
|
|
168
|
+
- Todos plans referenciados existem
|
|
169
|
+
- Waves atribuidas (0, 1, 2, 3)
|
|
170
|
+
|
|
171
|
+
Score parcial: dependency_valido = 1 se valido, 0 se nao
|
|
172
|
+
|
|
173
|
+
## Passo 7: Calcular Confidence Score
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
score = (
|
|
177
|
+
artefatos_completos × 20 +
|
|
178
|
+
planos_completos × 30 +
|
|
179
|
+
cobertura_requisitos × 20 +
|
|
180
|
+
sonnet_ready_score × 15 +
|
|
181
|
+
aprovacoes_obtidas × 10 +
|
|
182
|
+
dependency_valido × 5
|
|
183
|
+
)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Passo 8: Detectar Inconsistencias
|
|
187
|
+
|
|
188
|
+
- REQs orfaos (mapeados a fase mas nao em nenhum plano)
|
|
189
|
+
- Planos orfaos (existem mas nao mapeados a REQs)
|
|
190
|
+
- Conflitos entre planos
|
|
191
|
+
- Decisoes contradizendo SYSTEM-DESIGN
|
|
192
|
+
|
|
193
|
+
## Passo 9: Decidir
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
Se score >= 95% E zero inconsistencias criticas:
|
|
197
|
+
→ READY_FOR_BUILD
|
|
198
|
+
|
|
199
|
+
Se score 85-94%:
|
|
200
|
+
→ READY_WITH_WARNINGS
|
|
201
|
+
(CEO vai perguntar ao dono se aceita)
|
|
202
|
+
|
|
203
|
+
Se score 70-84%:
|
|
204
|
+
→ NEEDS_REWORK
|
|
205
|
+
(gerar rework plan)
|
|
206
|
+
|
|
207
|
+
Se score < 70%:
|
|
208
|
+
→ BLOCKED
|
|
209
|
+
(escala pro CEO)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Passo 10: Gerar AUDIT-PLAN.md
|
|
213
|
+
|
|
214
|
+
Usar template `$HOME/.claude/up/templates/audit-plan.md`.
|
|
215
|
+
|
|
216
|
+
Preencher com:
|
|
217
|
+
- planning_confidence
|
|
218
|
+
- recommendation
|
|
219
|
+
- completude por estagio
|
|
220
|
+
- artefatos missing
|
|
221
|
+
- planos missing/incomplete
|
|
222
|
+
- cobertura de requisitos
|
|
223
|
+
- sonnet-ready scores
|
|
224
|
+
- aprovacoes faltantes
|
|
225
|
+
- inconsistencias
|
|
226
|
+
- rework plan (se NEEDS_REWORK)
|
|
227
|
+
|
|
228
|
+
## Passo 11: Atualizar Checklist
|
|
229
|
+
|
|
230
|
+
Marcar items E2.5 (planning audit) como completed.
|
|
231
|
+
|
|
232
|
+
## Passo 12: Retornar
|
|
233
|
+
|
|
234
|
+
```markdown
|
|
235
|
+
## PLANNING AUDIT COMPLETE
|
|
236
|
+
|
|
237
|
+
**Planning Confidence Score:** {N}/100
|
|
238
|
+
**Recomendacao:** {READY_FOR_BUILD | READY_WITH_WARNINGS | NEEDS_REWORK | BLOCKED}
|
|
239
|
+
|
|
240
|
+
**Breakdown:**
|
|
241
|
+
- Artefatos arquiteturais: {%}
|
|
242
|
+
- Planos completos: {%}
|
|
243
|
+
- Cobertura REQs: {%}
|
|
244
|
+
- Sonnet-ready: {%}
|
|
245
|
+
- Aprovacoes: {%}
|
|
246
|
+
|
|
247
|
+
**Issues:** {N}
|
|
248
|
+
**Aprovacoes faltantes:** {N}
|
|
249
|
+
|
|
250
|
+
Relatorio: .plano/AUDIT-PLAN.md
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
</process>
|
|
254
|
+
|
|
255
|
+
<anti_patterns>
|
|
256
|
+
|
|
257
|
+
**NUNCA APROVAR SE:**
|
|
258
|
+
- Algum artefato arquitetural critico esta faltando
|
|
259
|
+
- Algum plano nao passou no planning-supervisor
|
|
260
|
+
- Cobertura REQ < 100%
|
|
261
|
+
- Dependencies tem ciclos
|
|
262
|
+
- Arquivos referenciados em planos nao existem
|
|
263
|
+
|
|
264
|
+
**SEMPRE BLOQUEAR SE:**
|
|
265
|
+
- BRIEFING.md vazio
|
|
266
|
+
- PROJECT.md sem objetivo claro
|
|
267
|
+
- Algum plano com confidence < 50%
|
|
268
|
+
- Arquitetura contradiz briefing
|
|
269
|
+
|
|
270
|
+
</anti_patterns>
|
|
271
|
+
|
|
272
|
+
<success_criteria>
|
|
273
|
+
- [ ] Todos artefatos arquiteturais validados
|
|
274
|
+
- [ ] Todos planos validados
|
|
275
|
+
- [ ] Cobertura REQ calculada
|
|
276
|
+
- [ ] Sonnet-ready scores calculados
|
|
277
|
+
- [ ] Aprovacoes validadas
|
|
278
|
+
- [ ] Dependency graph validado
|
|
279
|
+
- [ ] Inconsistencias detectadas
|
|
280
|
+
- [ ] Confidence score calculado
|
|
281
|
+
- [ ] AUDIT-PLAN.md gerado
|
|
282
|
+
- [ ] Checklist atualizado
|
|
283
|
+
- [ ] Decisao retornada
|
|
284
|
+
</success_criteria>
|
package/bin/install.js
CHANGED
|
@@ -280,6 +280,11 @@ function convertAgentToOpencode(content) {
|
|
|
280
280
|
converted = converted.replace(/\bTodoWrite\b/g, 'todowrite');
|
|
281
281
|
converted = converted.replace(/\/up:/g, '/up-'); // OpenCode flat command structure
|
|
282
282
|
|
|
283
|
+
// Replace Task tool calls with OpenCode format
|
|
284
|
+
// Claude Code: Task(subagent_type="up-xxx", ...) / Agent(subagent_type="up-xxx", ...)
|
|
285
|
+
// OpenCode: @up-xxx or task tool with agent name
|
|
286
|
+
converted = converted.replace(/subagent_type="up-/g, 'agent="up-');
|
|
287
|
+
|
|
283
288
|
const { frontmatter, body } = extractFrontmatterAndBody(converted);
|
|
284
289
|
if (!frontmatter) return converted;
|
|
285
290
|
|
|
@@ -287,11 +292,17 @@ function convertAgentToOpencode(content) {
|
|
|
287
292
|
const newLines = [];
|
|
288
293
|
const tools = [];
|
|
289
294
|
let inTools = false;
|
|
295
|
+
let hasMode = false;
|
|
290
296
|
|
|
291
297
|
for (const line of lines) {
|
|
292
298
|
const trimmed = line.trim();
|
|
293
299
|
|
|
294
300
|
if (trimmed.startsWith('name:')) continue; // OpenCode uses filename
|
|
301
|
+
if (trimmed.startsWith('mode:')) {
|
|
302
|
+
hasMode = true;
|
|
303
|
+
newLines.push(line);
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
295
306
|
if (trimmed.startsWith('tools:')) {
|
|
296
307
|
const toolsValue = trimmed.substring(6).trim();
|
|
297
308
|
if (toolsValue) {
|
|
@@ -318,6 +329,13 @@ function convertAgentToOpencode(content) {
|
|
|
318
329
|
if (!inTools) newLines.push(line);
|
|
319
330
|
}
|
|
320
331
|
|
|
332
|
+
// CRITICAL: OpenCode requires mode: subagent for agents to be invokable via Task tool
|
|
333
|
+
// Without this, agents are treated as "primary" and isolated — primary agents cannot
|
|
334
|
+
// invoke each other. All UP agents are subagents (only user-facing primary is OpenCode itself).
|
|
335
|
+
if (!hasMode) {
|
|
336
|
+
newLines.push('mode: subagent');
|
|
337
|
+
}
|
|
338
|
+
|
|
321
339
|
if (tools.length > 0) {
|
|
322
340
|
newLines.push('tools:');
|
|
323
341
|
for (const tool of tools) {
|
|
@@ -364,6 +382,12 @@ function replacePaths(content, pathPrefix, runtime) {
|
|
|
364
382
|
if (runtime === 'opencode') {
|
|
365
383
|
content = content.replace(/\/up:/g, '/up-');
|
|
366
384
|
content = content.replace(/subagent_type="general-purpose"/g, 'subagent_type="general"');
|
|
385
|
+
// OpenCode invokes subagents via Task tool with agent name (not subagent_type)
|
|
386
|
+
// Keep subagent_type for compatibility but ensure agents have mode:subagent
|
|
387
|
+
// Replace AskUserQuestion with question (OpenCode native)
|
|
388
|
+
content = content.replace(/\bAskUserQuestion\b/g, 'question');
|
|
389
|
+
content = content.replace(/\bSlashCommand\b/g, 'skill');
|
|
390
|
+
content = content.replace(/\bTodoWrite\b/g, 'todowrite');
|
|
367
391
|
}
|
|
368
392
|
|
|
369
393
|
return content;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: up:build
|
|
3
|
+
description: Executar projeto previamente planejado por /up:plan. Requer PLAN-READY.md. Pode rodar em runtime diferente do que planejou.
|
|
4
|
+
argument-hint: ""
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Edit
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
- Bash
|
|
12
|
+
- Task
|
|
13
|
+
- AskUserQuestion
|
|
14
|
+
- mcp__plugin_playwright_playwright__*
|
|
15
|
+
---
|
|
16
|
+
<objective>
|
|
17
|
+
Executar projeto que foi previamente planejado.
|
|
18
|
+
|
|
19
|
+
Requer `.plano/PLAN-READY.md` no diretorio atual.
|
|
20
|
+
|
|
21
|
+
Conduz:
|
|
22
|
+
1. Validacao light do plano (artefatos existem, planos OK)
|
|
23
|
+
2. CEO local confirma execucao
|
|
24
|
+
3. Build de todas as fases (com supervisao completa)
|
|
25
|
+
4. Quality Gate global
|
|
26
|
+
5. Delivery Audit
|
|
27
|
+
6. CEO apresenta resultado
|
|
28
|
+
|
|
29
|
+
**Caso de uso principal:** executar projeto planejado em outro runtime.
|
|
30
|
+
Exemplo: planejou em Claude Code (`/up:plan "X"`), agora roda em OpenCode (`/up-build`).
|
|
31
|
+
|
|
32
|
+
**Re-plan local permitido (max 2):** se durante execucao o supervisor descobrir
|
|
33
|
+
que o plano esta inviavel, o planejador LOCAL refaz a fase. Nao volta pro runtime
|
|
34
|
+
que planejou originalmente.
|
|
35
|
+
|
|
36
|
+
Diferenca de /up:modo-builder:
|
|
37
|
+
- modo-builder: planeja + executa em sequencia
|
|
38
|
+
- build: SO executa, le PLAN-READY.md
|
|
39
|
+
|
|
40
|
+
Diferenca de /up:executar-fase:
|
|
41
|
+
- executar-fase: executa UMA fase
|
|
42
|
+
- build: executa o PROJETO INTEIRO ate delivery
|
|
43
|
+
</objective>
|
|
44
|
+
|
|
45
|
+
<execution_context>
|
|
46
|
+
@~/.claude/up/workflows/build.md
|
|
47
|
+
@~/.claude/up/workflows/governance.md
|
|
48
|
+
@~/.claude/up/workflows/dcrv.md
|
|
49
|
+
@~/.claude/up/workflows/builder-e2e.md
|
|
50
|
+
</execution_context>
|
|
51
|
+
|
|
52
|
+
<context>
|
|
53
|
+
$ARGUMENTS
|
|
54
|
+
|
|
55
|
+
Sem argumentos. O comando le tudo de `.plano/PLAN-READY.md`.
|
|
56
|
+
</context>
|
|
57
|
+
|
|
58
|
+
<process>
|
|
59
|
+
**GATE 1 — Owner Profile LOCAL:**
|
|
60
|
+
Verificar se `~/.claude/up/owner-profile.md` existe NESTE runtime.
|
|
61
|
+
Se nao: rodar `/up:onboard` primeiro.
|
|
62
|
+
|
|
63
|
+
**GATE 2 — PLAN-READY.md:**
|
|
64
|
+
```bash
|
|
65
|
+
if [ ! -f .plano/PLAN-READY.md ]; then
|
|
66
|
+
echo "ERRO: Este projeto nao foi planejado."
|
|
67
|
+
echo "Use /up:plan primeiro pra planejar."
|
|
68
|
+
echo "Ou /up:modo-builder pra planejar e executar de uma vez."
|
|
69
|
+
exit 1
|
|
70
|
+
fi
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**GATE 3 — Validacao Light:**
|
|
74
|
+
Spot-check estrutura:
|
|
75
|
+
- Artefatos arquiteturais existem (PROJECT, ROADMAP, REQUIREMENTS, SYSTEM-DESIGN)?
|
|
76
|
+
- Todos planos listados em PLAN-READY.md existem no disco?
|
|
77
|
+
- Frontmatter dos planos e valido?
|
|
78
|
+
|
|
79
|
+
**Confiar no PLAN-READY.md.** NAO re-rodar planning-supervisor em tudo.
|
|
80
|
+
|
|
81
|
+
Se algo falta: alertar e oferecer planejamento local OU abortar.
|
|
82
|
+
|
|
83
|
+
**Sem model routing:** O runtime decide o modelo.
|
|
84
|
+
|
|
85
|
+
**Execute the build workflow from @~/.claude/up/workflows/build.md end-to-end.**
|
|
86
|
+
|
|
87
|
+
Estagios:
|
|
88
|
+
1. Validacao light + CEO confirma
|
|
89
|
+
2. Build (loop por fase com supervisao + DCRV + E2E + chief-engineer)
|
|
90
|
+
3. Quality Gate global
|
|
91
|
+
4. Delivery Audit
|
|
92
|
+
5. Delivery (CEO apresenta)
|
|
93
|
+
|
|
94
|
+
**Re-plan local permitido (max 2 por projeto):**
|
|
95
|
+
Se execution-supervisor pedir REQUEST_REPLAN, o planejador LOCAL refaz a fase.
|
|
96
|
+
Registrar em `.plano/governance/replans.log`.
|
|
97
|
+
|
|
98
|
+
**A partir do CEO confirmar, ZERO interacao com usuario** (exceto alertas criticos).
|
|
99
|
+
</process>
|
package/commands/plan.md
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: up:plan
|
|
3
|
+
description: Planejamento completo de projeto. Gera PLAN-READY.md pronto pra ser executado por /up:build (mesmo runtime ou outro)
|
|
4
|
+
argument-hint: "[descricao do projeto] [--execution-runtime=runtime] [--no-audit]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Edit
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
- Bash
|
|
12
|
+
- Task
|
|
13
|
+
- WebFetch
|
|
14
|
+
- WebSearch
|
|
15
|
+
- AskUserQuestion
|
|
16
|
+
- mcp__context7__*
|
|
17
|
+
---
|
|
18
|
+
<objective>
|
|
19
|
+
Planejar projeto completo. NAO executa nada, so planeja.
|
|
20
|
+
|
|
21
|
+
Conduz:
|
|
22
|
+
1. Intake (CEO entrevista o dono)
|
|
23
|
+
2. Arquitetura completa (Product Analyst → System Designer → Arquiteto)
|
|
24
|
+
3. Planejamento exaustivo de TODAS as fases (Sonnet-ready)
|
|
25
|
+
4. Planning Audit (calcula confidence score)
|
|
26
|
+
5. Gera PLAN-READY.md (arquivo-flag pra /up:build)
|
|
27
|
+
|
|
28
|
+
Resultado: projeto pronto pra execucao em qualquer runtime via `/up:build`.
|
|
29
|
+
|
|
30
|
+
**Caso de uso principal:** planejar em Claude Code (modelo capaz pra arquitetura)
|
|
31
|
+
e executar em OpenCode/Gemini (mais barato pra rodar volume).
|
|
32
|
+
|
|
33
|
+
Diferenca de /up:modo-builder:
|
|
34
|
+
- modo-builder: planeja + executa em sequencia, mesmo runtime
|
|
35
|
+
- plan: SO planeja, para apos PLAN-READY.md
|
|
36
|
+
|
|
37
|
+
Diferenca de /up:planejar-fase:
|
|
38
|
+
- planejar-fase: planeja UMA fase (em projeto ja inicializado)
|
|
39
|
+
- plan: planeja TODO o projeto do zero (incluindo intake e arquitetura)
|
|
40
|
+
</objective>
|
|
41
|
+
|
|
42
|
+
<execution_context>
|
|
43
|
+
@~/.claude/up/workflows/plan.md
|
|
44
|
+
@~/.claude/up/workflows/onboarding.md
|
|
45
|
+
@~/.claude/up/workflows/ceo-intake.md
|
|
46
|
+
@~/.claude/up/templates/plan-ready.md
|
|
47
|
+
@~/.claude/up/templates/audit-plan.md
|
|
48
|
+
</execution_context>
|
|
49
|
+
|
|
50
|
+
<context>
|
|
51
|
+
$ARGUMENTS
|
|
52
|
+
|
|
53
|
+
**Flags:**
|
|
54
|
+
- `--execution-runtime=<runtime>` — Informa qual runtime sera usado pra executar.
|
|
55
|
+
Valores: same | claude-code | opencode | gemini-cli | any
|
|
56
|
+
Default: same
|
|
57
|
+
- `--no-audit` — Pula Planning Audit (nao recomendado em producao)
|
|
58
|
+
|
|
59
|
+
O restante e o briefing em texto livre.
|
|
60
|
+
|
|
61
|
+
Se briefing vazio: CEO pergunta interativamente.
|
|
62
|
+
|
|
63
|
+
**Deteccao automatica de modo:**
|
|
64
|
+
- Codigo existente → BROWNFIELD
|
|
65
|
+
- Sem codigo → GREENFIELD
|
|
66
|
+
</context>
|
|
67
|
+
|
|
68
|
+
<process>
|
|
69
|
+
**GATE OBRIGATORIO — Owner Profile:**
|
|
70
|
+
Antes de qualquer coisa, verificar se `~/.claude/up/owner-profile.md` existe.
|
|
71
|
+
Se NAO existir: rodar `/up:onboard` primeiro (workflow onboarding.md).
|
|
72
|
+
Sem profile, o CEO nao pode conduzir intake.
|
|
73
|
+
|
|
74
|
+
**Sem model routing:** O runtime decide o modelo. NAO especificar `model=` em nenhum spawn.
|
|
75
|
+
|
|
76
|
+
**Sonnet-ready obrigatorio:** Todos planos devem ser gerados em nivel maximo de detalhe.
|
|
77
|
+
|
|
78
|
+
**Execute the plan workflow from @~/.claude/up/workflows/plan.md end-to-end.**
|
|
79
|
+
|
|
80
|
+
Estagios:
|
|
81
|
+
1. Intake (CEO entrevista o dono) — interativo
|
|
82
|
+
2. Arquitetura (greenfield: pesquisa + product/system/architect | brownfield: mapear + product/system/architect)
|
|
83
|
+
3. Planejamento exaustivo (TODAS as fases, planning-supervisor revisa cada uma)
|
|
84
|
+
4. Planning Audit (planning-auditor calcula confidence score)
|
|
85
|
+
5. PLAN-READY.md gerado
|
|
86
|
+
6. CEO apresenta resumo
|
|
87
|
+
|
|
88
|
+
**A partir do estagio 2, ZERO interacao com usuario.** Toda decisao e tomada autonomamente pelo CEO/chiefs/supervisores.
|
|
89
|
+
|
|
90
|
+
**NAO executar nada.** Para apos gerar PLAN-READY.md.
|
|
91
|
+
</process>
|