@viraatdas/rudder 1.0.73 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +169 -510
  2. package/dist/auth.d.ts +2 -0
  3. package/dist/auth.js +22 -1
  4. package/dist/auth.js.map +1 -1
  5. package/dist/backends.js +88 -1
  6. package/dist/backends.js.map +1 -1
  7. package/dist/board/board.css +1 -0
  8. package/dist/board/board.js +2 -0
  9. package/dist/board/daemon.d.ts +21 -0
  10. package/dist/board/daemon.js +838 -0
  11. package/dist/board/daemon.js.map +1 -0
  12. package/dist/brain.d.ts +9 -0
  13. package/dist/brain.js +36 -9
  14. package/dist/brain.js.map +1 -1
  15. package/dist/bus.d.ts +9 -0
  16. package/dist/bus.js +23 -0
  17. package/dist/bus.js.map +1 -0
  18. package/dist/cloud.js +80 -350
  19. package/dist/cloud.js.map +1 -1
  20. package/dist/daemon.d.ts +21 -0
  21. package/dist/daemon.js +141 -0
  22. package/dist/daemon.js.map +1 -0
  23. package/dist/git.d.ts +19 -13
  24. package/dist/git.js +283 -35
  25. package/dist/git.js.map +1 -1
  26. package/dist/goal.d.ts +30 -0
  27. package/dist/goal.js +75 -0
  28. package/dist/goal.js.map +1 -0
  29. package/dist/graph.d.ts +56 -0
  30. package/dist/graph.js +213 -0
  31. package/dist/graph.js.map +1 -0
  32. package/dist/index.js +0 -0
  33. package/dist/jj.d.ts +121 -0
  34. package/dist/jj.js +524 -0
  35. package/dist/jj.js.map +1 -0
  36. package/dist/main.js +191 -17
  37. package/dist/main.js.map +1 -1
  38. package/dist/migration.js +8 -1
  39. package/dist/migration.js.map +1 -1
  40. package/dist/models.js +21 -36
  41. package/dist/models.js.map +1 -1
  42. package/dist/native/rudder-native +0 -0
  43. package/dist/planner.d.ts +27 -0
  44. package/dist/planner.js +540 -0
  45. package/dist/planner.js.map +1 -0
  46. package/dist/repl.js +6 -2
  47. package/dist/repl.js.map +1 -1
  48. package/dist/run-manager.d.ts +10 -0
  49. package/dist/run-manager.js +225 -54
  50. package/dist/run-manager.js.map +1 -1
  51. package/dist/scheduler.d.ts +124 -0
  52. package/dist/scheduler.js +849 -0
  53. package/dist/scheduler.js.map +1 -0
  54. package/dist/state.d.ts +18 -1
  55. package/dist/state.js +139 -3
  56. package/dist/state.js.map +1 -1
  57. package/dist/surfaces.d.ts +23 -0
  58. package/dist/surfaces.js +196 -0
  59. package/dist/surfaces.js.map +1 -0
  60. package/dist/task-summary.d.ts +18 -0
  61. package/dist/task-summary.js +132 -0
  62. package/dist/task-summary.js.map +1 -1
  63. package/dist/tmux-dashboard.js +58 -7
  64. package/dist/tmux-dashboard.js.map +1 -1
  65. package/dist/tui.js +112 -17
  66. package/dist/tui.js.map +1 -1
  67. package/dist/types.d.ts +214 -1
  68. package/dist/types.js +1 -1
  69. package/dist/types.js.map +1 -1
  70. package/dist/util.d.ts +6 -1
  71. package/dist/util.js +37 -7
  72. package/dist/util.js.map +1 -1
  73. package/package.json +10 -2
package/dist/git.js CHANGED
@@ -1,13 +1,26 @@
1
1
  import fsp from "node:fs/promises";
2
2
  import path from "node:path";
3
- import { runCommand, runCommandSync, shortHash, slugPrefix } from "./util.js";
4
- import { listRuns, saveRunRecord, worktreePath } from "./state.js";
3
+ import { runCommand, runCommandSync } from "./util.js";
4
+ import { listRuns, saveRunRecord } from "./state.js";
5
+ import { jjDiff, jjStatus } from "./jj.js";
6
+ // ---------------------------------------------------------------------------
7
+ // Externally-git contract + plumbing.
8
+ //
9
+ // Rudder's internal run isolation/merge runs on jj (see src/jj.ts). git.ts now
10
+ // only owns the surface where Rudder still talks plain git: discovering the repo
11
+ // root, reporting branch/commit, and producing status/diff for the Hunk review
12
+ // surface. Legacy runs created before the jj switch (run.vcs === "git") still
13
+ // merge/sync through the git helpers below, guarded by the vcs mode.
14
+ // ---------------------------------------------------------------------------
5
15
  export function findRepoRoot(cwd = process.cwd()) {
6
16
  const result = runCommandSync("git", ["rev-parse", "--show-toplevel"], {
7
17
  cwd,
8
18
  allowFailure: true,
9
19
  });
10
- return result.code === 0 ? result.stdout.trim() : path.resolve(cwd);
20
+ if (result.code === 0 && result.stdout.trim()) {
21
+ return result.stdout.trim();
22
+ }
23
+ return path.resolve(cwd);
11
24
  }
12
25
  export function isGitRepo(cwd) {
13
26
  return (runCommandSync("git", ["rev-parse", "--is-inside-work-tree"], {
@@ -29,13 +42,6 @@ export async function currentCommit(repoRoot) {
29
42
  });
30
43
  return result.stdout.trim() || "";
31
44
  }
32
- export async function worktreeBaseCommit(repoRoot) {
33
- const result = await runCommand("git", ["rev-parse", "main"], {
34
- cwd: repoRoot,
35
- allowFailure: true,
36
- });
37
- return result.stdout.trim() || await currentCommit(repoRoot);
38
- }
39
45
  export async function gitStatus(repoRoot) {
40
46
  const result = await runCommand("git", ["status", "--short"], {
41
47
  cwd: repoRoot,
@@ -71,6 +77,21 @@ export async function gitDiff(repoRoot) {
71
77
  export async function hasChanges(repoRoot) {
72
78
  return (await gitStatus(repoRoot)).length > 0;
73
79
  }
80
+ // VCS-aware projections used by brain.ts and the worker. jj runs read jj
81
+ // status/diff; legacy git runs read git status/diff.
82
+ export async function workspaceStatus(run) {
83
+ return (run.vcs ?? "git") === "jj"
84
+ ? await jjStatus(run.worktree.path)
85
+ : await gitStatus(run.worktree.path);
86
+ }
87
+ export async function workspaceDiff(run) {
88
+ return (run.vcs ?? "git") === "jj"
89
+ ? await jjDiff(run.worktree.path)
90
+ : await gitDiff(run.worktree.path);
91
+ }
92
+ export async function runHasChanges(run) {
93
+ return (await workspaceStatus(run)).length > 0;
94
+ }
74
95
  export function processAlive(pid) {
75
96
  if (!pid) {
76
97
  return false;
@@ -95,40 +116,98 @@ export async function activeRunsForCheckout(repoRoot, checkoutPath) {
95
116
  return processAlive(run.process?.pid);
96
117
  });
97
118
  }
98
- export async function createRunWorktree(params) {
99
- const taskSlug = slugPrefix(params.task, "task");
100
- const branch = `rudder/${taskSlug}-${shortHash(params.runId).slice(0, 8)}`;
101
- const targetPath = worktreePath(params.repoRoot, params.runId, params.task);
102
- await fsp.mkdir(path.dirname(targetPath), { recursive: true });
103
- await runCommand("git", ["branch", branch, params.baseCommit], {
104
- cwd: params.repoRoot,
119
+ export async function conflictedFiles(repoRoot) {
120
+ const result = await runCommand("git", ["diff", "--name-only", "--diff-filter=U"], {
121
+ cwd: repoRoot,
105
122
  allowFailure: true,
106
123
  });
107
- await runCommand("git", ["worktree", "add", targetPath, branch], {
108
- cwd: params.repoRoot,
124
+ return result.stdout
125
+ .split(/\r?\n/)
126
+ .map((line) => line.trim())
127
+ .filter(Boolean);
128
+ }
129
+ export async function worktreeList(repoRoot) {
130
+ const result = await runCommand("git", ["worktree", "list"], {
131
+ cwd: repoRoot,
132
+ allowFailure: true,
109
133
  });
110
- return { branch, path: targetPath };
134
+ return result.stdout.trim();
111
135
  }
112
- export async function removeWorktree(repoRoot, targetPath, force = false) {
136
+ export async function removeGitWorktree(repoRoot, targetPath, force = false) {
113
137
  await runCommand("git", ["worktree", "remove", ...(force ? ["--force"] : []), targetPath], {
114
138
  cwd: repoRoot,
115
139
  allowFailure: force,
116
140
  });
117
141
  }
118
- export async function mergeRunIntoCurrentBranch(run, allowDirty = false) {
142
+ // ---------------------------------------------------------------------------
143
+ // Legacy git run isolation/merge/sync.
144
+ //
145
+ // These remain only to keep runs created before the jj switch
146
+ // (run.vcs === "git") mergeable. No NEW runs reach this path; run-manager routes
147
+ // jj runs to src/jj.ts and only falls back here when run.vcs === "git".
148
+ // ---------------------------------------------------------------------------
149
+ export async function mergeGitRunIntoCurrentBranch(run, allowDirty = false, strategy = "merge") {
119
150
  if (!run.worktree.branch) {
120
151
  throw new Error("Run has no worktree branch to merge.");
121
152
  }
122
153
  if (!allowDirty && (await hasChanges(run.repoRoot))) {
123
154
  throw new Error("Target branch is dirty. Commit/stash changes or pass --allow-dirty.");
124
155
  }
156
+ const targetBranch = await currentTargetBranch(run);
125
157
  run.merge = {
126
158
  status: "not-started",
127
159
  attemptedAt: new Date().toISOString(),
128
- targetBranch: await currentBranch(run.repoRoot),
160
+ targetBranch,
161
+ strategy,
129
162
  };
130
163
  await saveRunRecord(run);
131
- await commitWorktreeChanges(run);
164
+ const commitFailure = await commitWorktreeChangesSafely(run, "merge");
165
+ if (commitFailure) {
166
+ return commitFailure;
167
+ }
168
+ if (strategy === "rebase") {
169
+ const rebase = await rebaseWorktreeOntoBase({
170
+ repoRoot: run.repoRoot,
171
+ worktreePath: run.worktree.path,
172
+ baseBranch: targetBranch,
173
+ });
174
+ if (!rebase.success) {
175
+ run.status = "merge-conflict";
176
+ run.merge = {
177
+ ...run.merge,
178
+ status: "conflict",
179
+ conflictKind: "rebase",
180
+ conflictedFiles: rebase.conflictedFiles,
181
+ error: rebase.error,
182
+ };
183
+ await saveRunRecord(run);
184
+ return run;
185
+ }
186
+ const fastForward = await runCommand("git", ["merge", "--ff-only", run.worktree.branch], {
187
+ cwd: run.repoRoot,
188
+ allowFailure: true,
189
+ });
190
+ if (fastForward.code === 0) {
191
+ run.status = "merged";
192
+ run.merge = {
193
+ ...run.merge,
194
+ status: "merged",
195
+ };
196
+ await saveRunRecord(run);
197
+ return run;
198
+ }
199
+ const conflicted = await conflictedFiles(run.repoRoot);
200
+ run.status = conflicted.length ? "merge-conflict" : "failed";
201
+ run.merge = {
202
+ ...run.merge,
203
+ status: conflicted.length ? "conflict" : "failed",
204
+ conflictKind: "merge",
205
+ conflictedFiles: conflicted,
206
+ error: gitError(fastForward),
207
+ };
208
+ await saveRunRecord(run);
209
+ return run;
210
+ }
132
211
  const merge = await runCommand("git", ["merge", "--no-ff", run.worktree.branch], {
133
212
  cwd: run.repoRoot,
134
213
  allowFailure: true,
@@ -147,13 +226,132 @@ export async function mergeRunIntoCurrentBranch(run, allowDirty = false) {
147
226
  run.merge = {
148
227
  ...run.merge,
149
228
  status: "conflict",
229
+ conflictKind: "merge",
150
230
  conflictedFiles: conflicted,
151
- error: merge.stderr.trim() || merge.stdout.trim(),
231
+ error: gitError(merge),
152
232
  };
153
233
  await saveRunRecord(run);
154
234
  return run;
155
235
  }
236
+ export async function syncGitRunWorktree(run, baseBranch) {
237
+ if (!run.worktree.branch) {
238
+ throw new Error("Run has no worktree branch to sync.");
239
+ }
240
+ const targetBranch = baseBranch.trim() === "HEAD" ? run.targetBranch : baseBranch;
241
+ const previousStatus = run.status;
242
+ const previousSync = run.sync;
243
+ run.sync = {
244
+ status: "not-started",
245
+ attemptedAt: new Date().toISOString(),
246
+ baseBranch: targetBranch,
247
+ };
248
+ await saveRunRecord(run);
249
+ const commitFailure = await commitWorktreeChangesSafely(run, "sync");
250
+ if (commitFailure) {
251
+ return commitFailure;
252
+ }
253
+ const rebase = await rebaseWorktreeOntoBase({
254
+ repoRoot: run.repoRoot,
255
+ worktreePath: run.worktree.path,
256
+ baseBranch: targetBranch,
257
+ });
258
+ if (rebase.success) {
259
+ run.sync = {
260
+ ...run.sync,
261
+ status: "synced",
262
+ conflictedFiles: [],
263
+ };
264
+ if (previousStatus === "merge-conflict" &&
265
+ (run.merge?.conflictKind === "rebase" || previousSync?.status === "conflict")) {
266
+ run.status = "completed";
267
+ if (run.merge?.conflictKind === "rebase") {
268
+ run.merge = {
269
+ ...run.merge,
270
+ status: "not-started",
271
+ conflictedFiles: undefined,
272
+ error: undefined,
273
+ };
274
+ }
275
+ }
276
+ else {
277
+ run.status = previousStatus;
278
+ }
279
+ await saveRunRecord(run);
280
+ return run;
281
+ }
282
+ const conflict = rebase.conflictedFiles.length > 0;
283
+ run.sync = {
284
+ ...run.sync,
285
+ status: conflict ? "conflict" : "failed",
286
+ conflictedFiles: rebase.conflictedFiles,
287
+ error: rebase.error,
288
+ };
289
+ if (conflict && (previousStatus === "completed" || previousStatus === "merge-conflict")) {
290
+ run.status = "merge-conflict";
291
+ }
292
+ else {
293
+ run.status = previousStatus;
294
+ }
295
+ await saveRunRecord(run);
296
+ return run;
297
+ }
298
+ export async function rebaseWorktreeOntoBase(params) {
299
+ const baseRef = await resolveRebaseBaseRef(params.repoRoot, params.baseBranch);
300
+ const rebase = await runCommand("git", ["rebase", baseRef], {
301
+ cwd: params.worktreePath,
302
+ allowFailure: true,
303
+ });
304
+ if (rebase.code === 0) {
305
+ return {
306
+ success: true,
307
+ baseRef,
308
+ conflictedFiles: [],
309
+ };
310
+ }
311
+ return {
312
+ success: false,
313
+ baseRef,
314
+ conflictedFiles: await conflictedFiles(params.worktreePath),
315
+ error: gitError(rebase) || `Rebase onto ${baseRef} failed.`,
316
+ };
317
+ }
318
+ export async function resolveRebaseBaseRef(repoRoot, baseBranch) {
319
+ const branch = baseBranch.trim();
320
+ if (!branch || branch === "HEAD") {
321
+ return await currentCommit(repoRoot);
322
+ }
323
+ if (await refExists(repoRoot, branch)) {
324
+ return branch;
325
+ }
326
+ const hasOrigin = (await runCommand("git", ["remote", "get-url", "origin"], {
327
+ cwd: repoRoot,
328
+ allowFailure: true,
329
+ })).code === 0;
330
+ let fetched = false;
331
+ if (hasOrigin) {
332
+ const fetch = await runCommand("git", ["fetch", "origin", branch], {
333
+ cwd: repoRoot,
334
+ allowFailure: true,
335
+ });
336
+ fetched = fetch.code === 0;
337
+ }
338
+ const remoteRef = `refs/remotes/origin/${branch}`;
339
+ if (await refExists(repoRoot, remoteRef)) {
340
+ return remoteRef;
341
+ }
342
+ if (fetched && await refExists(repoRoot, "FETCH_HEAD")) {
343
+ return "FETCH_HEAD";
344
+ }
345
+ return await currentCommit(repoRoot);
346
+ }
156
347
  async function commitWorktreeChanges(run) {
348
+ const unresolved = await conflictedFiles(run.worktree.path);
349
+ if (unresolved.length > 0) {
350
+ throw new Error(`Worktree has unresolved conflicts: ${unresolved.join(", ")}`);
351
+ }
352
+ if (await rebaseInProgress(run.worktree.path)) {
353
+ throw new Error(`Worktree has an unfinished rebase. Resolve it in ${run.worktree.path}, run git rebase --continue, then retry.`);
354
+ }
157
355
  if (!(await hasChanges(run.worktree.path))) {
158
356
  return;
159
357
  }
@@ -172,21 +370,71 @@ async function commitWorktreeChanges(run) {
172
370
  }
173
371
  }
174
372
  }
175
- export async function conflictedFiles(repoRoot) {
176
- const result = await runCommand("git", ["diff", "--name-only", "--diff-filter=U"], {
373
+ async function commitWorktreeChangesSafely(run, phase) {
374
+ try {
375
+ await commitWorktreeChanges(run);
376
+ return null;
377
+ }
378
+ catch (error) {
379
+ const message = error instanceof Error ? error.message : String(error);
380
+ run.status = "failed";
381
+ if (phase === "merge") {
382
+ run.merge = {
383
+ ...run.merge,
384
+ status: "failed",
385
+ error: message,
386
+ };
387
+ }
388
+ else {
389
+ run.sync = {
390
+ ...run.sync,
391
+ status: "failed",
392
+ error: message,
393
+ };
394
+ }
395
+ await saveRunRecord(run);
396
+ return run;
397
+ }
398
+ }
399
+ async function currentTargetBranch(run) {
400
+ const branch = await currentBranch(run.repoRoot);
401
+ return branch === "HEAD" ? run.targetBranch : branch;
402
+ }
403
+ async function refExists(repoRoot, ref) {
404
+ const result = await runCommand("git", ["rev-parse", "--verify", `${ref}^{commit}`], {
177
405
  cwd: repoRoot,
178
406
  allowFailure: true,
179
407
  });
180
- return result.stdout
181
- .split(/\r?\n/)
182
- .map((line) => line.trim())
183
- .filter(Boolean);
408
+ return result.code === 0;
184
409
  }
185
- export async function worktreeList(repoRoot) {
186
- const result = await runCommand("git", ["worktree", "list"], {
187
- cwd: repoRoot,
410
+ async function rebaseInProgress(worktree) {
411
+ const gitPaths = await Promise.all([
412
+ gitPath(worktree, "rebase-merge"),
413
+ gitPath(worktree, "rebase-apply"),
414
+ ]);
415
+ for (const candidate of gitPaths) {
416
+ if (!candidate) {
417
+ continue;
418
+ }
419
+ try {
420
+ await fsp.access(candidate);
421
+ return true;
422
+ }
423
+ catch {
424
+ // Continue checking the other rebase state path.
425
+ }
426
+ }
427
+ return false;
428
+ }
429
+ async function gitPath(worktree, name) {
430
+ const result = await runCommand("git", ["rev-parse", "--git-path", name], {
431
+ cwd: worktree,
188
432
  allowFailure: true,
189
433
  });
190
- return result.stdout.trim();
434
+ const value = result.stdout.trim();
435
+ return result.code === 0 && value ? path.resolve(worktree, value) : null;
436
+ }
437
+ function gitError(result) {
438
+ return result.stderr.trim() || result.stdout.trim();
191
439
  }
192
440
  //# sourceMappingURL=git.js.map
package/dist/git.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
package/dist/goal.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ export declare const DEFAULT_SUCCESS = "the task is implemented and its own verification passes";
2
+ /**
3
+ * Build a launch prompt in /goal format. Leads with `/goal <objective>` (the
4
+ * backends pick this up as a slash command), then a `Done when:` success line,
5
+ * then the full task body. Objective and success are collapsed to a single line
6
+ * each so the leading slash command stays intact.
7
+ */
8
+ export declare function formatGoalPrompt(input: {
9
+ goal: string;
10
+ success: string;
11
+ body: string;
12
+ }): string;
13
+ /**
14
+ * Derive a one-line objective from a task statement when none is given: the
15
+ * first non-empty line, trimmed for prompt budget. If the task is already in
16
+ * /goal format (a prior wrap), recover the real objective from the `/goal` line
17
+ * so re-deriving never produces a nested "/goal /goal ..." string.
18
+ */
19
+ export declare function deriveGoal(task: string): string;
20
+ /**
21
+ * Recover the success / done-when condition from a task that is already in
22
+ * /goal format (leads with `/goal ...` then `Done when: ...`). Returns undefined
23
+ * when no `Done when:` line is present.
24
+ */
25
+ export declare function extractSuccess(task: string): string | undefined;
26
+ /**
27
+ * Derive a success condition. Prefer caller-supplied criteria (e.g. the
28
+ * acceptance criteria); otherwise fall back to the default stopping condition.
29
+ */
30
+ export declare function deriveSuccess(criteria?: string[]): string;
package/dist/goal.js ADDED
@@ -0,0 +1,75 @@
1
+ // ---------------------------------------------------------------------------
2
+ // The /goal-format convention. EVERY agent Rudder spawns is prompted with a
3
+ // clear OBJECTIVE plus an explicit verifiable SUCCESS / stopping condition. Both
4
+ // Claude and Codex understand a leading `/goal` slash command, so the launch
5
+ // prompt always leads with:
6
+ //
7
+ // /goal <objective>
8
+ // Done when: <success condition>
9
+ //
10
+ // <full task details / context>
11
+ //
12
+ // This module is the single canonical formatter (formatGoalPrompt) plus the
13
+ // derived-default helpers used wherever a worker prompt is built.
14
+ // ---------------------------------------------------------------------------
15
+ // Used when the planner/caller did not supply an explicit success condition.
16
+ export const DEFAULT_SUCCESS = "the task is implemented and its own verification passes";
17
+ /**
18
+ * Build a launch prompt in /goal format. Leads with `/goal <objective>` (the
19
+ * backends pick this up as a slash command), then a `Done when:` success line,
20
+ * then the full task body. Objective and success are collapsed to a single line
21
+ * each so the leading slash command stays intact.
22
+ */
23
+ export function formatGoalPrompt(input) {
24
+ const goal = oneLine(input.goal) || oneLine(input.body) || "complete the task";
25
+ const success = oneLine(input.success) || DEFAULT_SUCCESS;
26
+ const body = input.body.trim();
27
+ const header = `/goal ${goal}\nDone when: ${success}`;
28
+ return body ? `${header}\n\n${body}` : header;
29
+ }
30
+ /**
31
+ * Derive a one-line objective from a task statement when none is given: the
32
+ * first non-empty line, trimmed for prompt budget. If the task is already in
33
+ * /goal format (a prior wrap), recover the real objective from the `/goal` line
34
+ * so re-deriving never produces a nested "/goal /goal ..." string.
35
+ */
36
+ export function deriveGoal(task) {
37
+ const lines = task.split(/\r?\n/).map((line) => line.trim());
38
+ const goalLine = lines.find((line) => line.startsWith("/goal"));
39
+ if (goalLine) {
40
+ return oneLine(goalLine.slice("/goal".length)).slice(0, 200) || "complete the task";
41
+ }
42
+ const first = lines.find((line) => line.length > 0);
43
+ return oneLine(first ?? task).slice(0, 200) || "complete the task";
44
+ }
45
+ /**
46
+ * Recover the success / done-when condition from a task that is already in
47
+ * /goal format (leads with `/goal ...` then `Done when: ...`). Returns undefined
48
+ * when no `Done when:` line is present.
49
+ */
50
+ export function extractSuccess(task) {
51
+ const line = task
52
+ .split(/\r?\n/)
53
+ .map((entry) => entry.trim())
54
+ .find((entry) => /^done when:/i.test(entry));
55
+ if (!line) {
56
+ return undefined;
57
+ }
58
+ const value = oneLine(line.replace(/^done when:/i, ""));
59
+ return value || undefined;
60
+ }
61
+ /**
62
+ * Derive a success condition. Prefer caller-supplied criteria (e.g. the
63
+ * acceptance criteria); otherwise fall back to the default stopping condition.
64
+ */
65
+ export function deriveSuccess(criteria) {
66
+ const joined = (criteria ?? [])
67
+ .map((item) => item.trim())
68
+ .filter(Boolean)
69
+ .join("; ");
70
+ return joined ? oneLine(joined) : DEFAULT_SUCCESS;
71
+ }
72
+ function oneLine(value) {
73
+ return value.split(/\s+/).filter(Boolean).join(" ").trim();
74
+ }
75
+ //# sourceMappingURL=goal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal.js","sourceRoot":"","sources":["../src/goal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { NodeStatus, RudderGraph, RunRecord, TaskNode } from "./types.js";
2
+ export declare function graphPath(repoRoot: string): string;
3
+ /**
4
+ * Read the graph for a repo. Returns an empty graph (not null) when graph.json
5
+ * is absent or malformed, so callers never special-case the first-write path.
6
+ */
7
+ export declare function readGraph(repoRoot: string): Promise<RudderGraph>;
8
+ /**
9
+ * Content-hashed node id: stable mergeable key from the title, the current
10
+ * time, and a nonce so two nodes with the same title never collide.
11
+ */
12
+ export declare function newNodeId(title: string): string;
13
+ export declare function newEdgeId(from: string, to: string): string;
14
+ /**
15
+ * Atomically read-modify-write the graph under the per-path lock (daemon-only
16
+ * writer). The transform mutates/returns the graph; keys are sorted and the
17
+ * updatedAt stamp refreshed before write so diffs stay minimal.
18
+ */
19
+ export declare function updateGraph(repoRoot: string, fn: (graph: RudderGraph) => RudderGraph | void): Promise<RudderGraph>;
20
+ export declare function hardParents(graph: RudderGraph, id: string): string[];
21
+ export declare function softParents(graph: RudderGraph, id: string): string[];
22
+ /**
23
+ * Judge parents of a node: the variants a judge node compares. A judge edge
24
+ * gates readiness on the variant REACHING review (finishing its work), not on
25
+ * merge. Fan-out-and-judge uses this so the judge launches once every variant
26
+ * has produced a diff to compare.
27
+ */
28
+ export declare function judgeParents(graph: RudderGraph, id: string): string[];
29
+ /**
30
+ * Direct dependents (children) of a node: nodes with an edge `from` this id.
31
+ */
32
+ export declare function dependents(graph: RudderGraph, id: string): string[];
33
+ /**
34
+ * A node is ready when it is still `planned` AND every hard-dep parent has
35
+ * merged AND every judge parent has reached review or merged. Soft parents
36
+ * never block readiness. A judge node (which has judge parents) launches only
37
+ * once all of its variants have finished their work (review or merged), so it
38
+ * has every variant's diff to compare.
39
+ */
40
+ export declare function isReady(graph: RudderGraph, node: TaskNode): boolean;
41
+ /**
42
+ * Every node eligible to launch: planned with all hard parents merged.
43
+ */
44
+ export declare function readyNodes(graph: RudderGraph): TaskNode[];
45
+ /**
46
+ * The frontier: non-merged leaves. A node is on the frontier when it is not
47
+ * merged AND has no non-merged child (every dependent is already merged, or it
48
+ * has no dependents). Injection reconciliation attaches new nodes here.
49
+ */
50
+ export declare function frontier(graph: RudderGraph): TaskNode[];
51
+ /**
52
+ * Project a worker-owned RunStatus into the DAG-level NodeStatus. With no run
53
+ * yet, the node keeps its deps-derived status (planned/ready/blocked); the
54
+ * scheduler decides those. Mirrors plan section 2's projection table.
55
+ */
56
+ export declare function projectNodeStatus(node: TaskNode, run?: RunRecord): NodeStatus;