@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/jj.js ADDED
@@ -0,0 +1,524 @@
1
+ import fs from "node:fs";
2
+ import fsp from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { commandExists, MissingToolError, pathExistsSync, runCommand, runCommandSync, shortHash, } from "./util.js";
5
+ import { saveRunRecord, worktreePath } from "./state.js";
6
+ // Minimum jj version we are confident in. Older releases may lack flags we use
7
+ // (e.g. `jj workspace add -r`); we warn rather than throw so an older jj still
8
+ // works through the documented fallbacks.
9
+ const MIN_JJ = "0.21.0";
10
+ /**
11
+ * Hard requirement: jj must be installed. Throws MissingToolError otherwise.
12
+ */
13
+ export function ensureJj() {
14
+ if (!commandExists("jj")) {
15
+ throw new MissingToolError("jj");
16
+ }
17
+ }
18
+ /**
19
+ * Parse `jj --version`. Returns the version string (e.g. "0.40.0") or "".
20
+ * Warns (does not throw) when below MIN_JJ.
21
+ */
22
+ export async function jjVersion() {
23
+ const result = await runCommand("jj", ["--version"], { allowFailure: true });
24
+ const match = result.stdout.match(/(\d+)\.(\d+)\.(\d+)/);
25
+ const version = match ? match[0] : "";
26
+ if (version && compareVersions(version, MIN_JJ) < 0) {
27
+ console.warn(`[rudder] jj ${version} is older than the recommended ${MIN_JJ}; some workspace flags may fall back.`);
28
+ }
29
+ return version;
30
+ }
31
+ /**
32
+ * Idempotently colocate a jj repo with the git repo at repoRoot. If already a
33
+ * jj repo, no-op. Otherwise runs `jj git init --colocate`.
34
+ */
35
+ export async function ensureColocated(repoRoot) {
36
+ ensureJj();
37
+ if (isJjRepo(repoRoot)) {
38
+ return;
39
+ }
40
+ await runCommand("jj", ["git", "init", "--colocate"], { cwd: repoRoot });
41
+ }
42
+ export function isJjRepo(cwd) {
43
+ if (!commandExists("jj")) {
44
+ return false;
45
+ }
46
+ const result = runCommandSync("jj", ["root"], { cwd, allowFailure: true });
47
+ if (result.code === 0 && result.stdout.trim()) {
48
+ return samePath(result.stdout.trim(), cwd);
49
+ }
50
+ return hasLocalJjMarker(cwd);
51
+ }
52
+ export function findJjRoot(cwd) {
53
+ if (commandExists("jj")) {
54
+ const result = runCommandSync("jj", ["root"], { cwd, allowFailure: true });
55
+ if (result.code === 0 && result.stdout.trim()) {
56
+ return result.stdout.trim();
57
+ }
58
+ }
59
+ const marker = findJjMarker(cwd);
60
+ return marker ? path.dirname(marker) : path.resolve(cwd);
61
+ }
62
+ /**
63
+ * The change id of `@` (the working-copy commit) in the given workspace.
64
+ */
65
+ export async function currentJjChangeId(workspacePath) {
66
+ const result = await runCommand("jj", ["log", "--no-graph", "-r", "@", "-T", "change_id"], {
67
+ cwd: workspacePath,
68
+ allowFailure: true,
69
+ });
70
+ return result.code === 0 ? result.stdout.trim().split(/\s+/)[0] ?? "" : "";
71
+ }
72
+ export async function jjStatus(workspacePath) {
73
+ const result = await runCommand("jj", ["status"], {
74
+ cwd: workspacePath,
75
+ allowFailure: true,
76
+ });
77
+ return result.code === 0 ? parseJjStatus(result.stdout) : [];
78
+ }
79
+ export function parseJjStatus(stdout) {
80
+ const lines = [];
81
+ let inConflictSection = false;
82
+ for (const raw of stdout.split(/\r?\n/)) {
83
+ const line = raw.trim();
84
+ if (!line) {
85
+ continue;
86
+ }
87
+ if (/^working copy changes:?$/i.test(line)) {
88
+ inConflictSection = false;
89
+ continue;
90
+ }
91
+ if (/^(conflicts|unresolved conflicts|there are unresolved conflicts)(:|$)/i.test(line)) {
92
+ inConflictSection = true;
93
+ continue;
94
+ }
95
+ if (isJjStatusMetadata(line)) {
96
+ continue;
97
+ }
98
+ const statusPath = statusPathFromSummaryLine(line);
99
+ if (statusPath) {
100
+ if (!isRudderMetadataPath(statusPath)) {
101
+ lines.push(line);
102
+ }
103
+ continue;
104
+ }
105
+ if (inConflictSection) {
106
+ const conflictPath = line.replace(/^[-*]\s+/, "").replace(/^conflict in\s+/i, "").trim();
107
+ if (conflictPath && !isRudderMetadataPath(conflictPath)) {
108
+ lines.push(`C ${conflictPath}`);
109
+ }
110
+ }
111
+ }
112
+ return lines;
113
+ }
114
+ export async function jjDiff(workspacePath) {
115
+ const status = await jjStatus(workspacePath);
116
+ const stat = await runCommand("jj", ["diff", "--stat"], {
117
+ cwd: workspacePath,
118
+ allowFailure: true,
119
+ });
120
+ const patch = await runCommand("jj", ["diff", "--git"], {
121
+ cwd: workspacePath,
122
+ allowFailure: true,
123
+ });
124
+ return [
125
+ status.length ? `status:\n${status.join("\n")}` : "",
126
+ stat.stdout.trim(),
127
+ patch.stdout.trim(),
128
+ ]
129
+ .filter(Boolean)
130
+ .join("\n\n");
131
+ }
132
+ /**
133
+ * Create a new empty change parented on the given changes. Reads the new change
134
+ * id back by querying a unique marker embedded in the description, never by
135
+ * scraping stdout. Returns the new change id.
136
+ */
137
+ export async function createEmptyChange(params) {
138
+ ensureJj();
139
+ const marker = `rudder-node:${shortHash(`${params.description}:${Date.now()}:${Math.random()}`)}`;
140
+ const description = `${marker} ${params.description}`.trim();
141
+ const args = ["new", ...params.parents.filter(Boolean), "-m", description, "--no-edit"];
142
+ await runCommand("jj", args, { cwd: params.repoRoot });
143
+ // jj normalizes descriptions to end with a trailing newline, and
144
+ // `description(exact:...)` matches the full stored description, so the revset
145
+ // literal must include the trailing "\n".
146
+ const exact = JSON.stringify(`${description}\n`);
147
+ const result = await runCommand("jj", ["log", "--no-graph", "-r", `description(exact:${exact})`, "-T", "change_id"], { cwd: params.repoRoot, allowFailure: true });
148
+ let changeId = result.stdout.trim().split(/\s+/)[0] ?? "";
149
+ if (!changeId) {
150
+ // Fallback: match on the unique marker as a substring.
151
+ const bySubstring = await runCommand("jj", ["log", "--no-graph", "-r", `description(substring:${JSON.stringify(marker)})`, "-T", "change_id"], { cwd: params.repoRoot, allowFailure: true });
152
+ changeId = bySubstring.stdout.trim().split(/\s+/)[0] ?? "";
153
+ }
154
+ if (!changeId) {
155
+ throw new Error(`Could not read back the change id for the new empty change (${marker}).`);
156
+ }
157
+ return changeId;
158
+ }
159
+ export async function describeChange(repoRoot, changeId, message) {
160
+ await runCommand("jj", ["describe", changeId, "-m", message], { cwd: repoRoot });
161
+ }
162
+ /**
163
+ * Create a jj workspace for a node/run. Workspace name matches the original
164
+ * rudder regex `rudder-<id.slice(0,14)>-<shortHash(id).slice(0,6)>`. If
165
+ * `atChangeId` is given, parent the working-copy commit on it; falls back to
166
+ * `jj workspace add` + `jj edit <atChangeId>` if `-r` is unsupported.
167
+ */
168
+ export async function createNodeWorkspace(params) {
169
+ ensureJj();
170
+ const id = params.nodeId ?? params.runId;
171
+ if (!id) {
172
+ throw new Error("createNodeWorkspace requires nodeId or runId.");
173
+ }
174
+ const workspaceName = workspaceNameFor(id);
175
+ const targetPath = worktreePath(params.repoRoot, params.runId ?? id, params.task);
176
+ await fsp.mkdir(path.dirname(targetPath), { recursive: true });
177
+ const baseArgs = ["workspace", "add", targetPath, "--name", workspaceName];
178
+ if (params.atChangeId) {
179
+ const withRevision = await runCommand("jj", [...baseArgs, "-r", params.atChangeId], {
180
+ cwd: params.repoRoot,
181
+ allowFailure: true,
182
+ });
183
+ if (withRevision.code === 0) {
184
+ return { workspaceName, path: targetPath };
185
+ }
186
+ // Older jj without `workspace add -r`: add, then edit onto the change.
187
+ await runCommand("jj", baseArgs, { cwd: params.repoRoot });
188
+ await runCommand("jj", ["edit", params.atChangeId], { cwd: targetPath, allowFailure: true });
189
+ return { workspaceName, path: targetPath };
190
+ }
191
+ await runCommand("jj", baseArgs, { cwd: params.repoRoot });
192
+ return { workspaceName, path: targetPath };
193
+ }
194
+ /**
195
+ * Phase-1 entry point used by run-manager. Delegates to createNodeWorkspace.
196
+ */
197
+ export async function createRunJjWorkspace(params) {
198
+ return await createNodeWorkspace({
199
+ repoRoot: params.repoRoot,
200
+ runId: params.runId,
201
+ task: params.task,
202
+ });
203
+ }
204
+ function workspaceNameFor(id) {
205
+ return `rudder-${id.slice(0, 14)}-${shortHash(id).slice(0, 6)}`;
206
+ }
207
+ /**
208
+ * Merge a run's jj change into the current (main) workspace `@`. Captures the
209
+ * operation id before the merge and records it on merge.operationId. On
210
+ * conflict sets merge.status="conflict" + conflictedFiles + mergeChangeId.
211
+ */
212
+ export async function mergeJjRunIntoCurrentWorkspace(run, allowDirty = false) {
213
+ if (!run.worktree.workspaceName) {
214
+ throw new Error("Run has no jj workspace name to merge.");
215
+ }
216
+ ensureJjRepo(run.repoRoot);
217
+ ensureJjRepo(run.worktree.path);
218
+ if (!allowDirty && (await jjStatus(run.repoRoot)).length > 0) {
219
+ throw new Error("Target workspace is dirty. Squash/abandon changes or pass --allow-dirty.");
220
+ }
221
+ const opIdBefore = await currentOpId(run.repoRoot);
222
+ run.merge = {
223
+ status: "not-started",
224
+ attemptedAt: new Date().toISOString(),
225
+ targetBranch: (await currentJjChangeId(run.repoRoot)) || "@",
226
+ operationId: opIdBefore || undefined,
227
+ };
228
+ await saveRunRecord(run);
229
+ const sourceChangeId = await currentJjChangeId(run.worktree.path);
230
+ if (!sourceChangeId) {
231
+ await markMergeFailed(run, "Could not determine jj change id for run workspace.");
232
+ throw new Error("Could not determine jj change id for run workspace.");
233
+ }
234
+ const message = `rudder: ${run.task.slice(0, 72)}`;
235
+ const merge = await mergeNode({
236
+ repoRoot: run.repoRoot,
237
+ nodeChangeId: sourceChangeId,
238
+ intoChangeId: "@",
239
+ message,
240
+ });
241
+ if (!merge.mergeChangeId) {
242
+ const error = "jj merge failed.";
243
+ await markMergeFailed(run, error);
244
+ throw new Error(error);
245
+ }
246
+ if (merge.conflictedFiles.length === 0) {
247
+ run.status = "merged";
248
+ run.merge = {
249
+ ...run.merge,
250
+ status: "merged",
251
+ mergeChangeId: merge.mergeChangeId,
252
+ operationId: merge.opId || run.merge?.operationId,
253
+ };
254
+ await saveRunRecord(run);
255
+ return run;
256
+ }
257
+ run.status = "merge-conflict";
258
+ run.merge = {
259
+ ...run.merge,
260
+ status: "conflict",
261
+ conflictedFiles: merge.conflictedFiles,
262
+ mergeChangeId: merge.mergeChangeId,
263
+ operationId: merge.opId || run.merge?.operationId,
264
+ error: "jj merge created conflicts.",
265
+ };
266
+ await saveRunRecord(run);
267
+ return run;
268
+ }
269
+ /**
270
+ * Merge two changes into a new change. Captures the op id (after the merge),
271
+ * returns the new merge change id and any conflicted files. jj merges never
272
+ * fail on conflict; the conflict is recorded in the merge change.
273
+ */
274
+ export async function mergeNode(params) {
275
+ ensureJjRepo(params.repoRoot);
276
+ const merge = await runCommand("jj", ["new", params.intoChangeId, params.nodeChangeId, "-m", params.message], { cwd: params.repoRoot, allowFailure: true });
277
+ if (merge.code !== 0) {
278
+ throw new Error(merge.stderr.trim() || merge.stdout.trim() || "jj merge failed.");
279
+ }
280
+ const mergeChangeId = await currentJjChangeId(params.repoRoot);
281
+ const opId = await currentOpId(params.repoRoot);
282
+ const conflictedFiles = await jjConflictedFiles(params.repoRoot);
283
+ return { mergeChangeId, opId, conflictedFiles };
284
+ }
285
+ export async function jjConflictedFiles(workspacePath) {
286
+ const result = await runCommand("jj", ["resolve", "--list"], {
287
+ cwd: workspacePath,
288
+ allowFailure: true,
289
+ });
290
+ return result.code === 0 ? parseJjConflictedFiles(result.stdout) : [];
291
+ }
292
+ /**
293
+ * Alias matching the plan's API name.
294
+ */
295
+ export async function listConflicts(workspacePath) {
296
+ return await jjConflictedFiles(workspacePath);
297
+ }
298
+ export function parseJjConflictedFiles(stdout) {
299
+ return stdout
300
+ .split(/\r?\n/)
301
+ .map((line) => line.trim())
302
+ .filter(Boolean)
303
+ .map((line) => line.replace(/^[-*]\s+/, "").replace(/^conflict in\s+/i, "").trim())
304
+ .filter((line) => line && !isRudderMetadataPath(line));
305
+ }
306
+ /**
307
+ * The id of the latest operation in the op log.
308
+ */
309
+ export async function currentOpId(repoRoot) {
310
+ const result = await runCommand("jj", ["op", "log", "--no-graph", "-n", "1", "-T", "id.short()"], {
311
+ cwd: repoRoot,
312
+ allowFailure: true,
313
+ });
314
+ return result.code === 0 ? result.stdout.trim().split(/\s+/)[0] ?? "" : "";
315
+ }
316
+ /**
317
+ * Restore the repo to an earlier operation. One call rewinds all workspaces and
318
+ * refs atomically (op restore is global).
319
+ */
320
+ export async function undoToOp(repoRoot, opId) {
321
+ await runCommand("jj", ["op", "restore", opId], { cwd: repoRoot });
322
+ }
323
+ export async function undoLast(repoRoot) {
324
+ await runCommand("jj", ["undo"], { cwd: repoRoot });
325
+ }
326
+ /**
327
+ * Export jj changes to the colocated git repo. Call after each merge, before
328
+ * opening a Hunk review, and before a PR.
329
+ */
330
+ export async function exportToGit(repoRoot) {
331
+ await runCommand("jj", ["git", "export"], { cwd: repoRoot, allowFailure: true });
332
+ }
333
+ export async function createBookmark(repoRoot, name, atChangeId) {
334
+ const create = await runCommand("jj", ["bookmark", "create", name, "-r", atChangeId], {
335
+ cwd: repoRoot,
336
+ allowFailure: true,
337
+ });
338
+ if (create.code !== 0) {
339
+ // Bookmark may already exist; move it to the target change.
340
+ await runCommand("jj", ["bookmark", "set", name, "-r", atChangeId, "--allow-backwards"], {
341
+ cwd: repoRoot,
342
+ });
343
+ }
344
+ }
345
+ export async function pushBookmark(repoRoot, name) {
346
+ const push = await runCommand("jj", ["git", "push", "--bookmark", name, "--allow-new"], {
347
+ cwd: repoRoot,
348
+ allowFailure: true,
349
+ });
350
+ if (push.code !== 0) {
351
+ // jj 0.40 drops `--allow-new`; a plain `--bookmark` push handles new bookmarks.
352
+ await runCommand("jj", ["git", "push", "--bookmark", name], { cwd: repoRoot });
353
+ }
354
+ }
355
+ /**
356
+ * Forget a jj workspace and remove its directory.
357
+ */
358
+ export async function forgetWorkspace(params) {
359
+ if (commandExists("jj")) {
360
+ await runCommand("jj", ["workspace", "forget", params.workspaceName], {
361
+ cwd: params.repoRoot,
362
+ allowFailure: true,
363
+ }).catch(() => undefined);
364
+ }
365
+ await fsp.rm(params.workspacePath, { recursive: true, force: true });
366
+ }
367
+ export async function removeRunWorkspace(run) {
368
+ if (!run.worktree.enabled) {
369
+ return;
370
+ }
371
+ if (!run.worktree.workspaceName) {
372
+ throw new Error("Run has no jj workspace name to remove.");
373
+ }
374
+ await forgetWorkspace({
375
+ repoRoot: run.repoRoot,
376
+ workspaceName: run.worktree.workspaceName,
377
+ workspacePath: run.worktree.path,
378
+ });
379
+ }
380
+ /**
381
+ * Rebase a run's node change onto the trunk. jj records conflicts in place and
382
+ * never blocks, so there is no rebase-in-progress dance.
383
+ */
384
+ export async function syncRunWorkspace(run, baseBranch) {
385
+ if (!run.worktree.workspaceName) {
386
+ throw new Error("Run has no jj workspace to sync.");
387
+ }
388
+ ensureJjRepo(run.repoRoot);
389
+ const nodeChange = run.worktree.jjChangeId || (await currentJjChangeId(run.worktree.path));
390
+ if (!nodeChange) {
391
+ run.sync = {
392
+ ...run.sync,
393
+ status: "failed",
394
+ attemptedAt: new Date().toISOString(),
395
+ baseBranch,
396
+ error: "Could not determine jj change id for run workspace.",
397
+ };
398
+ await saveRunRecord(run);
399
+ return run;
400
+ }
401
+ const trunk = baseBranch && baseBranch !== "HEAD" ? baseBranch : run.targetBranch || "@";
402
+ run.sync = {
403
+ status: "not-started",
404
+ attemptedAt: new Date().toISOString(),
405
+ baseBranch: trunk,
406
+ };
407
+ await saveRunRecord(run);
408
+ const rebase = await runCommand("jj", ["rebase", "-s", nodeChange, "-d", trunk], {
409
+ cwd: run.repoRoot,
410
+ allowFailure: true,
411
+ });
412
+ if (rebase.code !== 0) {
413
+ // jj 0.40 replaced `-d`/`--destination` with `-o`/`--onto`.
414
+ const onto = await runCommand("jj", ["rebase", "-s", nodeChange, "--onto", trunk], {
415
+ cwd: run.repoRoot,
416
+ allowFailure: true,
417
+ });
418
+ if (onto.code !== 0) {
419
+ run.sync = {
420
+ ...run.sync,
421
+ status: "failed",
422
+ error: onto.stderr.trim() || onto.stdout.trim() || `Rebase onto ${trunk} failed.`,
423
+ };
424
+ await saveRunRecord(run);
425
+ return run;
426
+ }
427
+ }
428
+ const conflicted = await jjConflictedFiles(run.worktree.path);
429
+ run.sync = {
430
+ ...run.sync,
431
+ status: conflicted.length ? "conflict" : "synced",
432
+ conflictedFiles: conflicted,
433
+ };
434
+ await saveRunRecord(run);
435
+ return run;
436
+ }
437
+ function ensureJjRepo(cwd) {
438
+ if (!commandExists("jj")) {
439
+ throw new MissingToolError("jj");
440
+ }
441
+ const result = runCommandSync("jj", ["root"], { cwd, allowFailure: true });
442
+ if (result.code !== 0 || !result.stdout.trim()) {
443
+ throw new Error(`Expected ${cwd} to be inside a jj repository.`);
444
+ }
445
+ }
446
+ function hasLocalJjMarker(cwd) {
447
+ const marker = path.join(path.resolve(cwd), ".jj");
448
+ try {
449
+ return fs.statSync(marker).isDirectory();
450
+ }
451
+ catch {
452
+ return false;
453
+ }
454
+ }
455
+ function findJjMarker(cwd) {
456
+ let current = path.resolve(cwd);
457
+ while (true) {
458
+ const marker = path.join(current, ".jj");
459
+ if (pathExistsSync(marker)) {
460
+ try {
461
+ if (fs.statSync(marker).isDirectory()) {
462
+ return marker;
463
+ }
464
+ }
465
+ catch {
466
+ // Keep walking if the marker cannot be inspected.
467
+ }
468
+ }
469
+ const parent = path.dirname(current);
470
+ if (parent === current) {
471
+ return null;
472
+ }
473
+ current = parent;
474
+ }
475
+ }
476
+ function samePath(left, right) {
477
+ const normalize = (value) => {
478
+ const resolved = path.resolve(value);
479
+ try {
480
+ return fs.realpathSync(resolved);
481
+ }
482
+ catch {
483
+ return resolved;
484
+ }
485
+ };
486
+ return normalize(left) === normalize(right);
487
+ }
488
+ function isJjStatusMetadata(line) {
489
+ return (/^the working copy has no changes\.?$/i.test(line) ||
490
+ /^the working copy is clean\.?$/i.test(line) ||
491
+ /^no changes\.?$/i.test(line) ||
492
+ /^working copy\s*:/i.test(line) ||
493
+ /^parent commit\s*:/i.test(line) ||
494
+ /^current operation\s*:/i.test(line) ||
495
+ /^no conflicts found\.?$/i.test(line));
496
+ }
497
+ function statusPathFromSummaryLine(line) {
498
+ const match = line.match(/^[A-Z?]{1,2}\s+(.+)$/);
499
+ return match?.[1]?.trim() || null;
500
+ }
501
+ function isRudderMetadataPath(filePath) {
502
+ const normalized = filePath.replace(/\\/g, "/").replace(/^["']|["']$/g, "");
503
+ return normalized === ".rudder" || normalized.startsWith(".rudder/");
504
+ }
505
+ async function markMergeFailed(run, error) {
506
+ run.merge = {
507
+ ...run.merge,
508
+ status: "failed",
509
+ error,
510
+ };
511
+ await saveRunRecord(run);
512
+ }
513
+ function compareVersions(a, b) {
514
+ const pa = a.split(".").map((n) => Number.parseInt(n, 10) || 0);
515
+ const pb = b.split(".").map((n) => Number.parseInt(n, 10) || 0);
516
+ for (let i = 0; i < Math.max(pa.length, pb.length); i += 1) {
517
+ const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
518
+ if (diff !== 0) {
519
+ return diff < 0 ? -1 : 1;
520
+ }
521
+ }
522
+ return 0;
523
+ }
524
+ //# sourceMappingURL=jj.js.map
package/dist/jj.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jj.js","sourceRoot":"","sources":["../src/jj.ts"],"names":[],"mappings":"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"}