@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.
- package/README.md +33 -6
- package/dist/__tests__/dag-converter.test.js +114 -0
- package/dist/__tests__/dag-converter.test.js.map +1 -1
- 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/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 +75 -0
- package/dist/__tests__/dag-runner/utils.test.js.map +1 -0
- package/dist/commands/blueprint.d.ts +14 -0
- package/dist/commands/blueprint.d.ts.map +1 -1
- package/dist/commands/blueprint.js +249 -116
- package/dist/commands/blueprint.js.map +1 -1
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +38 -30
- package/dist/commands/execute.js.map +1 -1
- 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/run_dag.d.ts +47 -8
- package/dist/dag-runner/run_dag.d.ts.map +1 -1
- package/dist/dag-runner/run_dag.js +205 -124
- package/dist/dag-runner/run_dag.js.map +1 -1
- 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 +22 -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/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/dag-converter.d.ts +8 -2
- package/dist/utils/dag-converter.d.ts.map +1 -1
- package/dist/utils/dag-converter.js +116 -21
- package/dist/utils/dag-converter.js.map +1 -1
- package/package.json +4 -1
- package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +172 -0
- package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +210 -229
- package/templates/ide/claude/.claude/commands/dare-blueprint.md +126 -42
- package/templates/ide/claude/.claude/commands/dare-dag-build.md +110 -0
- package/templates/ide/claude/.claude/commands/dare-dag-run.md +110 -0
- package/templates/ide/cursor/.cursor/commands/generate-tasks.md +117 -20
- package/templates/ide/cursor/.cursor/commands/run-dag.md +87 -0
- 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('
|
|
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
|
-
.
|
|
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
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
subtask_prompt:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
title: "
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
##
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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,
|
|
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;
|
|
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"}
|
package/dist/commands/execute.js
CHANGED
|
@@ -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
|
-
.
|
|
10
|
-
.option('--
|
|
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
|
-
.
|
|
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 (
|
|
24
|
-
const task = dag.tasks.find((t) => t.id ===
|
|
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 ${
|
|
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}
|
|
34
|
+
console.log(chalk.cyan(`🎯 Executing single task: ${task.id} — ${task.title}`));
|
|
30
35
|
}
|
|
31
36
|
else {
|
|
32
|
-
const
|
|
33
|
-
console.log(chalk.cyan(`📋 Tasks to execute: ${
|
|
34
|
-
console.log(chalk.cyan(`🔀 Mode: ${options.parallel ? 'Parallel (
|
|
35
|
-
console.log(chalk.cyan(`🖥️ Runner: ${options.runner}
|
|
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
|
-
|
|
38
|
-
console.log(chalk.yellow('🚀 Starting DAG Task Runner with parallel execution...\n'));
|
|
45
|
+
try {
|
|
39
46
|
await runDag(dag, {
|
|
40
|
-
parallel:
|
|
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
|
-
|
|
46
|
-
console.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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('
|
|
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,
|
|
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"}
|