@dewtech/dare-cli 2.0.1 → 2.2.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 (67) hide show
  1. package/README.md +33 -6
  2. package/dist/__tests__/dag-converter.test.js +114 -0
  3. package/dist/__tests__/dag-converter.test.js.map +1 -1
  4. package/dist/__tests__/dag-runner/adapters.test.d.ts +2 -0
  5. package/dist/__tests__/dag-runner/adapters.test.d.ts.map +1 -0
  6. package/dist/__tests__/dag-runner/adapters.test.js +134 -0
  7. package/dist/__tests__/dag-runner/adapters.test.js.map +1 -0
  8. package/dist/__tests__/dag-runner/utils.test.d.ts +2 -0
  9. package/dist/__tests__/dag-runner/utils.test.d.ts.map +1 -0
  10. package/dist/__tests__/dag-runner/utils.test.js +75 -0
  11. package/dist/__tests__/dag-runner/utils.test.js.map +1 -0
  12. package/dist/commands/blueprint.d.ts +14 -0
  13. package/dist/commands/blueprint.d.ts.map +1 -1
  14. package/dist/commands/blueprint.js +249 -116
  15. package/dist/commands/blueprint.js.map +1 -1
  16. package/dist/commands/execute.d.ts.map +1 -1
  17. package/dist/commands/execute.js +38 -30
  18. package/dist/commands/execute.js.map +1 -1
  19. package/dist/dag-runner/adapters/antigravity.d.ts +6 -0
  20. package/dist/dag-runner/adapters/antigravity.d.ts.map +1 -0
  21. package/dist/dag-runner/adapters/antigravity.js +54 -0
  22. package/dist/dag-runner/adapters/antigravity.js.map +1 -0
  23. package/dist/dag-runner/adapters/claude.d.ts +6 -0
  24. package/dist/dag-runner/adapters/claude.d.ts.map +1 -0
  25. package/dist/dag-runner/adapters/claude.js +48 -0
  26. package/dist/dag-runner/adapters/claude.js.map +1 -0
  27. package/dist/dag-runner/adapters/cursor.d.ts +6 -0
  28. package/dist/dag-runner/adapters/cursor.d.ts.map +1 -0
  29. package/dist/dag-runner/adapters/cursor.js +58 -0
  30. package/dist/dag-runner/adapters/cursor.js.map +1 -0
  31. package/dist/dag-runner/adapters/index.d.ts +46 -0
  32. package/dist/dag-runner/adapters/index.d.ts.map +1 -0
  33. package/dist/dag-runner/adapters/index.js +55 -0
  34. package/dist/dag-runner/adapters/index.js.map +1 -0
  35. package/dist/dag-runner/run_dag.d.ts +47 -8
  36. package/dist/dag-runner/run_dag.d.ts.map +1 -1
  37. package/dist/dag-runner/run_dag.js +205 -124
  38. package/dist/dag-runner/run_dag.js.map +1 -1
  39. package/dist/dag-runner/utils/cap-output.d.ts +14 -0
  40. package/dist/dag-runner/utils/cap-output.d.ts.map +1 -0
  41. package/dist/dag-runner/utils/cap-output.js +22 -0
  42. package/dist/dag-runner/utils/cap-output.js.map +1 -0
  43. package/dist/dag-runner/utils/stitch-context.d.ts +24 -0
  44. package/dist/dag-runner/utils/stitch-context.d.ts.map +1 -0
  45. package/dist/dag-runner/utils/stitch-context.js +36 -0
  46. package/dist/dag-runner/utils/stitch-context.js.map +1 -0
  47. package/dist/dag-runner/utils/timeout.d.ts +27 -0
  48. package/dist/dag-runner/utils/timeout.d.ts.map +1 -0
  49. package/dist/dag-runner/utils/timeout.js +55 -0
  50. package/dist/dag-runner/utils/timeout.js.map +1 -0
  51. package/dist/index.d.ts +4 -2
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +2 -1
  54. package/dist/index.js.map +1 -1
  55. package/dist/utils/dag-converter.d.ts +8 -2
  56. package/dist/utils/dag-converter.d.ts.map +1 -1
  57. package/dist/utils/dag-converter.js +116 -21
  58. package/dist/utils/dag-converter.js.map +1 -1
  59. package/package.json +4 -1
  60. package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +172 -0
  61. package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +210 -229
  62. package/templates/ide/claude/.claude/commands/dare-blueprint.md +126 -42
  63. package/templates/ide/claude/.claude/commands/dare-dag-build.md +110 -0
  64. package/templates/ide/claude/.claude/commands/dare-dag-run.md +110 -0
  65. package/templates/ide/cursor/.cursor/commands/generate-tasks.md +117 -20
  66. package/templates/ide/cursor/.cursor/commands/run-dag.md +87 -0
  67. package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +176 -0
@@ -1,51 +1,172 @@
1
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
2
+ * DARE Framework DAG Task Runner
3
+ *
4
+ * Executes tasks in parallel based on a dependency graph (Kahn's ranks),
5
+ * delegating actual execution to a per-runner adapter (Claude / Cursor /
6
+ * Antigravity). Adapted from the Cursor Cookbook DAG Task Runner pattern.
5
7
  */
6
8
  import fs from 'fs-extra';
9
+ import path from 'path';
7
10
  import chalk from 'chalk';
11
+ import { getAdapter, MissingApiKeyError } from './adapters/index.js';
12
+ import { capOutput } from './utils/cap-output.js';
13
+ import { composePrompt } from './utils/stitch-context.js';
14
+ import { TaskAbortedError, TaskTimeoutError, withTimeout, } from './utils/timeout.js';
15
+ /** Defaults used when a YAML omits the `limits` block. */
16
+ export const DEFAULT_DAG_LIMITS = {
17
+ parent_context_chars: 2000,
18
+ task_output_chars: 4000,
19
+ timeout_seconds: 600,
20
+ };
21
+ // ─────────────────────────────────────────────────────────────────────────────
22
+ // Public entry point
23
+ // ─────────────────────────────────────────────────────────────────────────────
8
24
  /**
9
- * Compute execution ranks for tasks based on dependencies.
10
- * Tasks in the same rank can run in parallel.
25
+ * Execute the DAG. Tasks are statefully mutated in place: status, output,
26
+ * error, tokens and duration get filled in as execution progresses.
11
27
  */
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;
28
+ export async function runDag(dag, options) {
29
+ const { parallel, runner, canvasPath, resume = false, onlyTaskId } = options;
30
+ if (!isKnownRunner(runner)) {
31
+ throw new Error(`Unknown runner "${runner}". Expected one of: cursor | claude | antigravity.`);
32
+ }
33
+ const adapter = await getAdapter(runner);
34
+ const limits = dag.limits ?? DEFAULT_DAG_LIMITS;
35
+ const models = dag.models[runner];
36
+ if (!models) {
37
+ throw new Error(`dare-dag.yaml has no \`models.${runner}\` block. Define HIGH/MED/LOW for the chosen runner.`);
38
+ }
39
+ // Reset status only for tasks we plan to execute.
40
+ for (const task of dag.tasks) {
41
+ if (resume && (task.status === 'DONE' || task.status === 'SKIPPED'))
42
+ continue;
43
+ task.status = 'PENDING';
44
+ task.error = undefined;
45
+ }
46
+ // Honor SIGINT / SIGTERM — abort all in-flight tasks.
47
+ const cancellation = new AbortController();
48
+ const onSignal = (sig) => {
49
+ console.log(chalk.yellow(`\n ⚠ Received ${sig}. Cancelling in-flight tasks…`));
50
+ cancellation.abort('signal');
51
+ };
52
+ process.once('SIGINT', () => onSignal('SIGINT'));
53
+ process.once('SIGTERM', () => onSignal('SIGTERM'));
54
+ await renderCanvas(dag, canvasPath);
55
+ try {
56
+ if (onlyTaskId) {
57
+ const task = dag.tasks.find((t) => t.id === onlyTaskId);
58
+ if (!task)
59
+ throw new Error(`Task "${onlyTaskId}" not found in DAG.`);
60
+ await executeOne(task, dag, adapter, models, limits, cancellation.signal, canvasPath);
61
+ }
62
+ else if (parallel) {
63
+ await executeParallel(dag, adapter, models, limits, cancellation.signal, canvasPath);
64
+ }
65
+ else {
66
+ await executeSequential(dag, adapter, models, limits, cancellation.signal, canvasPath);
27
67
  }
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
68
  }
33
- tasks.forEach((t) => getRank(t.id));
34
- return ranks;
69
+ finally {
70
+ await renderCanvas(dag, canvasPath);
71
+ printSummary(dag, canvasPath);
72
+ }
35
73
  }
36
- /**
37
- * Render real-time canvas with task status
38
- */
74
+ // ─────────────────────────────────────────────────────────────────────────────
75
+ // Execution strategies
76
+ // ─────────────────────────────────────────────────────────────────────────────
77
+ async function executeSequential(dag, adapter, models, limits, externalSignal, canvasPath) {
78
+ for (const task of dag.tasks) {
79
+ if (task.status === 'DONE' || task.status === 'SKIPPED')
80
+ continue;
81
+ await executeOne(task, dag, adapter, models, limits, externalSignal, canvasPath);
82
+ }
83
+ }
84
+ async function executeParallel(dag, adapter, models, limits, externalSignal, canvasPath) {
85
+ const ranks = computeRanks(dag.tasks);
86
+ const maxRank = Math.max(0, ...ranks.values());
87
+ for (let rank = 0; rank <= maxRank; rank++) {
88
+ const rankTasks = dag.tasks.filter((t) => ranks.get(t.id) === rank && t.status === 'PENDING');
89
+ if (rankTasks.length === 0)
90
+ continue;
91
+ console.log(chalk.yellow(`\n 📦 Rank ${rank}: ${rankTasks.length} task(s) in parallel`));
92
+ // Skip tasks whose dependencies failed/skipped — cascading skip.
93
+ const skippable = rankTasks.filter((t) => t.depends_on.some((dep) => {
94
+ const parent = dag.tasks.find((d) => d.id === dep);
95
+ return parent?.status === 'FAILED' || parent?.status === 'SKIPPED';
96
+ }));
97
+ for (const t of skippable) {
98
+ t.status = 'SKIPPED';
99
+ console.log(chalk.gray(` ⏭️ Skipping ${t.id} (dependency failed)`));
100
+ }
101
+ const executable = rankTasks.filter((t) => t.status === 'PENDING');
102
+ if (executable.length === 0) {
103
+ await renderCanvas(dag, canvasPath);
104
+ continue;
105
+ }
106
+ await Promise.all(executable.map((task) => executeOne(task, dag, adapter, models, limits, externalSignal, canvasPath)));
107
+ }
108
+ }
109
+ async function executeOne(task, dag, adapter, models, limits, externalSignal, canvasPath) {
110
+ const start = Date.now();
111
+ task.status = 'RUNNING';
112
+ task.error = undefined;
113
+ await renderCanvas(dag, canvasPath);
114
+ console.log(chalk.cyan(` 🔄 ${task.id}: ${task.title}`));
115
+ const parents = task.depends_on
116
+ .map((id) => dag.tasks.find((t) => t.id === id))
117
+ .filter((t) => Boolean(t));
118
+ const prompt = composePrompt({
119
+ task,
120
+ parents,
121
+ parentContextChars: limits.parent_context_chars,
122
+ });
123
+ try {
124
+ const { output, tokens } = await withTimeout(({ signal }) => adapter.call({
125
+ prompt,
126
+ complexity: task.complexity,
127
+ models,
128
+ signal,
129
+ }), { timeoutSeconds: limits.timeout_seconds, externalSignal });
130
+ task.output = capOutput(output, limits.task_output_chars);
131
+ task.tokens = tokens;
132
+ task.duration = Date.now() - start;
133
+ task.status = 'DONE';
134
+ console.log(chalk.green(` ✅ ${task.id} done (${task.duration}ms${tokens ? `, ${tokens} tokens` : ''})`));
135
+ }
136
+ catch (err) {
137
+ task.duration = Date.now() - start;
138
+ task.status = 'FAILED';
139
+ task.error = formatError(err);
140
+ if (err instanceof MissingApiKeyError) {
141
+ console.log(chalk.red(` ❌ ${task.id} failed: ${err.message}`));
142
+ }
143
+ else if (err instanceof TaskTimeoutError) {
144
+ console.log(chalk.red(` ❌ ${task.id} timed out after ${err.timeoutSeconds}s`));
145
+ }
146
+ else if (err instanceof TaskAbortedError) {
147
+ console.log(chalk.yellow(` ⚠ ${task.id} aborted: ${err.message}`));
148
+ }
149
+ else {
150
+ console.log(chalk.red(` ❌ ${task.id} failed: ${task.error}`));
151
+ }
152
+ }
153
+ finally {
154
+ await renderCanvas(dag, canvasPath);
155
+ }
156
+ }
157
+ // ─────────────────────────────────────────────────────────────────────────────
158
+ // Canvas + helpers
159
+ // ─────────────────────────────────────────────────────────────────────────────
160
+ const STATUS_ICON = {
161
+ PENDING: '⏳',
162
+ RUNNING: '🔄',
163
+ DONE: '✅',
164
+ FAILED: '❌',
165
+ SKIPPED: '⏭️',
166
+ };
39
167
  async function renderCanvas(dag, canvasPath) {
40
- const statusIcon = {
41
- PENDING: '⏳',
42
- RUNNING: '🔄',
43
- DONE: '✅',
44
- FAILED: '❌',
45
- SKIPPED: '⏭️',
46
- };
47
168
  const lines = [
48
- `# DARE DAG Execution - ${dag.title}`,
169
+ `# DARE DAG Execution ${dag.title}`,
49
170
  ``,
50
171
  `**Updated:** ${new Date().toISOString()}`,
51
172
  ``,
@@ -55,106 +176,66 @@ async function renderCanvas(dag, canvasPath) {
55
176
  `|----|-------|--------|----------|--------|`,
56
177
  ];
57
178
  for (const task of dag.tasks) {
58
- const icon = statusIcon[task.status || 'PENDING'];
179
+ const status = task.status ?? 'PENDING';
180
+ const icon = STATUS_ICON[status];
59
181
  const duration = task.duration ? `${task.duration}ms` : '-';
60
182
  const tokens = task.tokens ? `${task.tokens}` : '-';
61
- lines.push(`| ${task.id} | ${task.title} | ${icon} ${task.status || 'PENDING'} | ${duration} | ${tokens} |`);
183
+ lines.push(`| ${task.id} | ${task.title} | ${icon} ${status} | ${duration} | ${tokens} |`);
62
184
  }
63
- const done = dag.tasks.filter((t) => t.status === 'DONE').length;
64
185
  const total = dag.tasks.length;
65
- const pct = Math.round((done / total) * 100);
186
+ const done = dag.tasks.filter((t) => t.status === 'DONE').length;
187
+ const pct = total === 0 ? 0 : Math.round((done / total) * 100);
188
+ const filled = Math.round(pct / 5);
66
189
  lines.push('');
67
190
  lines.push(`## Progress: ${done}/${total} tasks (${pct}%)`);
68
191
  lines.push('');
69
- lines.push(`${'█'.repeat(Math.round(pct / 5))}${'░'.repeat(20 - Math.round(pct / 5))} ${pct}%`);
70
- await fs.ensureDir(canvasPath.replace(/\/[^/]+$/, ''));
192
+ lines.push(`${'█'.repeat(filled)}${'░'.repeat(20 - filled)} ${pct}%`);
193
+ await fs.ensureDir(path.dirname(canvasPath));
71
194
  await fs.writeFile(canvasPath, lines.join('\n'));
72
195
  }
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
- }
196
+ function printSummary(dag, canvasPath) {
154
197
  const done = dag.tasks.filter((t) => t.status === 'DONE').length;
155
198
  const failed = dag.tasks.filter((t) => t.status === 'FAILED').length;
156
199
  const skipped = dag.tasks.filter((t) => t.status === 'SKIPPED').length;
157
200
  console.log(chalk.bold(`\n 📊 Summary: ${done} done, ${failed} failed, ${skipped} skipped`));
158
201
  console.log(chalk.cyan(` 📄 Canvas: ${canvasPath}\n`));
159
202
  }
203
+ /**
204
+ * Compute execution ranks for tasks based on dependencies.
205
+ * Tasks in the same rank can run in parallel (Kahn's algorithm).
206
+ */
207
+ export function computeRanks(tasks) {
208
+ const ranks = new Map();
209
+ const taskMap = new Map(tasks.map((t) => [t.id, t]));
210
+ function getRank(taskId, visited = new Set()) {
211
+ if (ranks.has(taskId))
212
+ return ranks.get(taskId);
213
+ if (visited.has(taskId)) {
214
+ throw new Error(`Circular dependency detected: ${taskId}`);
215
+ }
216
+ visited.add(taskId);
217
+ const task = taskMap.get(taskId);
218
+ if (!task)
219
+ throw new Error(`Task not found: ${taskId}`);
220
+ if (task.depends_on.length === 0) {
221
+ ranks.set(taskId, 0);
222
+ return 0;
223
+ }
224
+ const maxDepRank = Math.max(...task.depends_on.map((dep) => getRank(dep, new Set(visited))));
225
+ const rank = maxDepRank + 1;
226
+ ranks.set(taskId, rank);
227
+ return rank;
228
+ }
229
+ for (const t of tasks)
230
+ getRank(t.id);
231
+ return ranks;
232
+ }
233
+ function isKnownRunner(runner) {
234
+ return runner === 'cursor' || runner === 'claude' || runner === 'antigravity';
235
+ }
236
+ function formatError(err) {
237
+ if (err instanceof Error)
238
+ return err.message;
239
+ return String(err);
240
+ }
160
241
  //# sourceMappingURL=run_dag.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run_dag.js","sourceRoot":"","sources":["../../src/dag-runner/run_dag.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run_dag.js","sourceRoot":"","sources":["../../src/dag-runner/run_dag.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Cap a task's captured output at `task_output_chars` chars (per the
3
+ * canonical `dare-dag.yaml` `limits` block).
4
+ *
5
+ * Capping applies to the in-memory `output` that gets:
6
+ * 1. stitched as upstream context for downstream tasks
7
+ * 2. shown on the canvas / logs
8
+ *
9
+ * The full output (if larger) is returned as-is to the caller so it can
10
+ * decide whether to persist the original elsewhere — capping is for the
11
+ * runner's bookkeeping, not for the underlying API call.
12
+ */
13
+ export declare function capOutput(text: string, maxChars: number): string;
14
+ //# sourceMappingURL=cap-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cap-output.d.ts","sourceRoot":"","sources":["../../../src/dag-runner/utils/cap-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMhE"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Cap a task's captured output at `task_output_chars` chars (per the
3
+ * canonical `dare-dag.yaml` `limits` block).
4
+ *
5
+ * Capping applies to the in-memory `output` that gets:
6
+ * 1. stitched as upstream context for downstream tasks
7
+ * 2. shown on the canvas / logs
8
+ *
9
+ * The full output (if larger) is returned as-is to the caller so it can
10
+ * decide whether to persist the original elsewhere — capping is for the
11
+ * runner's bookkeeping, not for the underlying API call.
12
+ */
13
+ const TRUNCATION_NOTICE = '…[truncated by DARE — output_cap reached]';
14
+ export function capOutput(text, maxChars) {
15
+ if (maxChars <= 0)
16
+ return '';
17
+ if (text.length <= maxChars)
18
+ return text;
19
+ const room = Math.max(0, maxChars - TRUNCATION_NOTICE.length);
20
+ return text.slice(0, room) + TRUNCATION_NOTICE;
21
+ }
22
+ //# sourceMappingURL=cap-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cap-output.js","sourceRoot":"","sources":["../../../src/dag-runner/utils/cap-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,iBAAiB,GAAG,2CAA2C,CAAC;AAEtE,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,QAAgB;IACtD,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7B,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,iBAAiB,CAAC;AACjD,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Build the upstream context block injected into a child task's prompt.
3
+ *
4
+ * Each parent contributes a snippet capped at `parent_context_chars` chars
5
+ * (per the canonical `dare-dag.yaml` `limits` block). The snippet is the tail
6
+ * of the parent's output — that's where the most decision-relevant content
7
+ * tends to sit for AI agents (final answer, file paths, conclusions).
8
+ *
9
+ * The output is deterministic and self-describing so the child can locate
10
+ * each parent's contribution.
11
+ */
12
+ import type { DagTask } from '../run_dag.js';
13
+ export interface StitchContextInput {
14
+ task: DagTask;
15
+ parents: DagTask[];
16
+ parentContextChars: number;
17
+ }
18
+ export declare function stitchParentContext({ parents, parentContextChars, }: StitchContextInput): string;
19
+ /**
20
+ * Compose the final prompt sent to a runner: the task's `subtask_prompt`
21
+ * concatenated with the upstream context block (when present).
22
+ */
23
+ export declare function composePrompt(input: StitchContextInput): string;
24
+ //# sourceMappingURL=stitch-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stitch-context.d.ts","sourceRoot":"","sources":["../../../src/dag-runner/utils/stitch-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAID,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,kBAAkB,GACnB,EAAE,kBAAkB,GAAG,MAAM,CAgB7B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAI/D"}
@@ -0,0 +1,36 @@
1
+ const HEADER = '## Upstream context';
2
+ export function stitchParentContext({ parents, parentContextChars, }) {
3
+ if (parents.length === 0)
4
+ return '';
5
+ if (parentContextChars <= 0)
6
+ return '';
7
+ const blocks = [HEADER, ''];
8
+ for (const parent of parents) {
9
+ const snippet = takeTail(parent.output ?? '', parentContextChars);
10
+ blocks.push(`### From parent: ${parent.id} — ${parent.title}`);
11
+ if (snippet.trim().length === 0) {
12
+ blocks.push('_(no captured output)_');
13
+ }
14
+ else {
15
+ blocks.push(snippet);
16
+ }
17
+ blocks.push('');
18
+ }
19
+ return blocks.join('\n');
20
+ }
21
+ /**
22
+ * Compose the final prompt sent to a runner: the task's `subtask_prompt`
23
+ * concatenated with the upstream context block (when present).
24
+ */
25
+ export function composePrompt(input) {
26
+ const ctx = stitchParentContext(input);
27
+ if (ctx.length === 0)
28
+ return input.task.subtask_prompt;
29
+ return `${input.task.subtask_prompt.trim()}\n\n${ctx}`.trimEnd() + '\n';
30
+ }
31
+ function takeTail(text, maxChars) {
32
+ if (text.length <= maxChars)
33
+ return text;
34
+ return `…${text.slice(text.length - maxChars + 1)}`;
35
+ }
36
+ //# sourceMappingURL=stitch-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stitch-context.js","sourceRoot":"","sources":["../../../src/dag-runner/utils/stitch-context.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,GAAG,qBAAqB,CAAC;AAErC,MAAM,UAAU,mBAAmB,CAAC,EAClC,OAAO,EACP,kBAAkB,GACC;IACnB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,kBAAkB,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,MAAM,GAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;IACvD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AAC1E,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,QAAgB;IAC9C,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;AACtD,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Run an async operation with a hard timeout, backed by `AbortController`.
3
+ *
4
+ * The operation receives the controller's `signal` — adapters MUST forward
5
+ * it to their underlying SDK call (Anthropic, Cursor, Google) so an external
6
+ * abort is honored. If the SDK doesn't support cancellation, we still time
7
+ * out at the JS level via the racing promise.
8
+ *
9
+ * Also accepts an optional `externalSignal` so a SIGINT/SIGTERM listener can
10
+ * cancel everything in flight.
11
+ */
12
+ export interface WithTimeoutOptions {
13
+ timeoutSeconds: number;
14
+ externalSignal?: AbortSignal;
15
+ }
16
+ export interface TimeoutContext {
17
+ signal: AbortSignal;
18
+ }
19
+ export declare class TaskTimeoutError extends Error {
20
+ readonly timeoutSeconds: number;
21
+ constructor(timeoutSeconds: number);
22
+ }
23
+ export declare class TaskAbortedError extends Error {
24
+ constructor(reason?: string);
25
+ }
26
+ export declare function withTimeout<T>(op: (ctx: TimeoutContext) => Promise<T>, { timeoutSeconds, externalSignal }: WithTimeoutOptions): Promise<T>;
27
+ //# sourceMappingURL=timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../../src/dag-runner/utils/timeout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;aACb,cAAc,EAAE,MAAM;gBAAtB,cAAc,EAAE,MAAM;CAInD;AAED,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,MAAM,SAAY;CAI/B;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,EACvC,EAAE,cAAc,EAAE,cAAc,EAAE,EAAE,kBAAkB,GACrD,OAAO,CAAC,CAAC,CAAC,CA4BZ"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Run an async operation with a hard timeout, backed by `AbortController`.
3
+ *
4
+ * The operation receives the controller's `signal` — adapters MUST forward
5
+ * it to their underlying SDK call (Anthropic, Cursor, Google) so an external
6
+ * abort is honored. If the SDK doesn't support cancellation, we still time
7
+ * out at the JS level via the racing promise.
8
+ *
9
+ * Also accepts an optional `externalSignal` so a SIGINT/SIGTERM listener can
10
+ * cancel everything in flight.
11
+ */
12
+ export class TaskTimeoutError extends Error {
13
+ constructor(timeoutSeconds) {
14
+ super(`Task exceeded ${timeoutSeconds}s timeout`);
15
+ this.timeoutSeconds = timeoutSeconds;
16
+ this.name = 'TaskTimeoutError';
17
+ }
18
+ }
19
+ export class TaskAbortedError extends Error {
20
+ constructor(reason = 'aborted') {
21
+ super(`Task aborted: ${reason}`);
22
+ this.name = 'TaskAbortedError';
23
+ }
24
+ }
25
+ export async function withTimeout(op, { timeoutSeconds, externalSignal }) {
26
+ const controller = new AbortController();
27
+ // Forward external aborts (e.g. SIGINT handler) to our controller.
28
+ const onExternal = () => controller.abort('external');
29
+ if (externalSignal) {
30
+ if (externalSignal.aborted)
31
+ controller.abort('external');
32
+ else
33
+ externalSignal.addEventListener('abort', onExternal, { once: true });
34
+ }
35
+ const timer = setTimeout(() => controller.abort('timeout'), timeoutSeconds * 1000);
36
+ try {
37
+ return await Promise.race([
38
+ op({ signal: controller.signal }),
39
+ new Promise((_, reject) => {
40
+ controller.signal.addEventListener('abort', () => {
41
+ const reason = controller.signal.reason ?? 'aborted';
42
+ reject(reason === 'timeout'
43
+ ? new TaskTimeoutError(timeoutSeconds)
44
+ : new TaskAbortedError(String(reason)));
45
+ }, { once: true });
46
+ }),
47
+ ]);
48
+ }
49
+ finally {
50
+ clearTimeout(timer);
51
+ if (externalSignal)
52
+ externalSignal.removeEventListener('abort', onExternal);
53
+ }
54
+ }
55
+ //# sourceMappingURL=timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../../src/dag-runner/utils/timeout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAA4B,cAAsB;QAChD,KAAK,CAAC,iBAAiB,cAAc,WAAW,CAAC,CAAC;QADxB,mBAAc,GAAd,cAAc,CAAQ;QAEhD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,MAAM,GAAG,SAAS;QAC5B,KAAK,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAuC,EACvC,EAAE,cAAc,EAAE,cAAc,EAAsB;IAEtD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,mEAAmE;IACnE,MAAM,UAAU,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,cAAc,CAAC,OAAO;YAAE,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;YACpD,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,CAAC;IAEnF,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACxB,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;YACjC,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC3B,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBAC/C,MAAM,MAAM,GAAI,UAAU,CAAC,MAAM,CAAC,MAA6B,IAAI,SAAS,CAAC;oBAC7E,MAAM,CAAC,MAAM,KAAK,SAAS;wBACzB,CAAC,CAAC,IAAI,gBAAgB,CAAC,cAAc,CAAC;wBACtC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC5C,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACrB,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,cAAc;YAAE,cAAc,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -9,9 +9,11 @@ export { initCommand } from './commands/init.js';
9
9
  export { designCommand } from './commands/design.js';
10
10
  export { blueprintCommand } from './commands/blueprint.js';
11
11
  export { executeCommand } from './commands/execute.js';
12
- export { runDag } from './dag-runner/run_dag.js';
13
- export type { Dag, DagTask, RunDagOptions } from './dag-runner/run_dag.js';
12
+ export { runDag, computeRanks, DEFAULT_DAG_LIMITS } from './dag-runner/run_dag.js';
13
+ export type { Dag, DagTask, DagLimits, DagModelMap, DagModels, RunDagOptions, RunnerName, Complexity, TaskStatus as DagTaskStatus, } from './dag-runner/run_dag.js';
14
14
  export { convertYamlToDag, convertDagToYaml } from './utils/dag-converter.js';
15
+ export { getAdapter, MissingApiKeyError, AdapterCallError, } from './dag-runner/adapters/index.js';
16
+ export type { RunnerAdapter } from './dag-runner/adapters/index.js';
15
17
  export { generateProjectStructure } from './utils/project-generator.js';
16
18
  export type { ProjectConfig } from './utils/project-generator.js';
17
19
  export { GraphRAG } from './graphrag/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;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;AAGvD,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;AAG9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,YAAY,EACV,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;;;;;;GAMG;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;AAGvD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACnF,YAAY,EACV,GAAG,EACH,OAAO,EACP,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,UAAU,EACV,UAAU,EACV,UAAU,IAAI,aAAa,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAGpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,YAAY,EACV,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"}