@dewtech/dare-cli 2.0.1 → 2.2.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 (67) hide show
  1. package/README.md +33 -6
  2. package/dist/__tests__/dag-converter.test.js +114 -0
  3. package/dist/__tests__/dag-converter.test.js.map +1 -1
  4. package/dist/__tests__/dag-runner/adapters.test.d.ts +2 -0
  5. package/dist/__tests__/dag-runner/adapters.test.d.ts.map +1 -0
  6. package/dist/__tests__/dag-runner/adapters.test.js +134 -0
  7. package/dist/__tests__/dag-runner/adapters.test.js.map +1 -0
  8. package/dist/__tests__/dag-runner/utils.test.d.ts +2 -0
  9. package/dist/__tests__/dag-runner/utils.test.d.ts.map +1 -0
  10. package/dist/__tests__/dag-runner/utils.test.js +75 -0
  11. package/dist/__tests__/dag-runner/utils.test.js.map +1 -0
  12. package/dist/commands/blueprint.d.ts +14 -0
  13. package/dist/commands/blueprint.d.ts.map +1 -1
  14. package/dist/commands/blueprint.js +249 -116
  15. package/dist/commands/blueprint.js.map +1 -1
  16. package/dist/commands/execute.d.ts.map +1 -1
  17. package/dist/commands/execute.js +38 -30
  18. package/dist/commands/execute.js.map +1 -1
  19. package/dist/dag-runner/adapters/antigravity.d.ts +6 -0
  20. package/dist/dag-runner/adapters/antigravity.d.ts.map +1 -0
  21. package/dist/dag-runner/adapters/antigravity.js +54 -0
  22. package/dist/dag-runner/adapters/antigravity.js.map +1 -0
  23. package/dist/dag-runner/adapters/claude.d.ts +6 -0
  24. package/dist/dag-runner/adapters/claude.d.ts.map +1 -0
  25. package/dist/dag-runner/adapters/claude.js +48 -0
  26. package/dist/dag-runner/adapters/claude.js.map +1 -0
  27. package/dist/dag-runner/adapters/cursor.d.ts +6 -0
  28. package/dist/dag-runner/adapters/cursor.d.ts.map +1 -0
  29. package/dist/dag-runner/adapters/cursor.js +58 -0
  30. package/dist/dag-runner/adapters/cursor.js.map +1 -0
  31. package/dist/dag-runner/adapters/index.d.ts +46 -0
  32. package/dist/dag-runner/adapters/index.d.ts.map +1 -0
  33. package/dist/dag-runner/adapters/index.js +55 -0
  34. package/dist/dag-runner/adapters/index.js.map +1 -0
  35. package/dist/dag-runner/run_dag.d.ts +47 -8
  36. package/dist/dag-runner/run_dag.d.ts.map +1 -1
  37. package/dist/dag-runner/run_dag.js +205 -124
  38. package/dist/dag-runner/run_dag.js.map +1 -1
  39. package/dist/dag-runner/utils/cap-output.d.ts +14 -0
  40. package/dist/dag-runner/utils/cap-output.d.ts.map +1 -0
  41. package/dist/dag-runner/utils/cap-output.js +22 -0
  42. package/dist/dag-runner/utils/cap-output.js.map +1 -0
  43. package/dist/dag-runner/utils/stitch-context.d.ts +24 -0
  44. package/dist/dag-runner/utils/stitch-context.d.ts.map +1 -0
  45. package/dist/dag-runner/utils/stitch-context.js +36 -0
  46. package/dist/dag-runner/utils/stitch-context.js.map +1 -0
  47. package/dist/dag-runner/utils/timeout.d.ts +27 -0
  48. package/dist/dag-runner/utils/timeout.d.ts.map +1 -0
  49. package/dist/dag-runner/utils/timeout.js +55 -0
  50. package/dist/dag-runner/utils/timeout.js.map +1 -0
  51. package/dist/index.d.ts +4 -2
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +2 -1
  54. package/dist/index.js.map +1 -1
  55. package/dist/utils/dag-converter.d.ts +8 -2
  56. package/dist/utils/dag-converter.d.ts.map +1 -1
  57. package/dist/utils/dag-converter.js +116 -21
  58. package/dist/utils/dag-converter.js.map +1 -1
  59. package/package.json +4 -1
  60. package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +172 -0
  61. package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +210 -229
  62. package/templates/ide/claude/.claude/commands/dare-blueprint.md +126 -42
  63. package/templates/ide/claude/.claude/commands/dare-dag-build.md +110 -0
  64. package/templates/ide/claude/.claude/commands/dare-dag-run.md +110 -0
  65. package/templates/ide/cursor/.cursor/commands/generate-tasks.md +117 -20
  66. package/templates/ide/cursor/.cursor/commands/run-dag.md +87 -0
  67. package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +176 -0
@@ -2,133 +2,266 @@ import { Command } from 'commander';
2
2
  import chalk from 'chalk';
3
3
  import fs from 'fs-extra';
4
4
  import path from 'path';
5
+ /**
6
+ * `dare blueprint` — gera o esqueleto dos 4 artefatos da fase de Architect:
7
+ *
8
+ * DARE/BLUEPRINT.md
9
+ * DARE/TASKS.md
10
+ * DARE/dare-dag.yaml
11
+ * DARE/EXECUTION/task-<id>.md (uma por task)
12
+ *
13
+ * O preenchimento real é responsabilidade do agente IA (via `/dare-blueprint`,
14
+ * `/generate-blueprint` ou skill `dare-blueprint`). Este comando apenas
15
+ * inicializa a estrutura com placeholders consistentes — alinhada com o
16
+ * schema canônico definido em `skill-dag-runner` (com `limits`, `models` per
17
+ * runner e `spec_file`). Arquivos já existentes são preservados.
18
+ */
5
19
  export const blueprintCommand = new Command('blueprint')
6
- .description('Generate BLUEPRINT.md and dare-dag.yaml from DESIGN.md')
20
+ .description('Scaffold BLUEPRINT.md, dare-dag.yaml, TASKS.md and EXECUTION/task-*.md from DESIGN.md')
7
21
  .argument('[design-file]', 'Path to DESIGN.md', 'DARE/DESIGN.md')
8
- .action(async (designFile) => {
22
+ .option('-f, --force', 'Overwrite existing files', false)
23
+ .action(async (designFile, options) => {
9
24
  console.log(chalk.blue.bold('\n🏗️ DARE Framework - Blueprint Phase\n'));
10
25
  const dareDir = path.resolve(process.cwd(), 'DARE');
26
+ const executionDir = path.join(dareDir, 'EXECUTION');
11
27
  const designPath = path.resolve(process.cwd(), designFile);
12
- if (!await fs.pathExists(designPath)) {
28
+ if (!(await fs.pathExists(designPath))) {
13
29
  console.error(chalk.red(`❌ DESIGN.md not found at ${designPath}`));
14
30
  console.log(chalk.yellow('Run: dare design "Your project description"'));
15
31
  process.exit(1);
16
32
  }
17
33
  await fs.ensureDir(dareDir);
18
- // Generate BLUEPRINT.md
19
- const blueprintContent = `# BLUEPRINT
20
-
21
- ## Architecture Overview
22
- > Generated from DESIGN.md
23
-
24
- ## Technology Stack
25
- - **Backend:** To be defined
26
- - **Frontend:** To be defined
27
- - **Database:** To be defined
28
- - **Infrastructure:** To be defined
29
-
30
- ## Modules
31
- ### Module 1: Core
32
- - Description
33
- - Endpoints
34
- - Data models
35
-
36
- ## API Contracts
37
- \`\`\`yaml
38
- openapi: 3.0.0
39
- info:
40
- title: Project API
41
- version: 0.1.0
42
- \`\`\`
43
-
44
- ## Database Schema
45
- \`\`\`sql
46
- -- Tables to be defined
47
- \`\`\`
48
-
49
- ---
50
- *Generated by DARE Framework - ${new Date().toISOString()}*
34
+ await fs.ensureDir(executionDir);
35
+ const generatedAt = new Date().toISOString();
36
+ const sampleTasks = [
37
+ {
38
+ id: 'task-001',
39
+ title: 'Setup project structure',
40
+ deps: [],
41
+ complexity: 'LOW',
42
+ prompt: 'Setup the base project structure following DARE/BLUEPRINT.md.\n' +
43
+ 'Create directories, package files, and base dependencies. No business logic yet.\n' +
44
+ 'Validation gate: project builds without errors.',
45
+ },
46
+ {
47
+ id: 'task-002',
48
+ title: 'Implement database schema',
49
+ deps: [],
50
+ complexity: 'MED',
51
+ prompt: 'Implement the database schema as defined in DARE/BLUEPRINT.md.\n' +
52
+ 'Create migrations, models, and seed data with appropriate indexes and FKs.\n' +
53
+ 'Validation gate: migrations run cleanly forward and backward.',
54
+ },
55
+ {
56
+ id: 'task-003',
57
+ title: 'Implement core API endpoints',
58
+ deps: ['task-001', 'task-002'],
59
+ complexity: 'HIGH',
60
+ prompt: 'Implement the core API endpoints as defined in DARE/BLUEPRINT.md.\n' +
61
+ 'Follow the API contracts, validate inputs, and ensure proper error handling.\n' +
62
+ 'Validation gate: all endpoint integration tests pass.',
63
+ },
64
+ {
65
+ id: 'task-004',
66
+ title: 'Implement authentication',
67
+ deps: ['task-001', 'task-002'],
68
+ complexity: 'HIGH',
69
+ prompt: 'Implement authentication and authorization following security best practices.\n' +
70
+ 'Use bcrypt for password hashing, JWT with refresh tokens, and rate limiting.\n' +
71
+ 'Validation gate: security tests pass (no plaintext passwords, tokens expire).',
72
+ },
73
+ {
74
+ id: 'task-005',
75
+ title: 'Write tests',
76
+ deps: ['task-003', 'task-004'],
77
+ complexity: 'MED',
78
+ prompt: 'Write unit and integration tests for all implemented features.\n' +
79
+ 'Aim for >=80% code coverage. Include security tests for auth and validation.\n' +
80
+ 'Validation gate: full test suite passes; coverage threshold met.',
81
+ },
82
+ ];
83
+ const blueprintPath = path.join(dareDir, 'BLUEPRINT.md');
84
+ const dagPath = path.join(dareDir, 'dare-dag.yaml');
85
+ const tasksPath = path.join(dareDir, 'TASKS.md');
86
+ await writeIfMissing(blueprintPath, renderBlueprint(generatedAt), options.force);
87
+ await writeIfMissing(dagPath, renderDag(sampleTasks, generatedAt), options.force);
88
+ await writeIfMissing(tasksPath, renderTasksMd(sampleTasks, generatedAt), options.force);
89
+ for (const t of sampleTasks) {
90
+ const specPath = path.join(executionDir, `${t.id}.md`);
91
+ await writeIfMissing(specPath, renderTaskSpec(t), options.force);
92
+ }
93
+ console.log(chalk.green('✅ Files scaffolded (existing files preserved):'));
94
+ console.log(` ${chalk.cyan('DARE/BLUEPRINT.md')} - Architecture specification`);
95
+ console.log(` ${chalk.cyan('DARE/dare-dag.yaml')} - Task dependency graph (canonical schema)`);
96
+ console.log(` ${chalk.cyan('DARE/TASKS.md')} - Human-readable task table`);
97
+ console.log(` ${chalk.cyan('DARE/EXECUTION/task-*.md')} - One spec per task (${sampleTasks.length} files)\n`);
98
+ console.log(chalk.gray('Tip: real content is filled in by the AI agent (use /dare-blueprint, /generate-blueprint or the dare-blueprint skill).'));
99
+ console.log(chalk.cyan('\nNext: dare execute --parallel\n'));
100
+ });
101
+ async function writeIfMissing(target, content, force) {
102
+ if (!force && (await fs.pathExists(target))) {
103
+ console.log(chalk.gray(` ↷ ${path.relative(process.cwd(), target)} (kept)`));
104
+ return;
105
+ }
106
+ await fs.writeFile(target, content);
107
+ }
108
+ function renderBlueprint(generatedAt) {
109
+ return `# BLUEPRINT
110
+
111
+ ## Architecture Overview
112
+ > Generated from DESIGN.md — fill in with the AI agent (\`/dare-blueprint\` / skill \`dare-blueprint\`).
113
+
114
+ ## Technology Stack
115
+ - **Backend:** To be defined
116
+ - **Frontend:** To be defined
117
+ - **Database:** To be defined
118
+ - **Infrastructure:** To be defined
119
+
120
+ ## Modules
121
+ ### Module 1: Core
122
+ - Description
123
+ - Endpoints
124
+ - Data models
125
+
126
+ ## API Contracts
127
+ \`\`\`yaml
128
+ openapi: 3.0.0
129
+ info:
130
+ title: Project API
131
+ version: 0.1.0
132
+ \`\`\`
133
+
134
+ ## Database Schema
135
+ \`\`\`sql
136
+ -- Tables to be defined
137
+ \`\`\`
138
+
139
+ ## Strategy
140
+ - **Testing:** unit + integration; coverage target
141
+ - **Deploy:** env, infra targets, CI/CD
142
+ - **Security:** OWASP Top 10 baseline + stack-specific
143
+
144
+ ---
145
+ *Scaffolded by DARE Framework — ${generatedAt}*
51
146
  `;
52
- // Generate dare-dag.yaml (DAG Task Runner)
53
- const dagContent = `title: "Project - Development Tasks"
54
- version: "1.0.0"
55
- generated: "${new Date().toISOString()}"
56
-
57
- models:
58
- HIGH: "gpt-4"
59
- MED: "gpt-4o-mini"
60
- LOW: "gpt-4o-mini"
61
-
62
- tasks:
63
- - id: task-001
64
- title: "Setup project structure"
65
- depends_on: []
66
- complexity: LOW
67
- subtask_prompt: |
68
- Setup the base project structure following the BLUEPRINT.md specifications.
69
- Create all necessary directories, configuration files, and base dependencies.
70
-
71
- - id: task-002
72
- title: "Implement database schema"
73
- depends_on: []
74
- complexity: MED
75
- subtask_prompt: |
76
- Implement the database schema as defined in BLUEPRINT.md.
77
- Create migrations, models, and seed data.
78
-
79
- - id: task-003
80
- title: "Implement core API endpoints"
81
- depends_on: [task-001, task-002]
82
- complexity: HIGH
83
- subtask_prompt: |
84
- Implement the core API endpoints as defined in BLUEPRINT.md.
85
- Follow the API contracts and ensure proper error handling.
86
-
87
- - id: task-004
88
- title: "Implement authentication"
89
- depends_on: [task-001, task-002]
90
- complexity: HIGH
91
- subtask_prompt: |
92
- Implement authentication and authorization following security best practices.
93
-
94
- - id: task-005
95
- title: "Write tests"
96
- depends_on: [task-003, task-004]
97
- complexity: MED
98
- subtask_prompt: |
99
- Write unit and integration tests for all implemented features.
100
- Ensure at least 80% code coverage.
147
+ }
148
+ function renderDag(tasks, generatedAt) {
149
+ const tasksYaml = tasks
150
+ .map((t) => {
151
+ const depsYaml = t.deps.length === 0 ? '[]' : `[${t.deps.join(', ')}]`;
152
+ const promptLines = t.prompt
153
+ .split('\n')
154
+ .map((line) => ` ${line}`)
155
+ .join('\n');
156
+ return [
157
+ ` - id: ${t.id}`,
158
+ ` title: "${t.title}"`,
159
+ ` depends_on: ${depsYaml}`,
160
+ ` complexity: ${t.complexity}`,
161
+ ` spec_file: EXECUTION/${t.id}.md`,
162
+ ` subtask_prompt: |`,
163
+ promptLines,
164
+ ].join('\n');
165
+ })
166
+ .join('\n\n');
167
+ return `title: "Project - Development Tasks"
168
+ version: "1.0.0"
169
+ generated: "${generatedAt}"
170
+
171
+ # Limites alinhados com Cursor SDK DAG runner
172
+ limits:
173
+ parent_context_chars: 2000 # snippet de output de cada pai injetado no filho
174
+ task_output_chars: 4000 # cap do output capturado por task
175
+ timeout_seconds: 600 # AbortController por task
176
+
177
+ # Mapeamento complexity → modelo, por runner
178
+ models:
179
+ cursor: { HIGH: gpt-5.3-codex, MED: composer-2, LOW: auto-low }
180
+ claude: { HIGH: claude-sonnet-4-5, MED: claude-haiku-4, LOW: claude-haiku-4 }
181
+ antigravity: { HIGH: gemini-2.5-pro, MED: gemini-2.5-flash, LOW: gemini-2.5-flash }
182
+
183
+ tasks:
184
+ ${tasksYaml}
101
185
  `;
102
- // Generate TASKS.md
103
- const tasksContent = `# TASKS
104
-
105
- ## Status Legend
106
- - PENDING
107
- - 🔄 IN_PROGRESS
108
- - ✅ DONE
109
- - ❌ FAILED
110
- - ⏭️ SKIPPED
111
-
112
- ## Tasks
113
-
114
- | ID | Title | Status | Depends On | Complexity |
115
- |----|-------|--------|------------|------------|
116
- | task-001 | Setup project structure | ⏳ PENDING | - | LOW |
117
- | task-002 | Implement database schema | ⏳ PENDING | - | MED |
118
- | task-003 | Implement core API endpoints | ⏳ PENDING | task-001, task-002 | HIGH |
119
- | task-004 | Implement authentication | ⏳ PENDING | task-001, task-002 | HIGH |
120
- | task-005 | Write tests | ⏳ PENDING | task-003, task-004 | MED |
121
-
122
- ---
123
- *Generated by DARE Framework - ${new Date().toISOString()}*
186
+ }
187
+ function renderTasksMd(tasks, generatedAt) {
188
+ const rows = tasks
189
+ .map((t) => {
190
+ const deps = t.deps.length === 0 ? '—' : t.deps.join(', ');
191
+ return `| ${t.id} | ${t.title} | ⏳ PENDING | ${deps} | ${t.complexity} |`;
192
+ })
193
+ .join('\n');
194
+ return `# TASKS
195
+
196
+ ## Status Legend
197
+ - ⏳ PENDING
198
+ - 🔄 RUNNING
199
+ - ✅ DONE
200
+ - FAILED
201
+ - ⏭️ SKIPPED
202
+
203
+ ## Tasks
204
+
205
+ | ID | Title | Status | Depends On | Complexity |
206
+ |----|-------|--------|------------|------------|
207
+ ${rows}
208
+
209
+ ## How to execute
210
+
211
+ Paralelo (recomendado):
212
+ \`\`\`bash
213
+ dare execute --parallel
214
+ \`\`\`
215
+
216
+ Task única:
217
+ \`\`\`bash
218
+ dare execute --task task-001
219
+ \`\`\`
220
+
221
+ Resume (apenas PENDING/FAILED):
222
+ \`\`\`bash
223
+ dare execute --parallel --resume
224
+ \`\`\`
225
+
226
+ ---
227
+ *Scaffolded by DARE Framework — ${generatedAt}*
124
228
  `;
125
- await fs.writeFile(path.join(dareDir, 'BLUEPRINT.md'), blueprintContent);
126
- await fs.writeFile(path.join(dareDir, 'dare-dag.yaml'), dagContent);
127
- await fs.writeFile(path.join(dareDir, 'TASKS.md'), tasksContent);
128
- console.log(chalk.green('✅ Files generated:'));
129
- console.log(` ${chalk.cyan('DARE/BLUEPRINT.md')} - Architecture specification`);
130
- console.log(` ${chalk.cyan('DARE/dare-dag.yaml')} - Task dependency graph`);
131
- console.log(` ${chalk.cyan('DARE/TASKS.md')} - Task tracking\n`);
132
- console.log(chalk.cyan('Next: dare execute --parallel\n'));
133
- });
229
+ }
230
+ function renderTaskSpec(t) {
231
+ const deps = t.deps.length === 0 ? 'None' : t.deps.join(', ');
232
+ return `# ${t.id}: ${t.title}
233
+
234
+ ## Objective
235
+ ${t.prompt.split('\n')[0]}
236
+
237
+ ## Description
238
+ ${t.prompt}
239
+
240
+ ## Dependencies
241
+ ${deps}
242
+
243
+ ## Complexity
244
+ ${t.complexity}
245
+
246
+ ## Files to create / modify
247
+ - _List the concrete files this task touches._
248
+
249
+ ## Validation Gates
250
+ - [ ] Build passes
251
+ - [ ] Tests pass
252
+ - [ ] Lint clean
253
+ - [ ] _Stack-specific gate (e.g. \`php artisan test\`, \`pytest\`, \`cargo test\`)_
254
+
255
+ ## Tests
256
+ \`\`\`bash
257
+ # Stack-specific test command
258
+ \`\`\`
259
+
260
+ ## Security
261
+ - _OWASP considerations for this task_
262
+
263
+ ## Next task
264
+ - _Suggested follow-up_
265
+ `;
266
+ }
134
267
  //# sourceMappingURL=blueprint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../../src/commands/blueprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KACrD,WAAW,CAAC,wDAAwD,CAAC;KACrE,QAAQ,CAAC,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,UAAkB,EAAE,EAAE;IACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;IAE1E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAE3D,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAE5B,wBAAwB;IACxB,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCA+BI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;CACxD,CAAC;IAEE,2CAA2C;IAC3C,MAAM,UAAU,GAAG;;cAET,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CrC,CAAC;IAEE,oBAAoB;IACpB,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;iCAoBQ,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;CACxD,CAAC;IAEE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACzE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,UAAU,CAAC,CAAC;IACpE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IAEjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,+BAA+B,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../../src/commands/blueprint.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,cAAc,SAwDvB,CAAC"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,cAAc,SAiEvB,CAAC"}
@@ -5,56 +5,64 @@ import path from 'path';
5
5
  import { runDag } from '../dag-runner/run_dag.js';
6
6
  import { convertYamlToDag } from '../utils/dag-converter.js';
7
7
  export const executeCommand = new Command('execute')
8
- .description('Execute tasks using DAG Task Runner')
9
- .argument('[task-id]', 'Specific task ID to execute')
10
- .option('--parallel', 'Execute independent tasks in parallel', false)
11
- .option('--runner <runner>', 'Runner: cursor or antigravity', 'cursor')
8
+ .description('Execute tasks using the DAG Task Runner (real SDK adapters)')
9
+ .option('--parallel', 'Execute independent tasks in parallel by rank', false)
10
+ .option('--runner <runner>', 'Runner: cursor | claude | antigravity', 'cursor')
12
11
  .option('--dag <file>', 'Path to dare-dag.yaml', 'DARE/dare-dag.yaml')
13
- .action(async (taskId, options) => {
12
+ .option('--resume', 'Skip tasks already DONE/SKIPPED', false)
13
+ .option('--task <id>', 'Execute only the task with the given id')
14
+ .action(async (options) => {
14
15
  console.log(chalk.blue.bold('\n⚡ DARE Framework - Execute Phase\n'));
15
16
  const dagPath = path.resolve(process.cwd(), options.dag);
16
- if (!await fs.pathExists(dagPath)) {
17
+ if (!(await fs.pathExists(dagPath))) {
17
18
  console.error(chalk.red(`❌ dare-dag.yaml not found at ${dagPath}`));
18
19
  console.log(chalk.yellow('Run: dare blueprint'));
19
20
  process.exit(1);
20
21
  }
22
+ if (!isKnownRunner(options.runner)) {
23
+ console.error(chalk.red(`❌ Unknown runner "${options.runner}". Use: cursor | claude | antigravity.`));
24
+ process.exit(1);
25
+ }
21
26
  const dagContent = await fs.readFile(dagPath, 'utf-8');
22
27
  const dag = convertYamlToDag(dagContent);
23
- if (taskId) {
24
- const task = dag.tasks.find((t) => t.id === taskId);
28
+ if (options.task) {
29
+ const task = dag.tasks.find((t) => t.id === options.task);
25
30
  if (!task) {
26
- console.error(chalk.red(`❌ Task ${taskId} not found in DAG`));
31
+ console.error(chalk.red(`❌ Task "${options.task}" not found in DAG`));
27
32
  process.exit(1);
28
33
  }
29
- console.log(chalk.cyan(`🎯 Executing single task: ${task.id} - ${task.title}`));
34
+ console.log(chalk.cyan(`🎯 Executing single task: ${task.id} ${task.title}`));
30
35
  }
31
36
  else {
32
- const pendingTasks = dag.tasks.filter((t) => t.status !== 'DONE');
33
- console.log(chalk.cyan(`📋 Tasks to execute: ${pendingTasks.length}`));
34
- console.log(chalk.cyan(`🔀 Mode: ${options.parallel ? 'Parallel (DAG)' : 'Sequential'}`));
35
- console.log(chalk.cyan(`🖥️ Runner: ${options.runner}\n`));
37
+ const remaining = dag.tasks.filter((t) => !options.resume || (t.status !== 'DONE' && t.status !== 'SKIPPED'));
38
+ console.log(chalk.cyan(`📋 Tasks to execute: ${remaining.length} of ${dag.tasks.length}`));
39
+ console.log(chalk.cyan(`🔀 Mode: ${options.parallel ? 'Parallel (by rank)' : 'Sequential'}`));
40
+ console.log(chalk.cyan(`🖥️ Runner: ${options.runner}`));
41
+ if (options.resume)
42
+ console.log(chalk.cyan('🔁 Resume: skipping DONE/SKIPPED'));
43
+ console.log();
36
44
  }
37
- if (options.parallel) {
38
- console.log(chalk.yellow('🚀 Starting DAG Task Runner with parallel execution...\n'));
45
+ try {
39
46
  await runDag(dag, {
40
- parallel: true,
47
+ parallel: options.parallel,
41
48
  runner: options.runner,
42
49
  canvasPath: path.resolve(process.cwd(), 'DARE/.canvas.md'),
50
+ resume: options.resume,
51
+ onlyTaskId: options.task,
43
52
  });
44
53
  }
45
- else {
46
- console.log(chalk.yellow('▶️ Starting sequential execution...\n'));
47
- for (const task of dag.tasks) {
48
- if (task.status === 'DONE') {
49
- console.log(chalk.gray(`⏭️ Skipping ${task.id} (already done)`));
50
- continue;
51
- }
52
- console.log(chalk.cyan(`🔄 Executing ${task.id}: ${task.title}`));
53
- // Sequential execution placeholder
54
- await new Promise((resolve) => setTimeout(resolve, 100));
55
- console.log(chalk.green(`✅ ${task.id} completed`));
56
- }
54
+ catch (err) {
55
+ console.error(chalk.red(`\n❌ Run failed: ${err instanceof Error ? err.message : String(err)}`));
56
+ process.exit(1);
57
+ }
58
+ const failed = dag.tasks.filter((t) => t.status === 'FAILED').length;
59
+ if (failed > 0) {
60
+ console.log(chalk.yellow(`⚠ ${failed} task(s) FAILED. Re-run with --resume after fixing.`));
61
+ process.exit(1);
57
62
  }
58
- console.log(chalk.green.bold('\n✅ Execution complete!\n'));
63
+ console.log(chalk.green.bold('✅ Execution complete!\n'));
59
64
  });
65
+ function isKnownRunner(runner) {
66
+ return runner === 'cursor' || runner === 'claude' || runner === 'antigravity';
67
+ }
60
68
  //# sourceMappingURL=execute.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,qCAAqC,CAAC;KAClD,QAAQ,CAAC,WAAW,EAAE,6BAA6B,CAAC;KACpD,MAAM,CAAC,YAAY,EAAE,uCAAuC,EAAE,KAAK,CAAC;KACpE,MAAM,CAAC,mBAAmB,EAAE,+BAA+B,EAAE,QAAQ,CAAC;KACtE,MAAM,CAAC,cAAc,EAAE,uBAAuB,EAAE,oBAAoB,CAAC;KACrE,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,OAA2D,EAAE,EAAE;IACxG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;IAErE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAEzD,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAEzC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,MAAM,mBAAmB,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClF,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACtF,MAAM,MAAM,CAAC,GAAG,EAAE;YAChB,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC;SAC3D,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC,CAAC;QACpE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;gBAClE,SAAS;YACX,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAClE,mCAAmC;YACnC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type AdapterCallInput, type AdapterCallResult, type RunnerAdapter } from './index.js';
2
+ export declare class AntigravityAdapter implements RunnerAdapter {
3
+ readonly name: "antigravity";
4
+ call({ prompt, complexity, models, signal }: AdapterCallInput): Promise<AdapterCallResult>;
5
+ }
6
+ //# sourceMappingURL=antigravity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../../src/dag-runner/adapters/antigravity.ts"],"names":[],"mappings":"AAWA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAQpB,qBAAa,kBAAmB,YAAW,aAAa;IACtD,QAAQ,CAAC,IAAI,EAAG,aAAa,CAAU;IAEjC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA6BjG"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Antigravity adapter — uses Google Generative AI (Gemini) to execute a task.
3
+ *
4
+ * Antigravity (Google's IDE) does not expose a public agent SDK at the time
5
+ * of writing, so we drive the underlying Gemini family directly. Models in
6
+ * `dare-dag.yaml`'s `models.antigravity` block (e.g. `gemini-2.5-pro`,
7
+ * `gemini-2.5-flash`) are passed as the model id.
8
+ *
9
+ * Env: ANTIGRAVITY_API_KEY (preferred) or GOOGLE_API_KEY (fallback).
10
+ */
11
+ import { GoogleGenerativeAI } from '@google/generative-ai';
12
+ import { AdapterCallError, MissingApiKeyError, pickModel, } from './index.js';
13
+ const SYSTEM_INSTRUCTION = 'You are a DARE subagent executing a single task from a DAG. Follow the prompt ' +
14
+ 'exactly. When you finish, respond with a concise summary of what you did and the ' +
15
+ 'paths of files you created or modified. Keep responses self-contained — your ' +
16
+ 'output may be quoted into a downstream task.';
17
+ export class AntigravityAdapter {
18
+ constructor() {
19
+ this.name = 'antigravity';
20
+ }
21
+ async call({ prompt, complexity, models, signal }) {
22
+ const apiKey = process.env.ANTIGRAVITY_API_KEY ?? process.env.GOOGLE_API_KEY;
23
+ if (!apiKey)
24
+ throw new MissingApiKeyError('antigravity', 'ANTIGRAVITY_API_KEY');
25
+ const modelId = pickModel(models, complexity);
26
+ try {
27
+ const client = new GoogleGenerativeAI(apiKey);
28
+ const model = client.getGenerativeModel({
29
+ model: modelId,
30
+ systemInstruction: SYSTEM_INSTRUCTION,
31
+ });
32
+ const res = await model.generateContent({
33
+ contents: [{ role: 'user', parts: [{ text: prompt }] }],
34
+ }, { signal });
35
+ const text = res.response.text();
36
+ const usage = res.response.usageMetadata;
37
+ const tokens = usage
38
+ ? (usage.promptTokenCount ?? 0) + (usage.candidatesTokenCount ?? 0)
39
+ : undefined;
40
+ return { output: text, tokens };
41
+ }
42
+ catch (err) {
43
+ if (err instanceof MissingApiKeyError)
44
+ throw err;
45
+ throw new AdapterCallError('antigravity', extractErrorMessage(err), err);
46
+ }
47
+ }
48
+ }
49
+ function extractErrorMessage(err) {
50
+ if (err instanceof Error)
51
+ return err.message;
52
+ return String(err);
53
+ }
54
+ //# sourceMappingURL=antigravity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../src/dag-runner/adapters/antigravity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,GAIV,MAAM,YAAY,CAAC;AAEpB,MAAM,kBAAkB,GACtB,gFAAgF;IAChF,mFAAmF;IACnF,+EAA+E;IAC/E,8CAA8C,CAAC;AAEjD,MAAM,OAAO,kBAAkB;IAA/B;QACW,SAAI,GAAG,aAAsB,CAAC;IA+BzC,CAAC;IA7BC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAoB;QACjE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC7E,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,kBAAkB,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;QAEhF,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC;gBACtC,KAAK,EAAE,OAAO;gBACd,iBAAiB,EAAE,kBAAkB;aACtC,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC;gBACtC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;aACxD,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAEf,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YACzC,MAAM,MAAM,GAAG,KAAK;gBAClB,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,CAAC;gBACnE,CAAC,CAAC,SAAS,CAAC;YAEd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,kBAAkB;gBAAE,MAAM,GAAG,CAAC;YACjD,MAAM,IAAI,gBAAgB,CAAC,aAAa,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;CACF;AAED,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type AdapterCallInput, type AdapterCallResult, type RunnerAdapter } from './index.js';
2
+ export declare class ClaudeAdapter implements RunnerAdapter {
3
+ readonly name: "claude";
4
+ call({ prompt, complexity, models, signal }: AdapterCallInput): Promise<AdapterCallResult>;
5
+ }
6
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/dag-runner/adapters/claude.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAQpB,qBAAa,aAAc,YAAW,aAAa;IACjD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAE5B,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA+BjG"}