@dewtech/dare-cli 0.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.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +104 -0
  3. package/dist/__tests__/dag-converter.test.d.ts +2 -0
  4. package/dist/__tests__/dag-converter.test.d.ts.map +1 -0
  5. package/dist/__tests__/dag-converter.test.js +134 -0
  6. package/dist/__tests__/dag-converter.test.js.map +1 -0
  7. package/dist/__tests__/validators.test.d.ts +2 -0
  8. package/dist/__tests__/validators.test.d.ts.map +1 -0
  9. package/dist/__tests__/validators.test.js +62 -0
  10. package/dist/__tests__/validators.test.js.map +1 -0
  11. package/dist/bin/dare.d.ts +3 -0
  12. package/dist/bin/dare.d.ts.map +1 -0
  13. package/dist/bin/dare.js +20 -0
  14. package/dist/bin/dare.js.map +1 -0
  15. package/dist/commands/blueprint.d.ts +3 -0
  16. package/dist/commands/blueprint.d.ts.map +1 -0
  17. package/dist/commands/blueprint.js +134 -0
  18. package/dist/commands/blueprint.js.map +1 -0
  19. package/dist/commands/design.d.ts +3 -0
  20. package/dist/commands/design.d.ts.map +1 -0
  21. package/dist/commands/design.js +38 -0
  22. package/dist/commands/design.js.map +1 -0
  23. package/dist/commands/execute.d.ts +3 -0
  24. package/dist/commands/execute.d.ts.map +1 -0
  25. package/dist/commands/execute.js +60 -0
  26. package/dist/commands/execute.js.map +1 -0
  27. package/dist/commands/init.d.ts +3 -0
  28. package/dist/commands/init.d.ts.map +1 -0
  29. package/dist/commands/init.js +112 -0
  30. package/dist/commands/init.js.map +1 -0
  31. package/dist/dag-runner/run_dag.d.ts +32 -0
  32. package/dist/dag-runner/run_dag.d.ts.map +1 -0
  33. package/dist/dag-runner/run_dag.js +160 -0
  34. package/dist/dag-runner/run_dag.js.map +1 -0
  35. package/dist/index.d.ts +10 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +8 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/utils/dag-converter.d.ts +10 -0
  40. package/dist/utils/dag-converter.d.ts.map +1 -0
  41. package/dist/utils/dag-converter.js +46 -0
  42. package/dist/utils/dag-converter.js.map +1 -0
  43. package/dist/utils/project-generator.d.ts +12 -0
  44. package/dist/utils/project-generator.d.ts.map +1 -0
  45. package/dist/utils/project-generator.js +103 -0
  46. package/dist/utils/project-generator.js.map +1 -0
  47. package/dist/utils/templates.d.ts +11 -0
  48. package/dist/utils/templates.d.ts.map +1 -0
  49. package/dist/utils/templates.js +137 -0
  50. package/dist/utils/templates.js.map +1 -0
  51. package/package.json +63 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const initCommand: Command;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,WAAW,SA0GpB,CAAC"}
@@ -0,0 +1,112 @@
1
+ import { Command } from 'commander';
2
+ import inquirer from 'inquirer';
3
+ import chalk from 'chalk';
4
+ import ora from 'ora';
5
+ import path from 'path';
6
+ import { generateProjectStructure } from '../utils/project-generator.js';
7
+ export const initCommand = new Command('init')
8
+ .description('Initialize a new DARE project with interactive setup')
9
+ .argument('[project-name]', 'Project name')
10
+ .action(async (projectName) => {
11
+ console.log(chalk.blue.bold('\nšŸš€ DARE Framework - Project Initialization\n'));
12
+ const answers = await inquirer.prompt([
13
+ {
14
+ type: 'input',
15
+ name: 'name',
16
+ message: 'Project name:',
17
+ default: projectName || 'my-dare-project',
18
+ when: !projectName,
19
+ validate: (input) => {
20
+ if (!input.trim())
21
+ return 'Project name cannot be empty';
22
+ if (!/^[a-z0-9-_]+$/.test(input))
23
+ return 'Use only lowercase letters, numbers, hyphens and underscores';
24
+ return true;
25
+ },
26
+ },
27
+ {
28
+ type: 'list',
29
+ name: 'structure',
30
+ message: 'Project structure:',
31
+ choices: [
32
+ { name: 'šŸ—ļø Monorepo (backend + frontend)', value: 'monorepo' },
33
+ { name: 'āš™ļø Backend only', value: 'backend' },
34
+ { name: 'šŸŽØ Frontend only', value: 'frontend' },
35
+ ],
36
+ },
37
+ {
38
+ type: 'list',
39
+ name: 'backend',
40
+ message: 'Backend stack:',
41
+ when: (ans) => ans.structure !== 'frontend',
42
+ choices: [
43
+ { name: 'šŸ¦€ Rust / Axum', value: 'rust-axum' },
44
+ { name: '🟢 Node.js / NestJS', value: 'node-nestjs' },
45
+ { name: 'šŸ Python / FastAPI', value: 'python-fastapi' },
46
+ { name: '🐘 PHP / Laravel', value: 'php-laravel' },
47
+ ],
48
+ },
49
+ {
50
+ type: 'list',
51
+ name: 'frontend',
52
+ message: 'Frontend stack:',
53
+ when: (ans) => ans.structure !== 'backend',
54
+ choices: [
55
+ { name: 'āš›ļø React 18+', value: 'react' },
56
+ { name: 'šŸ’š Vue 3+', value: 'vue' },
57
+ ],
58
+ },
59
+ {
60
+ type: 'list',
61
+ name: 'ide',
62
+ message: 'Primary IDE / Agent:',
63
+ choices: [
64
+ { name: 'šŸ–±ļø Cursor', value: 'cursor' },
65
+ { name: 'šŸš€ Antigravity', value: 'antigravity' },
66
+ { name: 'šŸ”€ Both (Hybrid)', value: 'hybrid' },
67
+ ],
68
+ },
69
+ {
70
+ type: 'list',
71
+ name: 'graphrag',
72
+ message: 'GraphRAG backend:',
73
+ choices: [
74
+ { name: 'šŸ—„ļø SQLite (recommended - fast, local)', value: 'sqlite' },
75
+ { name: 'šŸ“„ JSON Graph (simple, no dependencies)', value: 'json' },
76
+ { name: '🐳 Neo4j Docker (enterprise)', value: 'neo4j' },
77
+ ],
78
+ },
79
+ {
80
+ type: 'confirm',
81
+ name: 'mcp',
82
+ message: 'Enable MCP Server for context queries?',
83
+ default: true,
84
+ },
85
+ ]);
86
+ const name = projectName || answers.name;
87
+ const spinner = ora(`Creating project ${chalk.cyan(name)}...`).start();
88
+ try {
89
+ await generateProjectStructure({
90
+ name,
91
+ structure: answers.structure,
92
+ backend: answers.backend,
93
+ frontend: answers.frontend,
94
+ ide: answers.ide,
95
+ graphrag: answers.graphrag,
96
+ mcp: answers.mcp,
97
+ outputDir: path.resolve(process.cwd(), name),
98
+ });
99
+ spinner.succeed(chalk.green(`Project ${chalk.bold(name)} created successfully!`));
100
+ console.log(chalk.cyan('\nšŸ“‹ Next steps:\n'));
101
+ console.log(` ${chalk.gray('1.')} cd ${name}`);
102
+ console.log(` ${chalk.gray('2.')} dare design "Describe your project here"`);
103
+ console.log(` ${chalk.gray('3.')} dare blueprint`);
104
+ console.log(` ${chalk.gray('4.')} dare execute --parallel\n`);
105
+ }
106
+ catch (err) {
107
+ spinner.fail(chalk.red('Failed to create project'));
108
+ console.error(err);
109
+ process.exit(1);
110
+ }
111
+ });
112
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * DARE Framework - DAG Task Runner
3
+ * Adapted from Cursor Cookbook DAG Task Runner pattern
4
+ * Executes tasks in parallel based on dependency graph
5
+ */
6
+ export interface DagTask {
7
+ id: string;
8
+ title: string;
9
+ depends_on: string[];
10
+ complexity: 'LOW' | 'MED' | 'HIGH';
11
+ subtask_prompt: string;
12
+ status?: 'PENDING' | 'RUNNING' | 'DONE' | 'FAILED' | 'SKIPPED';
13
+ output?: string;
14
+ tokens?: number;
15
+ duration?: number;
16
+ }
17
+ export interface Dag {
18
+ title: string;
19
+ version: string;
20
+ models: Record<string, string>;
21
+ tasks: DagTask[];
22
+ }
23
+ export interface RunDagOptions {
24
+ parallel: boolean;
25
+ runner: string;
26
+ canvasPath: string;
27
+ }
28
+ /**
29
+ * Main DAG runner - executes tasks in parallel based on dependency ranks
30
+ */
31
+ export declare function runDag(dag: Dag, options: RunDagOptions): Promise<void>;
32
+ //# sourceMappingURL=run_dag.d.ts.map
@@ -0,0 +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,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,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"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * DARE Framework - DAG Task Runner
3
+ * Adapted from Cursor Cookbook DAG Task Runner pattern
4
+ * Executes tasks in parallel based on dependency graph
5
+ */
6
+ import fs from 'fs-extra';
7
+ import chalk from 'chalk';
8
+ /**
9
+ * Compute execution ranks for tasks based on dependencies.
10
+ * Tasks in the same rank can run in parallel.
11
+ */
12
+ function computeRanks(tasks) {
13
+ const ranks = new Map();
14
+ const taskMap = new Map(tasks.map((t) => [t.id, t]));
15
+ function getRank(taskId, visited = new Set()) {
16
+ if (ranks.has(taskId))
17
+ return ranks.get(taskId);
18
+ if (visited.has(taskId))
19
+ throw new Error(`Circular dependency detected: ${taskId}`);
20
+ visited.add(taskId);
21
+ const task = taskMap.get(taskId);
22
+ if (!task)
23
+ throw new Error(`Task not found: ${taskId}`);
24
+ if (task.depends_on.length === 0) {
25
+ ranks.set(taskId, 0);
26
+ return 0;
27
+ }
28
+ const maxDepRank = Math.max(...task.depends_on.map((dep) => getRank(dep, new Set(visited))));
29
+ const rank = maxDepRank + 1;
30
+ ranks.set(taskId, rank);
31
+ return rank;
32
+ }
33
+ tasks.forEach((t) => getRank(t.id));
34
+ return ranks;
35
+ }
36
+ /**
37
+ * Render real-time canvas with task status
38
+ */
39
+ async function renderCanvas(dag, canvasPath) {
40
+ const statusIcon = {
41
+ PENDING: 'ā³',
42
+ RUNNING: 'šŸ”„',
43
+ DONE: 'āœ…',
44
+ FAILED: 'āŒ',
45
+ SKIPPED: 'ā­ļø',
46
+ };
47
+ const lines = [
48
+ `# DARE DAG Execution - ${dag.title}`,
49
+ ``,
50
+ `**Updated:** ${new Date().toISOString()}`,
51
+ ``,
52
+ `## Tasks`,
53
+ ``,
54
+ `| ID | Title | Status | Duration | Tokens |`,
55
+ `|----|-------|--------|----------|--------|`,
56
+ ];
57
+ for (const task of dag.tasks) {
58
+ const icon = statusIcon[task.status || 'PENDING'];
59
+ const duration = task.duration ? `${task.duration}ms` : '-';
60
+ const tokens = task.tokens ? `${task.tokens}` : '-';
61
+ lines.push(`| ${task.id} | ${task.title} | ${icon} ${task.status || 'PENDING'} | ${duration} | ${tokens} |`);
62
+ }
63
+ const done = dag.tasks.filter((t) => t.status === 'DONE').length;
64
+ const total = dag.tasks.length;
65
+ const pct = Math.round((done / total) * 100);
66
+ lines.push('');
67
+ lines.push(`## Progress: ${done}/${total} tasks (${pct}%)`);
68
+ lines.push('');
69
+ lines.push(`${'ā–ˆ'.repeat(Math.round(pct / 5))}${'ā–‘'.repeat(20 - Math.round(pct / 5))} ${pct}%`);
70
+ await fs.ensureDir(canvasPath.replace(/\/[^/]+$/, ''));
71
+ await fs.writeFile(canvasPath, lines.join('\n'));
72
+ }
73
+ /**
74
+ * Execute a single task (placeholder - AI agent executes in real use)
75
+ */
76
+ async function executeTask(task, context, runner) {
77
+ // In real usage, this calls the AI agent (Cursor/Antigravity) with the task prompt
78
+ // For now, we simulate execution
79
+ const delay = task.complexity === 'HIGH' ? 2000 : task.complexity === 'MED' ? 1000 : 500;
80
+ await new Promise((resolve) => setTimeout(resolve, delay));
81
+ return {
82
+ output: `Task ${task.id} completed by ${runner}`,
83
+ tokens: Math.floor(Math.random() * 2000) + 500,
84
+ };
85
+ }
86
+ /**
87
+ * Main DAG runner - executes tasks in parallel based on dependency ranks
88
+ */
89
+ export async function runDag(dag, options) {
90
+ const { parallel, runner, canvasPath } = options;
91
+ // Initialize all tasks as PENDING
92
+ dag.tasks.forEach((t) => (t.status = 'PENDING'));
93
+ await renderCanvas(dag, canvasPath);
94
+ if (!parallel) {
95
+ // Sequential execution
96
+ for (const task of dag.tasks) {
97
+ task.status = 'RUNNING';
98
+ await renderCanvas(dag, canvasPath);
99
+ console.log(chalk.cyan(` šŸ”„ Running ${task.id}: ${task.title}`));
100
+ const start = Date.now();
101
+ const result = await executeTask(task, '', runner);
102
+ task.status = 'DONE';
103
+ task.output = result.output;
104
+ task.tokens = result.tokens;
105
+ task.duration = Date.now() - start;
106
+ console.log(chalk.green(` āœ… ${task.id} done (${task.duration}ms, ${task.tokens} tokens)`));
107
+ await renderCanvas(dag, canvasPath);
108
+ }
109
+ return;
110
+ }
111
+ // Parallel execution using ranks
112
+ const ranks = computeRanks(dag.tasks);
113
+ const maxRank = Math.max(...ranks.values());
114
+ for (let rank = 0; rank <= maxRank; rank++) {
115
+ const rankTasks = dag.tasks.filter((t) => ranks.get(t.id) === rank && t.status === 'PENDING');
116
+ if (rankTasks.length === 0)
117
+ continue;
118
+ console.log(chalk.yellow(`\n šŸ“¦ Rank ${rank}: Executing ${rankTasks.length} task(s) in parallel`));
119
+ // Check if any dependency failed
120
+ const failedDeps = rankTasks.filter((t) => t.depends_on.some((dep) => dag.tasks.find((d) => d.id === dep)?.status === 'FAILED'));
121
+ failedDeps.forEach((t) => {
122
+ t.status = 'SKIPPED';
123
+ console.log(chalk.gray(` ā­ļø Skipping ${t.id} (dependency failed)`));
124
+ });
125
+ const executableTasks = rankTasks.filter((t) => t.status === 'PENDING');
126
+ // Build context from parent outputs
127
+ const parentOutputs = executableTasks.map((t) => t.depends_on
128
+ .map((dep) => dag.tasks.find((d) => d.id === dep)?.output || '')
129
+ .filter(Boolean)
130
+ .join('\n'));
131
+ // Mark all as RUNNING
132
+ executableTasks.forEach((t) => (t.status = 'RUNNING'));
133
+ await renderCanvas(dag, canvasPath);
134
+ // Execute in parallel
135
+ await Promise.all(executableTasks.map(async (task, i) => {
136
+ const start = Date.now();
137
+ console.log(chalk.cyan(` šŸ”„ ${task.id}: ${task.title}`));
138
+ try {
139
+ const result = await executeTask(task, parentOutputs[i], runner);
140
+ task.status = 'DONE';
141
+ task.output = result.output;
142
+ task.tokens = result.tokens;
143
+ task.duration = Date.now() - start;
144
+ console.log(chalk.green(` āœ… ${task.id} done (${task.duration}ms, ${task.tokens} tokens)`));
145
+ }
146
+ catch (err) {
147
+ task.status = 'FAILED';
148
+ task.duration = Date.now() - start;
149
+ console.log(chalk.red(` āŒ ${task.id} failed: ${err}`));
150
+ }
151
+ await renderCanvas(dag, canvasPath);
152
+ }));
153
+ }
154
+ const done = dag.tasks.filter((t) => t.status === 'DONE').length;
155
+ const failed = dag.tasks.filter((t) => t.status === 'FAILED').length;
156
+ const skipped = dag.tasks.filter((t) => t.status === 'SKIPPED').length;
157
+ console.log(chalk.bold(`\n šŸ“Š Summary: ${done} done, ${failed} failed, ${skipped} skipped`));
158
+ console.log(chalk.cyan(` šŸ“„ Canvas: ${canvasPath}\n`));
159
+ }
160
+ //# sourceMappingURL=run_dag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run_dag.js","sourceRoot":"","sources":["../../src/dag-runner/run_dag.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { initCommand } from './commands/init.js';
2
+ export { designCommand } from './commands/design.js';
3
+ export { blueprintCommand } from './commands/blueprint.js';
4
+ export { executeCommand } from './commands/execute.js';
5
+ export { runDag } from './dag-runner/run_dag.js';
6
+ export type { Dag, DagTask, RunDagOptions } from './dag-runner/run_dag.js';
7
+ export { convertYamlToDag, convertDagToYaml } from './utils/dag-converter.js';
8
+ export { generateProjectStructure } from './utils/project-generator.js';
9
+ export type { ProjectConfig } from './utils/project-generator.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,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,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { initCommand } from './commands/init.js';
2
+ export { designCommand } from './commands/design.js';
3
+ export { blueprintCommand } from './commands/blueprint.js';
4
+ export { executeCommand } from './commands/execute.js';
5
+ export { runDag } from './dag-runner/run_dag.js';
6
+ export { convertYamlToDag, convertDagToYaml } from './utils/dag-converter.js';
7
+ export { generateProjectStructure } from './utils/project-generator.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,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,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Dag } from '../dag-runner/run_dag.js';
2
+ /**
3
+ * Convert dare-dag.yaml content to Dag object
4
+ */
5
+ export declare function convertYamlToDag(yamlContent: string): Dag;
6
+ /**
7
+ * Convert Dag object back to YAML string
8
+ */
9
+ export declare function convertDagToYaml(dag: Dag): string;
10
+ //# sourceMappingURL=dag-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dag-converter.d.ts","sourceRoot":"","sources":["../../src/utils/dag-converter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAW,MAAM,0BAA0B,CAAC;AAE7D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAkBzD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAsBjD"}
@@ -0,0 +1,46 @@
1
+ import { parse } from 'yaml';
2
+ /**
3
+ * Convert dare-dag.yaml content to Dag object
4
+ */
5
+ export function convertYamlToDag(yamlContent) {
6
+ const raw = parse(yamlContent);
7
+ const tasks = raw.tasks.map((t) => ({
8
+ id: t.id,
9
+ title: t.title || t.id,
10
+ depends_on: t.depends_on || [],
11
+ complexity: t.complexity || 'MED',
12
+ subtask_prompt: t.subtask_prompt || '',
13
+ status: 'PENDING',
14
+ }));
15
+ return {
16
+ title: raw.title || 'DARE Project',
17
+ version: raw.version || '1.0.0',
18
+ models: raw.models || {},
19
+ tasks,
20
+ };
21
+ }
22
+ /**
23
+ * Convert Dag object back to YAML string
24
+ */
25
+ export function convertDagToYaml(dag) {
26
+ const lines = [
27
+ `title: "${dag.title}"`,
28
+ `version: "${dag.version}"`,
29
+ ``,
30
+ `models:`,
31
+ ...Object.entries(dag.models).map(([k, v]) => ` ${k}: "${v}"`),
32
+ ``,
33
+ `tasks:`,
34
+ ];
35
+ for (const task of dag.tasks) {
36
+ lines.push(` - id: ${task.id}`);
37
+ lines.push(` title: "${task.title}"`);
38
+ lines.push(` depends_on: [${task.depends_on.map((d) => `"${d}"`).join(', ')}]`);
39
+ lines.push(` complexity: ${task.complexity}`);
40
+ lines.push(` subtask_prompt: |`);
41
+ task.subtask_prompt.split('\n').forEach((l) => lines.push(` ${l}`));
42
+ lines.push('');
43
+ }
44
+ return lines.join('\n');
45
+ }
46
+ //# sourceMappingURL=dag-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dag-converter.js","sourceRoot":"","sources":["../../src/utils/dag-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAG7B;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAA4B,CAAC;IAE1D,MAAM,KAAK,GAAI,GAAG,CAAC,KAAmC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjE,EAAE,EAAE,CAAC,CAAC,EAAY;QAClB,KAAK,EAAG,CAAC,CAAC,KAAgB,IAAI,CAAC,CAAC,EAAY;QAC5C,UAAU,EAAG,CAAC,CAAC,UAAuB,IAAI,EAAE;QAC5C,UAAU,EAAG,CAAC,CAAC,UAAoC,IAAI,KAAK;QAC5D,cAAc,EAAG,CAAC,CAAC,cAAyB,IAAI,EAAE;QAClD,MAAM,EAAE,SAAkB;KAC3B,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,KAAK,EAAG,GAAG,CAAC,KAAgB,IAAI,cAAc;QAC9C,OAAO,EAAG,GAAG,CAAC,OAAkB,IAAI,OAAO;QAC3C,MAAM,EAAG,GAAG,CAAC,MAAiC,IAAI,EAAE;QACpD,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAQ;IACvC,MAAM,KAAK,GAAG;QACZ,WAAW,GAAG,CAAC,KAAK,GAAG;QACvB,aAAa,GAAG,CAAC,OAAO,GAAG;QAC3B,EAAE;QACF,SAAS;QACT,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;QAC/D,EAAE;QACF,QAAQ;KACT,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnF,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface ProjectConfig {
2
+ name: string;
3
+ structure: 'monorepo' | 'backend' | 'frontend';
4
+ backend?: string;
5
+ frontend?: string;
6
+ ide: 'cursor' | 'antigravity' | 'hybrid';
7
+ graphrag: 'sqlite' | 'json' | 'neo4j';
8
+ mcp: boolean;
9
+ outputDir: string;
10
+ }
11
+ export declare function generateProjectStructure(config: ProjectConfig): Promise<void>;
12
+ //# sourceMappingURL=project-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-generator.d.ts","sourceRoot":"","sources":["../../src/utils/project-generator.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,QAAQ,GAAG,aAAa,GAAG,QAAQ,CAAC;IACzC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACtC,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4FnF"}
@@ -0,0 +1,103 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { generateCursorRules, generateAntigravityRules, generateSharedConfig } from './templates.js';
4
+ export async function generateProjectStructure(config) {
5
+ const { outputDir, name, structure, backend, frontend, ide, graphrag, mcp } = config;
6
+ await fs.ensureDir(outputDir);
7
+ // Create DARE directory
8
+ await fs.ensureDir(path.join(outputDir, 'DARE'));
9
+ await fs.ensureDir(path.join(outputDir, 'DARE', 'EXECUTION'));
10
+ // Write dare.config.json
11
+ await fs.writeJSON(path.join(outputDir, 'dare.config.json'), { name, structure, backend, frontend, ide, graphrag, mcp, version: '0.1.0' }, { spaces: 2 });
12
+ // Write .gitignore
13
+ await fs.writeFile(path.join(outputDir, '.gitignore'), `node_modules/\ndist/\nbuild/\n*.db\n*.db-shm\n*.db-wal\n.env\n.env.local\n.dare/\nlogs/\n*.log\n`);
14
+ // Write .cursorrules (global)
15
+ if (ide === 'cursor' || ide === 'hybrid') {
16
+ await fs.writeFile(path.join(outputDir, '.cursorrules'), generateCursorRules({ backend, frontend, graphrag, mcp }));
17
+ await fs.ensureDir(path.join(outputDir, '.cursor', 'rules'));
18
+ await fs.ensureDir(path.join(outputDir, '.cursor', 'commands'));
19
+ // Write stack-specific skills
20
+ if (backend) {
21
+ await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${backend}.mdc`), generateStackSkill(backend));
22
+ }
23
+ if (frontend) {
24
+ await fs.writeFile(path.join(outputDir, '.cursor', 'rules', `skill-${frontend}.mdc`), generateStackSkill(frontend));
25
+ }
26
+ // Write DARE commands for Cursor
27
+ await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'generate-design.md'), `# Generate Design\nGenerate a DESIGN.md for the described feature.\n`);
28
+ await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'generate-blueprint.md'), `# Generate Blueprint\nGenerate a BLUEPRINT.md from the DESIGN.md.\n`);
29
+ await fs.writeFile(path.join(outputDir, '.cursor', 'commands', 'execute-task.md'), `# Execute Task\nExecute the specified task from TASKS.md.\n`);
30
+ }
31
+ // Write .antigravityrules
32
+ if (ide === 'antigravity' || ide === 'hybrid') {
33
+ await fs.writeFile(path.join(outputDir, '.antigravityrules'), generateAntigravityRules({ backend, frontend, graphrag, mcp }));
34
+ await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-design'));
35
+ await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-blueprint'));
36
+ await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-execute'));
37
+ await fs.ensureDir(path.join(outputDir, '.agents', 'skills', 'dare-tasks'));
38
+ await fs.ensureDir(path.join(outputDir, '.agents', 'workflows'));
39
+ }
40
+ // Write shared config
41
+ await fs.writeFile(path.join(outputDir, 'DARE', 'README.md'), generateSharedConfig(name));
42
+ // Create backend structure
43
+ if (structure !== 'frontend' && backend) {
44
+ const backendDir = structure === 'monorepo' ? path.join(outputDir, 'backend') : outputDir;
45
+ await generateBackendTemplate(backendDir, backend);
46
+ }
47
+ // Create frontend structure
48
+ if (structure !== 'backend' && frontend) {
49
+ const frontendDir = structure === 'monorepo' ? path.join(outputDir, 'frontend') : outputDir;
50
+ await generateFrontendTemplate(frontendDir, frontend);
51
+ }
52
+ }
53
+ async function generateBackendTemplate(dir, stack) {
54
+ await fs.ensureDir(path.join(dir, 'src'));
55
+ switch (stack) {
56
+ case 'rust-axum':
57
+ await fs.writeFile(path.join(dir, 'Cargo.toml'), `[package]\nname = "api"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\naxum = "0.7"\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\n`);
58
+ await fs.writeFile(path.join(dir, 'src', 'main.rs'), `use axum::{routing::get, Router};\n\n#[tokio::main]\nasync fn main() {\n let app = Router::new().route("/health", get(health));\n let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();\n axum::serve(listener, app).await.unwrap();\n}\n\nasync fn health() -> &'static str { "OK" }\n`);
59
+ await fs.writeFile(path.join(dir, '.cursorrules'), `# Rust/Axum Rules\n- Use Rust idioms and patterns\n- Prefer async/await with Tokio\n- Use Axum for HTTP routing\n- Handle errors with thiserror/anyhow\n- Run clippy before committing\n`);
60
+ break;
61
+ case 'node-nestjs':
62
+ await fs.writeJSON(path.join(dir, 'package.json'), { name: 'api', version: '0.1.0', scripts: { start: 'nest start', build: 'nest build', test: 'jest' }, dependencies: { '@nestjs/core': '^10.0.0', '@nestjs/common': '^10.0.0', '@nestjs/platform-express': '^10.0.0' } }, { spaces: 2 });
63
+ await fs.writeFile(path.join(dir, 'src', 'main.ts'), `import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\nasync function bootstrap() {\n const app = await NestFactory.create(AppModule);\n await app.listen(3000);\n}\nbootstrap();\n`);
64
+ await fs.writeFile(path.join(dir, '.cursorrules'), `# Node.js/NestJS Rules\n- Use NestJS decorators and DI\n- Define DTOs with class-validator\n- Use TypeORM or Prisma for DB\n- Write Jest tests for all services\n`);
65
+ break;
66
+ case 'python-fastapi':
67
+ await fs.writeFile(path.join(dir, 'main.py'), `from fastapi import FastAPI\n\napp = FastAPI()\n\n@app.get("/health")\ndef health():\n return {"status": "ok"}\n`);
68
+ await fs.writeFile(path.join(dir, 'requirements.txt'), `fastapi>=0.100.0\nuvicorn>=0.23.0\npydantic>=2.0.0\n`);
69
+ await fs.writeFile(path.join(dir, '.cursorrules'), `# Python/FastAPI Rules\n- Use Pydantic v2 for validation\n- Type all functions with PEP 484\n- Use async/await for IO operations\n- Follow PEP 8 style guide\n`);
70
+ break;
71
+ case 'php-laravel':
72
+ await fs.writeJSON(path.join(dir, 'composer.json'), { name: 'app/api', require: { php: '^8.2', 'laravel/framework': '^11.0' }, scripts: { 'post-install-cmd': ['@php artisan key:generate'] } }, { spaces: 2 });
73
+ await fs.writeFile(path.join(dir, '.cursorrules'), `# PHP/Laravel Rules\n- Follow PSR-12 coding standards\n- Use FormRequests for validation\n- Use API Resources for responses\n- Write PHPUnit tests\n- Use Eloquent ORM\n`);
74
+ break;
75
+ }
76
+ }
77
+ async function generateFrontendTemplate(dir, stack) {
78
+ await fs.ensureDir(path.join(dir, 'src', 'components'));
79
+ switch (stack) {
80
+ case 'react':
81
+ await fs.writeJSON(path.join(dir, 'package.json'), { name: 'frontend', version: '0.1.0', scripts: { dev: 'vite', build: 'vite build', test: 'vitest' }, dependencies: { react: '^18.0.0', 'react-dom': '^18.0.0' }, devDependencies: { vite: '^5.0.0', '@vitejs/plugin-react': '^4.0.0', typescript: '^5.0.0' } }, { spaces: 2 });
82
+ await fs.writeFile(path.join(dir, 'src', 'App.tsx'), `import React from 'react';\n\nexport default function App() {\n return <div><h1>DARE Framework - React App</h1></div>;\n}\n`);
83
+ await fs.writeFile(path.join(dir, '.cursorrules'), `# React Rules\n- Use functional components with hooks\n- Use TypeScript for all components\n- Prefer React Query for server state\n- Use Zustand or Context for client state\n- Write Vitest tests\n`);
84
+ break;
85
+ case 'vue':
86
+ await fs.writeJSON(path.join(dir, 'package.json'), { name: 'frontend', version: '0.1.0', scripts: { dev: 'vite', build: 'vite build', test: 'vitest' }, dependencies: { vue: '^3.0.0' }, devDependencies: { vite: '^5.0.0', '@vitejs/plugin-vue': '^5.0.0', typescript: '^5.0.0' } }, { spaces: 2 });
87
+ await fs.writeFile(path.join(dir, 'src', 'App.vue'), `<template>\n <div><h1>DARE Framework - Vue App</h1></div>\n</template>\n\n<script setup lang="ts">\n// Composition API\n</script>\n`);
88
+ await fs.writeFile(path.join(dir, '.cursorrules'), `# Vue Rules\n- Use Composition API with <script setup>\n- Use TypeScript for all components\n- Use Pinia for state management\n- Use Vue Router for navigation\n- Write Vitest tests\n`);
89
+ break;
90
+ }
91
+ }
92
+ function generateStackSkill(stack) {
93
+ const skills = {
94
+ 'rust-axum': `---\ndescription: Rust/Axum API development skill\n---\n# Rust/Axum Skill\n- Use Axum for HTTP routing\n- Use Tokio for async runtime\n- Use SQLx for database\n- Run clippy and cargo test\n`,
95
+ 'node-nestjs': `---\ndescription: Node.js/NestJS development skill\n---\n# NestJS Skill\n- Use NestJS modules and DI\n- Use DTOs with class-validator\n- Write Jest tests\n`,
96
+ 'python-fastapi': `---\ndescription: Python/FastAPI development skill\n---\n# FastAPI Skill\n- Use Pydantic for validation\n- Use async endpoints\n- Write pytest tests\n`,
97
+ 'php-laravel': `---\ndescription: PHP/Laravel development skill\n---\n# Laravel Skill\n- Use FormRequests\n- Use API Resources\n- Write PHPUnit tests\n`,
98
+ react: `---\ndescription: React development skill\n---\n# React Skill\n- Use functional components\n- Use TypeScript\n- Use React Query\n- Write Vitest tests\n`,
99
+ vue: `---\ndescription: Vue 3 development skill\n---\n# Vue Skill\n- Use Composition API\n- Use Pinia\n- Write Vitest tests\n`,
100
+ };
101
+ return skills[stack] || `---\ndescription: ${stack} skill\n---\n# ${stack} Skill\n`;
102
+ }
103
+ //# sourceMappingURL=project-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-generator.js","sourceRoot":"","sources":["../../src/utils/project-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ interface TemplateConfig {
2
+ backend?: string;
3
+ frontend?: string;
4
+ graphrag: string;
5
+ mcp: boolean;
6
+ }
7
+ export declare function generateCursorRules(config: TemplateConfig): string;
8
+ export declare function generateAntigravityRules(config: TemplateConfig): string;
9
+ export declare function generateSharedConfig(projectName: string): string;
10
+ export {};
11
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"AAAA,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAgFlE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA6BvE;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA4BhE"}