@dewtech/dare-cli 2.2.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +116 -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 +175 -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 +177 -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,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":"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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"}
@@ -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"}
@@ -16,7 +16,10 @@ export function capOutput(text, maxChars) {
16
16
  return '';
17
17
  if (text.length <= maxChars)
18
18
  return text;
19
- const room = Math.max(0, maxChars - TRUNCATION_NOTICE.length);
20
- return text.slice(0, room) + TRUNCATION_NOTICE;
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;
21
24
  }
22
25
  //# sourceMappingURL=cap-output.js.map
@@ -1 +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"}
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,25 @@
1
+ import type { KnowledgeGraph } from './knowledge-graph.js';
2
+ export type GraphBackend = 'sqlite' | 'json' | 'neo4j';
3
+ export interface GraphConfig {
4
+ backend: GraphBackend;
5
+ /** Path to the persistence target, relative to the project root. */
6
+ path?: string;
7
+ }
8
+ /**
9
+ * Resolve graph config:
10
+ * - if `explicit` is given, use it;
11
+ * - otherwise read `dare-graph.yml` from cwd (or `cwd` if provided);
12
+ * - if no file exists, fall back to sqlite at `.dare/graph.db`.
13
+ */
14
+ export declare function loadGraphConfig(opts?: {
15
+ cwd?: string;
16
+ explicit?: GraphConfig;
17
+ }): Promise<GraphConfig>;
18
+ /**
19
+ * Build the backend instance and call `init()`. Caller owns the lifecycle and
20
+ * must call `.close()` when done.
21
+ */
22
+ export declare function createGraph(config: GraphConfig, opts?: {
23
+ cwd?: string;
24
+ }): Promise<KnowledgeGraph>;
25
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/graphrag/factory.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAQD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,GAAE;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,WAAW,CAAC;CACnB,GAAG,OAAO,CAAC,WAAW,CAAC,CAoB5B;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1B,OAAO,CAAC,cAAc,CAAC,CAqBzB"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * `createGraph()` — read `dare-graph.yml` (or take an explicit config) and
3
+ * return the matching backend instance.
4
+ *
5
+ * Supported backends:
6
+ * - `sqlite` → `GraphRAG` (sql.js)
7
+ * - `json` → `JsonGraph` (single JSON file, no native deps)
8
+ * - `neo4j` → not yet implemented (throws with guidance)
9
+ */
10
+ import path from 'path';
11
+ import fs from 'fs-extra';
12
+ import { parse as parseYaml } from 'yaml';
13
+ import { GraphRAG } from './graph-rag.js';
14
+ import { JsonGraph } from './json-graph.js';
15
+ const DEFAULTS = {
16
+ sqlite: '.dare/graph.db',
17
+ json: '.dare/graph.json',
18
+ neo4j: undefined,
19
+ };
20
+ /**
21
+ * Resolve graph config:
22
+ * - if `explicit` is given, use it;
23
+ * - otherwise read `dare-graph.yml` from cwd (or `cwd` if provided);
24
+ * - if no file exists, fall back to sqlite at `.dare/graph.db`.
25
+ */
26
+ export async function loadGraphConfig(opts = {}) {
27
+ if (opts.explicit) {
28
+ return normalize(opts.explicit);
29
+ }
30
+ const cwd = opts.cwd ?? process.cwd();
31
+ const ymlPath = path.join(cwd, 'dare-graph.yml');
32
+ if (!(await fs.pathExists(ymlPath))) {
33
+ return { backend: 'sqlite', path: DEFAULTS.sqlite };
34
+ }
35
+ const raw = (await fs.readFile(ymlPath, 'utf-8')).toString();
36
+ const parsed = (parseYaml(raw) ?? {});
37
+ const backend = parsed.backend ?? 'sqlite';
38
+ const subBlock = parsed[backend] ?? {};
39
+ const filePath = typeof subBlock.path === 'string' ? subBlock.path : DEFAULTS[backend];
40
+ return normalize({ backend, path: filePath });
41
+ }
42
+ /**
43
+ * Build the backend instance and call `init()`. Caller owns the lifecycle and
44
+ * must call `.close()` when done.
45
+ */
46
+ export async function createGraph(config, opts = {}) {
47
+ const cwd = opts.cwd ?? process.cwd();
48
+ const cfg = normalize(config);
49
+ if (cfg.backend === 'neo4j') {
50
+ throw new Error('Neo4j backend is not yet implemented in @dewtech/dare-cli. Use `backend: sqlite` or `backend: json` in dare-graph.yml. (PRs welcome.)');
51
+ }
52
+ if (!cfg.path) {
53
+ throw new Error(`dare-graph.yml is missing the storage path for backend=${cfg.backend}.`);
54
+ }
55
+ const absPath = path.isAbsolute(cfg.path) ? cfg.path : path.resolve(cwd, cfg.path);
56
+ const graph = cfg.backend === 'sqlite' ? new GraphRAG(absPath) : new JsonGraph(absPath);
57
+ await graph.init();
58
+ return graph;
59
+ }
60
+ function normalize(cfg) {
61
+ return {
62
+ backend: cfg.backend,
63
+ path: cfg.path ?? DEFAULTS[cfg.backend],
64
+ };
65
+ }
66
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/graphrag/factory.ts"],"names":[],"mappings":"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"}