@dewtech/dare-cli 2.2.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -27
- package/dist/__tests__/dag-runner/graph-ingest.test.d.ts +2 -0
- package/dist/__tests__/dag-runner/graph-ingest.test.d.ts.map +1 -0
- package/dist/__tests__/dag-runner/graph-ingest.test.js +116 -0
- package/dist/__tests__/dag-runner/graph-ingest.test.js.map +1 -0
- package/dist/__tests__/dag-runner/orchestrator.test.d.ts +2 -0
- package/dist/__tests__/dag-runner/orchestrator.test.d.ts.map +1 -0
- package/dist/__tests__/dag-runner/orchestrator.test.js +107 -0
- package/dist/__tests__/dag-runner/orchestrator.test.js.map +1 -0
- package/dist/__tests__/dag-runner/utils.test.js +0 -28
- package/dist/__tests__/dag-runner/utils.test.js.map +1 -1
- package/dist/__tests__/graphrag/json-graph.test.d.ts +2 -0
- package/dist/__tests__/graphrag/json-graph.test.d.ts.map +1 -0
- package/dist/__tests__/graphrag/json-graph.test.js +57 -0
- package/dist/__tests__/graphrag/json-graph.test.js.map +1 -0
- package/dist/bin/dare.js +2 -0
- package/dist/bin/dare.js.map +1 -1
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +175 -46
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/graph.d.ts +9 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +177 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/dag-runner/graph-ingest.d.ts +17 -0
- package/dist/dag-runner/graph-ingest.d.ts.map +1 -0
- package/dist/dag-runner/graph-ingest.js +149 -0
- package/dist/dag-runner/graph-ingest.js.map +1 -0
- package/dist/dag-runner/run_dag.d.ts +47 -30
- package/dist/dag-runner/run_dag.d.ts.map +1 -1
- package/dist/dag-runner/run_dag.js +145 -166
- package/dist/dag-runner/run_dag.js.map +1 -1
- package/dist/dag-runner/state-store.d.ts +13 -0
- package/dist/dag-runner/state-store.d.ts.map +1 -0
- package/dist/dag-runner/state-store.js +69 -0
- package/dist/dag-runner/state-store.js.map +1 -0
- package/dist/dag-runner/utils/cap-output.d.ts.map +1 -1
- package/dist/dag-runner/utils/cap-output.js +5 -2
- package/dist/dag-runner/utils/cap-output.js.map +1 -1
- package/dist/graphrag/factory.d.ts +25 -0
- package/dist/graphrag/factory.d.ts.map +1 -0
- package/dist/graphrag/factory.js +66 -0
- package/dist/graphrag/factory.js.map +1 -0
- package/dist/graphrag/index.d.ts +4 -0
- package/dist/graphrag/index.d.ts.map +1 -1
- package/dist/graphrag/index.js +2 -0
- package/dist/graphrag/index.js.map +1 -1
- package/dist/graphrag/json-graph.d.ts +28 -0
- package/dist/graphrag/json-graph.d.ts.map +1 -0
- package/dist/graphrag/json-graph.js +168 -0
- package/dist/graphrag/json-graph.js.map +1 -0
- package/dist/graphrag/knowledge-graph.d.ts +33 -0
- package/dist/graphrag/knowledge-graph.d.ts.map +1 -0
- package/dist/graphrag/knowledge-graph.js +2 -0
- package/dist/graphrag/knowledge-graph.js.map +1 -0
- package/dist/index.d.ts +13 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -4
- package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +99 -96
- package/templates/ide/claude/.claude/commands/dare-dag-run.md +68 -69
- package/templates/ide/cursor/.cursor/commands/run-dag.md +67 -44
- package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +97 -87
|
@@ -1,33 +1,45 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dare-dag-runner
|
|
3
|
-
description: Constrói e executa o grafo DAG
|
|
3
|
+
description: Constrói e executa o grafo DAG do método DARE com paralelismo lógico via Kahn's algorithm. Antigravity é o executor — usa o plano nativo da IDE; sem API key. O CLI dare é orquestrador (--next/--complete/--fail).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# DARE DAG Runner Skill
|
|
7
7
|
|
|
8
|
-
Você é o
|
|
9
|
-
é
|
|
10
|
-
|
|
8
|
+
Você é o executor da fase E (Execute) do método DARE no Antigravity. O CLI
|
|
9
|
+
`dare` é o **orquestrador**: ele indica quais tasks executar agora e registra
|
|
10
|
+
o que você terminou. **Você** é quem efetivamente roda cada task usando o
|
|
11
|
+
runtime nativo do Antigravity — não há API key nem custo extra de tokens.
|
|
11
12
|
|
|
12
13
|
## Quando usar esta skill
|
|
13
14
|
|
|
14
|
-
- BLUEPRINT.md
|
|
15
|
-
- Existe `DARE/dare-dag.yaml` e você precisa entender,
|
|
15
|
+
- BLUEPRINT.md está aprovado e é hora de gerar tasks
|
|
16
|
+
- Existe `DARE/dare-dag.yaml` e você precisa entender, executar ou modificar
|
|
16
17
|
- Aparece o canvas `DARE/.canvas.md` durante uma execução
|
|
17
|
-
- Usuário pede "executa
|
|
18
|
+
- Usuário pede "executa o DAG" ou "começa o execute"
|
|
19
|
+
|
|
20
|
+
## Modelo de execução
|
|
21
|
+
|
|
22
|
+
> **Antigravity é o executor. O CLI `dare` é orquestrador.**
|
|
23
|
+
|
|
24
|
+
- A IDE já está autenticada
|
|
25
|
+
- Você lê `dare-dag.yaml` e as specs em `DARE/EXECUTION/task-*.md`
|
|
26
|
+
- Você executa cada task — escreve código, roda testes, faz lint
|
|
27
|
+
- Após cada task, registra o resultado no CLI:
|
|
28
|
+
- `dare execute --complete <task-id> --output "<resumo>"`
|
|
29
|
+
- `dare execute --fail <task-id> --reason "<mensagem>"`
|
|
30
|
+
- O CLI atualiza `DARE/.canvas.md` e popula o `dare-graph` automaticamente
|
|
18
31
|
|
|
19
32
|
## O que é o DAG do DARE
|
|
20
33
|
|
|
21
|
-
`DARE/dare-dag.yaml` é o **plano de execução** da fase E
|
|
22
|
-
|
|
34
|
+
`DARE/dare-dag.yaml` é o **plano de execução** da fase E. Grafo direcionado
|
|
35
|
+
acíclico:
|
|
23
36
|
|
|
24
37
|
- **Nó** = uma task atômica
|
|
25
|
-
- **Aresta** = `depends_on` (
|
|
38
|
+
- **Aresta** = `depends_on` (filha precisa do output da pai)
|
|
26
39
|
|
|
27
|
-
O CLI ordena topologicamente (Kahn's algorithm)
|
|
28
|
-
em paralelo
|
|
29
|
-
|
|
30
|
-
2000 chars cada).
|
|
40
|
+
O CLI ordena topologicamente (Kahn's algorithm). Tasks no mesmo rank podem
|
|
41
|
+
rodar em paralelo (logicamente — você decide se literalmente fan-out ou roda
|
|
42
|
+
uma após a outra).
|
|
31
43
|
|
|
32
44
|
```
|
|
33
45
|
rank 0 ─→ task-001 task-002 (paralelas)
|
|
@@ -42,9 +54,9 @@ title: "<Nome do projeto> - Development Tasks"
|
|
|
42
54
|
version: "1.0.0"
|
|
43
55
|
|
|
44
56
|
limits:
|
|
45
|
-
parent_context_chars: 2000 # snippet de output de
|
|
57
|
+
parent_context_chars: 2000 # snippet de output de pai injetado no filho
|
|
46
58
|
task_output_chars: 4000 # cap do output capturado por task
|
|
47
|
-
timeout_seconds: 600 #
|
|
59
|
+
timeout_seconds: 600 # apenas referência
|
|
48
60
|
|
|
49
61
|
models:
|
|
50
62
|
cursor: { HIGH: gpt-5.3-codex, MED: composer-2, LOW: auto-low }
|
|
@@ -61,105 +73,96 @@ tasks:
|
|
|
61
73
|
<prompt completamente self-contained>
|
|
62
74
|
```
|
|
63
75
|
|
|
64
|
-
##
|
|
65
|
-
|
|
66
|
-
### 1. `id` em kebab-case e único
|
|
67
|
-
`task-001`, `auth-jwt`, `db-migrations`. Sem espaços nem maiúsculas. O id
|
|
68
|
-
aparece no canvas e nos logs.
|
|
69
|
-
|
|
70
|
-
### 2. `depends_on` mínimo
|
|
76
|
+
## Loop de execução
|
|
71
77
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
Se o seu DAG vira uma cadeia linear `001 → 002 → 003 → ...`, há dependências
|
|
85
|
-
falsas. Reanalise.
|
|
86
|
-
|
|
87
|
-
### 3. `complexity` mapeia para modelo
|
|
88
|
-
| Nível | Uso típico |
|
|
89
|
-
|-------|------------|
|
|
90
|
-
| `LOW` | Setup, scaffolding, docs simples, pesquisa |
|
|
91
|
-
| `MED` | Implementação direta, refactors, testes unitários |
|
|
92
|
-
| `HIGH` | Lógica de negócio crítica, segurança, integrações |
|
|
78
|
+
```
|
|
79
|
+
1. dare execute --next
|
|
80
|
+
↓ imprime prompts das tasks ready (rank atual)
|
|
81
|
+
2. Para cada prompt:
|
|
82
|
+
- leia spec_file se houver
|
|
83
|
+
- implemente
|
|
84
|
+
- rode build/test/lint (Ralph Loop)
|
|
85
|
+
3. dare execute --complete <id> --output "<resumo + arquivos tocados>"
|
|
86
|
+
(ou --fail <id> --reason "..." se falhou)
|
|
87
|
+
4. Volte ao passo 1 até não haver mais tasks ready
|
|
88
|
+
```
|
|
93
89
|
|
|
94
|
-
|
|
90
|
+
Comandos úteis:
|
|
95
91
|
|
|
96
|
-
|
|
92
|
+
```bash
|
|
93
|
+
dare execute --next # próximas tasks ready
|
|
94
|
+
dare execute --complete task-001 --output "..." # marca DONE
|
|
95
|
+
dare execute --fail task-002 --reason "..." # marca FAILED + cascade
|
|
96
|
+
dare execute --reset task-002 # volta para PENDING (retry)
|
|
97
|
+
dare execute --status # snapshot do canvas
|
|
98
|
+
```
|
|
97
99
|
|
|
98
|
-
|
|
99
|
-
- O próprio `subtask_prompt`
|
|
100
|
-
- Snippets de até 2000 chars dos outputs de cada pai
|
|
101
|
-
- Acesso ao filesystem do projeto
|
|
100
|
+
## Regras inegociáveis ao construir o DAG
|
|
102
101
|
|
|
103
|
-
|
|
104
|
-
|
|
102
|
+
### 1. `id` em kebab-case e único
|
|
103
|
+
`task-001`, `auth-jwt`, `db-migrations`.
|
|
105
104
|
|
|
106
|
-
###
|
|
105
|
+
### 2. `depends_on` mínimo
|
|
106
|
+
Só adicione dependência quando a filha **literalmente** precisa do output.
|
|
107
|
+
|
|
108
|
+
| Cenário | Dep? |
|
|
109
|
+
|---------|------|
|
|
110
|
+
| B precisa do arquivo de A | sim |
|
|
111
|
+
| B precisa de decisão de A | sim |
|
|
112
|
+
| B é independente de A | não |
|
|
113
|
+
| Testes/Docs do módulo X | sim — depende da implementação |
|
|
114
|
+
| Pesquisa sem efeito colateral | não |
|
|
115
|
+
|
|
116
|
+
Cadeia linear é antipattern. Reanalise.
|
|
117
|
+
|
|
118
|
+
### 3. `complexity` é sinal de cuidado, não custo
|
|
119
|
+
| Nível | Uso |
|
|
120
|
+
|-------|-----|
|
|
121
|
+
| `LOW` | Setup, scaffolding, docs simples |
|
|
122
|
+
| `MED` | Implementação direta, refactors, testes unitários |
|
|
123
|
+
| `HIGH` | Lógica crítica, segurança, integrações |
|
|
107
124
|
|
|
108
|
-
|
|
109
|
-
|
|
125
|
+
### 4. `subtask_prompt` self-contained
|
|
126
|
+
Receberá `subtask_prompt` + snippets de até 2000 chars dos outputs dos pais.
|
|
127
|
+
Não vale "como combinamos". Tudo no prompt ou via pais.
|
|
110
128
|
|
|
111
|
-
###
|
|
129
|
+
### 5. Output cap 4000 chars
|
|
130
|
+
Se gerar muito, escreva em arquivo e faça o `--output` ser resumo + caminhos.
|
|
112
131
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
`spec_file: EXECUTION/task-001.md` para que o subagente leia a spec.
|
|
132
|
+
### 6. Spec por task em `EXECUTION/task-<id>.md`
|
|
133
|
+
Spec detalhada com objetivo, arquivos, validation gates, testes, segurança.
|
|
116
134
|
|
|
117
135
|
## Os 3 artefatos sempre juntos
|
|
118
136
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
Os três precisam estar consistentes: mesmo `id`, mesmo `depends_on`, mesma
|
|
126
|
-
`complexity`. Inconsistência aqui quebra a execução.
|
|
127
|
-
|
|
128
|
-
## Como executar
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
dare execute --parallel # paralelo, runner padrão
|
|
132
|
-
dare execute --parallel --runner antigravity
|
|
133
|
-
dare execute # sequencial (debug)
|
|
134
|
-
dare execute --task task-003 # task única
|
|
135
|
-
dare execute --parallel --resume # só PENDING/FAILED
|
|
136
|
-
```
|
|
137
|
+
| Arquivo | Para quê |
|
|
138
|
+
|---------|----------|
|
|
139
|
+
| `DARE/TASKS.md` | Visão humana com tabela e progresso |
|
|
140
|
+
| `DARE/dare-dag.yaml` | Grafo executável |
|
|
141
|
+
| `DARE/EXECUTION/task-<id>.md` | Spec por task |
|
|
137
142
|
|
|
138
|
-
|
|
139
|
-
- `CURSOR_API_KEY` — runner cursor
|
|
140
|
-
- `ANTHROPIC_API_KEY` — runner claude
|
|
141
|
-
- `ANTIGRAVITY_API_KEY` — runner antigravity
|
|
143
|
+
Os três precisam ser consistentes: mesmos `id`s, `depends_on`, `complexity`.
|
|
142
144
|
|
|
143
145
|
## Canvas ao vivo (`DARE/.canvas.md`)
|
|
144
146
|
|
|
145
|
-
O
|
|
146
|
-
- `PENDING` ⏳ — aguardando rank
|
|
147
|
-
- `RUNNING` 🔄 — executando agora
|
|
148
|
-
- `DONE` ✅ — concluído com sucesso
|
|
149
|
-
- `FAILED` ❌ — erro durante execução
|
|
150
|
-
- `SKIPPED` ⏭️ — dependência falhou; runner pulou automaticamente
|
|
147
|
+
O CLI reescreve a cada `--complete`/`--fail`:
|
|
151
148
|
|
|
152
|
-
|
|
149
|
+
| Status | Significado |
|
|
150
|
+
|--------|-------------|
|
|
151
|
+
| `PENDING` ⏳ | aguardando rank |
|
|
152
|
+
| `RUNNING` 🔄 | você está executando |
|
|
153
|
+
| `DONE` ✅ | concluído |
|
|
154
|
+
| `FAILED` ❌ | erro durante execução |
|
|
155
|
+
| `SKIPPED` ⏭️ | dependência falhou — automático, não toque |
|
|
153
156
|
|
|
154
157
|
## Erros comuns
|
|
155
158
|
|
|
156
|
-
| Erro |
|
|
157
|
-
|
|
158
|
-
| Ciclo |
|
|
159
|
-
| `id` duplicado |
|
|
160
|
-
| `depends_on` inexistente |
|
|
161
|
-
| Tudo em rank 0 |
|
|
162
|
-
| Cadeia linear |
|
|
159
|
+
| Erro | Correção |
|
|
160
|
+
|------|----------|
|
|
161
|
+
| Ciclo | Retire a aresta cíclica |
|
|
162
|
+
| `id` duplicado | Renomeie |
|
|
163
|
+
| `depends_on` inexistente | Corrija ou adicione a task |
|
|
164
|
+
| Tudo em rank 0 | Adicione deps reais quando há contenção |
|
|
165
|
+
| Cadeia linear | Reveja se as deps são necessárias |
|
|
163
166
|
|
|
164
167
|
## Checklist antes de aprovar
|
|
165
168
|
|
|
@@ -169,4 +172,4 @@ Você não precisa intervir em `SKIPPED` — o runner cuida.
|
|
|
169
172
|
- [ ] `complexity` reflete o esforço real
|
|
170
173
|
- [ ] `id` em kebab-case e único
|
|
171
174
|
- [ ] Sem ciclos
|
|
172
|
-
- [ ]
|
|
175
|
+
- [ ] Os 3 artefatos consistentes
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
# /dare-dag-run
|
|
2
2
|
|
|
3
|
-
Executa o grafo de tasks definido em `DARE/dare-dag.yaml`
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Executa o grafo de tasks definido em `DARE/dare-dag.yaml` usando **Claude
|
|
4
|
+
Code como executor** e o CLI `dare` como orquestrador. O canvas ao vivo fica
|
|
5
|
+
em `DARE/.canvas.md`.
|
|
6
|
+
|
|
7
|
+
> **Sem API keys.** Você (Claude Code) usa o plano da IDE/CLI em que o
|
|
8
|
+
> usuário já está autenticado. O CLI apenas coordena estado, monta prompts
|
|
9
|
+
> e atualiza canvas.
|
|
6
10
|
|
|
7
11
|
## Pré-requisitos
|
|
8
12
|
|
|
9
|
-
- `DARE/dare-dag.yaml` existe e foi aprovado
|
|
13
|
+
- `DARE/dare-dag.yaml` existe e foi aprovado
|
|
10
14
|
- Specs em `DARE/EXECUTION/task-<id>.md` geradas
|
|
11
|
-
- `
|
|
15
|
+
- `dare` disponível no PATH (`npm i -g @dewtech/dare-cli`)
|
|
12
16
|
|
|
13
17
|
## Como usar
|
|
14
18
|
|
|
15
19
|
```
|
|
16
|
-
/dare-dag-run
|
|
17
|
-
/dare-dag-run --
|
|
18
|
-
/dare-dag-run --task task-003 # task única
|
|
19
|
-
/dare-dag-run --sequential # debug
|
|
20
|
-
/dare-dag-run --runner cursor # trocar de runner
|
|
20
|
+
/dare-dag-run
|
|
21
|
+
/dare-dag-run --task task-003 # executar só uma task específica
|
|
21
22
|
```
|
|
22
23
|
|
|
23
24
|
## O que fazer
|
|
@@ -25,86 +26,84 @@ ao vivo é gravado em `DARE/.canvas.md`.
|
|
|
25
26
|
### 1. Validar pré-condições
|
|
26
27
|
|
|
27
28
|
- Confirme que `DARE/dare-dag.yaml` existe. Se não, oriente
|
|
28
|
-
`/dare-blueprint` ou `/dare-dag-build
|
|
29
|
-
- Leia o YAML e verifique
|
|
30
|
-
- Sem ciclos
|
|
31
|
-
- Pelo menos 2 tasks no rank 0
|
|
32
|
-
- Cada task tem `id` único, `complexity`, `subtask_prompt`
|
|
33
|
-
- Confirme `ANTHROPIC_API_KEY` (ou a env var do runner escolhido).
|
|
29
|
+
`/dare-blueprint` ou `/dare-dag-build`
|
|
30
|
+
- Leia o YAML e verifique sem ciclos, ids únicos, ranks paralelizáveis
|
|
34
31
|
|
|
35
|
-
### 2.
|
|
32
|
+
### 2. Pegar próximas tasks
|
|
36
33
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
| Sequencial (debug) | `dare execute --runner claude` |
|
|
41
|
-
| Task única | `dare execute --task <id> --runner claude` |
|
|
42
|
-
| Resume (PENDING/FAILED) | `dare execute --parallel --runner claude --resume` |
|
|
34
|
+
```bash
|
|
35
|
+
dare execute --next
|
|
36
|
+
```
|
|
43
37
|
|
|
44
|
-
|
|
38
|
+
O CLI imprime as tasks ready do rank atual com o prompt completo (snippets
|
|
39
|
+
de até 2000 chars dos outputs dos pais já costurados). Use esses prompts.
|
|
45
40
|
|
|
46
|
-
|
|
47
|
-
editor. O runner reescreve o arquivo a cada transição de status:
|
|
41
|
+
### 3. Sugerir abrir o canvas
|
|
48
42
|
|
|
43
|
+
Antes de começar, peça ao usuário abrir `DARE/.canvas.md` em outra aba.
|
|
44
|
+
|
|
45
|
+
### 4. Executar cada task
|
|
46
|
+
|
|
47
|
+
Para cada task ready:
|
|
48
|
+
|
|
49
|
+
1. Leia `spec_file` se houver
|
|
50
|
+
2. Implemente conforme o prompt
|
|
51
|
+
3. Rode Ralph Loop: build → test → lint
|
|
52
|
+
4. Registre o resultado:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Sucesso
|
|
56
|
+
dare execute --complete task-001 --output "Resumo + arquivos criados (paths)"
|
|
57
|
+
|
|
58
|
+
# Falha
|
|
59
|
+
dare execute --fail task-002 --reason "Mensagem clara da falha"
|
|
49
60
|
```
|
|
50
|
-
| ID | Title | Status | Duration | Tokens |
|
|
51
|
-
|----------|--------------------|---------------|----------|--------|
|
|
52
|
-
| task-001 | Setup structure | ✅ DONE | 1240ms | 850 |
|
|
53
|
-
| task-002 | DB schema | 🔄 RUNNING | - | - |
|
|
54
|
-
| task-003 | Core endpoints | ⏳ PENDING | - | - |
|
|
55
|
-
```
|
|
56
61
|
|
|
57
|
-
###
|
|
62
|
+
### 5. Avançar de rank
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
dare execute --next
|
|
66
|
+
```
|
|
58
67
|
|
|
59
|
-
|
|
68
|
+
Se aparece `✅ All tasks resolved`, todas terminaram. Caso contrário, continue.
|
|
60
69
|
|
|
61
|
-
|
|
62
|
-
uma dependência falha. Esse é comportamento esperado.
|
|
63
|
-
- Se uma task falhar, leia o erro no terminal/canvas e corrija a spec em
|
|
64
|
-
`EXECUTION/task-<id>.md` ou o `subtask_prompt` no `dare-dag.yaml`. Depois
|
|
65
|
-
re-execute com `--resume`.
|
|
66
|
-
- Use `Ctrl+C` para cancelar — o runner trata SIGINT e finaliza limpamente.
|
|
70
|
+
### 6. Pós-execução
|
|
67
71
|
|
|
68
|
-
|
|
72
|
+
```bash
|
|
73
|
+
dare execute --status
|
|
74
|
+
```
|
|
69
75
|
|
|
70
|
-
|
|
76
|
+
Para retentar tasks FAILED:
|
|
71
77
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
- Tokens consumidos
|
|
77
|
-
- Tasks que precisam atenção (FAILED)
|
|
78
|
-
- Se houver FAILED, sugira:
|
|
79
|
-
1. Ler `EXECUTION/task-<id>.md` da que falhou
|
|
80
|
-
2. Corrigir spec ou prompt
|
|
81
|
-
3. Re-executar: `/dare-dag-run --resume`
|
|
82
|
-
- Se tudo DONE, parabenize e oriente próxima feature/blueprint
|
|
78
|
+
```bash
|
|
79
|
+
dare execute --reset task-002
|
|
80
|
+
dare execute --next
|
|
81
|
+
```
|
|
83
82
|
|
|
84
|
-
##
|
|
83
|
+
## Comandos do orquestrador
|
|
85
84
|
|
|
86
|
-
|
|
|
87
|
-
|
|
88
|
-
| `
|
|
89
|
-
| `
|
|
90
|
-
| `
|
|
85
|
+
| Comando | Função |
|
|
86
|
+
|---------|--------|
|
|
87
|
+
| `dare execute --next` | Próximas tasks ready com prompts compostos |
|
|
88
|
+
| `dare execute --complete <id> --output "…"` | Marca DONE |
|
|
89
|
+
| `dare execute --fail <id> --reason "…"` | Marca FAILED + cascade-skip |
|
|
90
|
+
| `dare execute --reset <id>` | Volta para PENDING |
|
|
91
|
+
| `dare execute --status` | Snapshot do canvas + sumário |
|
|
91
92
|
|
|
92
93
|
## Erros comuns
|
|
93
94
|
|
|
94
95
|
| Sintoma | Causa | Correção |
|
|
95
96
|
|---------|-------|----------|
|
|
96
|
-
| `dare-dag.yaml not found` |
|
|
97
|
-
|
|
|
98
|
-
|
|
|
99
|
-
|
|
|
100
|
-
| Output truncado em 4000 chars | Cap de output | Faça a task escrever em arquivo e retornar resumo |
|
|
101
|
-
| Timeout (>600s) | Task longa demais | Quebre em sub-tasks ou aumente `limits.timeout_seconds` |
|
|
97
|
+
| `dare-dag.yaml not found` | Não foi gerado | `/dare-blueprint` ou `/dare-dag-build` |
|
|
98
|
+
| Cascata de SKIPPED | Pai falhou | Corrija pai → `--reset` → `--next` |
|
|
99
|
+
| Output truncado | Cap de 4000 chars | Escreva em arquivo, retorne resumo |
|
|
100
|
+
| Spec inconsistente | TASKS.md ≠ dare-dag.yaml | Re-gere com `/dare-dag-build` |
|
|
102
101
|
|
|
103
102
|
## Referências
|
|
104
103
|
|
|
105
|
-
- Schema
|
|
106
|
-
- Canvas
|
|
107
|
-
- Specs
|
|
108
|
-
- Status
|
|
104
|
+
- Schema: `DARE/dare-dag.yaml`
|
|
105
|
+
- Canvas: `DARE/.canvas.md`
|
|
106
|
+
- Specs: `DARE/EXECUTION/task-*.md`
|
|
107
|
+
- Status: `DARE/TASKS.md`
|
|
109
108
|
|
|
110
109
|
$ARGUMENTS
|
|
@@ -1,85 +1,108 @@
|
|
|
1
1
|
# Comando: /run-dag
|
|
2
2
|
|
|
3
3
|
## Descrição
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
|
|
5
|
+
Executa o grafo de tasks definido em `DARE/dare-dag.yaml` usando o **Cursor
|
|
6
|
+
como executor** e o CLI `dare` como orquestrador. O canvas ao vivo fica em
|
|
7
|
+
`DARE/.canvas.md`.
|
|
8
|
+
|
|
9
|
+
> **Sem API keys.** Você (Cursor) usa o plano da IDE em que o usuário já está
|
|
10
|
+
> logado. O CLI apenas coordena estado, monta prompts e atualiza canvas.
|
|
7
11
|
|
|
8
12
|
## Pré-requisitos
|
|
9
13
|
|
|
10
14
|
- `DARE/dare-dag.yaml` existe e foi aprovado pelo usuário
|
|
11
15
|
- Specs em `DARE/EXECUTION/task-<id>.md` geradas
|
|
12
|
-
- `
|
|
16
|
+
- `dare` disponível no PATH (`npm i -g @dewtech/dare-cli`)
|
|
13
17
|
|
|
14
18
|
## Instruções para o Cursor Composer
|
|
15
19
|
|
|
16
20
|
### 1. Validar pré-condições
|
|
17
21
|
|
|
18
22
|
- Confirme que `DARE/dare-dag.yaml` existe. Se não, oriente o usuário a rodar
|
|
19
|
-
`/generate-tasks` primeiro
|
|
23
|
+
`/generate-tasks` primeiro
|
|
20
24
|
- Leia o YAML e verifique:
|
|
21
25
|
- Sem ciclos
|
|
22
|
-
- Pelo menos 2 tasks no rank 0 (paralelismo
|
|
23
|
-
- Cada
|
|
24
|
-
|
|
26
|
+
- Pelo menos 2 tasks no rank 0 (paralelismo lógico)
|
|
27
|
+
- Cada task tem `id` único, `complexity`, `subtask_prompt`
|
|
28
|
+
|
|
29
|
+
### 2. Pegar próximas tasks
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
dare execute --next
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
O CLI imprime as tasks ready do rank atual com o prompt completo (já com
|
|
36
|
+
snippets dos outputs dos pais costurados). Use exatamente esses prompts.
|
|
25
37
|
|
|
26
|
-
###
|
|
38
|
+
### 3. Sugerir abrir o canvas
|
|
27
39
|
|
|
28
|
-
|
|
40
|
+
Antes de começar, peça ao usuário abrir `DARE/.canvas.md` em uma aba para
|
|
41
|
+
acompanhar o progresso ao vivo.
|
|
29
42
|
|
|
30
|
-
|
|
31
|
-
|------|---------|
|
|
32
|
-
| Paralelo (recomendado) | `dare execute --parallel --runner cursor` |
|
|
33
|
-
| Sequencial (debug) | `dare execute --runner cursor` |
|
|
34
|
-
| Task única | `dare execute --task <id> --runner cursor` |
|
|
35
|
-
| Resume (só PENDING/FAILED) | `dare execute --parallel --runner cursor --resume` |
|
|
43
|
+
### 4. Executar cada task
|
|
36
44
|
|
|
37
|
-
|
|
45
|
+
Para cada task ready:
|
|
38
46
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
47
|
+
1. Leia `spec_file` se houver
|
|
48
|
+
2. Implemente conforme o prompt
|
|
49
|
+
3. Rode Ralph Loop: build → test → lint
|
|
50
|
+
4. Registre o resultado:
|
|
42
51
|
|
|
43
|
-
|
|
52
|
+
```bash
|
|
53
|
+
# Sucesso
|
|
54
|
+
dare execute --complete task-001 --output "Resumo + arquivos criados/modificados (paths)"
|
|
44
55
|
|
|
45
|
-
|
|
56
|
+
# Falha
|
|
57
|
+
dare execute --fail task-002 --reason "Mensagem clara da falha"
|
|
58
|
+
```
|
|
46
59
|
|
|
47
|
-
|
|
48
|
-
dependência falha
|
|
49
|
-
- Se uma task falhar, leia o erro no terminal/canvas e corrija a spec em
|
|
50
|
-
`EXECUTION/task-<id>.md` ou o `subtask_prompt` no `dare-dag.yaml`
|
|
51
|
-
- Use `--resume` para retomar sem refazer tasks DONE
|
|
60
|
+
### 5. Avançar de rank
|
|
52
61
|
|
|
53
|
-
|
|
62
|
+
Após registrar todos os `--complete`/`--fail` do rank atual:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
dare execute --next
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Se aparece `✅ All tasks resolved`, todas as tasks terminaram. Caso contrário,
|
|
69
|
+
continue executando o próximo rank.
|
|
70
|
+
|
|
71
|
+
### 6. Pós-execução
|
|
54
72
|
|
|
55
73
|
Ao terminar:
|
|
56
74
|
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
|
|
60
|
-
|
|
75
|
+
- Rode `dare execute --status` para ver o sumário final
|
|
76
|
+
- Se houver FAILED: leia `DARE/EXECUTION/task-<id>.md` da que falhou,
|
|
77
|
+
corrija a spec ou o prompt, depois:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
dare execute --reset task-002 # volta para PENDING
|
|
81
|
+
dare execute --next # tente novamente
|
|
82
|
+
```
|
|
61
83
|
|
|
62
|
-
##
|
|
84
|
+
## Comandos disponíveis
|
|
63
85
|
|
|
64
|
-
|
|
|
65
|
-
|
|
66
|
-
| `
|
|
67
|
-
| `
|
|
68
|
-
| `
|
|
86
|
+
| Comando | Função |
|
|
87
|
+
|---------|--------|
|
|
88
|
+
| `dare execute --next` | Imprime tasks ready do rank atual com prompts |
|
|
89
|
+
| `dare execute --complete <id> --output "…"` | Marca DONE |
|
|
90
|
+
| `dare execute --fail <id> --reason "…"` | Marca FAILED + cascade-skip |
|
|
91
|
+
| `dare execute --reset <id>` | Volta para PENDING (retry) |
|
|
92
|
+
| `dare execute --status` | Snapshot do canvas + sumário |
|
|
69
93
|
|
|
70
94
|
## Erros comuns
|
|
71
95
|
|
|
72
96
|
| Sintoma | Causa | Correção |
|
|
73
97
|
|---------|-------|----------|
|
|
74
|
-
| `dare-dag.yaml not found` |
|
|
75
|
-
|
|
|
76
|
-
|
|
|
77
|
-
|
|
|
78
|
-
| Output truncado | Cap de 4000 chars | Faça a task escrever em arquivo e retornar resumo |
|
|
98
|
+
| `dare-dag.yaml not found` | Não foi gerado | Rode `/generate-tasks` |
|
|
99
|
+
| Cascata de SKIPPED | Pai falhou | Corrija pai → `--reset` → `--next` |
|
|
100
|
+
| Output truncado em 4000 chars | Cap normal | Faça a task escrever em arquivo, retorne resumo |
|
|
101
|
+
| Tudo no rank 0 disputa o mesmo arquivo | Ausência de deps reais | Edite `dare-dag.yaml` adicionando `depends_on` |
|
|
79
102
|
|
|
80
103
|
## Referências
|
|
81
104
|
|
|
82
|
-
- Skill: `.cursor/rules/skill-dag-runner.mdc`
|
|
105
|
+
- Skill: `.cursor/rules/skill-dag-runner.mdc`
|
|
83
106
|
- Schema: `DARE/dare-dag.yaml`
|
|
84
107
|
- Canvas: `DARE/.canvas.md`
|
|
85
108
|
- Specs: `DARE/EXECUTION/task-*.md`
|