@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.
- package/README.md +169 -510
- package/dist/auth.d.ts +2 -0
- package/dist/auth.js +22 -1
- package/dist/auth.js.map +1 -1
- package/dist/backends.js +88 -1
- package/dist/backends.js.map +1 -1
- package/dist/board/board.css +1 -0
- package/dist/board/board.js +2 -0
- package/dist/board/daemon.d.ts +21 -0
- package/dist/board/daemon.js +838 -0
- package/dist/board/daemon.js.map +1 -0
- package/dist/brain.d.ts +9 -0
- package/dist/brain.js +36 -9
- package/dist/brain.js.map +1 -1
- package/dist/bus.d.ts +9 -0
- package/dist/bus.js +23 -0
- package/dist/bus.js.map +1 -0
- package/dist/cloud.js +80 -350
- package/dist/cloud.js.map +1 -1
- package/dist/daemon.d.ts +21 -0
- package/dist/daemon.js +141 -0
- package/dist/daemon.js.map +1 -0
- package/dist/git.d.ts +19 -13
- package/dist/git.js +283 -35
- package/dist/git.js.map +1 -1
- package/dist/goal.d.ts +30 -0
- package/dist/goal.js +75 -0
- package/dist/goal.js.map +1 -0
- package/dist/graph.d.ts +56 -0
- package/dist/graph.js +213 -0
- package/dist/graph.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/jj.d.ts +121 -0
- package/dist/jj.js +524 -0
- package/dist/jj.js.map +1 -0
- package/dist/main.js +191 -17
- package/dist/main.js.map +1 -1
- package/dist/migration.js +8 -1
- package/dist/migration.js.map +1 -1
- package/dist/models.js +21 -36
- package/dist/models.js.map +1 -1
- package/dist/native/rudder-native +0 -0
- package/dist/planner.d.ts +27 -0
- package/dist/planner.js +540 -0
- package/dist/planner.js.map +1 -0
- package/dist/repl.js +6 -2
- package/dist/repl.js.map +1 -1
- package/dist/run-manager.d.ts +10 -0
- package/dist/run-manager.js +225 -54
- package/dist/run-manager.js.map +1 -1
- package/dist/scheduler.d.ts +124 -0
- package/dist/scheduler.js +849 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/state.d.ts +18 -1
- package/dist/state.js +139 -3
- package/dist/state.js.map +1 -1
- package/dist/surfaces.d.ts +23 -0
- package/dist/surfaces.js +196 -0
- package/dist/surfaces.js.map +1 -0
- package/dist/task-summary.d.ts +18 -0
- package/dist/task-summary.js +132 -0
- package/dist/task-summary.js.map +1 -1
- package/dist/tmux-dashboard.js +58 -7
- package/dist/tmux-dashboard.js.map +1 -1
- package/dist/tui.js +112 -17
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +214 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts +6 -1
- package/dist/util.js +37 -7
- package/dist/util.js.map +1 -1
- 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
|
|
4
|
-
import { listRuns, saveRunRecord
|
|
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
|
-
|
|
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
|
|
99
|
-
const
|
|
100
|
-
|
|
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
|
-
|
|
108
|
-
|
|
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
|
|
134
|
+
return result.stdout.trim();
|
|
111
135
|
}
|
|
112
|
-
export async function
|
|
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
|
-
|
|
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
|
|
160
|
+
targetBranch,
|
|
161
|
+
strategy,
|
|
129
162
|
};
|
|
130
163
|
await saveRunRecord(run);
|
|
131
|
-
await
|
|
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:
|
|
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
|
-
|
|
176
|
-
|
|
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.
|
|
181
|
-
.split(/\r?\n/)
|
|
182
|
-
.map((line) => line.trim())
|
|
183
|
-
.filter(Boolean);
|
|
408
|
+
return result.code === 0;
|
|
184
409
|
}
|
|
185
|
-
|
|
186
|
-
const
|
|
187
|
-
|
|
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
|
-
|
|
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
|
package/dist/goal.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goal.js","sourceRoot":"","sources":["../src/goal.ts"],"names":[],"mappings":"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"}
|
package/dist/graph.d.ts
ADDED
|
@@ -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;
|