@dewtech/dare-cli 2.4.0 → 2.4.1
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 +19 -0
- package/dist/__tests__/dag-runner/dag-viz.test.d.ts +2 -0
- package/dist/__tests__/dag-runner/dag-viz.test.d.ts.map +1 -0
- package/dist/__tests__/dag-runner/dag-viz.test.js +72 -0
- package/dist/__tests__/dag-runner/dag-viz.test.js.map +1 -0
- package/dist/bin/dare.js +2 -0
- package/dist/bin/dare.js.map +1 -1
- package/dist/commands/blueprint.d.ts.map +1 -1
- package/dist/commands/blueprint.js +16 -2
- package/dist/commands/blueprint.js.map +1 -1
- package/dist/commands/dag.d.ts +11 -0
- package/dist/commands/dag.d.ts.map +1 -0
- package/dist/commands/dag.js +148 -0
- package/dist/commands/dag.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +17 -3
- package/templates/ide/claude/.claude/commands/dare-blueprint.md +15 -2
- package/templates/ide/cursor/.cursor/commands/generate-tasks.md +16 -4
package/README.md
CHANGED
|
@@ -162,6 +162,25 @@ ready tasks every time the state changes. Pair with the IDE agent firing
|
|
|
162
162
|
dare execute --watch
|
|
163
163
|
```
|
|
164
164
|
|
|
165
|
+
### `dare dag`
|
|
166
|
+
|
|
167
|
+
Inspect and visualize the **static task DAG** declared in `dare-dag.yaml` —
|
|
168
|
+
distinct from `dare graph`, which inspects the populated knowledge graph
|
|
169
|
+
(only contains tasks already executed).
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
dare dag viz # Mermaid to stdout
|
|
173
|
+
dare dag viz -o DARE/dag-graph.mmd # Mermaid file
|
|
174
|
+
dare dag viz -f dot -o DARE/dag-graph.dot # DOT (Graphviz)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
The Mermaid output groups tasks into rank subgraphs and colors nodes by
|
|
178
|
+
status (`PENDING` / `RUNNING` / `DONE` / `FAILED` / `SKIPPED`), so you can
|
|
179
|
+
**see the execution plan before running any task**.
|
|
180
|
+
|
|
181
|
+
> `dare blueprint` writes `DARE/dag-graph.mmd` automatically — open it in
|
|
182
|
+
> your editor with a Mermaid preview to see the static graph immediately.
|
|
183
|
+
|
|
165
184
|
### `dare graph`
|
|
166
185
|
|
|
167
186
|
Inspect the project's knowledge graph. The graph is populated automatically
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag-viz.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/dag-runner/dag-viz.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { renderDagMermaid, renderDagDot } from '../../commands/dag.js';
|
|
3
|
+
const sampleDag = () => ({
|
|
4
|
+
title: 'Sample',
|
|
5
|
+
version: '1.0.0',
|
|
6
|
+
models: { cursor: { HIGH: 'h', MED: 'm', LOW: 'l' } },
|
|
7
|
+
tasks: [
|
|
8
|
+
{ id: 'task-001', title: 'Setup', depends_on: [], complexity: 'LOW', subtask_prompt: 'go', status: 'DONE' },
|
|
9
|
+
{ id: 'task-002', title: 'DB', depends_on: [], complexity: 'MED', subtask_prompt: 'go', status: 'PENDING' },
|
|
10
|
+
{ id: 'task-003', title: 'API', depends_on: ['task-001', 'task-002'], complexity: 'HIGH', subtask_prompt: 'go', status: 'FAILED' },
|
|
11
|
+
{ id: 'task-004', title: 'Tests', depends_on: ['task-003'], complexity: 'MED', subtask_prompt: 'go', status: 'SKIPPED' },
|
|
12
|
+
],
|
|
13
|
+
});
|
|
14
|
+
describe('renderDagMermaid', () => {
|
|
15
|
+
it('emits a graph LR diagram', () => {
|
|
16
|
+
const out = renderDagMermaid(sampleDag());
|
|
17
|
+
expect(out).toMatch(/^graph LR/m);
|
|
18
|
+
});
|
|
19
|
+
it('groups tasks into rank subgraphs', () => {
|
|
20
|
+
const out = renderDagMermaid(sampleDag());
|
|
21
|
+
expect(out).toMatch(/subgraph rank_0/);
|
|
22
|
+
expect(out).toMatch(/subgraph rank_1/);
|
|
23
|
+
expect(out).toMatch(/subgraph rank_2/);
|
|
24
|
+
});
|
|
25
|
+
it('emits one edge per dependency', () => {
|
|
26
|
+
const out = renderDagMermaid(sampleDag());
|
|
27
|
+
expect(out).toMatch(/task_001 --> task_003/);
|
|
28
|
+
expect(out).toMatch(/task_002 --> task_003/);
|
|
29
|
+
expect(out).toMatch(/task_003 --> task_004/);
|
|
30
|
+
});
|
|
31
|
+
it('applies status classes', () => {
|
|
32
|
+
const out = renderDagMermaid(sampleDag());
|
|
33
|
+
expect(out).toMatch(/class task_001 st_done/);
|
|
34
|
+
expect(out).toMatch(/class task_002 st_pending/);
|
|
35
|
+
expect(out).toMatch(/class task_003 st_failed/);
|
|
36
|
+
expect(out).toMatch(/class task_004 st_skipped/);
|
|
37
|
+
// classDef definitions present
|
|
38
|
+
expect(out).toMatch(/classDef st_done/);
|
|
39
|
+
expect(out).toMatch(/classDef st_failed/);
|
|
40
|
+
});
|
|
41
|
+
it('shows status icons in node labels', () => {
|
|
42
|
+
const out = renderDagMermaid(sampleDag());
|
|
43
|
+
expect(out).toContain('✅ DONE');
|
|
44
|
+
expect(out).toContain('⏳ PENDING');
|
|
45
|
+
expect(out).toContain('❌ FAILED');
|
|
46
|
+
expect(out).toContain('⏭️ SKIPPED');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe('renderDagDot', () => {
|
|
50
|
+
it('emits a digraph with rankdir=LR', () => {
|
|
51
|
+
const out = renderDagDot(sampleDag());
|
|
52
|
+
expect(out).toMatch(/^digraph DareDAG/);
|
|
53
|
+
expect(out).toMatch(/rankdir=LR/);
|
|
54
|
+
});
|
|
55
|
+
it('emits one labelled node per task', () => {
|
|
56
|
+
const out = renderDagDot(sampleDag());
|
|
57
|
+
expect(out).toMatch(/"task-001".*Setup/);
|
|
58
|
+
expect(out).toMatch(/"task-003".*API/);
|
|
59
|
+
});
|
|
60
|
+
it('emits one edge per dependency using arrow syntax', () => {
|
|
61
|
+
const out = renderDagDot(sampleDag());
|
|
62
|
+
expect(out).toMatch(/"task-001" -> "task-003"/);
|
|
63
|
+
expect(out).toMatch(/"task-002" -> "task-003"/);
|
|
64
|
+
expect(out).toMatch(/"task-003" -> "task-004"/);
|
|
65
|
+
});
|
|
66
|
+
it('colors fillcolor by status', () => {
|
|
67
|
+
const out = renderDagDot(sampleDag());
|
|
68
|
+
expect(out).toMatch(/fillcolor="#dcfce7"/); // done
|
|
69
|
+
expect(out).toMatch(/fillcolor="#fee2e2"/); // failed
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=dag-viz.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag-viz.test.js","sourceRoot":"","sources":["../../../src/__tests__/dag-runner/dag-viz.test.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/dare.js
CHANGED
|
@@ -7,6 +7,7 @@ import { blueprintCommand } from '../commands/blueprint.js';
|
|
|
7
7
|
import { executeCommand } from '../commands/execute.js';
|
|
8
8
|
import { discoverCommand } from '../commands/discover.js';
|
|
9
9
|
import { graphCommand } from '../commands/graph.js';
|
|
10
|
+
import { dagCommand } from '../commands/dag.js';
|
|
10
11
|
import { infoCommand } from '../commands/info.js';
|
|
11
12
|
import { validateCommand } from '../commands/validate.js';
|
|
12
13
|
const require = createRequire(import.meta.url);
|
|
@@ -22,6 +23,7 @@ program.addCommand(designCommand);
|
|
|
22
23
|
program.addCommand(blueprintCommand);
|
|
23
24
|
program.addCommand(executeCommand);
|
|
24
25
|
program.addCommand(graphCommand);
|
|
26
|
+
program.addCommand(dagCommand);
|
|
25
27
|
program.addCommand(validateCommand);
|
|
26
28
|
program.addCommand(infoCommand);
|
|
27
29
|
program.parse(process.argv);
|
package/dist/bin/dare.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dare.js","sourceRoot":"","sources":["../../src/bin/dare.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEzE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,6FAA6F,CAAC;KAC1G,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"dare.js","sourceRoot":"","sources":["../../src/bin/dare.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEzE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,6FAA6F,CAAC;KAC1G,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"blueprint.d.ts","sourceRoot":"","sources":["../../src/commands/blueprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,SA4GzB,CAAC"}
|
|
@@ -2,6 +2,8 @@ import { Command } from 'commander';
|
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import fs from 'fs-extra';
|
|
4
4
|
import path from 'path';
|
|
5
|
+
import { renderDagMermaid } from './dag.js';
|
|
6
|
+
import { convertYamlToDag } from '../utils/dag-converter.js';
|
|
5
7
|
/**
|
|
6
8
|
* `dare blueprint` — gera o esqueleto dos 4 artefatos da fase de Architect:
|
|
7
9
|
*
|
|
@@ -83,6 +85,7 @@ export const blueprintCommand = new Command('blueprint')
|
|
|
83
85
|
const blueprintPath = path.join(dareDir, 'BLUEPRINT.md');
|
|
84
86
|
const dagPath = path.join(dareDir, 'dare-dag.yaml');
|
|
85
87
|
const tasksPath = path.join(dareDir, 'TASKS.md');
|
|
88
|
+
const dagVizPath = path.join(dareDir, 'dag-graph.mmd');
|
|
86
89
|
await writeIfMissing(blueprintPath, renderBlueprint(generatedAt), options.force);
|
|
87
90
|
await writeIfMissing(dagPath, renderDag(sampleTasks, generatedAt), options.force);
|
|
88
91
|
await writeIfMissing(tasksPath, renderTasksMd(sampleTasks, generatedAt), options.force);
|
|
@@ -90,13 +93,24 @@ export const blueprintCommand = new Command('blueprint')
|
|
|
90
93
|
const specPath = path.join(executionDir, `${t.id}.md`);
|
|
91
94
|
await writeIfMissing(specPath, renderTaskSpec(t), options.force);
|
|
92
95
|
}
|
|
96
|
+
// Generate the static DAG visualization (Mermaid). This is regenerated
|
|
97
|
+
// on every run because it must reflect whatever is currently in the YAML.
|
|
98
|
+
try {
|
|
99
|
+
const dag = convertYamlToDag(await fs.readFile(dagPath, 'utf-8'));
|
|
100
|
+
await fs.writeFile(dagVizPath, renderDagMermaid(dag));
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
console.log(chalk.gray(` (dag-graph.mmd skipped: ${err instanceof Error ? err.message : String(err)})`));
|
|
104
|
+
}
|
|
93
105
|
console.log(chalk.green('✅ Files scaffolded (existing files preserved):'));
|
|
94
106
|
console.log(` ${chalk.cyan('DARE/BLUEPRINT.md')} - Architecture specification`);
|
|
95
107
|
console.log(` ${chalk.cyan('DARE/dare-dag.yaml')} - Task dependency graph (canonical schema)`);
|
|
96
108
|
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)
|
|
109
|
+
console.log(` ${chalk.cyan('DARE/EXECUTION/task-*.md')} - One spec per task (${sampleTasks.length} files)`);
|
|
110
|
+
console.log(` ${chalk.cyan('DARE/dag-graph.mmd')} - Mermaid visualization of the DAG\n`);
|
|
98
111
|
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.
|
|
112
|
+
console.log(chalk.gray('Tip: open DARE/dag-graph.mmd in your editor with a Mermaid preview to see the static graph.'));
|
|
113
|
+
console.log(chalk.cyan('\nNext: dare execute --next\n'));
|
|
100
114
|
});
|
|
101
115
|
async function writeIfMissing(target, content, force) {
|
|
102
116
|
if (!force && (await fs.pathExists(target))) {
|
|
@@ -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;
|
|
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;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KACrD,WAAW,CAAC,uFAAuF,CAAC;KACpG,QAAQ,CAAC,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,CAAC;KAChE,MAAM,CAAC,aAAa,EAAE,0BAA0B,EAAE,KAAK,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,UAAkB,EAAE,OAA2B,EAAE,EAAE;IAChE,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,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAE3D,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACvC,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;IAC5B,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAEjC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAiB;QAChC;YACE,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,yBAAyB;YAChC,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,KAAK;YACjB,MAAM,EACJ,iEAAiE;gBACjE,oFAAoF;gBACpF,iDAAiD;SACpD;QACD;YACE,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,2BAA2B;YAClC,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,KAAK;YACjB,MAAM,EACJ,kEAAkE;gBAClE,8EAA8E;gBAC9E,+DAA+D;SAClE;QACD;YACE,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,8BAA8B;YACrC,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;YAC9B,UAAU,EAAE,MAAM;YAClB,MAAM,EACJ,qEAAqE;gBACrE,gFAAgF;gBAChF,uDAAuD;SAC1D;QACD;YACE,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,0BAA0B;YACjC,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;YAC9B,UAAU,EAAE,MAAM;YAClB,MAAM,EACJ,iFAAiF;gBACjF,gFAAgF;gBAChF,+EAA+E;SAClF;QACD;YACE,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;YAC9B,UAAU,EAAE,KAAK;YACjB,MAAM,EACJ,kEAAkE;gBAClE,gFAAgF;gBAChF,kEAAkE;SACrE;KACF,CAAC;IAEF,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAEvD,MAAM,cAAc,CAAC,aAAa,EAAE,eAAe,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACjF,MAAM,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAExF,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,cAAc,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,uEAAuE;IACvE,0EAA0E;IAC1E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,8BAA8B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAC9F,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,2CAA2C,CAAC,CAAC;IAC9F,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,wDAAwD,CAAC,CAAC;IAC5G,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,8CAA8C,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,8BAA8B,WAAW,CAAC,MAAM,SAAS,CAAC,CAAC;IACnH,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,kDAAkD,CAAC,CAAC;IACtG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wHAAwH,CAAC,CAAC,CAAC;IAClJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6FAA6F,CAAC,CAAC,CAAC;IACvH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAYL,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,OAAe,EAAE,KAAc;IAC3E,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/E,OAAO;IACT,CAAC;IACD,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,eAAe,CAAC,WAAmB;IAC1C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAoCyB,WAAW;CAC5C,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAAC,KAAmB,EAAE,WAAmB;IACzD,MAAM,SAAS,GAAG,KAAK;SACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACvE,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM;aACzB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO;YACL,WAAW,CAAC,CAAC,EAAE,EAAE;YACjB,eAAe,CAAC,CAAC,KAAK,GAAG;YACzB,mBAAmB,QAAQ,EAAE;YAC7B,mBAAmB,CAAC,CAAC,UAAU,EAAE;YACjC,4BAA4B,CAAC,CAAC,EAAE,KAAK;YACrC,uBAAuB;YACvB,WAAW;SACZ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,OAAO;;cAEK,WAAW;;;;;;;;;;;;;;;EAevB,SAAS;CACV,CAAC;AACF,CAAC;AAED,SAAS,aAAa,CAAC,KAAmB,EAAE,WAAmB;IAC7D,MAAM,IAAI,GAAG,KAAK;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,kBAAkB,IAAI,MAAM,CAAC,CAAC,UAAU,IAAI,CAAC;IAC5E,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;;;;;;;;;;;EAaP,IAAI;;;;;;;;;;;;;;;;;;;;kCAoB4B,WAAW;CAC5C,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,CAAa;IACnC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK;;;EAG5B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;EAGvB,CAAC,CAAC,MAAM;;;EAGR,IAAI;;;EAGJ,CAAC,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;CAqBb,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { type Dag } from '../dag-runner/run_dag.js';
|
|
3
|
+
/**
|
|
4
|
+
* `dare dag` — inspect and visualize the static task DAG declared in
|
|
5
|
+
* `dare-dag.yaml`. Distinct from `dare graph`, which inspects the populated
|
|
6
|
+
* knowledge graph (only contains tasks already executed).
|
|
7
|
+
*/
|
|
8
|
+
export declare const dagCommand: Command;
|
|
9
|
+
export declare function renderDagMermaid(dag: Dag): string;
|
|
10
|
+
export declare function renderDagDot(dag: Dag): string;
|
|
11
|
+
//# sourceMappingURL=dag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag.d.ts","sourceRoot":"","sources":["../../src/commands/dag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EAEL,KAAK,GAAG,EAGT,MAAM,0BAA0B,CAAC;AAMlC;;;;GAIG;AACH,eAAO,MAAM,UAAU,SAEtB,CAAC;AA2EF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CA6CjD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAyC7C"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { convertYamlToDag } from '../utils/dag-converter.js';
|
|
6
|
+
import { computeRanks, } from '../dag-runner/run_dag.js';
|
|
7
|
+
import { DEFAULT_STATE_PATH, loadAndApplyState, } from '../dag-runner/state-store.js';
|
|
8
|
+
/**
|
|
9
|
+
* `dare dag` — inspect and visualize the static task DAG declared in
|
|
10
|
+
* `dare-dag.yaml`. Distinct from `dare graph`, which inspects the populated
|
|
11
|
+
* knowledge graph (only contains tasks already executed).
|
|
12
|
+
*/
|
|
13
|
+
export const dagCommand = new Command('dag').description('Inspect and visualize the static task DAG (dare-dag.yaml)');
|
|
14
|
+
dagCommand
|
|
15
|
+
.command('viz')
|
|
16
|
+
.description('Render dare-dag.yaml as a Mermaid or DOT diagram with status colors')
|
|
17
|
+
.option('--dag <file>', 'Path to dare-dag.yaml', 'DARE/dare-dag.yaml')
|
|
18
|
+
.option('-f, --format <fmt>', 'Output format: mermaid | dot', 'mermaid')
|
|
19
|
+
.option('-o, --output <file>', 'Write to file (defaults to stdout)')
|
|
20
|
+
.action(async (options) => {
|
|
21
|
+
const cwd = process.cwd();
|
|
22
|
+
const dagPath = path.resolve(cwd, options.dag);
|
|
23
|
+
if (!(await fs.pathExists(dagPath))) {
|
|
24
|
+
console.error(chalk.red(`❌ ${options.dag} not found.`));
|
|
25
|
+
console.log(chalk.yellow('Run: dare blueprint'));
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const format = options.format.toLowerCase();
|
|
29
|
+
if (format !== 'mermaid' && format !== 'dot') {
|
|
30
|
+
console.error(chalk.red(`Unsupported format "${options.format}". Use: mermaid | dot.`));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
const dag = convertYamlToDag(await fs.readFile(dagPath, 'utf-8'));
|
|
34
|
+
await loadAndApplyState(dag, path.resolve(cwd, DEFAULT_STATE_PATH));
|
|
35
|
+
const rendered = format === 'mermaid' ? renderDagMermaid(dag) : renderDagDot(dag);
|
|
36
|
+
if (options.output) {
|
|
37
|
+
const out = path.resolve(cwd, options.output);
|
|
38
|
+
await fs.ensureDir(path.dirname(out));
|
|
39
|
+
await fs.writeFile(out, rendered);
|
|
40
|
+
console.log(chalk.green(`✅ Wrote ${dag.tasks.length} task(s) and ${countEdges(dag)} dependency arrow(s) to ${options.output}`));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log(rendered);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
// ─── Renderers ───────────────────────────────────────────────────────────────
|
|
47
|
+
const STATUS_ICON = {
|
|
48
|
+
PENDING: '⏳',
|
|
49
|
+
RUNNING: '🔄',
|
|
50
|
+
DONE: '✅',
|
|
51
|
+
FAILED: '❌',
|
|
52
|
+
SKIPPED: '⏭️',
|
|
53
|
+
};
|
|
54
|
+
const MERMAID_CLASSES = [
|
|
55
|
+
'classDef st_pending fill:#f3f4f6,stroke:#9ca3af,color:#374151;',
|
|
56
|
+
'classDef st_running fill:#dbeafe,stroke:#2563eb,color:#1e3a8a;',
|
|
57
|
+
'classDef st_done fill:#dcfce7,stroke:#16a34a,color:#14532d;',
|
|
58
|
+
'classDef st_failed fill:#fee2e2,stroke:#dc2626,color:#7f1d1d;',
|
|
59
|
+
'classDef st_skipped fill:#e5e7eb,stroke:#6b7280,color:#374151;',
|
|
60
|
+
];
|
|
61
|
+
export function renderDagMermaid(dag) {
|
|
62
|
+
const lines = [
|
|
63
|
+
`%% DARE DAG — ${escapeMermaid(dag.title)}`,
|
|
64
|
+
`%% Generated: ${new Date().toISOString()}`,
|
|
65
|
+
'graph LR',
|
|
66
|
+
];
|
|
67
|
+
// Group nodes by rank using subgraphs so the diagram visually flows by rank
|
|
68
|
+
const ranks = computeRanks(dag.tasks);
|
|
69
|
+
const byRank = new Map();
|
|
70
|
+
for (const task of dag.tasks) {
|
|
71
|
+
const r = ranks.get(task.id) ?? 0;
|
|
72
|
+
if (!byRank.has(r))
|
|
73
|
+
byRank.set(r, []);
|
|
74
|
+
byRank.get(r).push(task);
|
|
75
|
+
}
|
|
76
|
+
const sortedRanks = [...byRank.keys()].sort((a, b) => a - b);
|
|
77
|
+
for (const r of sortedRanks) {
|
|
78
|
+
lines.push(` subgraph rank_${r} ["Rank ${r}"]`);
|
|
79
|
+
lines.push(` direction TB`);
|
|
80
|
+
for (const task of byRank.get(r)) {
|
|
81
|
+
const id = sanitizeId(task.id);
|
|
82
|
+
const status = task.status ?? 'PENDING';
|
|
83
|
+
const icon = STATUS_ICON[status];
|
|
84
|
+
const label = `${task.id}\\n${escapeMermaid(task.title)}\\n${icon} ${status}`;
|
|
85
|
+
lines.push(` ${id}["${label}"]`);
|
|
86
|
+
}
|
|
87
|
+
lines.push(' end');
|
|
88
|
+
}
|
|
89
|
+
// Edges
|
|
90
|
+
for (const task of dag.tasks) {
|
|
91
|
+
for (const dep of task.depends_on) {
|
|
92
|
+
lines.push(` ${sanitizeId(dep)} --> ${sanitizeId(task.id)}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Status classes
|
|
96
|
+
for (const task of dag.tasks) {
|
|
97
|
+
const status = task.status ?? 'PENDING';
|
|
98
|
+
lines.push(` class ${sanitizeId(task.id)} st_${status.toLowerCase()};`);
|
|
99
|
+
}
|
|
100
|
+
for (const cls of MERMAID_CLASSES)
|
|
101
|
+
lines.push(` ${cls}`);
|
|
102
|
+
return lines.join('\n');
|
|
103
|
+
}
|
|
104
|
+
export function renderDagDot(dag) {
|
|
105
|
+
const lines = [
|
|
106
|
+
'digraph DareDAG {',
|
|
107
|
+
' rankdir=LR;',
|
|
108
|
+
' node [shape=box style=filled fontname=Helvetica];',
|
|
109
|
+
];
|
|
110
|
+
const colors = {
|
|
111
|
+
PENDING: '"#f3f4f6"',
|
|
112
|
+
RUNNING: '"#dbeafe"',
|
|
113
|
+
DONE: '"#dcfce7"',
|
|
114
|
+
FAILED: '"#fee2e2"',
|
|
115
|
+
SKIPPED: '"#e5e7eb"',
|
|
116
|
+
};
|
|
117
|
+
const borders = {
|
|
118
|
+
PENDING: '"#9ca3af"',
|
|
119
|
+
RUNNING: '"#2563eb"',
|
|
120
|
+
DONE: '"#16a34a"',
|
|
121
|
+
FAILED: '"#dc2626"',
|
|
122
|
+
SKIPPED: '"#6b7280"',
|
|
123
|
+
};
|
|
124
|
+
for (const task of dag.tasks) {
|
|
125
|
+
const status = task.status ?? 'PENDING';
|
|
126
|
+
const id = JSON.stringify(task.id);
|
|
127
|
+
const label = JSON.stringify(`${task.id}\n${task.title}\n${STATUS_ICON[status]} ${status}`);
|
|
128
|
+
lines.push(` ${id} [label=${label} fillcolor=${colors[status]} color=${borders[status]}];`);
|
|
129
|
+
}
|
|
130
|
+
for (const task of dag.tasks) {
|
|
131
|
+
for (const dep of task.depends_on) {
|
|
132
|
+
lines.push(` ${JSON.stringify(dep)} -> ${JSON.stringify(task.id)};`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
lines.push('}');
|
|
136
|
+
return lines.join('\n');
|
|
137
|
+
}
|
|
138
|
+
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
139
|
+
function sanitizeId(id) {
|
|
140
|
+
return id.replace(/[^a-zA-Z0-9_]/g, '_');
|
|
141
|
+
}
|
|
142
|
+
function escapeMermaid(s) {
|
|
143
|
+
return s.replace(/"/g, '"').replace(/[\r\n]+/g, ' ');
|
|
144
|
+
}
|
|
145
|
+
function countEdges(dag) {
|
|
146
|
+
return dag.tasks.reduce((sum, t) => sum + t.depends_on.length, 0);
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=dag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag.js","sourceRoot":"","sources":["../../src/commands/dag.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export { designCommand } from './commands/design.js';
|
|
|
15
15
|
export { blueprintCommand } from './commands/blueprint.js';
|
|
16
16
|
export { executeCommand } from './commands/execute.js';
|
|
17
17
|
export { graphCommand } from './commands/graph.js';
|
|
18
|
+
export { dagCommand, renderDagMermaid, renderDagDot } from './commands/dag.js';
|
|
18
19
|
export { validateCommand } from './commands/validate.js';
|
|
19
20
|
export { infoCommand } from './commands/info.js';
|
|
20
21
|
export { computeRanks, nextExecutableTasks, applyCascadingSkip, buildTaskPrompt, markRunning, markDone, markFailed, renderCanvas, DEFAULT_DAG_LIMITS, } from './dag-runner/run_dag.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,GAAG,EACH,OAAO,EACP,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,IAAI,aAAa,EAC3B,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACxF,YAAY,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,GAAG,EACH,OAAO,EACP,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,IAAI,aAAa,EAC3B,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACxF,YAAY,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -16,6 +16,7 @@ export { designCommand } from './commands/design.js';
|
|
|
16
16
|
export { blueprintCommand } from './commands/blueprint.js';
|
|
17
17
|
export { executeCommand } from './commands/execute.js';
|
|
18
18
|
export { graphCommand } from './commands/graph.js';
|
|
19
|
+
export { dagCommand, renderDagMermaid, renderDagDot } from './commands/dag.js';
|
|
19
20
|
export { validateCommand } from './commands/validate.js';
|
|
20
21
|
export { infoCommand } from './commands/info.js';
|
|
21
22
|
// DAG Runner (orchestration)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,6BAA6B;AAC7B,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAYjC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE9E,qBAAqB;AACrB,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAGxE,yBAAyB;AACzB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAkBxF,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,6BAA6B;AAC7B,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAYjC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE9E,qBAAqB;AACrB,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAGxE,yBAAyB;AACzB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAkBxF,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
package/package.json
CHANGED
|
@@ -182,14 +182,28 @@ Antes de entregar, confirme:
|
|
|
182
182
|
- [ ] Pelo menos 2 tasks no rank 0
|
|
183
183
|
- [ ] Cada `subtask_prompt` é executável sem contexto adicional
|
|
184
184
|
|
|
185
|
-
### Passo 7:
|
|
185
|
+
### Passo 7: Regenerar a visualização do DAG
|
|
186
186
|
|
|
187
|
-
|
|
187
|
+
Depois de salvar o `dare-dag.yaml`, rode:
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
dare dag viz -o DARE/dag-graph.mmd
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Isso reescreve `DARE/dag-graph.mmd` (Mermaid) refletindo o grafo atualizado.
|
|
194
|
+
O usuário pode abrir o arquivo no Antigravity para visualizar o grafo
|
|
195
|
+
estático com cores por status antes de executar.
|
|
196
|
+
|
|
197
|
+
### Passo 8: Pedir aprovação
|
|
198
|
+
|
|
199
|
+
> Gerados os 4 artefatos da fase de execução:
|
|
188
200
|
> - `DARE/TASKS.md` ([N] tasks)
|
|
189
201
|
> - `DARE/dare-dag.yaml` ([N] ranks paralelos)
|
|
190
202
|
> - `DARE/EXECUTION/task-*.md` ([N] specs)
|
|
203
|
+
> - `DARE/dag-graph.mmd` (visualização Mermaid do DAG)
|
|
191
204
|
>
|
|
192
|
-
> Revise
|
|
205
|
+
> Revise (abra `dag-graph.mmd` para ver o grafo). Quando aprovar:
|
|
206
|
+
> `dare execute --next` para iniciar a execução.
|
|
193
207
|
|
|
194
208
|
## Boas práticas
|
|
195
209
|
|
|
@@ -115,9 +115,22 @@ Antes de entregar:
|
|
|
115
115
|
- [ ] Pelo menos 2 tasks no rank 0
|
|
116
116
|
- [ ] Cada `subtask_prompt` executável sem contexto adicional
|
|
117
117
|
|
|
118
|
-
### 7.
|
|
118
|
+
### 7. Regenerar a visualização do DAG
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
Depois de salvar o `dare-dag.yaml`, rode:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
dare dag viz -o DARE/dag-graph.mmd
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Isso reescreve `DARE/dag-graph.mmd` (Mermaid) refletindo o grafo atualizado.
|
|
127
|
+
O usuário pode abrir no editor com Markdown Preview Mermaid para ver o
|
|
128
|
+
grafo estático com cores por status antes de executar.
|
|
129
|
+
|
|
130
|
+
### 8. Aguardar aprovação humana
|
|
131
|
+
|
|
132
|
+
**Não execute nenhuma task** até o usuário revisar e aprovar os 5 artefatos
|
|
133
|
+
(BLUEPRINT, TASKS, dare-dag.yaml, EXECUTION/task-*, dag-graph.mmd).
|
|
121
134
|
|
|
122
135
|
## Templates disponíveis
|
|
123
136
|
|
|
@@ -106,12 +106,24 @@ de executar.
|
|
|
106
106
|
- Mesmas `complexity`.
|
|
107
107
|
- Sem ciclos.
|
|
108
108
|
|
|
109
|
-
### 7.
|
|
109
|
+
### 7. Regenerar a visualização do DAG
|
|
110
110
|
|
|
111
|
-
|
|
111
|
+
Depois de salvar o `dare-dag.yaml`, rode:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
dare dag viz -o DARE/dag-graph.mmd
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Isso reescreve `DARE/dag-graph.mmd` (Mermaid) refletindo o grafo atualizado.
|
|
118
|
+
O usuário pode abrir o arquivo no Cursor com a extensão Mermaid Preview.
|
|
119
|
+
|
|
120
|
+
### 8. Mensagem final ao usuário
|
|
121
|
+
|
|
122
|
+
> Gerados 4 artefatos da fase de execução:
|
|
112
123
|
> - `DARE/TASKS.md` ([N] tasks, visão humana)
|
|
113
124
|
> - `DARE/dare-dag.yaml` (grafo executável, [N] ranks paralelos)
|
|
114
125
|
> - `DARE/EXECUTION/task-*.md` ([N] specs detalhadas)
|
|
126
|
+
> - `DARE/dag-graph.mmd` (visualização Mermaid do DAG)
|
|
115
127
|
>
|
|
116
|
-
> Revise
|
|
117
|
-
>
|
|
128
|
+
> Revise (abra `dag-graph.mmd` para ver o grafo). Para executar:
|
|
129
|
+
> `/run-dag` ou `dare execute --next`.
|