@exla/rudder 0.0.0-stage → 3.4.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 (187) hide show
  1. package/LICENSE +100 -0
  2. package/README.md +733 -2
  3. package/assets/rudder.icns +0 -0
  4. package/assets/sounds/NOTICE.md +8 -0
  5. package/assets/sounds/ping.mp3 +0 -0
  6. package/dist/agent-attention.d.ts +5 -0
  7. package/dist/agent-attention.js +54 -0
  8. package/dist/agent-attention.js.map +1 -0
  9. package/dist/analytics.d.ts +36 -0
  10. package/dist/analytics.js +178 -0
  11. package/dist/analytics.js.map +1 -0
  12. package/dist/attach-session.d.ts +91 -0
  13. package/dist/attach-session.js +290 -0
  14. package/dist/attach-session.js.map +1 -0
  15. package/dist/auth.d.ts +36 -0
  16. package/dist/auth.js +397 -0
  17. package/dist/auth.js.map +1 -0
  18. package/dist/backends.d.ts +3 -0
  19. package/dist/backends.js +638 -0
  20. package/dist/backends.js.map +1 -0
  21. package/dist/board/board.css +1 -0
  22. package/dist/board/board.js +2 -0
  23. package/dist/board/daemon.d.ts +39 -0
  24. package/dist/board/daemon.js +1510 -0
  25. package/dist/board/daemon.js.map +1 -0
  26. package/dist/brain.d.ts +24 -0
  27. package/dist/brain.js +244 -0
  28. package/dist/brain.js.map +1 -0
  29. package/dist/bus.d.ts +9 -0
  30. package/dist/bus.js +23 -0
  31. package/dist/bus.js.map +1 -0
  32. package/dist/checkout-sync.d.ts +35 -0
  33. package/dist/checkout-sync.js +247 -0
  34. package/dist/checkout-sync.js.map +1 -0
  35. package/dist/cloud.d.ts +51 -0
  36. package/dist/cloud.js +4672 -0
  37. package/dist/cloud.js.map +1 -0
  38. package/dist/codex-binary.d.ts +12 -0
  39. package/dist/codex-binary.js +184 -0
  40. package/dist/codex-binary.js.map +1 -0
  41. package/dist/context-audit.d.ts +21 -0
  42. package/dist/context-audit.js +109 -0
  43. package/dist/context-audit.js.map +1 -0
  44. package/dist/daemon.d.ts +27 -0
  45. package/dist/daemon.js +203 -0
  46. package/dist/daemon.js.map +1 -0
  47. package/dist/effort.d.ts +9 -0
  48. package/dist/effort.js +72 -0
  49. package/dist/effort.js.map +1 -0
  50. package/dist/feedback.d.ts +46 -0
  51. package/dist/feedback.js +173 -0
  52. package/dist/feedback.js.map +1 -0
  53. package/dist/gc.d.ts +3 -0
  54. package/dist/gc.js +262 -0
  55. package/dist/gc.js.map +1 -0
  56. package/dist/git.d.ts +31 -0
  57. package/dist/git.js +455 -0
  58. package/dist/git.js.map +1 -0
  59. package/dist/goal.d.ts +33 -0
  60. package/dist/goal.js +95 -0
  61. package/dist/goal.js.map +1 -0
  62. package/dist/graph.d.ts +93 -0
  63. package/dist/graph.js +372 -0
  64. package/dist/graph.js.map +1 -0
  65. package/dist/handoff.d.ts +110 -0
  66. package/dist/handoff.js +565 -0
  67. package/dist/handoff.js.map +1 -0
  68. package/dist/improve/advisor.d.ts +10 -0
  69. package/dist/improve/advisor.js +115 -0
  70. package/dist/improve/advisor.js.map +1 -0
  71. package/dist/improve/collect.d.ts +49 -0
  72. package/dist/improve/collect.js +274 -0
  73. package/dist/improve/collect.js.map +1 -0
  74. package/dist/improve/gate.d.ts +17 -0
  75. package/dist/improve/gate.js +60 -0
  76. package/dist/improve/gate.js.map +1 -0
  77. package/dist/improve/index.d.ts +9 -0
  78. package/dist/improve/index.js +376 -0
  79. package/dist/improve/index.js.map +1 -0
  80. package/dist/improve/judge.d.ts +32 -0
  81. package/dist/improve/judge.js +114 -0
  82. package/dist/improve/judge.js.map +1 -0
  83. package/dist/improve/mine.d.ts +31 -0
  84. package/dist/improve/mine.js +192 -0
  85. package/dist/improve/mine.js.map +1 -0
  86. package/dist/improve/propose.d.ts +51 -0
  87. package/dist/improve/propose.js +150 -0
  88. package/dist/improve/propose.js.map +1 -0
  89. package/dist/improve/rank.d.ts +16 -0
  90. package/dist/improve/rank.js +49 -0
  91. package/dist/improve/rank.js.map +1 -0
  92. package/dist/improve/schedule.d.ts +1 -0
  93. package/dist/improve/schedule.js +95 -0
  94. package/dist/improve/schedule.js.map +1 -0
  95. package/dist/improve/ship.d.ts +25 -0
  96. package/dist/improve/ship.js +82 -0
  97. package/dist/improve/ship.js.map +1 -0
  98. package/dist/improve/state.d.ts +157 -0
  99. package/dist/improve/state.js +264 -0
  100. package/dist/improve/state.js.map +1 -0
  101. package/dist/index.d.ts +2 -0
  102. package/dist/index.js +88 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/jj-binary.d.ts +36 -0
  105. package/dist/jj-binary.js +143 -0
  106. package/dist/jj-binary.js.map +1 -0
  107. package/dist/jj.d.ts +163 -0
  108. package/dist/jj.js +926 -0
  109. package/dist/jj.js.map +1 -0
  110. package/dist/logger.d.ts +22 -0
  111. package/dist/logger.js +110 -0
  112. package/dist/logger.js.map +1 -0
  113. package/dist/main.d.ts +3 -0
  114. package/dist/main.js +1366 -0
  115. package/dist/main.js.map +1 -0
  116. package/dist/migration.d.ts +82 -0
  117. package/dist/migration.js +198 -0
  118. package/dist/migration.js.map +1 -0
  119. package/dist/models.d.ts +9 -0
  120. package/dist/models.js +623 -0
  121. package/dist/models.js.map +1 -0
  122. package/dist/move-home.d.ts +82 -0
  123. package/dist/move-home.js +472 -0
  124. package/dist/move-home.js.map +1 -0
  125. package/dist/native/darwin-arm64/rudder-native +0 -0
  126. package/dist/native/darwin-x64/rudder-native +0 -0
  127. package/dist/native/linux-x64/rudder-native +0 -0
  128. package/dist/native-agents.d.ts +8 -0
  129. package/dist/native-agents.js +178 -0
  130. package/dist/native-agents.js.map +1 -0
  131. package/dist/native-binary.d.ts +4 -0
  132. package/dist/native-binary.js +140 -0
  133. package/dist/native-binary.js.map +1 -0
  134. package/dist/onboarding.d.ts +11 -0
  135. package/dist/onboarding.js +111 -0
  136. package/dist/onboarding.js.map +1 -0
  137. package/dist/paste-bridge.d.ts +36 -0
  138. package/dist/paste-bridge.js +279 -0
  139. package/dist/paste-bridge.js.map +1 -0
  140. package/dist/plan-mode.d.ts +2 -0
  141. package/dist/plan-mode.js +22 -0
  142. package/dist/plan-mode.js.map +1 -0
  143. package/dist/planner.d.ts +27 -0
  144. package/dist/planner.js +587 -0
  145. package/dist/planner.js.map +1 -0
  146. package/dist/predict.d.ts +67 -0
  147. package/dist/predict.js +369 -0
  148. package/dist/predict.js.map +1 -0
  149. package/dist/qr.d.ts +13 -0
  150. package/dist/qr.js +377 -0
  151. package/dist/qr.js.map +1 -0
  152. package/dist/report.d.ts +74 -0
  153. package/dist/report.js +412 -0
  154. package/dist/report.js.map +1 -0
  155. package/dist/rudder-md.d.ts +33 -0
  156. package/dist/rudder-md.js +142 -0
  157. package/dist/rudder-md.js.map +1 -0
  158. package/dist/run-manager.d.ts +62 -0
  159. package/dist/run-manager.js +1400 -0
  160. package/dist/run-manager.js.map +1 -0
  161. package/dist/scheduler.d.ts +128 -0
  162. package/dist/scheduler.js +955 -0
  163. package/dist/scheduler.js.map +1 -0
  164. package/dist/state.d.ts +127 -0
  165. package/dist/state.js +704 -0
  166. package/dist/state.js.map +1 -0
  167. package/dist/surfaces.d.ts +91 -0
  168. package/dist/surfaces.js +460 -0
  169. package/dist/surfaces.js.map +1 -0
  170. package/dist/task-summary.d.ts +30 -0
  171. package/dist/task-summary.js +472 -0
  172. package/dist/task-summary.js.map +1 -0
  173. package/dist/types.d.ts +492 -0
  174. package/dist/types.js +2 -0
  175. package/dist/types.js.map +1 -0
  176. package/dist/usage.d.ts +198 -0
  177. package/dist/usage.js +830 -0
  178. package/dist/usage.js.map +1 -0
  179. package/dist/util.d.ts +73 -0
  180. package/dist/util.js +399 -0
  181. package/dist/util.js.map +1 -0
  182. package/dist/version-check.d.ts +16 -0
  183. package/dist/version-check.js +269 -0
  184. package/dist/version-check.js.map +1 -0
  185. package/package.json +68 -4
  186. package/scripts/copy-native.mjs +89 -0
  187. package/scripts/postinstall.mjs +34 -0
package/dist/git.js ADDED
@@ -0,0 +1,455 @@
1
+ import fsp from "node:fs/promises";
2
+ import path from "node:path";
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 diff 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
+ // ---------------------------------------------------------------------------
15
+ export function findRepoRoot(cwd = process.cwd()) {
16
+ const result = runCommandSync("git", ["rev-parse", "--show-toplevel"], {
17
+ cwd,
18
+ allowFailure: true,
19
+ });
20
+ if (result.code === 0 && result.stdout.trim()) {
21
+ return result.stdout.trim();
22
+ }
23
+ return path.resolve(cwd);
24
+ }
25
+ export function isGitRepo(cwd) {
26
+ return (runCommandSync("git", ["rev-parse", "--is-inside-work-tree"], {
27
+ cwd,
28
+ allowFailure: true,
29
+ }).stdout.trim() === "true");
30
+ }
31
+ export async function currentBranch(repoRoot) {
32
+ const result = await runCommand("git", ["branch", "--show-current"], {
33
+ cwd: repoRoot,
34
+ allowFailure: true,
35
+ });
36
+ return result.stdout.trim() || "HEAD";
37
+ }
38
+ export async function currentCommit(repoRoot) {
39
+ const result = await runCommand("git", ["rev-parse", "HEAD"], {
40
+ cwd: repoRoot,
41
+ allowFailure: true,
42
+ });
43
+ return result.stdout.trim() || "";
44
+ }
45
+ export async function gitStatus(repoRoot) {
46
+ const result = await runCommand("git", ["status", "--short"], {
47
+ cwd: repoRoot,
48
+ allowFailure: true,
49
+ });
50
+ return result.stdout
51
+ .split(/\r?\n/)
52
+ .map((line) => line.trimEnd())
53
+ .filter(Boolean)
54
+ .filter((line) => {
55
+ const file = line.slice(3).trim();
56
+ return file !== ".rudder" && !file.startsWith(".rudder/");
57
+ });
58
+ }
59
+ export async function gitDiff(repoRoot) {
60
+ const status = await gitStatus(repoRoot);
61
+ const result = await runCommand("git", ["diff", "--stat", "--", "."], {
62
+ cwd: repoRoot,
63
+ allowFailure: true,
64
+ });
65
+ const patch = await runCommand("git", ["diff", "--", "."], {
66
+ cwd: repoRoot,
67
+ allowFailure: true,
68
+ });
69
+ return [
70
+ status.length ? `status:\n${status.join("\n")}` : "",
71
+ result.stdout.trim(),
72
+ patch.stdout.trim(),
73
+ ]
74
+ .filter(Boolean)
75
+ .join("\n\n");
76
+ }
77
+ export async function hasChanges(repoRoot) {
78
+ return (await gitStatus(repoRoot)).length > 0;
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.workspace.path)
85
+ : await gitStatus(run.workspace.path);
86
+ }
87
+ export async function workspaceDiff(run) {
88
+ return (run.vcs ?? "git") === "jj"
89
+ ? await jjDiff(run.workspace.path)
90
+ : await gitDiff(run.workspace.path);
91
+ }
92
+ export async function runHasChanges(run) {
93
+ return (await workspaceStatus(run)).length > 0;
94
+ }
95
+ export function processAlive(pid) {
96
+ if (!pid) {
97
+ return false;
98
+ }
99
+ try {
100
+ process.kill(pid, 0);
101
+ return true;
102
+ }
103
+ catch {
104
+ return false;
105
+ }
106
+ }
107
+ export function runProcessAlive(run) {
108
+ return [run.process?.controllerPid, run.process?.backendPid, run.process?.pid]
109
+ .some((pid) => processAlive(pid));
110
+ }
111
+ export async function activeRunsForCheckout(repoRoot, checkoutPath) {
112
+ const runs = await listRuns(repoRoot);
113
+ const active = [];
114
+ for (const run of runs) {
115
+ if (!["created", "running", "verifying"].includes(run.status)) {
116
+ continue;
117
+ }
118
+ if (!(await sameFilesystemPath(run.workspace.path, checkoutPath))) {
119
+ continue;
120
+ }
121
+ if (runProcessAlive(run)) {
122
+ active.push(run);
123
+ }
124
+ }
125
+ return active;
126
+ }
127
+ async function sameFilesystemPath(left, right) {
128
+ const normalize = async (value) => {
129
+ const resolved = path.resolve(value);
130
+ return await fsp.realpath(resolved).catch(() => resolved);
131
+ };
132
+ return (await normalize(left)) === (await normalize(right));
133
+ }
134
+ export async function conflictedFiles(repoRoot) {
135
+ const result = await runCommand("git", ["diff", "--name-only", "--diff-filter=U"], {
136
+ cwd: repoRoot,
137
+ allowFailure: true,
138
+ });
139
+ return result.stdout
140
+ .split(/\r?\n/)
141
+ .map((line) => line.trim())
142
+ .filter(Boolean);
143
+ }
144
+ export async function worktreeList(repoRoot) {
145
+ const result = await runCommand("git", ["worktree", "list"], {
146
+ cwd: repoRoot,
147
+ allowFailure: true,
148
+ });
149
+ return result.stdout.trim();
150
+ }
151
+ export async function removeGitWorktree(repoRoot, targetPath, force = false) {
152
+ await runCommand("git", ["worktree", "remove", ...(force ? ["--force"] : []), targetPath], {
153
+ cwd: repoRoot,
154
+ allowFailure: force,
155
+ });
156
+ }
157
+ // ---------------------------------------------------------------------------
158
+ // Legacy git run isolation/merge/sync.
159
+ //
160
+ // These remain only to keep runs created before the jj switch
161
+ // (run.vcs === "git") mergeable. No NEW runs reach this path; run-manager routes
162
+ // jj runs to src/jj.ts and only falls back here when run.vcs === "git".
163
+ // ---------------------------------------------------------------------------
164
+ export async function mergeGitRunIntoCurrentBranch(run, allowDirty = false, strategy = "merge") {
165
+ if (!run.workspace.branch) {
166
+ throw new Error("Run has no worktree branch to merge.");
167
+ }
168
+ if (!allowDirty && (await hasChanges(run.repoRoot))) {
169
+ throw new Error("Target branch is dirty. Commit/stash changes or pass --allow-dirty.");
170
+ }
171
+ const targetBranch = await currentTargetBranch(run);
172
+ run.merge = {
173
+ status: "not-started",
174
+ attemptedAt: new Date().toISOString(),
175
+ targetBranch,
176
+ strategy,
177
+ };
178
+ await saveRunRecord(run);
179
+ const commitFailure = await commitWorktreeChangesSafely(run, "merge");
180
+ if (commitFailure) {
181
+ return commitFailure;
182
+ }
183
+ if (strategy === "rebase") {
184
+ const rebase = await rebaseWorktreeOntoBase({
185
+ repoRoot: run.repoRoot,
186
+ worktreePath: run.workspace.path,
187
+ baseBranch: targetBranch,
188
+ });
189
+ if (!rebase.success) {
190
+ run.status = "merge-conflict";
191
+ run.merge = {
192
+ ...run.merge,
193
+ status: "conflict",
194
+ conflictKind: "rebase",
195
+ conflictedFiles: rebase.conflictedFiles,
196
+ error: rebase.error,
197
+ };
198
+ await saveRunRecord(run);
199
+ return run;
200
+ }
201
+ const fastForward = await runCommand("git", ["merge", "--ff-only", run.workspace.branch], {
202
+ cwd: run.repoRoot,
203
+ allowFailure: true,
204
+ });
205
+ if (fastForward.code === 0) {
206
+ run.status = "merged";
207
+ run.merge = {
208
+ ...run.merge,
209
+ status: "merged",
210
+ };
211
+ await saveRunRecord(run);
212
+ return run;
213
+ }
214
+ const conflicted = await conflictedFiles(run.repoRoot);
215
+ run.status = conflicted.length ? "merge-conflict" : "failed";
216
+ run.merge = {
217
+ ...run.merge,
218
+ status: conflicted.length ? "conflict" : "failed",
219
+ conflictKind: "merge",
220
+ conflictedFiles: conflicted,
221
+ error: gitError(fastForward),
222
+ };
223
+ await saveRunRecord(run);
224
+ return run;
225
+ }
226
+ const merge = await runCommand("git", ["merge", "--no-ff", run.workspace.branch], {
227
+ cwd: run.repoRoot,
228
+ allowFailure: true,
229
+ });
230
+ if (merge.code === 0) {
231
+ run.status = "merged";
232
+ run.merge = {
233
+ ...run.merge,
234
+ status: "merged",
235
+ };
236
+ await saveRunRecord(run);
237
+ return run;
238
+ }
239
+ const conflicted = await conflictedFiles(run.repoRoot);
240
+ run.status = "merge-conflict";
241
+ run.merge = {
242
+ ...run.merge,
243
+ status: "conflict",
244
+ conflictKind: "merge",
245
+ conflictedFiles: conflicted,
246
+ error: gitError(merge),
247
+ };
248
+ await saveRunRecord(run);
249
+ return run;
250
+ }
251
+ export async function syncGitRunWorktree(run, baseBranch) {
252
+ if (!run.workspace.branch) {
253
+ throw new Error("Run has no worktree branch to sync.");
254
+ }
255
+ const targetBranch = baseBranch.trim() === "HEAD" ? run.targetBranch : baseBranch;
256
+ const previousStatus = run.status;
257
+ const previousSync = run.sync;
258
+ run.sync = {
259
+ status: "not-started",
260
+ attemptedAt: new Date().toISOString(),
261
+ baseBranch: targetBranch,
262
+ };
263
+ await saveRunRecord(run);
264
+ const commitFailure = await commitWorktreeChangesSafely(run, "sync");
265
+ if (commitFailure) {
266
+ return commitFailure;
267
+ }
268
+ const rebase = await rebaseWorktreeOntoBase({
269
+ repoRoot: run.repoRoot,
270
+ worktreePath: run.workspace.path,
271
+ baseBranch: targetBranch,
272
+ });
273
+ if (rebase.success) {
274
+ run.sync = {
275
+ ...run.sync,
276
+ status: "synced",
277
+ conflictedFiles: [],
278
+ };
279
+ if (previousStatus === "merge-conflict" &&
280
+ (run.merge?.conflictKind === "rebase" || previousSync?.status === "conflict")) {
281
+ run.status = "completed";
282
+ if (run.merge?.conflictKind === "rebase") {
283
+ run.merge = {
284
+ ...run.merge,
285
+ status: "not-started",
286
+ conflictedFiles: undefined,
287
+ error: undefined,
288
+ };
289
+ }
290
+ }
291
+ else {
292
+ run.status = previousStatus;
293
+ }
294
+ await saveRunRecord(run);
295
+ return run;
296
+ }
297
+ const conflict = rebase.conflictedFiles.length > 0;
298
+ run.sync = {
299
+ ...run.sync,
300
+ status: conflict ? "conflict" : "failed",
301
+ conflictedFiles: rebase.conflictedFiles,
302
+ error: rebase.error,
303
+ };
304
+ if (conflict && (previousStatus === "completed" || previousStatus === "merge-conflict")) {
305
+ run.status = "merge-conflict";
306
+ }
307
+ else {
308
+ run.status = previousStatus;
309
+ }
310
+ await saveRunRecord(run);
311
+ return run;
312
+ }
313
+ export async function rebaseWorktreeOntoBase(params) {
314
+ const baseRef = await resolveRebaseBaseRef(params.repoRoot, params.baseBranch);
315
+ const rebase = await runCommand("git", ["rebase", baseRef], {
316
+ cwd: params.worktreePath,
317
+ allowFailure: true,
318
+ });
319
+ if (rebase.code === 0) {
320
+ return {
321
+ success: true,
322
+ baseRef,
323
+ conflictedFiles: [],
324
+ };
325
+ }
326
+ return {
327
+ success: false,
328
+ baseRef,
329
+ conflictedFiles: await conflictedFiles(params.worktreePath),
330
+ error: gitError(rebase) || `Rebase onto ${baseRef} failed.`,
331
+ };
332
+ }
333
+ export async function resolveRebaseBaseRef(repoRoot, baseBranch) {
334
+ const branch = baseBranch.trim();
335
+ if (!branch || branch === "HEAD") {
336
+ return await currentCommit(repoRoot);
337
+ }
338
+ if (await refExists(repoRoot, branch)) {
339
+ return branch;
340
+ }
341
+ const hasOrigin = (await runCommand("git", ["remote", "get-url", "origin"], {
342
+ cwd: repoRoot,
343
+ allowFailure: true,
344
+ })).code === 0;
345
+ let fetched = false;
346
+ if (hasOrigin) {
347
+ const fetch = await runCommand("git", ["fetch", "origin", branch], {
348
+ cwd: repoRoot,
349
+ allowFailure: true,
350
+ });
351
+ fetched = fetch.code === 0;
352
+ }
353
+ const remoteRef = `refs/remotes/origin/${branch}`;
354
+ if (await refExists(repoRoot, remoteRef)) {
355
+ return remoteRef;
356
+ }
357
+ if (fetched && await refExists(repoRoot, "FETCH_HEAD")) {
358
+ return "FETCH_HEAD";
359
+ }
360
+ return await currentCommit(repoRoot);
361
+ }
362
+ async function commitWorktreeChanges(run) {
363
+ const unresolved = await conflictedFiles(run.workspace.path);
364
+ if (unresolved.length > 0) {
365
+ throw new Error(`Worktree has unresolved conflicts: ${unresolved.join(", ")}`);
366
+ }
367
+ if (await rebaseInProgress(run.workspace.path)) {
368
+ throw new Error(`Worktree has an unfinished rebase. Resolve it in ${run.workspace.path}, run git rebase --continue, then retry.`);
369
+ }
370
+ if (!(await hasChanges(run.workspace.path))) {
371
+ return;
372
+ }
373
+ await runCommand("git", ["add", "-A"], {
374
+ cwd: run.workspace.path,
375
+ });
376
+ const message = `rudder: ${run.task.slice(0, 72)}`;
377
+ const commit = await runCommand("git", ["commit", "-m", message], {
378
+ cwd: run.workspace.path,
379
+ allowFailure: true,
380
+ });
381
+ if (commit.code !== 0) {
382
+ const stillChanged = await hasChanges(run.workspace.path);
383
+ if (stillChanged) {
384
+ throw new Error(commit.stderr.trim() || commit.stdout.trim() || "Failed to commit worktree changes.");
385
+ }
386
+ }
387
+ }
388
+ async function commitWorktreeChangesSafely(run, phase) {
389
+ try {
390
+ await commitWorktreeChanges(run);
391
+ return null;
392
+ }
393
+ catch (error) {
394
+ const message = error instanceof Error ? error.message : String(error);
395
+ run.status = "failed";
396
+ if (phase === "merge") {
397
+ run.merge = {
398
+ ...run.merge,
399
+ status: "failed",
400
+ error: message,
401
+ };
402
+ }
403
+ else {
404
+ run.sync = {
405
+ ...run.sync,
406
+ status: "failed",
407
+ error: message,
408
+ };
409
+ }
410
+ await saveRunRecord(run);
411
+ return run;
412
+ }
413
+ }
414
+ async function currentTargetBranch(run) {
415
+ const branch = await currentBranch(run.repoRoot);
416
+ return branch === "HEAD" ? run.targetBranch : branch;
417
+ }
418
+ async function refExists(repoRoot, ref) {
419
+ const result = await runCommand("git", ["rev-parse", "--verify", `${ref}^{commit}`], {
420
+ cwd: repoRoot,
421
+ allowFailure: true,
422
+ });
423
+ return result.code === 0;
424
+ }
425
+ async function rebaseInProgress(worktree) {
426
+ const gitPaths = await Promise.all([
427
+ gitPath(worktree, "rebase-merge"),
428
+ gitPath(worktree, "rebase-apply"),
429
+ ]);
430
+ for (const candidate of gitPaths) {
431
+ if (!candidate) {
432
+ continue;
433
+ }
434
+ try {
435
+ await fsp.access(candidate);
436
+ return true;
437
+ }
438
+ catch {
439
+ // Continue checking the other rebase state path.
440
+ }
441
+ }
442
+ return false;
443
+ }
444
+ async function gitPath(worktree, name) {
445
+ const result = await runCommand("git", ["rev-parse", "--git-path", name], {
446
+ cwd: worktree,
447
+ allowFailure: true,
448
+ });
449
+ const value = result.stdout.trim();
450
+ return result.code === 0 && value ? path.resolve(worktree, value) : null;
451
+ }
452
+ function gitError(result) {
453
+ return result.stderr.trim() || result.stdout.trim();
454
+ }
455
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
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,33 @@
1
+ export declare const DEFAULT_SUCCESS = "the task is implemented and its own verification passes";
2
+ export declare const MAX_GOAL_LINE_CHARS = 3000;
3
+ export declare function capGoalLine(text: string): string;
4
+ export declare function normalizeGoalLine(value: string, fallback: string): string;
5
+ /**
6
+ * Build a launch prompt in objective format. Leads with `Objective: <objective>`, then a
7
+ * `Done when:` success line, then the full task body. Objective and success are
8
+ * collapsed to a single line each and capped under the backend's 4000-char goal
9
+ * limit. The full detail stays in the body.
10
+ */
11
+ export declare function formatGoalPrompt(input: {
12
+ goal: string;
13
+ success: string;
14
+ body: string;
15
+ }): string;
16
+ /**
17
+ * Derive a one-line objective from a task statement when none is given: the
18
+ * first non-empty line, trimmed for prompt budget. If the task is already in
19
+ * goal format (a prior wrap), recover the real objective from the goal line.
20
+ */
21
+ export declare function deriveGoal(task: string): string;
22
+ /**
23
+ * Recover the success / done-when condition from a task that is already in
24
+ * goal format (leads with `Objective: ...`, legacy `Goal: ...`, or legacy
25
+ * `/goal ...`, then `Done when: ...`).
26
+ * Returns undefined when no `Done when:` line is present.
27
+ */
28
+ export declare function extractSuccess(task: string): string | undefined;
29
+ /**
30
+ * Derive a success condition. Prefer caller-supplied criteria (e.g. the
31
+ * acceptance criteria); otherwise fall back to the default stopping condition.
32
+ */
33
+ export declare function deriveSuccess(criteria?: string[]): string;
package/dist/goal.js ADDED
@@ -0,0 +1,95 @@
1
+ // ---------------------------------------------------------------------------
2
+ // The launch-goal convention. Every agent Rudder spawns is prompted with a clear
3
+ // OBJECTIVE plus an explicit verifiable SUCCESS / stopping condition. Do not
4
+ // launch a process with a leading `/goal` slash command or a literal `Goal:`
5
+ // header: Claude Code can parse goal-looking launch text as a goal condition and
6
+ // reject a long worker brief. Runtime user-typed `/goal` forwarding is handled elsewhere.
7
+ // Launch prompts lead with:
8
+ //
9
+ // Objective: <objective>
10
+ // Done when: <success condition>
11
+ //
12
+ // <full task details / context>
13
+ //
14
+ // This module is the single canonical formatter (formatGoalPrompt) plus the
15
+ // derived-default helpers used wherever a worker prompt is built.
16
+ // ---------------------------------------------------------------------------
17
+ // Used when the planner/caller did not supply an explicit success condition.
18
+ export const DEFAULT_SUCCESS = "the task is implemented and its own verification passes";
19
+ // Keep the launch goal lines under the backend's slash-command limit too, because
20
+ // legacy prompts can still be recovered from `/goal` and because users can forward
21
+ // `/goal` manually. Mirrors `MAX_GOAL_LINE_CHARS` / `cap_goal_line` in native/src/tasks.rs.
22
+ export const MAX_GOAL_LINE_CHARS = 3000;
23
+ export function capGoalLine(text) {
24
+ const chars = [...text];
25
+ if (chars.length <= MAX_GOAL_LINE_CHARS) {
26
+ return text;
27
+ }
28
+ return `${chars.slice(0, MAX_GOAL_LINE_CHARS - 1).join("").replace(/\s+$/, "")}…`;
29
+ }
30
+ export function normalizeGoalLine(value, fallback) {
31
+ return capGoalLine(oneLine(value) || oneLine(fallback) || "complete the task");
32
+ }
33
+ /**
34
+ * Build a launch prompt in objective format. Leads with `Objective: <objective>`, then a
35
+ * `Done when:` success line, then the full task body. Objective and success are
36
+ * collapsed to a single line each and capped under the backend's 4000-char goal
37
+ * limit. The full detail stays in the body.
38
+ */
39
+ export function formatGoalPrompt(input) {
40
+ const goal = normalizeGoalLine(input.goal, input.body || "complete the task");
41
+ const success = normalizeGoalLine(input.success, DEFAULT_SUCCESS);
42
+ const body = input.body.trim();
43
+ const header = `Objective: ${goal}\nDone when: ${success}`;
44
+ return body ? `${header}\n\n${body}` : header;
45
+ }
46
+ /**
47
+ * Derive a one-line objective from a task statement when none is given: the
48
+ * first non-empty line, trimmed for prompt budget. If the task is already in
49
+ * goal format (a prior wrap), recover the real objective from the goal line.
50
+ */
51
+ export function deriveGoal(task) {
52
+ const lines = task.split(/\r?\n/).map((line) => line.trim());
53
+ const goalLine = lines.find((line) => /^\/goal(?:\s+|$)/.test(line));
54
+ if (goalLine) {
55
+ return oneLine(goalLine.replace(/^\/goal(?:\s+|$)/, "")).slice(0, 200) || "complete the task";
56
+ }
57
+ const plainGoalLine = lines.find((line) => /^(?:goal|objective):/i.test(line));
58
+ if (plainGoalLine) {
59
+ return oneLine(plainGoalLine.replace(/^(?:goal|objective):/i, "")).slice(0, 200) || "complete the task";
60
+ }
61
+ const first = lines.find((line) => line.length > 0);
62
+ return oneLine(first ?? task).slice(0, 200) || "complete the task";
63
+ }
64
+ /**
65
+ * Recover the success / done-when condition from a task that is already in
66
+ * goal format (leads with `Objective: ...`, legacy `Goal: ...`, or legacy
67
+ * `/goal ...`, then `Done when: ...`).
68
+ * Returns undefined when no `Done when:` line is present.
69
+ */
70
+ export function extractSuccess(task) {
71
+ const line = task
72
+ .split(/\r?\n/)
73
+ .map((entry) => entry.trim())
74
+ .find((entry) => /^done when:/i.test(entry));
75
+ if (!line) {
76
+ return undefined;
77
+ }
78
+ const value = oneLine(line.replace(/^done when:/i, ""));
79
+ return value || undefined;
80
+ }
81
+ /**
82
+ * Derive a success condition. Prefer caller-supplied criteria (e.g. the
83
+ * acceptance criteria); otherwise fall back to the default stopping condition.
84
+ */
85
+ export function deriveSuccess(criteria) {
86
+ const joined = (criteria ?? [])
87
+ .map((item) => item.trim())
88
+ .filter(Boolean)
89
+ .join("; ");
90
+ return joined ? oneLine(joined) : DEFAULT_SUCCESS;
91
+ }
92
+ function oneLine(value) {
93
+ return value.split(/\s+/).filter(Boolean).join(" ").trim();
94
+ }
95
+ //# sourceMappingURL=goal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal.js","sourceRoot":"","sources":["../src/goal.ts"],"names":[],"mappings":"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"}