@dewtech/dare-cli 2.1.0 → 2.3.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 (95) hide show
  1. package/README.md +53 -7
  2. package/dist/__tests__/dag-runner/adapters.test.d.ts +2 -0
  3. package/dist/__tests__/dag-runner/adapters.test.d.ts.map +1 -0
  4. package/dist/__tests__/dag-runner/adapters.test.js +134 -0
  5. package/dist/__tests__/dag-runner/adapters.test.js.map +1 -0
  6. package/dist/__tests__/dag-runner/graph-ingest.test.d.ts +2 -0
  7. package/dist/__tests__/dag-runner/graph-ingest.test.d.ts.map +1 -0
  8. package/dist/__tests__/dag-runner/graph-ingest.test.js +105 -0
  9. package/dist/__tests__/dag-runner/graph-ingest.test.js.map +1 -0
  10. package/dist/__tests__/dag-runner/orchestrator.test.d.ts +2 -0
  11. package/dist/__tests__/dag-runner/orchestrator.test.d.ts.map +1 -0
  12. package/dist/__tests__/dag-runner/orchestrator.test.js +107 -0
  13. package/dist/__tests__/dag-runner/orchestrator.test.js.map +1 -0
  14. package/dist/__tests__/dag-runner/utils.test.d.ts +2 -0
  15. package/dist/__tests__/dag-runner/utils.test.d.ts.map +1 -0
  16. package/dist/__tests__/dag-runner/utils.test.js +47 -0
  17. package/dist/__tests__/dag-runner/utils.test.js.map +1 -0
  18. package/dist/__tests__/graphrag/json-graph.test.d.ts +2 -0
  19. package/dist/__tests__/graphrag/json-graph.test.d.ts.map +1 -0
  20. package/dist/__tests__/graphrag/json-graph.test.js +57 -0
  21. package/dist/__tests__/graphrag/json-graph.test.js.map +1 -0
  22. package/dist/bin/dare.js +2 -0
  23. package/dist/bin/dare.js.map +1 -1
  24. package/dist/commands/execute.d.ts.map +1 -1
  25. package/dist/commands/execute.js +172 -45
  26. package/dist/commands/execute.js.map +1 -1
  27. package/dist/commands/graph.d.ts +9 -0
  28. package/dist/commands/graph.d.ts.map +1 -0
  29. package/dist/commands/graph.js +155 -0
  30. package/dist/commands/graph.js.map +1 -0
  31. package/dist/dag-runner/adapters/antigravity.d.ts +6 -0
  32. package/dist/dag-runner/adapters/antigravity.d.ts.map +1 -0
  33. package/dist/dag-runner/adapters/antigravity.js +54 -0
  34. package/dist/dag-runner/adapters/antigravity.js.map +1 -0
  35. package/dist/dag-runner/adapters/claude.d.ts +6 -0
  36. package/dist/dag-runner/adapters/claude.d.ts.map +1 -0
  37. package/dist/dag-runner/adapters/claude.js +48 -0
  38. package/dist/dag-runner/adapters/claude.js.map +1 -0
  39. package/dist/dag-runner/adapters/cursor.d.ts +6 -0
  40. package/dist/dag-runner/adapters/cursor.d.ts.map +1 -0
  41. package/dist/dag-runner/adapters/cursor.js +58 -0
  42. package/dist/dag-runner/adapters/cursor.js.map +1 -0
  43. package/dist/dag-runner/adapters/index.d.ts +46 -0
  44. package/dist/dag-runner/adapters/index.d.ts.map +1 -0
  45. package/dist/dag-runner/adapters/index.js +55 -0
  46. package/dist/dag-runner/adapters/index.js.map +1 -0
  47. package/dist/dag-runner/graph-ingest.d.ts +17 -0
  48. package/dist/dag-runner/graph-ingest.d.ts.map +1 -0
  49. package/dist/dag-runner/graph-ingest.js +149 -0
  50. package/dist/dag-runner/graph-ingest.js.map +1 -0
  51. package/dist/dag-runner/run_dag.d.ts +51 -24
  52. package/dist/dag-runner/run_dag.d.ts.map +1 -1
  53. package/dist/dag-runner/run_dag.js +163 -109
  54. package/dist/dag-runner/run_dag.js.map +1 -1
  55. package/dist/dag-runner/state-store.d.ts +13 -0
  56. package/dist/dag-runner/state-store.d.ts.map +1 -0
  57. package/dist/dag-runner/state-store.js +69 -0
  58. package/dist/dag-runner/state-store.js.map +1 -0
  59. package/dist/dag-runner/utils/cap-output.d.ts +14 -0
  60. package/dist/dag-runner/utils/cap-output.d.ts.map +1 -0
  61. package/dist/dag-runner/utils/cap-output.js +25 -0
  62. package/dist/dag-runner/utils/cap-output.js.map +1 -0
  63. package/dist/dag-runner/utils/stitch-context.d.ts +24 -0
  64. package/dist/dag-runner/utils/stitch-context.d.ts.map +1 -0
  65. package/dist/dag-runner/utils/stitch-context.js +36 -0
  66. package/dist/dag-runner/utils/stitch-context.js.map +1 -0
  67. package/dist/dag-runner/utils/timeout.d.ts +27 -0
  68. package/dist/dag-runner/utils/timeout.d.ts.map +1 -0
  69. package/dist/dag-runner/utils/timeout.js +55 -0
  70. package/dist/dag-runner/utils/timeout.js.map +1 -0
  71. package/dist/graphrag/factory.d.ts +25 -0
  72. package/dist/graphrag/factory.d.ts.map +1 -0
  73. package/dist/graphrag/factory.js +66 -0
  74. package/dist/graphrag/factory.js.map +1 -0
  75. package/dist/graphrag/index.d.ts +4 -0
  76. package/dist/graphrag/index.d.ts.map +1 -1
  77. package/dist/graphrag/index.js +2 -0
  78. package/dist/graphrag/index.js.map +1 -1
  79. package/dist/graphrag/json-graph.d.ts +28 -0
  80. package/dist/graphrag/json-graph.d.ts.map +1 -0
  81. package/dist/graphrag/json-graph.js +168 -0
  82. package/dist/graphrag/json-graph.js.map +1 -0
  83. package/dist/graphrag/knowledge-graph.d.ts +33 -0
  84. package/dist/graphrag/knowledge-graph.d.ts.map +1 -0
  85. package/dist/graphrag/knowledge-graph.js +2 -0
  86. package/dist/graphrag/knowledge-graph.js.map +1 -0
  87. package/dist/index.d.ts +13 -6
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +12 -5
  90. package/dist/index.js.map +1 -1
  91. package/package.json +1 -1
  92. package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +99 -96
  93. package/templates/ide/claude/.claude/commands/dare-dag-run.md +68 -69
  94. package/templates/ide/cursor/.cursor/commands/run-dag.md +67 -44
  95. package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +97 -87
@@ -1,28 +1,48 @@
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 DAG Task Runner — orchestration only.
3
+ *
4
+ * The DAG runner is **not** an executor. The agent inside the user's IDE
5
+ * (Cursor / Antigravity / Claude Code) executes each task using its native
6
+ * runtime — the IDE is already authenticated and the user already pays for
7
+ * inference there. This CLI is responsible for:
8
+ *
9
+ * 1. ordering tasks (Kahn's algorithm) and surfacing what to execute next
10
+ * 2. computing the prompt the agent should run, with parent-output context
11
+ * 3. recording status transitions (PENDING → RUNNING → DONE / FAILED / SKIPPED)
12
+ * 4. cascading-skip when a parent fails
13
+ * 5. rendering the live canvas at DARE/.canvas.md
14
+ * 6. (optionally) ingesting finished tasks into the knowledge graph
15
+ *
16
+ * The actual task execution loop lives outside this file: see `dare execute`
17
+ * (`--next` / `--complete` / `--fail`).
5
18
  */
6
19
  import fs from 'fs-extra';
7
- import chalk from 'chalk';
8
- /** Defaults used when a YAML omits the `limits` block. */
20
+ import path from 'path';
21
+ import { capOutput } from './utils/cap-output.js';
22
+ import { composePrompt } from './utils/stitch-context.js';
23
+ import { ingestTask } from './graph-ingest.js';
9
24
  export const DEFAULT_DAG_LIMITS = {
10
25
  parent_context_chars: 2000,
11
26
  task_output_chars: 4000,
12
27
  timeout_seconds: 600,
13
28
  };
29
+ // ─────────────────────────────────────────────────────────────────────────────
30
+ // Topological ranking
31
+ // ─────────────────────────────────────────────────────────────────────────────
14
32
  /**
15
- * Compute execution ranks for tasks based on dependencies.
16
- * Tasks in the same rank can run in parallel.
33
+ * Compute execution ranks for tasks based on dependencies. Tasks in the same
34
+ * rank can run in parallel (logical parallelism: the IDE agent decides
35
+ * whether to literally fan them out or run them back-to-back).
17
36
  */
18
- function computeRanks(tasks) {
37
+ export function computeRanks(tasks) {
19
38
  const ranks = new Map();
20
39
  const taskMap = new Map(tasks.map((t) => [t.id, t]));
21
40
  function getRank(taskId, visited = new Set()) {
22
41
  if (ranks.has(taskId))
23
42
  return ranks.get(taskId);
24
- if (visited.has(taskId))
43
+ if (visited.has(taskId)) {
25
44
  throw new Error(`Circular dependency detected: ${taskId}`);
45
+ }
26
46
  visited.add(taskId);
27
47
  const task = taskMap.get(taskId);
28
48
  if (!task)
@@ -36,22 +56,124 @@ function computeRanks(tasks) {
36
56
  ranks.set(taskId, rank);
37
57
  return rank;
38
58
  }
39
- tasks.forEach((t) => getRank(t.id));
59
+ for (const t of tasks)
60
+ getRank(t.id);
40
61
  return ranks;
41
62
  }
63
+ // ─────────────────────────────────────────────────────────────────────────────
64
+ // Status queries
65
+ // ─────────────────────────────────────────────────────────────────────────────
66
+ /**
67
+ * Return the next batch of tasks the agent should execute now: PENDING tasks
68
+ * whose every parent is DONE. These can be executed in parallel by the agent.
69
+ *
70
+ * If `currentRankOnly` is true (default), restrict to the lowest rank that
71
+ * still has executable tasks — gives a clean "rank-by-rank" cadence.
72
+ */
73
+ export function nextExecutableTasks(dag, currentRankOnly = true) {
74
+ const byId = new Map(dag.tasks.map((t) => [t.id, t]));
75
+ const ready = dag.tasks.filter((t) => {
76
+ if (t.status === 'DONE' || t.status === 'SKIPPED')
77
+ return false;
78
+ if (t.status === 'RUNNING')
79
+ return false; // already picked up
80
+ return t.depends_on.every((d) => byId.get(d)?.status === 'DONE');
81
+ });
82
+ if (!currentRankOnly || ready.length === 0)
83
+ return ready;
84
+ const ranks = computeRanks(dag.tasks);
85
+ const minRank = Math.min(...ready.map((t) => ranks.get(t.id) ?? 0));
86
+ return ready.filter((t) => (ranks.get(t.id) ?? 0) === minRank);
87
+ }
42
88
  /**
43
- * Render real-time canvas with task status
89
+ * Cascade: any PENDING task whose dependency is FAILED/SKIPPED becomes SKIPPED.
90
+ * Returns the list of newly-skipped tasks (caller can ingest them).
44
91
  */
45
- async function renderCanvas(dag, canvasPath) {
46
- const statusIcon = {
47
- PENDING: '⏳',
48
- RUNNING: '🔄',
49
- DONE: '✅',
50
- FAILED: '❌',
51
- SKIPPED: '⏭️',
52
- };
92
+ export function applyCascadingSkip(dag) {
93
+ const byId = new Map(dag.tasks.map((t) => [t.id, t]));
94
+ const newlySkipped = [];
95
+ let changed = true;
96
+ while (changed) {
97
+ changed = false;
98
+ for (const task of dag.tasks) {
99
+ if (task.status !== 'PENDING')
100
+ continue;
101
+ const blocked = task.depends_on.some((d) => {
102
+ const parent = byId.get(d);
103
+ return parent?.status === 'FAILED' || parent?.status === 'SKIPPED';
104
+ });
105
+ if (blocked) {
106
+ task.status = 'SKIPPED';
107
+ newlySkipped.push(task);
108
+ changed = true;
109
+ }
110
+ }
111
+ }
112
+ return newlySkipped;
113
+ }
114
+ // ─────────────────────────────────────────────────────────────────────────────
115
+ // Prompt composition (what the agent should literally execute)
116
+ // ─────────────────────────────────────────────────────────────────────────────
117
+ /**
118
+ * Compose the prompt for a given task: the task's `subtask_prompt` plus an
119
+ * "Upstream context" block with capped snippets of each parent's output.
120
+ */
121
+ export function buildTaskPrompt(dag, task) {
122
+ const limits = dag.limits ?? DEFAULT_DAG_LIMITS;
123
+ const parents = task.depends_on
124
+ .map((id) => dag.tasks.find((t) => t.id === id))
125
+ .filter((t) => Boolean(t));
126
+ return composePrompt({
127
+ task,
128
+ parents,
129
+ parentContextChars: limits.parent_context_chars,
130
+ });
131
+ }
132
+ export function markRunning(dag, taskId) {
133
+ const task = requireTask(dag, taskId);
134
+ task.status = 'RUNNING';
135
+ task.error = undefined;
136
+ return task;
137
+ }
138
+ export function markDone(dag, taskId, opts = {}) {
139
+ const task = requireTask(dag, taskId);
140
+ const limits = dag.limits ?? DEFAULT_DAG_LIMITS;
141
+ task.status = 'DONE';
142
+ task.output = opts.output ? capOutput(opts.output, limits.task_output_chars) : task.output;
143
+ task.tokens = opts.tokens ?? task.tokens;
144
+ task.duration = opts.durationMs ?? task.duration;
145
+ task.error = undefined;
146
+ if (opts.graph)
147
+ safeIngest(opts.graph, task, dag);
148
+ return task;
149
+ }
150
+ export function markFailed(dag, taskId, opts = {}) {
151
+ const task = requireTask(dag, taskId);
152
+ task.status = 'FAILED';
153
+ task.error = opts.error ?? task.error ?? 'unknown';
154
+ task.duration = opts.durationMs ?? task.duration;
155
+ if (opts.graph)
156
+ safeIngest(opts.graph, task, dag);
157
+ // Cascade-skip downstream tasks
158
+ const skipped = applyCascadingSkip(dag);
159
+ if (opts.graph)
160
+ for (const t of skipped)
161
+ safeIngest(opts.graph, t, dag);
162
+ return task;
163
+ }
164
+ // ─────────────────────────────────────────────────────────────────────────────
165
+ // Canvas rendering
166
+ // ─────────────────────────────────────────────────────────────────────────────
167
+ const STATUS_ICON = {
168
+ PENDING: '⏳',
169
+ RUNNING: '🔄',
170
+ DONE: '✅',
171
+ FAILED: '❌',
172
+ SKIPPED: '⏭️',
173
+ };
174
+ export async function renderCanvas(dag, canvasPath) {
53
175
  const lines = [
54
- `# DARE DAG Execution - ${dag.title}`,
176
+ `# DARE DAG Execution ${dag.title}`,
55
177
  ``,
56
178
  `**Updated:** ${new Date().toISOString()}`,
57
179
  ``,
@@ -61,106 +183,38 @@ async function renderCanvas(dag, canvasPath) {
61
183
  `|----|-------|--------|----------|--------|`,
62
184
  ];
63
185
  for (const task of dag.tasks) {
64
- const icon = statusIcon[task.status || 'PENDING'];
186
+ const status = task.status ?? 'PENDING';
187
+ const icon = STATUS_ICON[status];
65
188
  const duration = task.duration ? `${task.duration}ms` : '-';
66
189
  const tokens = task.tokens ? `${task.tokens}` : '-';
67
- lines.push(`| ${task.id} | ${task.title} | ${icon} ${task.status || 'PENDING'} | ${duration} | ${tokens} |`);
190
+ lines.push(`| ${task.id} | ${task.title} | ${icon} ${status} | ${duration} | ${tokens} |`);
68
191
  }
69
- const done = dag.tasks.filter((t) => t.status === 'DONE').length;
70
192
  const total = dag.tasks.length;
71
- const pct = Math.round((done / total) * 100);
193
+ const done = dag.tasks.filter((t) => t.status === 'DONE').length;
194
+ const pct = total === 0 ? 0 : Math.round((done / total) * 100);
195
+ const filled = Math.round(pct / 5);
72
196
  lines.push('');
73
197
  lines.push(`## Progress: ${done}/${total} tasks (${pct}%)`);
74
198
  lines.push('');
75
- lines.push(`${'█'.repeat(Math.round(pct / 5))}${'░'.repeat(20 - Math.round(pct / 5))} ${pct}%`);
76
- await fs.ensureDir(canvasPath.replace(/\/[^/]+$/, ''));
199
+ lines.push(`${'█'.repeat(filled)}${'░'.repeat(20 - filled)} ${pct}%`);
200
+ await fs.ensureDir(path.dirname(canvasPath));
77
201
  await fs.writeFile(canvasPath, lines.join('\n'));
78
202
  }
79
- /**
80
- * Execute a single task (placeholder - AI agent executes in real use)
81
- */
82
- async function executeTask(task, context, runner) {
83
- // In real usage, this calls the AI agent (Cursor/Antigravity) with the task prompt
84
- // For now, we simulate execution
85
- const delay = task.complexity === 'HIGH' ? 2000 : task.complexity === 'MED' ? 1000 : 500;
86
- await new Promise((resolve) => setTimeout(resolve, delay));
87
- return {
88
- output: `Task ${task.id} completed by ${runner}`,
89
- tokens: Math.floor(Math.random() * 2000) + 500,
90
- };
203
+ // ─────────────────────────────────────────────────────────────────────────────
204
+ // Helpers
205
+ // ─────────────────────────────────────────────────────────────────────────────
206
+ function requireTask(dag, taskId) {
207
+ const task = dag.tasks.find((t) => t.id === taskId);
208
+ if (!task)
209
+ throw new Error(`Task "${taskId}" not found in DAG`);
210
+ return task;
91
211
  }
92
- /**
93
- * Main DAG runner - executes tasks in parallel based on dependency ranks
94
- */
95
- export async function runDag(dag, options) {
96
- const { parallel, runner, canvasPath } = options;
97
- // Initialize all tasks as PENDING
98
- dag.tasks.forEach((t) => (t.status = 'PENDING'));
99
- await renderCanvas(dag, canvasPath);
100
- if (!parallel) {
101
- // Sequential execution
102
- for (const task of dag.tasks) {
103
- task.status = 'RUNNING';
104
- await renderCanvas(dag, canvasPath);
105
- console.log(chalk.cyan(` 🔄 Running ${task.id}: ${task.title}`));
106
- const start = Date.now();
107
- const result = await executeTask(task, '', runner);
108
- task.status = 'DONE';
109
- task.output = result.output;
110
- task.tokens = result.tokens;
111
- task.duration = Date.now() - start;
112
- console.log(chalk.green(` ✅ ${task.id} done (${task.duration}ms, ${task.tokens} tokens)`));
113
- await renderCanvas(dag, canvasPath);
114
- }
115
- return;
212
+ function safeIngest(graph, task, dag) {
213
+ try {
214
+ ingestTask(graph, task, dag);
116
215
  }
117
- // Parallel execution using ranks
118
- const ranks = computeRanks(dag.tasks);
119
- const maxRank = Math.max(...ranks.values());
120
- for (let rank = 0; rank <= maxRank; rank++) {
121
- const rankTasks = dag.tasks.filter((t) => ranks.get(t.id) === rank && t.status === 'PENDING');
122
- if (rankTasks.length === 0)
123
- continue;
124
- console.log(chalk.yellow(`\n 📦 Rank ${rank}: Executing ${rankTasks.length} task(s) in parallel`));
125
- // Check if any dependency failed
126
- const failedDeps = rankTasks.filter((t) => t.depends_on.some((dep) => dag.tasks.find((d) => d.id === dep)?.status === 'FAILED'));
127
- failedDeps.forEach((t) => {
128
- t.status = 'SKIPPED';
129
- console.log(chalk.gray(` ⏭️ Skipping ${t.id} (dependency failed)`));
130
- });
131
- const executableTasks = rankTasks.filter((t) => t.status === 'PENDING');
132
- // Build context from parent outputs
133
- const parentOutputs = executableTasks.map((t) => t.depends_on
134
- .map((dep) => dag.tasks.find((d) => d.id === dep)?.output || '')
135
- .filter(Boolean)
136
- .join('\n'));
137
- // Mark all as RUNNING
138
- executableTasks.forEach((t) => (t.status = 'RUNNING'));
139
- await renderCanvas(dag, canvasPath);
140
- // Execute in parallel
141
- await Promise.all(executableTasks.map(async (task, i) => {
142
- const start = Date.now();
143
- console.log(chalk.cyan(` 🔄 ${task.id}: ${task.title}`));
144
- try {
145
- const result = await executeTask(task, parentOutputs[i], runner);
146
- task.status = 'DONE';
147
- task.output = result.output;
148
- task.tokens = result.tokens;
149
- task.duration = Date.now() - start;
150
- console.log(chalk.green(` ✅ ${task.id} done (${task.duration}ms, ${task.tokens} tokens)`));
151
- }
152
- catch (err) {
153
- task.status = 'FAILED';
154
- task.duration = Date.now() - start;
155
- console.log(chalk.red(` ❌ ${task.id} failed: ${err}`));
156
- }
157
- await renderCanvas(dag, canvasPath);
158
- }));
216
+ catch {
217
+ // Best-effort. Ingestion failures must not break the orchestrator.
159
218
  }
160
- const done = dag.tasks.filter((t) => t.status === 'DONE').length;
161
- const failed = dag.tasks.filter((t) => t.status === 'FAILED').length;
162
- const skipped = dag.tasks.filter((t) => t.status === 'SKIPPED').length;
163
- console.log(chalk.bold(`\n 📊 Summary: ${done} done, ${failed} failed, ${skipped} skipped`));
164
- console.log(chalk.cyan(` 📄 Canvas: ${canvasPath}\n`));
165
219
  }
166
220
  //# 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,13 @@
1
+ import type { Dag, DagTask } from './run_dag.js';
2
+ export declare const DEFAULT_STATE_PATH: string;
3
+ /**
4
+ * Read state from disk and merge it into `dag.tasks`. Missing tasks default
5
+ * to PENDING.
6
+ */
7
+ export declare function loadAndApplyState(dag: Dag, stateFile: string): Promise<void>;
8
+ /**
9
+ * Write the current `dag` runtime state to disk.
10
+ */
11
+ export declare function saveState(dag: Dag, stateFile: string): Promise<void>;
12
+ export type { DagTask };
13
+ //# sourceMappingURL=state-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-store.d.ts","sourceRoot":"","sources":["../../src/dag-runner/state-store.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAc,MAAM,cAAc,CAAC;AAgB7D,eAAO,MAAM,kBAAkB,QAAmC,CAAC;AAEnE;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBlF;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB1E;AAWD,YAAY,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Runtime state store for the DAG.
3
+ *
4
+ * `dare-dag.yaml` stays the canonical spec (id / depends_on / complexity /
5
+ * subtask_prompt / spec_file). Per-task runtime fields — status, output,
6
+ * error, tokens, duration — live in a separate JSON file so that:
7
+ * - the YAML stays diff-friendly and reviewable
8
+ * - the state file can be gitignored (`.dare/`)
9
+ * - CLI invocations can rehydrate the in-memory DAG between commands
10
+ */
11
+ import path from 'path';
12
+ import fs from 'fs-extra';
13
+ export const DEFAULT_STATE_PATH = path.join('.dare', 'state.json');
14
+ /**
15
+ * Read state from disk and merge it into `dag.tasks`. Missing tasks default
16
+ * to PENDING.
17
+ */
18
+ export async function loadAndApplyState(dag, stateFile) {
19
+ const exists = await fs.pathExists(stateFile);
20
+ if (!exists) {
21
+ for (const task of dag.tasks)
22
+ task.status = task.status ?? 'PENDING';
23
+ return;
24
+ }
25
+ const raw = (await fs.readJson(stateFile));
26
+ const data = isPersistedState(raw) ? raw : null;
27
+ for (const task of dag.tasks) {
28
+ const persisted = data?.tasks?.[task.id];
29
+ if (persisted) {
30
+ task.status = persisted.status;
31
+ task.output = persisted.output;
32
+ task.error = persisted.error;
33
+ task.tokens = persisted.tokens;
34
+ task.duration = persisted.duration;
35
+ }
36
+ else {
37
+ task.status = task.status ?? 'PENDING';
38
+ }
39
+ }
40
+ }
41
+ /**
42
+ * Write the current `dag` runtime state to disk.
43
+ */
44
+ export async function saveState(dag, stateFile) {
45
+ const tasks = {};
46
+ for (const t of dag.tasks) {
47
+ tasks[t.id] = {
48
+ status: t.status ?? 'PENDING',
49
+ output: t.output,
50
+ error: t.error,
51
+ tokens: t.tokens,
52
+ duration: t.duration,
53
+ };
54
+ }
55
+ const payload = {
56
+ version: 1,
57
+ updatedAt: new Date().toISOString(),
58
+ tasks,
59
+ };
60
+ await fs.ensureDir(path.dirname(stateFile));
61
+ await fs.writeJson(stateFile, payload, { spaces: 2 });
62
+ }
63
+ function isPersistedState(value) {
64
+ return (typeof value === 'object' &&
65
+ value !== null &&
66
+ 'tasks' in value &&
67
+ typeof value.tasks === 'object');
68
+ }
69
+ //# sourceMappingURL=state-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-store.js","sourceRoot":"","sources":["../../src/dag-runner/state-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAiB1B,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAEnE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAQ,EAAE,SAAiB;IACjE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;QACrE,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAA6B,CAAC;IACvE,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAC/B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAC/B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;QACzC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAQ,EAAE,SAAiB;IACzD,MAAM,KAAK,GAAuC,EAAE,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;YACZ,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,SAAS;YAC7B,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACrB,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAmB;QAC9B,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK;KACN,CAAC;IACF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5C,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAO,IAAI,KAAK;QAChB,OAAQ,KAA4B,CAAC,KAAK,KAAK,QAAQ,CACxD,CAAC;AACJ,CAAC"}
@@ -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,CAShE"}
@@ -0,0 +1,25 @@
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
+ // If the cap is too small to fit even the notice, do a hard slice.
20
+ if (maxChars <= TRUNCATION_NOTICE.length) {
21
+ return text.slice(0, maxChars);
22
+ }
23
+ return text.slice(0, maxChars - TRUNCATION_NOTICE.length) + TRUNCATION_NOTICE;
24
+ }
25
+ //# 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,mEAAmE;IACnE,IAAI,QAAQ,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,iBAAiB,CAAC;AAChF,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"}