@dewtech/dare-cli 2.0.0 → 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/README.md +16 -28
- 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/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -4
- 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 +1 -17
- 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/claude/CLAUDE.md +2 -1
- 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
package/README.md
CHANGED
|
@@ -192,40 +192,28 @@ npm run inspect
|
|
|
192
192
|
|
|
193
193
|
---
|
|
194
194
|
|
|
195
|
-
##
|
|
195
|
+
## O que vem com o pacote (v2.0+)
|
|
196
196
|
|
|
197
|
-
A partir da v2.0
|
|
198
|
-
|
|
197
|
+
A partir da v2.0 o `@dewtech/dare-cli` é um **pacote único** que inclui todas as
|
|
198
|
+
funcionalidades do framework DARE. Você não precisa instalar nada além dele:
|
|
199
199
|
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
import { createMcpServer } from '@dewtech/dare-cli/mcp-server';
|
|
203
|
-
import { runDag, type Dag } from '@dewtech/dare-cli/dag-runner';
|
|
204
|
-
import type { GraphNode, EdgeType } from '@dewtech/dare-cli/core';
|
|
200
|
+
```bash
|
|
201
|
+
npm install -g @dewtech/dare-cli
|
|
205
202
|
```
|
|
206
203
|
|
|
207
|
-
|
|
208
|
-
|----------|----------|
|
|
209
|
-
| `@dewtech/dare-cli` | API principal, comandos, gerador de projeto |
|
|
210
|
-
| `@dewtech/dare-cli/core` | Tipos compartilhados (graph, project) |
|
|
211
|
-
| `@dewtech/dare-cli/graphrag` | Engine de grafo de conhecimento (SQLite + FTS5) |
|
|
212
|
-
| `@dewtech/dare-cli/mcp-server` | Servidor MCP local (~95% economia de tokens) |
|
|
213
|
-
| `@dewtech/dare-cli/dag-runner` | DAG Task Runner programático |
|
|
214
|
-
|
|
215
|
-
> **Migração da v1.x:** os pacotes `@dewtech/dare-core`, `@dewtech/dare-graphrag` e
|
|
216
|
-
> `@dewtech/dare-mcp-server` foram consolidados em `@dewtech/dare-cli`. Substitua
|
|
217
|
-
> `from '@dewtech/dare-core'` por `from '@dewtech/dare-cli/core'` (e equivalentes).
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## Binaries
|
|
204
|
+
Isso já dá:
|
|
222
205
|
|
|
223
|
-
|
|
206
|
+
| Componente | O que é |
|
|
207
|
+
|------------|---------|
|
|
208
|
+
| CLI `dare` | `init`, `design`, `blueprint`, `execute`, `discover` |
|
|
209
|
+
| CLI `dare-mcp-server` | Servidor MCP local de contexto (~95% economia de tokens) |
|
|
210
|
+
| Engine GraphRAG | Grafo de conhecimento com SQLite + FTS5 |
|
|
211
|
+
| DAG Task Runner | Execução paralela de tasks com Kahn's algorithm |
|
|
212
|
+
| Tipos e templates | Tudo embutido — sem dependências externas do `@dewtech/*` |
|
|
224
213
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
| `dare-mcp-server` | Inicia o servidor MCP local |
|
|
214
|
+
> **Histórico (v1.x):** os pacotes `@dewtech/dare-core`, `@dewtech/dare-graphrag` e
|
|
215
|
+
> `@dewtech/dare-mcp-server` foram consolidados em `@dewtech/dare-cli` e estão
|
|
216
|
+
> **deprecated** no npm. Não há mais subpacotes para gerenciar.
|
|
229
217
|
|
|
230
218
|
---
|
|
231
219
|
|
|
@@ -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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"}
|