@dewtech/dare-cli 2.2.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 (64) hide show
  1. package/README.md +46 -27
  2. package/dist/__tests__/dag-runner/graph-ingest.test.d.ts +2 -0
  3. package/dist/__tests__/dag-runner/graph-ingest.test.d.ts.map +1 -0
  4. package/dist/__tests__/dag-runner/graph-ingest.test.js +105 -0
  5. package/dist/__tests__/dag-runner/graph-ingest.test.js.map +1 -0
  6. package/dist/__tests__/dag-runner/orchestrator.test.d.ts +2 -0
  7. package/dist/__tests__/dag-runner/orchestrator.test.d.ts.map +1 -0
  8. package/dist/__tests__/dag-runner/orchestrator.test.js +107 -0
  9. package/dist/__tests__/dag-runner/orchestrator.test.js.map +1 -0
  10. package/dist/__tests__/dag-runner/utils.test.js +0 -28
  11. package/dist/__tests__/dag-runner/utils.test.js.map +1 -1
  12. package/dist/__tests__/graphrag/json-graph.test.d.ts +2 -0
  13. package/dist/__tests__/graphrag/json-graph.test.d.ts.map +1 -0
  14. package/dist/__tests__/graphrag/json-graph.test.js +57 -0
  15. package/dist/__tests__/graphrag/json-graph.test.js.map +1 -0
  16. package/dist/bin/dare.js +2 -0
  17. package/dist/bin/dare.js.map +1 -1
  18. package/dist/commands/execute.d.ts.map +1 -1
  19. package/dist/commands/execute.js +165 -46
  20. package/dist/commands/execute.js.map +1 -1
  21. package/dist/commands/graph.d.ts +9 -0
  22. package/dist/commands/graph.d.ts.map +1 -0
  23. package/dist/commands/graph.js +155 -0
  24. package/dist/commands/graph.js.map +1 -0
  25. package/dist/dag-runner/graph-ingest.d.ts +17 -0
  26. package/dist/dag-runner/graph-ingest.d.ts.map +1 -0
  27. package/dist/dag-runner/graph-ingest.js +149 -0
  28. package/dist/dag-runner/graph-ingest.js.map +1 -0
  29. package/dist/dag-runner/run_dag.d.ts +47 -30
  30. package/dist/dag-runner/run_dag.d.ts.map +1 -1
  31. package/dist/dag-runner/run_dag.js +145 -166
  32. package/dist/dag-runner/run_dag.js.map +1 -1
  33. package/dist/dag-runner/state-store.d.ts +13 -0
  34. package/dist/dag-runner/state-store.d.ts.map +1 -0
  35. package/dist/dag-runner/state-store.js +69 -0
  36. package/dist/dag-runner/state-store.js.map +1 -0
  37. package/dist/dag-runner/utils/cap-output.d.ts.map +1 -1
  38. package/dist/dag-runner/utils/cap-output.js +5 -2
  39. package/dist/dag-runner/utils/cap-output.js.map +1 -1
  40. package/dist/graphrag/factory.d.ts +25 -0
  41. package/dist/graphrag/factory.d.ts.map +1 -0
  42. package/dist/graphrag/factory.js +66 -0
  43. package/dist/graphrag/factory.js.map +1 -0
  44. package/dist/graphrag/index.d.ts +4 -0
  45. package/dist/graphrag/index.d.ts.map +1 -1
  46. package/dist/graphrag/index.js +2 -0
  47. package/dist/graphrag/index.js.map +1 -1
  48. package/dist/graphrag/json-graph.d.ts +28 -0
  49. package/dist/graphrag/json-graph.d.ts.map +1 -0
  50. package/dist/graphrag/json-graph.js +168 -0
  51. package/dist/graphrag/json-graph.js.map +1 -0
  52. package/dist/graphrag/knowledge-graph.d.ts +33 -0
  53. package/dist/graphrag/knowledge-graph.d.ts.map +1 -0
  54. package/dist/graphrag/knowledge-graph.js +2 -0
  55. package/dist/graphrag/knowledge-graph.js.map +1 -0
  56. package/dist/index.d.ts +13 -8
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +12 -6
  59. package/dist/index.js.map +1 -1
  60. package/package.json +1 -4
  61. package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +99 -96
  62. package/templates/ide/claude/.claude/commands/dare-dag-run.md +68 -69
  63. package/templates/ide/cursor/.cursor/commands/run-dag.md +67 -44
  64. package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +97 -87
@@ -1,10 +1,22 @@
1
1
  /**
2
- * DARE Framework — DAG Task Runner
2
+ * DARE DAG Task Runner — orchestration only.
3
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.
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`).
7
18
  */
19
+ import type { KnowledgeGraph } from '../graphrag/knowledge-graph.js';
8
20
  export type Complexity = 'LOW' | 'MED' | 'HIGH';
9
21
  export type RunnerName = 'cursor' | 'claude' | 'antigravity';
10
22
  export type TaskStatus = 'PENDING' | 'RUNNING' | 'DONE' | 'FAILED' | 'SKIPPED';
@@ -18,26 +30,16 @@ export interface DagTask {
18
30
  spec_file?: string;
19
31
  status?: TaskStatus;
20
32
  output?: string;
21
- /** Last error message when status is FAILED. */
22
33
  error?: string;
23
34
  tokens?: number;
24
35
  duration?: number;
25
36
  }
26
- /** Hard limits applied per task during execution. */
27
37
  export interface DagLimits {
28
- /** Snippet (in chars) of each parent's output injected into a child's context. */
29
38
  parent_context_chars: number;
30
- /** Cap (in chars) on the captured output of a single task. */
31
39
  task_output_chars: number;
32
- /** Per-task timeout, used by AbortController. */
33
40
  timeout_seconds: number;
34
41
  }
35
- /** complexity → model mapping. */
36
42
  export type DagModelMap = Record<Complexity, string>;
37
- /**
38
- * Per-runner model mapping. Legacy flat schema is normalized into this form
39
- * by the YAML parser.
40
- */
41
43
  export type DagModels = Partial<Record<RunnerName, DagModelMap>>;
42
44
  export interface Dag {
43
45
  title: string;
@@ -47,25 +49,40 @@ export interface Dag {
47
49
  models: DagModels;
48
50
  tasks: DagTask[];
49
51
  }
50
- /** Defaults used when a YAML omits the `limits` block. */
51
52
  export declare const DEFAULT_DAG_LIMITS: DagLimits;
52
- export interface RunDagOptions {
53
- parallel: boolean;
54
- runner: RunnerName | string;
55
- canvasPath: string;
56
- /** When true, only PENDING/FAILED tasks run (DONE/SKIPPED are kept). */
57
- resume?: boolean;
58
- /** Restrict execution to a single task id. */
59
- onlyTaskId?: string;
60
- }
61
53
  /**
62
- * Execute the DAG. Tasks are statefully mutated in place: status, output,
63
- * error, tokens and duration get filled in as execution progresses.
54
+ * Compute execution ranks for tasks based on dependencies. Tasks in the same
55
+ * rank can run in parallel (logical parallelism: the IDE agent decides
56
+ * whether to literally fan them out or run them back-to-back).
64
57
  */
65
- export declare function runDag(dag: Dag, options: RunDagOptions): Promise<void>;
58
+ export declare function computeRanks(tasks: DagTask[]): Map<string, number>;
66
59
  /**
67
- * Compute execution ranks for tasks based on dependencies.
68
- * Tasks in the same rank can run in parallel (Kahn's algorithm).
60
+ * Return the next batch of tasks the agent should execute now: PENDING tasks
61
+ * whose every parent is DONE. These can be executed in parallel by the agent.
62
+ *
63
+ * If `currentRankOnly` is true (default), restrict to the lowest rank that
64
+ * still has executable tasks — gives a clean "rank-by-rank" cadence.
69
65
  */
70
- export declare function computeRanks(tasks: DagTask[]): Map<string, number>;
66
+ export declare function nextExecutableTasks(dag: Dag, currentRankOnly?: boolean): DagTask[];
67
+ /**
68
+ * Cascade: any PENDING task whose dependency is FAILED/SKIPPED becomes SKIPPED.
69
+ * Returns the list of newly-skipped tasks (caller can ingest them).
70
+ */
71
+ export declare function applyCascadingSkip(dag: Dag): DagTask[];
72
+ /**
73
+ * Compose the prompt for a given task: the task's `subtask_prompt` plus an
74
+ * "Upstream context" block with capped snippets of each parent's output.
75
+ */
76
+ export declare function buildTaskPrompt(dag: Dag, task: DagTask): string;
77
+ export interface MarkOptions {
78
+ output?: string;
79
+ error?: string;
80
+ tokens?: number;
81
+ durationMs?: number;
82
+ graph?: KnowledgeGraph;
83
+ }
84
+ export declare function markRunning(dag: Dag, taskId: string): DagTask;
85
+ export declare function markDone(dag: Dag, taskId: string, opts?: MarkOptions): DagTask;
86
+ export declare function markFailed(dag: Dag, taskId: string, opts?: MarkOptions): DagTask;
87
+ export declare function renderCanvas(dag: Dag, canvasPath: string): Promise<void>;
71
88
  //# sourceMappingURL=run_dag.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run_dag.d.ts","sourceRoot":"","sources":["../../src/dag-runner/run_dag.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAChD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;AAC7D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/E,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qDAAqD;AACrD,MAAM,WAAW,SAAS;IACxB,kFAAkF;IAClF,oBAAoB,EAAE,MAAM,CAAC;IAC7B,8DAA8D;IAC9D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,kCAAkC;AAClC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAErD;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AAEjE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,EAAE,SAIhC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD;;;GAGG;AACH,wBAAsB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkD5E;AAiMD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA2BlE"}
1
+ {"version":3,"file":"run_dag.d.ts","sourceRoot":"","sources":["../../src/dag-runner/run_dag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAChD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;AAC7D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/E,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACrD,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AAEjE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB,EAAE,SAIhC,CAAC;AAMF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA2BlE;AAMD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,eAAe,UAAO,GAAG,OAAO,EAAE,CAa/E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,EAAE,CAoBtD;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAW/D;AAMD,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAK7D;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAUlF;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAUpF;AAcD,wBAAsB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC9E"}
@@ -1,161 +1,168 @@
1
1
  /**
2
- * DARE Framework — DAG Task Runner
2
+ * DARE DAG Task Runner — orchestration only.
3
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.
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`).
7
18
  */
8
19
  import fs from 'fs-extra';
9
20
  import path from 'path';
10
- import chalk from 'chalk';
11
- import { getAdapter, MissingApiKeyError } from './adapters/index.js';
12
21
  import { capOutput } from './utils/cap-output.js';
13
22
  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. */
23
+ import { ingestTask } from './graph-ingest.js';
16
24
  export const DEFAULT_DAG_LIMITS = {
17
25
  parent_context_chars: 2000,
18
26
  task_output_chars: 4000,
19
27
  timeout_seconds: 600,
20
28
  };
21
29
  // ─────────────────────────────────────────────────────────────────────────────
22
- // Public entry point
30
+ // Topological ranking
23
31
  // ─────────────────────────────────────────────────────────────────────────────
24
32
  /**
25
- * Execute the DAG. Tasks are statefully mutated in place: status, output,
26
- * error, tokens and duration get filled in as execution progresses.
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).
27
36
  */
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);
37
+ export function computeRanks(tasks) {
38
+ const ranks = new Map();
39
+ const taskMap = new Map(tasks.map((t) => [t.id, t]));
40
+ function getRank(taskId, visited = new Set()) {
41
+ if (ranks.has(taskId))
42
+ return ranks.get(taskId);
43
+ if (visited.has(taskId)) {
44
+ throw new Error(`Circular dependency detected: ${taskId}`);
64
45
  }
65
- else {
66
- await executeSequential(dag, adapter, models, limits, cancellation.signal, canvasPath);
46
+ visited.add(taskId);
47
+ const task = taskMap.get(taskId);
48
+ if (!task)
49
+ throw new Error(`Task not found: ${taskId}`);
50
+ if (task.depends_on.length === 0) {
51
+ ranks.set(taskId, 0);
52
+ return 0;
67
53
  }
54
+ const maxDepRank = Math.max(...task.depends_on.map((dep) => getRank(dep, new Set(visited))));
55
+ const rank = maxDepRank + 1;
56
+ ranks.set(taskId, rank);
57
+ return rank;
68
58
  }
69
- finally {
70
- await renderCanvas(dag, canvasPath);
71
- printSummary(dag, canvasPath);
72
- }
59
+ for (const t of tasks)
60
+ getRank(t.id);
61
+ return ranks;
73
62
  }
74
63
  // ─────────────────────────────────────────────────────────────────────────────
75
- // Execution strategies
64
+ // Status queries
76
65
  // ─────────────────────────────────────────────────────────────────────────────
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) {
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;
85
84
  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;
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
+ }
88
+ /**
89
+ * Cascade: any PENDING task whose dependency is FAILED/SKIPPED becomes SKIPPED.
90
+ * Returns the list of newly-skipped tasks (caller can ingest them).
91
+ */
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
+ }
105
110
  }
106
- await Promise.all(executable.map((task) => executeOne(task, dag, adapter, models, limits, externalSignal, canvasPath)));
107
111
  }
112
+ return newlySkipped;
108
113
  }
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}`));
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;
115
123
  const parents = task.depends_on
116
124
  .map((id) => dag.tasks.find((t) => t.id === id))
117
125
  .filter((t) => Boolean(t));
118
- const prompt = composePrompt({
126
+ return composePrompt({
119
127
  task,
120
128
  parents,
121
129
  parentContextChars: limits.parent_context_chars,
122
130
  });
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
- }
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;
156
163
  }
157
164
  // ─────────────────────────────────────────────────────────────────────────────
158
- // Canvas + helpers
165
+ // Canvas rendering
159
166
  // ─────────────────────────────────────────────────────────────────────────────
160
167
  const STATUS_ICON = {
161
168
  PENDING: '⏳',
@@ -164,7 +171,7 @@ const STATUS_ICON = {
164
171
  FAILED: '❌',
165
172
  SKIPPED: '⏭️',
166
173
  };
167
- async function renderCanvas(dag, canvasPath) {
174
+ export async function renderCanvas(dag, canvasPath) {
168
175
  const lines = [
169
176
  `# DARE DAG Execution — ${dag.title}`,
170
177
  ``,
@@ -193,49 +200,21 @@ async function renderCanvas(dag, canvasPath) {
193
200
  await fs.ensureDir(path.dirname(canvasPath));
194
201
  await fs.writeFile(canvasPath, lines.join('\n'));
195
202
  }
196
- function printSummary(dag, canvasPath) {
197
- const done = dag.tasks.filter((t) => t.status === 'DONE').length;
198
- const failed = dag.tasks.filter((t) => t.status === 'FAILED').length;
199
- const skipped = dag.tasks.filter((t) => t.status === 'SKIPPED').length;
200
- console.log(chalk.bold(`\n 📊 Summary: ${done} done, ${failed} failed, ${skipped} skipped`));
201
- console.log(chalk.cyan(` 📄 Canvas: ${canvasPath}\n`));
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;
202
211
  }
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;
212
+ function safeIngest(graph, task, dag) {
213
+ try {
214
+ ingestTask(graph, task, dag);
215
+ }
216
+ catch {
217
+ // Best-effort. Ingestion failures must not break the orchestrator.
228
218
  }
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
219
  }
241
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":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAwC/C,MAAM,CAAC,MAAM,kBAAkB,GAAc;IAC3C,oBAAoB,EAAE,IAAI;IAC1B,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,GAAG;CACrB,CAAC;AAEF,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAgB;IAC3C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,SAAS,OAAO,CAAC,MAAc,EAAE,UAAU,IAAI,GAAG,EAAU;QAC1D,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QACjD,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAExD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACrB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAChE,CAAC;QACF,MAAM,IAAI,GAAG,UAAU,GAAG,CAAC,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAQ,EAAE,eAAe,GAAG,IAAI;IAClE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACnC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAChE,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,CAAC,oBAAoB;QAC9D,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEzD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAQ;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,YAAY,GAAc,EAAE,CAAC;IACnC,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,OAAO,EAAE,CAAC;QACf,OAAO,GAAG,KAAK,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;gBAAE,SAAS;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACzC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC3B,OAAO,MAAM,EAAE,MAAM,KAAK,QAAQ,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC;YACrE,CAAC,CAAC,CAAC;YACH,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBACxB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,gFAAgF;AAChF,+DAA+D;AAC/D,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAQ,EAAE,IAAa;IACrD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,kBAAkB,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU;SAC5B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;SAC/C,MAAM,CAAC,CAAC,CAAC,EAAgB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3C,OAAO,aAAa,CAAC;QACnB,IAAI;QACJ,OAAO;QACP,kBAAkB,EAAE,MAAM,CAAC,oBAAoB;KAChD,CAAC,CAAC;AACL,CAAC;AAcD,MAAM,UAAU,WAAW,CAAC,GAAQ,EAAE,MAAc;IAClD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAQ,EAAE,MAAc,EAAE,OAAoB,EAAE;IACvE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,kBAAkB,CAAC;IAChD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC3F,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;IACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC;IACjD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACvB,IAAI,IAAI,CAAC,KAAK;QAAE,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAQ,EAAE,MAAc,EAAE,OAAoB,EAAE;IACzE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;IACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;IACnD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC;IACjD,IAAI,IAAI,CAAC,KAAK;QAAE,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAClD,gCAAgC;IAChC,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,KAAK;QAAE,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,MAAM,WAAW,GAA+B;IAC9C,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAQ,EAAE,UAAkB;IAC7D,MAAM,KAAK,GAAa;QACtB,0BAA0B,GAAG,CAAC,KAAK,EAAE;QACrC,EAAE;QACF,gBAAgB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;QAC1C,EAAE;QACF,UAAU;QACV,EAAE;QACF,6CAA6C;QAC7C,6CAA6C;KAC9C,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;QACxC,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACpD,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,MAAM,MAAM,QAAQ,MAAM,MAAM,IAAI,CAC/E,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;IAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAEnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,KAAK,WAAW,GAAG,IAAI,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IAEtE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,SAAS,WAAW,CAAC,GAAQ,EAAE,MAAc;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,oBAAoB,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,KAAqB,EAAE,IAAa,EAAE,GAAQ;IAChE,IAAI,CAAC;QACH,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;IACrE,CAAC;AACH,CAAC"}
@@ -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"}
@@ -1 +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"}
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"}