@dewtech/dare-cli 2.2.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.
Files changed (64) hide show
  1. package/README.md +46 -27
  2. package/dist/__tests__/dag-runner/graph-ingest.test.d.ts +2 -0
  3. package/dist/__tests__/dag-runner/graph-ingest.test.d.ts.map +1 -0
  4. package/dist/__tests__/dag-runner/graph-ingest.test.js +105 -0
  5. package/dist/__tests__/dag-runner/graph-ingest.test.js.map +1 -0
  6. package/dist/__tests__/dag-runner/orchestrator.test.d.ts +2 -0
  7. package/dist/__tests__/dag-runner/orchestrator.test.d.ts.map +1 -0
  8. package/dist/__tests__/dag-runner/orchestrator.test.js +107 -0
  9. package/dist/__tests__/dag-runner/orchestrator.test.js.map +1 -0
  10. package/dist/__tests__/dag-runner/utils.test.js +0 -28
  11. package/dist/__tests__/dag-runner/utils.test.js.map +1 -1
  12. package/dist/__tests__/graphrag/json-graph.test.d.ts +2 -0
  13. package/dist/__tests__/graphrag/json-graph.test.d.ts.map +1 -0
  14. package/dist/__tests__/graphrag/json-graph.test.js +57 -0
  15. package/dist/__tests__/graphrag/json-graph.test.js.map +1 -0
  16. package/dist/bin/dare.js +2 -0
  17. package/dist/bin/dare.js.map +1 -1
  18. package/dist/commands/execute.d.ts.map +1 -1
  19. package/dist/commands/execute.js +165 -46
  20. package/dist/commands/execute.js.map +1 -1
  21. package/dist/commands/graph.d.ts +9 -0
  22. package/dist/commands/graph.d.ts.map +1 -0
  23. package/dist/commands/graph.js +155 -0
  24. package/dist/commands/graph.js.map +1 -0
  25. package/dist/dag-runner/graph-ingest.d.ts +17 -0
  26. package/dist/dag-runner/graph-ingest.d.ts.map +1 -0
  27. package/dist/dag-runner/graph-ingest.js +149 -0
  28. package/dist/dag-runner/graph-ingest.js.map +1 -0
  29. package/dist/dag-runner/run_dag.d.ts +47 -30
  30. package/dist/dag-runner/run_dag.d.ts.map +1 -1
  31. package/dist/dag-runner/run_dag.js +145 -166
  32. package/dist/dag-runner/run_dag.js.map +1 -1
  33. package/dist/dag-runner/state-store.d.ts +13 -0
  34. package/dist/dag-runner/state-store.d.ts.map +1 -0
  35. package/dist/dag-runner/state-store.js +69 -0
  36. package/dist/dag-runner/state-store.js.map +1 -0
  37. package/dist/dag-runner/utils/cap-output.d.ts.map +1 -1
  38. package/dist/dag-runner/utils/cap-output.js +5 -2
  39. package/dist/dag-runner/utils/cap-output.js.map +1 -1
  40. package/dist/graphrag/factory.d.ts +25 -0
  41. package/dist/graphrag/factory.d.ts.map +1 -0
  42. package/dist/graphrag/factory.js +66 -0
  43. package/dist/graphrag/factory.js.map +1 -0
  44. package/dist/graphrag/index.d.ts +4 -0
  45. package/dist/graphrag/index.d.ts.map +1 -1
  46. package/dist/graphrag/index.js +2 -0
  47. package/dist/graphrag/index.js.map +1 -1
  48. package/dist/graphrag/json-graph.d.ts +28 -0
  49. package/dist/graphrag/json-graph.d.ts.map +1 -0
  50. package/dist/graphrag/json-graph.js +168 -0
  51. package/dist/graphrag/json-graph.js.map +1 -0
  52. package/dist/graphrag/knowledge-graph.d.ts +33 -0
  53. package/dist/graphrag/knowledge-graph.d.ts.map +1 -0
  54. package/dist/graphrag/knowledge-graph.js +2 -0
  55. package/dist/graphrag/knowledge-graph.js.map +1 -0
  56. package/dist/index.d.ts +13 -8
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +12 -6
  59. package/dist/index.js.map +1 -1
  60. package/package.json +1 -4
  61. package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +99 -96
  62. package/templates/ide/claude/.claude/commands/dare-dag-run.md +68 -69
  63. package/templates/ide/cursor/.cursor/commands/run-dag.md +67 -44
  64. 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 de tasks do método DARE com paralelismo via Kahn's algorithm. Use quando o BLUEPRINT.md está aprovado e é hora de gerar dare-dag.yaml ou executar tasks em paralelo. Garante schema correto, dependências mínimas e specs consistentes.
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 orquestrador da fase de execução paralela do método DARE. Seu papel
9
- é traduzir o BLUEPRINT em um grafo executável (`DARE/dare-dag.yaml`) e
10
- operar o `dare execute --parallel` com confiança.
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 foi aprovado e é hora de gerar tasks
15
- - Existe `DARE/dare-dag.yaml` e você precisa entender, modificar ou rodar
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 em paralelo" ou "gera o DAG"
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 (Execute) do método.
22
- É um grafo direcionado acíclico:
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` (a task filha precisa do output da pai)
38
+ - **Aresta** = `depends_on` (filha precisa do output da pai)
26
39
 
27
- O CLI ordena topologicamente (Kahn's algorithm) e executa tasks do mesmo rank
28
- em paralelo via `Promise.all`. Tasks sem dependências comuns rodam ao mesmo
29
- tempo. Outputs dos pais são costurados no contexto dos filhos (snippet de até
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 cada pai injetado no filho
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 # AbortController por task
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
- ## Regras inegociáveis ao construir o DAG
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
- > Adicione uma dependência **somente** quando a task filha não pode começar
73
- > sem o output da pai (arquivo, schema, decisão exportada).
74
-
75
- | Cenário | Dependência? |
76
- |---------|--------------|
77
- | B precisa do arquivo que A criou | sim |
78
- | B precisa de uma decisão tomada em A | sim |
79
- | B faz coisa similar a A mas independente | não |
80
- | Pesquisa/leitura sem efeito colateral | não — fan out wide |
81
- | Testes do módulo X | sim depende da implementação |
82
- | Docs do módulo X | sim — depende da implementação |
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
- Não use `HIGH` em tudo — encarece sem ganho.
90
+ Comandos úteis:
95
91
 
96
- ### 4. `subtask_prompt` totalmente self-contained
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
- O subagente recebe apenas:
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
- Não vale dizer "use o padrão combinado" ou "como na task-001". Coloque tudo no
104
- prompt ou faça vir pelos pais.
102
+ ### 1. `id` em kebab-case e único
103
+ `task-001`, `auth-jwt`, `db-migrations`.
105
104
 
106
- ### 5. Output capado em 4000 chars
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
- Se a task gera muito, escreva em arquivo e faça o output ser um resumo curto +
109
- caminhos dos arquivos criados.
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
- ### 6. Cada task tem spec em `EXECUTION/task-<id>.md`
129
+ ### 5. Output cap 4000 chars
130
+ Se gerar muito, escreva em arquivo e faça o `--output` ser resumo + caminhos.
112
131
 
113
- Spec detalhada com: objetivo, arquivos a criar/modificar, validation gates,
114
- testes esperados, segurança. O `subtask_prompt` referencia
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
- Quando gerar tasks, produza simultaneamente:
120
-
121
- 1. **`DARE/TASKS.md`** tabela master para humanos
122
- 2. **`DARE/dare-dag.yaml`** grafo executável pelo CLI
123
- 3. **`DARE/EXECUTION/task-<id>.md`** uma spec detalhada por task
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
- Env vars necessárias por runner:
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 runner reescreve `DARE/.canvas.md` a cada mudança de status. Status:
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
- Você não precisa intervir em `SKIPPED` — o runner cuida.
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 | Sintoma | Correção |
157
- |------|---------|----------|
158
- | Ciclo | `Circular dependency detected: <id>` | Retire a aresta cíclica |
159
- | `id` duplicado | Resultado indefinido | Renomeie |
160
- | `depends_on` inexistente | `Task not found: <id>` | Corrija ou adicione |
161
- | Tudo em rank 0 | Conflito de escrita no mesmo arquivo | Adicione dependências reais |
162
- | Cadeia linear | Sem paralelismo | Reveja se as deps são necessárias |
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 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
- - [ ] `TASKS.md` + `dare-dag.yaml` + `EXECUTION/task-*.md` consistentes
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` em paralelo,
4
- respeitando dependências (Kahn's algorithm + execução por rank). O canvas
5
- ao vivo é gravado em `DARE/.canvas.md`.
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 pelo usuário
13
+ - `DARE/dare-dag.yaml` existe e foi aprovado
10
14
  - Specs em `DARE/EXECUTION/task-<id>.md` geradas
11
- - `ANTHROPIC_API_KEY` exportada no ambiente (runner padrão para o Claude)
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 # paralelo, runner claude
17
- /dare-dag-run --resume # só PENDING/FAILED
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 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. Escolher modo de execução
32
+ ### 2. Pegar próximas tasks
36
33
 
37
- | Modo | Comando |
38
- |------|---------|
39
- | Paralelo (recomendado) | `dare execute --parallel --runner claude` |
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
- ### 3. Sugerir abrir o canvas ao vivo
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
- Antes de rodar, peça ao usuário abrir `DARE/.canvas.md` em outra aba do
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
- ### 4. Executar e monitorar
62
+ ### 5. Avançar de rank
63
+
64
+ ```bash
65
+ dare execute --next
66
+ ```
58
67
 
59
- Rode o comando escolhido. Durante a execução:
68
+ Se aparece `✅ All tasks resolved`, todas terminaram. Caso contrário, continue.
60
69
 
61
- - **Não interrompa por `SKIPPED`** — o runner pula automaticamente quando
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
- ### 5. Pós-execução
72
+ ```bash
73
+ dare execute --status
74
+ ```
69
75
 
70
- Ao terminar:
76
+ Para retentar tasks FAILED:
71
77
 
72
- - Atualize `DARE/TASKS.md` com os status finais (DONE/FAILED/SKIPPED)
73
- - Mostre um resumo:
74
- - Total DONE / FAILED / SKIPPED
75
- - Duração total
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
- ## Variáveis de ambiente por runner
83
+ ## Comandos do orquestrador
85
84
 
86
- | Runner | Env var |
87
- |--------|---------|
88
- | `claude` (default no Claude Code) | `ANTHROPIC_API_KEY` |
89
- | `cursor` | `CURSOR_API_KEY` |
90
- | `antigravity` | `ANTIGRAVITY_API_KEY` |
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` | Grafo não foi gerado | `/dare-blueprint` ou `/dare-dag-build` |
97
- | `Circular dependency detected` | Ciclo no grafo | Edite o YAML para remover |
98
- | `ANTHROPIC_API_KEY not set` | Env var faltando | `export ANTHROPIC_API_KEY=...` |
99
- | Cascata de SKIPPED | Pai falhou e bloqueou descendentes | Corrija pai, use `--resume` |
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 do grafo: `DARE/dare-dag.yaml`
106
- - Canvas ao vivo: `DARE/.canvas.md`
107
- - Specs por task: `DARE/EXECUTION/task-*.md`
108
- - Status humano: `DARE/TASKS.md`
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
- Executa o grafo de tasks definido em `DARE/dare-dag.yaml` em paralelo
5
- respeitando dependências (Kahn's algorithm + Promise.all por rank). O canvas
6
- ao vivo é gravado em `DARE/.canvas.md`.
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
- - `CURSOR_API_KEY` exportada no ambiente
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 real)
23
- - Cada `task` tem `id` único, `complexity`, `subtask_prompt`
24
- - Confira `CURSOR_API_KEY`. Se faltar, peça ao usuário exportar.
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
- ### 2. Escolher o modo de execução
38
+ ### 3. Sugerir abrir o canvas
27
39
 
28
- Pergunte ao usuário (ou infira do `$ARGUMENTS`) qual modo:
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
- | Modo | Comando |
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
- ### 3. Abrir o canvas em paralelo à execução
45
+ Para cada task ready:
38
46
 
39
- Antes de rodar, sugira ao usuário abrir `DARE/.canvas.md` em uma aba para
40
- acompanhar o progresso ao vivo. O runner reescreve o arquivo a cada transição
41
- de status.
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
- ### 4. Executar e monitorar
52
+ ```bash
53
+ # Sucesso
54
+ dare execute --complete task-001 --output "Resumo + arquivos criados/modificados (paths)"
44
55
 
45
- Rode o comando escolhido. Durante a execução:
56
+ # Falha
57
+ dare execute --fail task-002 --reason "Mensagem clara da falha"
58
+ ```
46
59
 
47
- - Não interrompa por `SKIPPED` — o runner pula automaticamente quando uma
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
- ### 5. Pós-execução
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
- - Atualize `DARE/TASKS.md` com os status finais (DONE/FAILED/SKIPPED)
58
- - Mostre um resumo: total DONE, FAILED, SKIPPED, duração total, tokens
59
- - Se houver FAILED, sugira diagnóstico e re-execução com `--resume`
60
- - Se tudo DONE, parabenize e oriente próximo blueprint/feature
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
- ## Variáveis de ambiente por runner
84
+ ## Comandos disponíveis
63
85
 
64
- | Runner | Env var |
65
- |--------|---------|
66
- | `cursor` (default) | `CURSOR_API_KEY` |
67
- | `claude` | `ANTHROPIC_API_KEY` |
68
- | `antigravity` | `ANTIGRAVITY_API_KEY` |
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` | Arquivo não foi gerado | Rode `/generate-tasks` |
75
- | `Circular dependency detected` | Ciclo no grafo | Edite `dare-dag.yaml` para remover |
76
- | `CURSOR_API_KEY not set` | Env var faltando | `export CURSOR_API_KEY=...` |
77
- | Muitos `SKIPPED` em cascata | Pai falhou e bloqueou descendentes | Corrija o pai e use `--resume` |
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` (regras do DAG)
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`