@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 CHANGED
@@ -192,40 +192,28 @@ npm run inspect
192
192
 
193
193
  ---
194
194
 
195
- ## Sub-module imports (v2.0+)
195
+ ## O que vem com o pacote (v2.0+)
196
196
 
197
- A partir da v2.0 todos os módulos vivem em `@dewtech/dare-cli`. Use sub-path exports
198
- para importar programaticamente:
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
- ```ts
201
- import { GraphRAG } from '@dewtech/dare-cli/graphrag';
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
- | Sub-path | Conteúdo |
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 dá:
222
205
 
223
- Após `npm install -g @dewtech/dare-cli`:
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
- | Comando | Função |
226
- |---------|--------|
227
- | `dare` | CLI principal (`init`, `design`, `blueprint`, `execute`, `discover`) |
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 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":"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"}
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,SAwIzB,CAAC"}
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('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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"}