@dewtech/dare-cli 2.1.0 → 2.3.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/README.md +53 -7
- package/dist/__tests__/dag-runner/adapters.test.d.ts +2 -0
- package/dist/__tests__/dag-runner/adapters.test.d.ts.map +1 -0
- package/dist/__tests__/dag-runner/adapters.test.js +134 -0
- package/dist/__tests__/dag-runner/adapters.test.js.map +1 -0
- 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 +105 -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.d.ts +2 -0
- package/dist/__tests__/dag-runner/utils.test.d.ts.map +1 -0
- package/dist/__tests__/dag-runner/utils.test.js +47 -0
- package/dist/__tests__/dag-runner/utils.test.js.map +1 -0
- 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 +172 -45
- 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 +155 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/dag-runner/adapters/antigravity.d.ts +6 -0
- package/dist/dag-runner/adapters/antigravity.d.ts.map +1 -0
- package/dist/dag-runner/adapters/antigravity.js +54 -0
- package/dist/dag-runner/adapters/antigravity.js.map +1 -0
- package/dist/dag-runner/adapters/claude.d.ts +6 -0
- package/dist/dag-runner/adapters/claude.d.ts.map +1 -0
- package/dist/dag-runner/adapters/claude.js +48 -0
- package/dist/dag-runner/adapters/claude.js.map +1 -0
- package/dist/dag-runner/adapters/cursor.d.ts +6 -0
- package/dist/dag-runner/adapters/cursor.d.ts.map +1 -0
- package/dist/dag-runner/adapters/cursor.js +58 -0
- package/dist/dag-runner/adapters/cursor.js.map +1 -0
- package/dist/dag-runner/adapters/index.d.ts +46 -0
- package/dist/dag-runner/adapters/index.d.ts.map +1 -0
- package/dist/dag-runner/adapters/index.js +55 -0
- package/dist/dag-runner/adapters/index.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 +51 -24
- package/dist/dag-runner/run_dag.d.ts.map +1 -1
- package/dist/dag-runner/run_dag.js +163 -109
- 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 +14 -0
- package/dist/dag-runner/utils/cap-output.d.ts.map +1 -0
- package/dist/dag-runner/utils/cap-output.js +25 -0
- package/dist/dag-runner/utils/cap-output.js.map +1 -0
- package/dist/dag-runner/utils/stitch-context.d.ts +24 -0
- package/dist/dag-runner/utils/stitch-context.d.ts.map +1 -0
- package/dist/dag-runner/utils/stitch-context.js +36 -0
- package/dist/dag-runner/utils/stitch-context.js.map +1 -0
- package/dist/dag-runner/utils/timeout.d.ts +27 -0
- package/dist/dag-runner/utils/timeout.d.ts.map +1 -0
- package/dist/dag-runner/utils/timeout.js +55 -0
- package/dist/dag-runner/utils/timeout.js.map +1 -0
- 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 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- 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,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Como construir e executar grafos de tasks (DAG) do método DARE com paralelismo
|
|
2
|
+
description: Como construir e executar grafos de tasks (DAG) do método DARE com paralelismo lógico via dare-dag.yaml. O Cursor é o executor; o CLI dare é orquestrador.
|
|
3
3
|
globs: DARE/dare-dag.yaml,DARE/EXECUTION/**,DARE/.canvas.md
|
|
4
4
|
alwaysApply: false
|
|
5
5
|
---
|
|
@@ -9,20 +9,34 @@ alwaysApply: false
|
|
|
9
9
|
## Quando usar
|
|
10
10
|
|
|
11
11
|
- O `BLUEPRINT.md` foi aprovado e você precisa decompor em tasks executáveis
|
|
12
|
-
- O usuário pediu
|
|
13
|
-
- Existe `DARE/dare-dag.yaml` e você precisa entender ou modificar
|
|
14
|
-
- Aparece o canvas `DARE/.canvas.md`
|
|
12
|
+
- O usuário pediu para começar a execução do DAG
|
|
13
|
+
- Existe `DARE/dare-dag.yaml` e você precisa entender, executar ou modificar
|
|
14
|
+
- Aparece o canvas `DARE/.canvas.md` durante uma execução
|
|
15
|
+
|
|
16
|
+
## Quem executa o quê
|
|
17
|
+
|
|
18
|
+
> **Você (Cursor) é o executor. O CLI `dare` é orquestrador.**
|
|
19
|
+
|
|
20
|
+
- A IDE em que você roda já está autenticada na conta do usuário
|
|
21
|
+
- Você lê o `dare-dag.yaml` e as specs em `DARE/EXECUTION/task-*.md`
|
|
22
|
+
- Você executa cada task — escreve código, roda testes, faz lint
|
|
23
|
+
- Depois de cada task, você chama o CLI para registrar o resultado:
|
|
24
|
+
- `dare execute --complete <task-id> --output "<resumo>"`
|
|
25
|
+
- `dare execute --fail <task-id> --reason "<mensagem>"`
|
|
26
|
+
- O CLI atualiza o canvas e popula o `dare-graph` automaticamente
|
|
27
|
+
|
|
28
|
+
**Não há API key. Não há custo extra de tokens. Você usa o plano da IDE.**
|
|
15
29
|
|
|
16
30
|
## O que é o DAG do DARE
|
|
17
31
|
|
|
18
32
|
`DARE/dare-dag.yaml` é o **plano de execução**: um grafo direcionado acíclico
|
|
19
|
-
em que cada nó é uma task atômica e as arestas são `depends_on`. O
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
33
|
+
em que cada nó é uma task atômica e as arestas são `depends_on`. O CLI ordena
|
|
34
|
+
topologicamente (Kahn's algorithm) e indica em que ordem você deve executar.
|
|
35
|
+
Tasks no mesmo rank podem rodar em paralelo (logicamente — você decide se
|
|
36
|
+
literalmente fan-out ou roda uma após a outra).
|
|
23
37
|
|
|
24
38
|
```
|
|
25
|
-
rank 0: task-001 task-002 ←
|
|
39
|
+
rank 0: task-001 task-002 ← podem rodar juntas (sem depends_on)
|
|
26
40
|
rank 1: task-003 (deps: 001, 002) ← só após rank 0
|
|
27
41
|
rank 2: task-004 (deps: 003)
|
|
28
42
|
```
|
|
@@ -33,13 +47,12 @@ rank 2: task-004 (deps: 003)
|
|
|
33
47
|
title: "<Nome do projeto> - Development Tasks"
|
|
34
48
|
version: "1.0.0"
|
|
35
49
|
|
|
36
|
-
# Limites de contexto/output (alinhados com Cursor SDK DAG runner)
|
|
37
50
|
limits:
|
|
38
51
|
parent_context_chars: 2000 # snippet de cada output de pai injetado no filho
|
|
39
52
|
task_output_chars: 4000 # cap do output capturado por task
|
|
40
|
-
timeout_seconds: 600 #
|
|
53
|
+
timeout_seconds: 600 # apenas referência; quem aborta é você
|
|
41
54
|
|
|
42
|
-
# Mapeamento complexity → modelo
|
|
55
|
+
# Mapeamento complexity → modelo (referencial — você usa o modelo da sua IDE)
|
|
43
56
|
models:
|
|
44
57
|
cursor: { HIGH: gpt-5.3-codex, MED: composer-2, LOW: auto-low }
|
|
45
58
|
claude: { HIGH: claude-sonnet-4-5, MED: claude-haiku-4, LOW: claude-haiku-4 }
|
|
@@ -50,97 +63,94 @@ tasks:
|
|
|
50
63
|
title: "Setup project structure"
|
|
51
64
|
depends_on: []
|
|
52
65
|
complexity: LOW
|
|
53
|
-
spec_file: EXECUTION/task-001.md
|
|
66
|
+
spec_file: EXECUTION/task-001.md
|
|
54
67
|
subtask_prompt: |
|
|
55
68
|
<prompt completamente self-contained>
|
|
56
69
|
```
|
|
57
70
|
|
|
71
|
+
## Loop de execução
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
1. dare execute --next
|
|
75
|
+
↓ imprime prompts das tasks ready (rank atual)
|
|
76
|
+
2. Para cada prompt:
|
|
77
|
+
- leia spec_file se houver
|
|
78
|
+
- implemente
|
|
79
|
+
- rode build/test/lint (Ralph Loop)
|
|
80
|
+
3. dare execute --complete <id> --output "<resumo + arquivos tocados>"
|
|
81
|
+
(ou --fail <id> --reason "..." se falhou)
|
|
82
|
+
4. Volte ao passo 1 até não haver mais tasks ready
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Comandos úteis:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
dare execute --next # próximas tasks ready (rank atual)
|
|
89
|
+
dare execute --complete task-001 --output "..." # marca DONE
|
|
90
|
+
dare execute --fail task-002 --reason "..." # marca FAILED + cascade-skip
|
|
91
|
+
dare execute --reset task-002 # volta para PENDING (retry)
|
|
92
|
+
dare execute --status # snapshot do canvas
|
|
93
|
+
```
|
|
94
|
+
|
|
58
95
|
## Regras inegociáveis ao construir o DAG
|
|
59
96
|
|
|
60
97
|
### 1. `id` em kebab-case e único
|
|
61
|
-
|
|
62
|
-
maiúsculas. O ID aparece no canvas e nos logs do runner.
|
|
98
|
+
`task-001`, `auth-jwt`, `db-migrations`. Sem espaços nem maiúsculas.
|
|
63
99
|
|
|
64
100
|
### 2. `depends_on` mínimo — maximize paralelismo
|
|
65
|
-
Só adicione
|
|
66
|
-
sem o output da pai (arquivo, schema,
|
|
67
|
-
|
|
68
|
-
|
|
|
69
|
-
|
|
70
|
-
|
|
|
71
|
-
|
|
|
72
|
-
|
|
|
73
|
-
|
|
|
74
|
-
| Testes
|
|
75
|
-
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
| `
|
|
84
|
-
| `
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
101
|
+
Só adicione dependência quando a task filha **literalmente não pode começar**
|
|
102
|
+
sem o output da pai (arquivo, schema, decisão exportada).
|
|
103
|
+
|
|
104
|
+
| Cenário | Dep? |
|
|
105
|
+
|---------|------|
|
|
106
|
+
| B precisa do arquivo que A criou | sim |
|
|
107
|
+
| B precisa de uma decisão tomada em A | sim |
|
|
108
|
+
| B faz coisa similar a A mas independente | não |
|
|
109
|
+
| Pesquisa/leitura sem efeito colateral | não — fan out wide |
|
|
110
|
+
| Testes do módulo X | sim — depende da implementação |
|
|
111
|
+
| Docs do módulo X | sim — depende da implementação |
|
|
112
|
+
|
|
113
|
+
Cadeia linear `001 → 002 → 003 → ...` é antipattern. Reanalise.
|
|
114
|
+
|
|
115
|
+
### 3. `complexity` é referência (não custo real para você)
|
|
116
|
+
| Nível | Quando usar |
|
|
117
|
+
|-------|-------------|
|
|
118
|
+
| `LOW` | Setup, scaffolding, docs simples, leitura/pesquisa |
|
|
119
|
+
| `MED` | Implementação direta, refactors, testes unitários |
|
|
120
|
+
| `HIGH` | Lógica de negócio crítica, segurança, integrações |
|
|
121
|
+
|
|
122
|
+
Como você usa o plano da IDE, `complexity` virou principalmente um sinal para
|
|
123
|
+
você priorizar atenção/cuidado, não para escolher modelo.
|
|
88
124
|
|
|
89
125
|
### 4. `subtask_prompt` totalmente self-contained
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
- Acesso ao filesystem do projeto
|
|
94
|
-
|
|
95
|
-
Não dá para referenciar "como combinamos antes" ou "use o padrão da task-001".
|
|
96
|
-
Tudo o que o subagente precisa saber tem que estar no prompt ou virá pelos pais.
|
|
126
|
+
Sua sessão futura recebe o prompt + snippets de até 2000 chars dos outputs
|
|
127
|
+
dos pais (via `dare execute --next`). Não vale "como combinamos antes".
|
|
128
|
+
Tudo o que precisa estar no prompt ou virá pelos pais.
|
|
97
129
|
|
|
98
130
|
### 5. Output cap de 4000 chars
|
|
99
|
-
Se
|
|
100
|
-
|
|
131
|
+
Se uma task gera muito, escreva em arquivo (permanece no FS) e faça o
|
|
132
|
+
`--output` do `dare execute --complete` ser um resumo curto + caminhos dos
|
|
133
|
+
arquivos criados.
|
|
101
134
|
|
|
102
|
-
### 6. Cada task
|
|
135
|
+
### 6. Cada task tem spec em `EXECUTION/task-<id>.md`
|
|
103
136
|
Spec detalhada com: objetivo, arquivos a criar/modificar, validation gates,
|
|
104
|
-
testes esperados. O `subtask_prompt`
|
|
105
|
-
|
|
106
|
-
executar.
|
|
137
|
+
testes esperados. O `subtask_prompt` referencia `spec_file` para você ler na
|
|
138
|
+
hora de executar.
|
|
107
139
|
|
|
108
140
|
## Geração: o que o `/generate-tasks` deve produzir
|
|
109
141
|
|
|
110
142
|
Sempre os **três artefatos juntos**:
|
|
111
143
|
|
|
112
|
-
1. **`DARE/TASKS.md`** — tabela master
|
|
113
|
-
2. **`DARE/dare-dag.yaml`** — grafo executável
|
|
144
|
+
1. **`DARE/TASKS.md`** — tabela master para humanos
|
|
145
|
+
2. **`DARE/dare-dag.yaml`** — grafo executável
|
|
114
146
|
3. **`DARE/EXECUTION/task-<id>.md`** — uma spec por task
|
|
115
147
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
estar consistentes (mesmo `id`, mesmo `depends_on`, mesma `complexity`).
|
|
119
|
-
|
|
120
|
-
## Execução: como rodar o DAG
|
|
121
|
-
|
|
122
|
-
```bash
|
|
123
|
-
# Paralelo (recomendado) — runner padrão é cursor
|
|
124
|
-
dare execute --parallel
|
|
125
|
-
|
|
126
|
-
# Sequencial (debug)
|
|
127
|
-
dare execute
|
|
128
|
-
|
|
129
|
-
# Task única
|
|
130
|
-
dare execute --task task-003
|
|
131
|
-
|
|
132
|
-
# Resume — só PENDING/FAILED
|
|
133
|
-
dare execute --parallel --resume
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
Variáveis de ambiente:
|
|
137
|
-
- `CURSOR_API_KEY` — necessário para runner cursor
|
|
138
|
-
- `ANTHROPIC_API_KEY` — runner claude
|
|
139
|
-
- `ANTIGRAVITY_API_KEY` — runner antigravity
|
|
148
|
+
Os três precisam estar consistentes (mesmos `id`s, mesmos `depends_on`,
|
|
149
|
+
mesma `complexity`). Inconsistência aqui quebra a execução.
|
|
140
150
|
|
|
141
151
|
## Canvas ao vivo (`DARE/.canvas.md`)
|
|
142
152
|
|
|
143
|
-
O
|
|
153
|
+
O CLI reescreve `DARE/.canvas.md` a cada `dare execute --complete/--fail`:
|
|
144
154
|
|
|
145
155
|
```
|
|
146
156
|
| ID | Title | Status | Duration | Tokens |
|
|
@@ -150,24 +160,24 @@ O runner reescreve `DARE/.canvas.md` a cada transição de status:
|
|
|
150
160
|
| task-003 | Core endpoints | ⏳ PENDING | - | - |
|
|
151
161
|
```
|
|
152
162
|
|
|
153
|
-
Status
|
|
163
|
+
Status: `PENDING` ⏳ · `RUNNING` 🔄 · `DONE` ✅ · `FAILED` ❌ · `SKIPPED` ⏭️
|
|
154
164
|
|
|
155
|
-
`SKIPPED`
|
|
156
|
-
|
|
165
|
+
`SKIPPED` é automático quando uma dependência falha — você não precisa fazer
|
|
166
|
+
nada; o CLI cuida do cascade.
|
|
157
167
|
|
|
158
168
|
## Erros comuns ao construir DAG
|
|
159
169
|
|
|
160
170
|
| Erro | Sintoma | Como corrigir |
|
|
161
171
|
|------|---------|---------------|
|
|
162
|
-
| Ciclo em `depends_on` | `Circular dependency detected: <id>` | Reveja
|
|
163
|
-
| `id` duplicado | Comportamento indefinido
|
|
164
|
-
| `depends_on` aponta para `id` inexistente | `Task not found: <id>` | Corrija
|
|
165
|
-
| Tudo em rank 0
|
|
166
|
-
| Cadeia linear longa | Sem ganho de paralelismo | Reveja se as
|
|
172
|
+
| Ciclo em `depends_on` | `Circular dependency detected: <id>` | Reveja, retire a aresta cíclica |
|
|
173
|
+
| `id` duplicado | Comportamento indefinido | Renomeie |
|
|
174
|
+
| `depends_on` aponta para `id` inexistente | `Task not found: <id>` | Corrija nome |
|
|
175
|
+
| Tudo em rank 0 | Conflito de escrita no mesmo arquivo | Adicione `depends_on` quando há contenção |
|
|
176
|
+
| Cadeia linear longa | Sem ganho de paralelismo | Reveja se as deps são reais |
|
|
167
177
|
|
|
168
178
|
## Checklist antes de aprovar um DAG
|
|
169
179
|
|
|
170
|
-
- [ ] Pelo menos 2 tasks no rank 0
|
|
180
|
+
- [ ] Pelo menos 2 tasks no rank 0
|
|
171
181
|
- [ ] Cada `subtask_prompt` é executável sem contexto adicional
|
|
172
182
|
- [ ] Tasks de teste/doc dependem da implementação correspondente
|
|
173
183
|
- [ ] `complexity` reflete o esforço real (não tudo HIGH)
|