@dewtech/dare-cli 2.0.1 → 2.1.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/dist/__tests__/dag-converter.test.js +114 -0
- package/dist/__tests__/dag-converter.test.js.map +1 -1
- 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/dag-runner/run_dag.d.ts +32 -3
- package/dist/dag-runner/run_dag.d.ts.map +1 -1
- package/dist/dag-runner/run_dag.js +6 -0
- package/dist/dag-runner/run_dag.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 +1 -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
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { convertYamlToDag, convertDagToYaml } from '../utils/dag-converter.js';
|
|
3
|
+
import { DEFAULT_DAG_LIMITS } from '../dag-runner/run_dag.js';
|
|
2
4
|
// Inline DAG validation logic
|
|
3
5
|
function validateDAG(dag) {
|
|
4
6
|
const errors = [];
|
|
@@ -131,4 +133,116 @@ describe('DAG Converter', () => {
|
|
|
131
133
|
});
|
|
132
134
|
});
|
|
133
135
|
});
|
|
136
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
137
|
+
// Real converter tests (v2.1 schema with limits + per-runner models)
|
|
138
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
139
|
+
describe('convertYamlToDag (v2.1 schema)', () => {
|
|
140
|
+
const v21Yaml = `title: "Sample"
|
|
141
|
+
version: "1.0.0"
|
|
142
|
+
|
|
143
|
+
limits:
|
|
144
|
+
parent_context_chars: 1500
|
|
145
|
+
task_output_chars: 3000
|
|
146
|
+
timeout_seconds: 300
|
|
147
|
+
|
|
148
|
+
models:
|
|
149
|
+
cursor: { HIGH: gpt-5.3-codex, MED: composer-2, LOW: auto-low }
|
|
150
|
+
claude: { HIGH: claude-sonnet-4-5, MED: claude-haiku-4, LOW: claude-haiku-4 }
|
|
151
|
+
antigravity: { HIGH: gemini-2.5-pro, MED: gemini-2.5-flash, LOW: gemini-2.5-flash }
|
|
152
|
+
|
|
153
|
+
tasks:
|
|
154
|
+
- id: task-001
|
|
155
|
+
title: "Setup"
|
|
156
|
+
depends_on: []
|
|
157
|
+
complexity: LOW
|
|
158
|
+
spec_file: EXECUTION/task-001.md
|
|
159
|
+
subtask_prompt: |
|
|
160
|
+
Do the setup.
|
|
161
|
+
- id: task-002
|
|
162
|
+
title: "Implement"
|
|
163
|
+
depends_on: [task-001]
|
|
164
|
+
complexity: HIGH
|
|
165
|
+
subtask_prompt: |
|
|
166
|
+
Build the thing.
|
|
167
|
+
`;
|
|
168
|
+
it('parses limits block', () => {
|
|
169
|
+
const dag = convertYamlToDag(v21Yaml);
|
|
170
|
+
expect(dag.limits).toEqual({
|
|
171
|
+
parent_context_chars: 1500,
|
|
172
|
+
task_output_chars: 3000,
|
|
173
|
+
timeout_seconds: 300,
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
it('parses per-runner models', () => {
|
|
177
|
+
const dag = convertYamlToDag(v21Yaml);
|
|
178
|
+
expect(dag.models.cursor?.HIGH).toBe('gpt-5.3-codex');
|
|
179
|
+
expect(dag.models.claude?.MED).toBe('claude-haiku-4');
|
|
180
|
+
expect(dag.models.antigravity?.LOW).toBe('gemini-2.5-flash');
|
|
181
|
+
});
|
|
182
|
+
it('parses spec_file when present', () => {
|
|
183
|
+
const dag = convertYamlToDag(v21Yaml);
|
|
184
|
+
expect(dag.tasks[0].spec_file).toBe('EXECUTION/task-001.md');
|
|
185
|
+
expect(dag.tasks[1].spec_file).toBeUndefined();
|
|
186
|
+
});
|
|
187
|
+
it('initializes status as PENDING for every task', () => {
|
|
188
|
+
const dag = convertYamlToDag(v21Yaml);
|
|
189
|
+
for (const t of dag.tasks) {
|
|
190
|
+
expect(t.status).toBe('PENDING');
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
describe('convertYamlToDag (legacy flat models)', () => {
|
|
195
|
+
const legacyYaml = `title: "Old"
|
|
196
|
+
version: "1.0.0"
|
|
197
|
+
models:
|
|
198
|
+
HIGH: "gpt-4"
|
|
199
|
+
MED: "gpt-4o-mini"
|
|
200
|
+
LOW: "gpt-4o-mini"
|
|
201
|
+
tasks:
|
|
202
|
+
- id: task-1
|
|
203
|
+
depends_on: []
|
|
204
|
+
complexity: MED
|
|
205
|
+
subtask_prompt: "noop"
|
|
206
|
+
`;
|
|
207
|
+
it('replicates flat models under each known runner', () => {
|
|
208
|
+
const dag = convertYamlToDag(legacyYaml);
|
|
209
|
+
expect(dag.models.cursor?.HIGH).toBe('gpt-4');
|
|
210
|
+
expect(dag.models.claude?.MED).toBe('gpt-4o-mini');
|
|
211
|
+
expect(dag.models.antigravity?.LOW).toBe('gpt-4o-mini');
|
|
212
|
+
});
|
|
213
|
+
it('falls back to default limits when block is absent', () => {
|
|
214
|
+
const dag = convertYamlToDag(legacyYaml);
|
|
215
|
+
expect(dag.limits).toEqual(DEFAULT_DAG_LIMITS);
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
describe('convertDagToYaml round-trip', () => {
|
|
219
|
+
it('preserves limits, models and spec_file across YAML → Dag → YAML → Dag', () => {
|
|
220
|
+
const original = `title: "RT"
|
|
221
|
+
version: "1.0.0"
|
|
222
|
+
limits:
|
|
223
|
+
parent_context_chars: 1234
|
|
224
|
+
task_output_chars: 5678
|
|
225
|
+
timeout_seconds: 90
|
|
226
|
+
models:
|
|
227
|
+
cursor: { HIGH: a, MED: b, LOW: c }
|
|
228
|
+
claude: { HIGH: d, MED: e, LOW: f }
|
|
229
|
+
antigravity: { HIGH: g, MED: h, LOW: i }
|
|
230
|
+
tasks:
|
|
231
|
+
- id: t1
|
|
232
|
+
title: "First"
|
|
233
|
+
depends_on: []
|
|
234
|
+
complexity: HIGH
|
|
235
|
+
spec_file: EXECUTION/t1.md
|
|
236
|
+
subtask_prompt: |
|
|
237
|
+
go.
|
|
238
|
+
`;
|
|
239
|
+
const dag1 = convertYamlToDag(original);
|
|
240
|
+
const yaml2 = convertDagToYaml(dag1);
|
|
241
|
+
const dag2 = convertYamlToDag(yaml2);
|
|
242
|
+
expect(dag2.limits).toEqual(dag1.limits);
|
|
243
|
+
expect(dag2.models).toEqual(dag1.models);
|
|
244
|
+
expect(dag2.tasks[0].spec_file).toBe('EXECUTION/t1.md');
|
|
245
|
+
expect(dag2.tasks[0].complexity).toBe('HIGH');
|
|
246
|
+
});
|
|
247
|
+
});
|
|
134
248
|
//# sourceMappingURL=dag-converter.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dag-converter.test.js","sourceRoot":"","sources":["../../src/__tests__/dag-converter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"dag-converter.test.js","sourceRoot":"","sources":["../../src/__tests__/dag-converter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* `dare blueprint` — gera o esqueleto dos 4 artefatos da fase de Architect:
|
|
4
|
+
*
|
|
5
|
+
* DARE/BLUEPRINT.md
|
|
6
|
+
* DARE/TASKS.md
|
|
7
|
+
* DARE/dare-dag.yaml
|
|
8
|
+
* DARE/EXECUTION/task-<id>.md (uma por task)
|
|
9
|
+
*
|
|
10
|
+
* O preenchimento real é responsabilidade do agente IA (via `/dare-blueprint`,
|
|
11
|
+
* `/generate-blueprint` ou skill `dare-blueprint`). Este comando apenas
|
|
12
|
+
* inicializa a estrutura com placeholders consistentes — alinhada com o
|
|
13
|
+
* schema canônico definido em `skill-dag-runner` (com `limits`, `models` per
|
|
14
|
+
* runner e `spec_file`). Arquivos já existentes são preservados.
|
|
15
|
+
*/
|
|
2
16
|
export declare const blueprintCommand: Command;
|
|
3
17
|
//# sourceMappingURL=blueprint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint.d.ts","sourceRoot":"","sources":["../../src/commands/blueprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"blueprint.d.ts","sourceRoot":"","sources":["../../src/commands/blueprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,SA8FzB,CAAC"}
|
|
@@ -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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"}
|
|
@@ -3,23 +3,52 @@
|
|
|
3
3
|
* Adapted from Cursor Cookbook DAG Task Runner pattern
|
|
4
4
|
* Executes tasks in parallel based on dependency graph
|
|
5
5
|
*/
|
|
6
|
+
export type Complexity = 'LOW' | 'MED' | 'HIGH';
|
|
7
|
+
export type RunnerName = 'cursor' | 'claude' | 'antigravity';
|
|
8
|
+
export type TaskStatus = 'PENDING' | 'RUNNING' | 'DONE' | 'FAILED' | 'SKIPPED';
|
|
6
9
|
export interface DagTask {
|
|
7
10
|
id: string;
|
|
8
11
|
title: string;
|
|
9
12
|
depends_on: string[];
|
|
10
|
-
complexity:
|
|
13
|
+
complexity: Complexity;
|
|
11
14
|
subtask_prompt: string;
|
|
12
|
-
|
|
15
|
+
/** Optional path (relative to project root) to a spec file with detailed instructions. */
|
|
16
|
+
spec_file?: string;
|
|
17
|
+
status?: TaskStatus;
|
|
13
18
|
output?: string;
|
|
14
19
|
tokens?: number;
|
|
15
20
|
duration?: number;
|
|
16
21
|
}
|
|
22
|
+
/** Hard limits applied per task during execution. */
|
|
23
|
+
export interface DagLimits {
|
|
24
|
+
/** Snippet (in chars) of each parent's output injected into a child's context. */
|
|
25
|
+
parent_context_chars: number;
|
|
26
|
+
/** Cap (in chars) on the captured output of a single task. */
|
|
27
|
+
task_output_chars: number;
|
|
28
|
+
/** Per-task timeout, used by AbortController. */
|
|
29
|
+
timeout_seconds: number;
|
|
30
|
+
}
|
|
31
|
+
/** complexity → model mapping. */
|
|
32
|
+
export type DagModelMap = Record<Complexity, string>;
|
|
33
|
+
/**
|
|
34
|
+
* Full models block. New schema is per-runner (cursor / claude / antigravity).
|
|
35
|
+
* Legacy flat schema (HIGH/MED/LOW directly) is also accepted by the parser
|
|
36
|
+
* and normalized to the runner-keyed form on read.
|
|
37
|
+
*/
|
|
38
|
+
export type DagModels = Partial<Record<RunnerName, DagModelMap>>;
|
|
17
39
|
export interface Dag {
|
|
18
40
|
title: string;
|
|
19
41
|
version: string;
|
|
20
|
-
|
|
42
|
+
/** Optional ISO timestamp set when the YAML was generated. */
|
|
43
|
+
generated?: string;
|
|
44
|
+
/** Optional execution limits (defaults applied if missing). */
|
|
45
|
+
limits?: DagLimits;
|
|
46
|
+
/** Per-runner model mapping. */
|
|
47
|
+
models: DagModels;
|
|
21
48
|
tasks: DagTask[];
|
|
22
49
|
}
|
|
50
|
+
/** Defaults used when a YAML omits the `limits` block. */
|
|
51
|
+
export declare const DEFAULT_DAG_LIMITS: DagLimits;
|
|
23
52
|
export interface RunDagOptions {
|
|
24
53
|
parallel: boolean;
|
|
25
54
|
runner: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run_dag.d.ts","sourceRoot":"","sources":["../../src/dag-runner/run_dag.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"run_dag.d.ts","sourceRoot":"","sources":["../../src/dag-runner/run_dag.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAChD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;AAC7D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/E,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qDAAqD;AACrD,MAAM,WAAW,SAAS;IACxB,kFAAkF;IAClF,oBAAoB,EAAE,MAAM,CAAC;IAC7B,8DAA8D;IAC9D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,kCAAkC;AAClC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AAEjE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,gCAAgC;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,EAAE,SAIhC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AA2FD;;GAEG;AACH,wBAAsB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4F5E"}
|