@exla/rudder 0.0.0-stage → 3.4.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 (181) 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 +392 -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 +48 -0
  36. package/dist/cloud.js +4596 -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/paste-bridge.d.ts +36 -0
  135. package/dist/paste-bridge.js +279 -0
  136. package/dist/paste-bridge.js.map +1 -0
  137. package/dist/plan-mode.d.ts +2 -0
  138. package/dist/plan-mode.js +22 -0
  139. package/dist/plan-mode.js.map +1 -0
  140. package/dist/planner.d.ts +27 -0
  141. package/dist/planner.js +587 -0
  142. package/dist/planner.js.map +1 -0
  143. package/dist/predict.d.ts +67 -0
  144. package/dist/predict.js +369 -0
  145. package/dist/predict.js.map +1 -0
  146. package/dist/report.d.ts +74 -0
  147. package/dist/report.js +412 -0
  148. package/dist/report.js.map +1 -0
  149. package/dist/rudder-md.d.ts +33 -0
  150. package/dist/rudder-md.js +142 -0
  151. package/dist/rudder-md.js.map +1 -0
  152. package/dist/run-manager.d.ts +62 -0
  153. package/dist/run-manager.js +1400 -0
  154. package/dist/run-manager.js.map +1 -0
  155. package/dist/scheduler.d.ts +128 -0
  156. package/dist/scheduler.js +955 -0
  157. package/dist/scheduler.js.map +1 -0
  158. package/dist/state.d.ts +127 -0
  159. package/dist/state.js +704 -0
  160. package/dist/state.js.map +1 -0
  161. package/dist/surfaces.d.ts +91 -0
  162. package/dist/surfaces.js +460 -0
  163. package/dist/surfaces.js.map +1 -0
  164. package/dist/task-summary.d.ts +30 -0
  165. package/dist/task-summary.js +472 -0
  166. package/dist/task-summary.js.map +1 -0
  167. package/dist/types.d.ts +492 -0
  168. package/dist/types.js +2 -0
  169. package/dist/types.js.map +1 -0
  170. package/dist/usage.d.ts +198 -0
  171. package/dist/usage.js +830 -0
  172. package/dist/usage.js.map +1 -0
  173. package/dist/util.d.ts +73 -0
  174. package/dist/util.js +399 -0
  175. package/dist/util.js.map +1 -0
  176. package/dist/version-check.d.ts +16 -0
  177. package/dist/version-check.js +269 -0
  178. package/dist/version-check.js.map +1 -0
  179. package/package.json +68 -4
  180. package/scripts/copy-native.mjs +89 -0
  181. package/scripts/postinstall.mjs +34 -0
@@ -0,0 +1,247 @@
1
+ // Bring one checkout up to date with GitHub, which is the source of truth
2
+ // between the laptop and the home machine: fetch, then move the checkout to the
3
+ // newest default branch only when that cannot lose or tangle work (nothing
4
+ // uncommitted, nothing unpushed). Anything else is reported, never forced.
5
+ //
6
+ // `rudder cloud sync` runs this here and asks the home machine to run the same
7
+ // code (`rudder __sync-checkout`) in its clone of the repo.
8
+ //
9
+ // Work GitHub does not have yet (the jj working copy and unpushed changes below
10
+ // it) travels between the two machines directly, as a git bundle through the
11
+ // control plane, never through GitHub: jj tracks every file that is not
12
+ // gitignored, so a pushed work-in-progress branch could carry a stray secret.
13
+ // The receiving side moves onto the incoming work only when that loses
14
+ // nothing (it has no work of its own, or its work is already in the incoming
15
+ // history); otherwise both stay, the incoming one at bookmark rudder-sync/<from>.
16
+ import fs from "node:fs";
17
+ import path from "node:path";
18
+ import { runCommand } from "./util.js";
19
+ import { ensureJj } from "./jj.js";
20
+ async function run(cwd, command, args) {
21
+ return await runCommand(command, args, { cwd, allowFailure: true });
22
+ }
23
+ async function defaultBranch(root) {
24
+ const head = await run(root, "git", ["symbolic-ref", "--short", "refs/remotes/origin/HEAD"]);
25
+ const name = head.code === 0 ? head.stdout.trim().replace(/^origin\//, "") : "";
26
+ if (name) {
27
+ return name;
28
+ }
29
+ for (const candidate of ["main", "master"]) {
30
+ if ((await run(root, "git", ["rev-parse", "--verify", "--quiet", `refs/remotes/origin/${candidate}`])).code === 0) {
31
+ return candidate;
32
+ }
33
+ }
34
+ return "main";
35
+ }
36
+ function count(text) {
37
+ return text.split("\n").filter((line) => line.trim()).length;
38
+ }
39
+ export async function syncCheckout(root) {
40
+ const vcs = fs.existsSync(path.join(root, ".jj")) ? "jj" : "git";
41
+ let fetch = vcs === "jj"
42
+ ? await run(root, "jj", ["git", "fetch"])
43
+ : await run(root, "git", ["fetch", "--prune", "origin"]);
44
+ if (vcs === "jj" && fetch.code !== 0) {
45
+ // jj's fetch needs git >= 2.41 (the cloud image's Debian git is older):
46
+ // fetch with git, then let jj import the moved refs.
47
+ fetch = await run(root, "git", ["fetch", "--prune", "origin"]);
48
+ if (fetch.code === 0) {
49
+ await run(root, "jj", ["git", "import"]);
50
+ }
51
+ }
52
+ const fetched = fetch.code === 0;
53
+ const fetchError = fetched ? undefined : (fetch.stderr || fetch.stdout).trim().split("\n").pop();
54
+ const branch = await defaultBranch(root);
55
+ const report = { root, vcs, branch, fetched, fetchError, behind: 0, ahead: 0, dirty: false, moved: false, note: "" };
56
+ return vcs === "jj" ? await syncJj(root, report) : await syncGit(root, report);
57
+ }
58
+ async function syncGit(root, report) {
59
+ const remote = `origin/${report.branch}`;
60
+ const current = (await run(root, "git", ["rev-parse", "--abbrev-ref", "HEAD"])).stdout.trim();
61
+ report.dirty = (await run(root, "git", ["status", "--porcelain"])).stdout.trim().length > 0;
62
+ const counts = await run(root, "git", ["rev-list", "--left-right", "--count", `HEAD...${remote}`]);
63
+ const [ahead, behind] = counts.stdout.trim().split(/\s+/).map((value) => Number(value) || 0);
64
+ report.ahead = ahead ?? 0;
65
+ report.behind = behind ?? 0;
66
+ if (report.behind === 0) {
67
+ const parts = [report.ahead > 0 ? `${report.ahead} unpushed commit(s) on ${current}` : "", report.dirty ? "uncommitted edits" : ""].filter(Boolean);
68
+ report.note = parts.length > 0 ? `up to date with ${report.branch}; ${parts.join(", ")}` : "up to date";
69
+ return report;
70
+ }
71
+ if (current !== report.branch) {
72
+ report.note = `on ${current}, not ${report.branch}; left alone`;
73
+ }
74
+ else if (report.dirty) {
75
+ report.note = `${report.behind} new commit(s) on ${report.branch}, but there are uncommitted changes; not pulled`;
76
+ }
77
+ else if (report.ahead > 0) {
78
+ report.note = `${report.branch} and this checkout have diverged (${report.ahead} local, ${report.behind} remote); not pulled`;
79
+ }
80
+ else {
81
+ const merge = await run(root, "git", ["merge", "--ff-only", remote]);
82
+ report.moved = merge.code === 0;
83
+ report.note = report.moved ? `pulled ${report.behind} new commit(s)` : `pull failed: ${(merge.stderr || merge.stdout).trim().split("\n").pop()}`;
84
+ }
85
+ return report;
86
+ }
87
+ async function syncJj(root, report) {
88
+ const trunk = `${report.branch}@origin`;
89
+ const jj = async (args) => await run(root, "jj", ["--ignore-working-copy", ...args]);
90
+ // Snapshot the working copy once so "empty" below is the truth.
91
+ await run(root, "jj", ["status"]);
92
+ const empty = (await jj(["log", "-r", "@", "--no-graph", "-T", 'if(empty, "1", "0")'])).stdout.trim() === "1";
93
+ report.dirty = !empty;
94
+ report.behind = count((await jj(["log", "-r", `::${trunk} ~ ::@`, "--no-graph", "-T", 'commit_id ++ "\\n"'])).stdout);
95
+ // Unpushed: committed changes below @ that the remote branch does not have
96
+ // (@ itself is the uncommitted working copy, reported as dirty).
97
+ report.ahead = count((await jj(["log", "-r", `(::@- ~ ::${trunk}) ~ empty()`, "--no-graph", "-T", 'commit_id ++ "\\n"'])).stdout);
98
+ if (report.behind === 0) {
99
+ const parts = [report.ahead > 0 ? `${report.ahead} unpushed change(s)` : "", report.dirty ? "uncommitted edits in the working copy" : ""].filter(Boolean);
100
+ report.note = parts.length > 0 ? `up to date with ${report.branch}; ${parts.join(", ")}` : "up to date";
101
+ return report;
102
+ }
103
+ if (!empty) {
104
+ report.note = `${report.behind} new commit(s) on ${report.branch}, but the working copy has uncommitted edits; not moved (\`jj rebase -d ${trunk}\` when ready)`;
105
+ }
106
+ else if (report.ahead > 0) {
107
+ report.note = `${report.behind} new commit(s) on ${report.branch}, and ${report.ahead} unpushed change(s) here; not moved`;
108
+ }
109
+ else {
110
+ // An empty, undescribed @ is abandoned by jj when the working copy moves.
111
+ const moved = await run(root, "jj", ["new", trunk]);
112
+ report.moved = moved.code === 0;
113
+ report.note = report.moved ? `moved to the newest ${report.branch} (${report.behind} new commit(s))` : `move failed: ${(moved.stderr || moved.stdout).trim().split("\n").pop()}`;
114
+ }
115
+ return report;
116
+ }
117
+ export function describeSync(where, report) {
118
+ const fetch = report.fetched ? "" : ` (fetch failed: ${report.fetchError ?? "unknown error"})`;
119
+ const lines = [`${where}: ${report.note}${fetch}`];
120
+ if (report.work?.received) {
121
+ lines.push(` received: ${report.work.received.note}`);
122
+ }
123
+ if (report.work?.sent) {
124
+ lines.push(` sent: ${report.work.sent.commits} change(s) not on GitHub yet`);
125
+ }
126
+ return lines.join("\n");
127
+ }
128
+ const OUT_REF = "refs/rudder-sync/out";
129
+ const SIDE_RE = /^[a-z][a-z0-9-]{0,30}$/;
130
+ async function trunkCommit(root) {
131
+ const branch = await defaultBranch(root);
132
+ const sha = await run(root, "git", ["rev-parse", "--verify", "--quiet", `refs/remotes/origin/${branch}`]);
133
+ return { branch, sha: sha.code === 0 ? sha.stdout.trim() : null };
134
+ }
135
+ async function jjOne(root, revset) {
136
+ const out = await run(root, "jj", ["--ignore-working-copy", "log", "-r", revset, "--no-graph", "-T", 'commit_id ++ "\\n"']);
137
+ return out.code === 0 ? out.stdout.trim().split("\n")[0]?.trim() ?? "" : "";
138
+ }
139
+ // Does this side hold work GitHub lacks? Returns its head: the working copy when
140
+ // it has edits, else the newest unpushed change below it.
141
+ async function workHead(root, trunk) {
142
+ await run(root, "jj", ["status"]);
143
+ const empty = (await run(root, "jj", ["--ignore-working-copy", "log", "-r", "@", "--no-graph", "-T", 'if(empty, "1", "0")'])).stdout.trim() === "1";
144
+ if (!empty) {
145
+ return { head: await jjOne(root, "@"), empty };
146
+ }
147
+ const unpushed = await jjOne(root, `(::@- ~ ::${trunk}) ~ empty()`);
148
+ return unpushed ? { head: await jjOne(root, "@-"), empty } : null;
149
+ }
150
+ /**
151
+ * Bundle this side's unpushed work into `outFile`. A working copy with edits
152
+ * is checkpointed first (`jj new`), so later edits here land in a CHILD of the
153
+ * sent change and the other side can still fast-forward to them next time.
154
+ */
155
+ export async function exportWork(root, outFile) {
156
+ if (!fs.existsSync(path.join(root, ".jj"))) {
157
+ return null;
158
+ }
159
+ const { branch, sha } = await trunkCommit(root);
160
+ const work = await workHead(root, `${branch}@origin`);
161
+ if (!work?.head) {
162
+ return null;
163
+ }
164
+ if (!work.empty) {
165
+ await run(root, "jj", ["new"]);
166
+ }
167
+ await run(root, "git", ["update-ref", OUT_REF, work.head]);
168
+ try {
169
+ const args = ["bundle", "create", outFile, OUT_REF, ...(sha ? ["--not", sha] : [])];
170
+ const bundled = await run(root, "git", args);
171
+ if (bundled.code !== 0) {
172
+ throw new Error(`git bundle failed: ${(bundled.stderr || bundled.stdout).trim().split("\n").pop()}`);
173
+ }
174
+ }
175
+ finally {
176
+ await run(root, "git", ["update-ref", "-d", OUT_REF]);
177
+ }
178
+ const counted = await run(root, "git", ["rev-list", "--count", work.head, ...(sha ? ["--not", sha] : [])]);
179
+ return { head: work.head, commits: Number(counted.stdout.trim()) || 0 };
180
+ }
181
+ // Every file the working copy changed reads the same in `head`.
182
+ async function editsContainedIn(root, head) {
183
+ const listed = await run(root, "jj", ["--ignore-working-copy", "diff", "-r", "@", "--name-only"]);
184
+ const files = listed.stdout.split("\n").map((line) => line.trim()).filter(Boolean);
185
+ if (listed.code !== 0 || files.length > 200) {
186
+ return false;
187
+ }
188
+ for (const file of files) {
189
+ const fileset = `root-file:${JSON.stringify(file)}`;
190
+ const here = await run(root, "jj", ["--ignore-working-copy", "file", "show", "-r", "@", fileset]);
191
+ const there = await run(root, "jj", ["--ignore-working-copy", "file", "show", "-r", head, fileset]);
192
+ if ((here.code === 0) !== (there.code === 0) || here.stdout !== there.stdout) {
193
+ return false;
194
+ }
195
+ }
196
+ return true;
197
+ }
198
+ /** Take the other side's work from a bundle made by exportWork. */
199
+ export async function importWork(root, bundle, head, from) {
200
+ const report = (outcome, note) => ({ from, head, outcome, note });
201
+ if (!SIDE_RE.test(from) || !/^[0-9a-f]{40}$/.test(head)) {
202
+ return report("failed", "bad sync request");
203
+ }
204
+ if (!fs.existsSync(path.join(root, ".jj"))) {
205
+ // Plain colocate: Rudder's ignore entries would be an edit of this side's own.
206
+ ensureJj();
207
+ await run(root, "jj", ["git", "init", "--colocate"]);
208
+ }
209
+ const bookmark = `rudder-sync/${from}`;
210
+ const fetched = await run(root, "git", ["fetch", "-q", bundle, `+${OUT_REF}:refs/heads/${bookmark}`]);
211
+ if (fetched.code !== 0) {
212
+ return report("failed", `could not read the work from ${from}: ${(fetched.stderr || fetched.stdout).trim().split("\n").pop()}`);
213
+ }
214
+ await run(root, "jj", ["git", "import"]);
215
+ const { branch } = await trunkCommit(root);
216
+ const trunk = `${branch}@origin`;
217
+ const drop = async () => {
218
+ await run(root, "jj", ["bookmark", "delete", bookmark]);
219
+ };
220
+ if (await jjOne(root, `${head} & ::${trunk}`)) {
221
+ await drop();
222
+ return report("have", "already on GitHub");
223
+ }
224
+ const mine = await workHead(root, trunk);
225
+ if (await jjOne(root, `${head} & ::@`)) {
226
+ await drop();
227
+ return report("have", "already here");
228
+ }
229
+ // The working copy's own edits count as work only when the incoming history
230
+ // lacks them (Rudder writing its .gitignore entries into a fresh clone does not).
231
+ const at = await jjOne(root, "@");
232
+ const parentHeld = !(await jjOne(root, `(::@- ~ ::${trunk}) ~ empty()`)) || !!(await jjOne(root, `@- & ::${head}`));
233
+ const subsumed = !!mine && !mine.empty && parentHeld && (await editsContainedIn(root, head));
234
+ if (!mine || subsumed || (await jjOne(root, `${mine.head} & ::${head}`))) {
235
+ const moved = await run(root, "jj", ["new", head]);
236
+ if (moved.code !== 0) {
237
+ return report("failed", `could not move onto it: ${(moved.stderr || moved.stdout).trim().split("\n").pop()}`);
238
+ }
239
+ if (subsumed) {
240
+ await run(root, "jj", ["abandon", at]);
241
+ }
242
+ await drop();
243
+ return report("moved", `picked up the work from ${from}`);
244
+ }
245
+ return report("diverged", `both sides have their own edits; kept both. ${from === "cloud" ? "The cloud's" : `The ${from}'s`} version is bookmark ${bookmark} (\`jj new ${bookmark}\` to switch to it, \`jj diff --from @ --to ${bookmark}\` to compare)`);
246
+ }
247
+ //# sourceMappingURL=checkout-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkout-sync.js","sourceRoot":"","sources":["../src/checkout-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { type MigrationCandidate, type MigrationPlan } from "./migration.js";
2
+ import { type MoveCandidate } from "./move-home.js";
3
+ import type { JsonValue } from "./types.js";
4
+ type CloudCommandOptions = {
5
+ json?: boolean;
6
+ homePaths?: string[];
7
+ sshHost?: string;
8
+ noAttach?: boolean;
9
+ quietBanner?: boolean;
10
+ latencyProbe?: boolean;
11
+ /** Coming back to a repo already open on the home machine: skip the first-run offers. */
12
+ reattach?: boolean;
13
+ /** Skip the y/N confirmation of a destructive command (`--yes`/`--force`). */
14
+ yes?: boolean;
15
+ };
16
+ type CloudClient = {
17
+ baseUrl: string;
18
+ request<T>(pathOrUrl: string, init: {
19
+ method: string;
20
+ body?: JsonValue;
21
+ }): Promise<T>;
22
+ download(pathname: string): Promise<Buffer>;
23
+ };
24
+ export declare function runCloudCommand(command: string, args: string[], options?: CloudCommandOptions): Promise<void>;
25
+ /**
26
+ * Scope a fleet migration plan down to one run: only `runId` moves, every
27
+ * other candidate stays local. Fleet migration classifies EVERY non-terminal
28
+ * run with a workspace as movable, so without this a single-run handoff would
29
+ * drag the rest of the fleet's records into the snapshot marked "migrate" —
30
+ * and the cloud dashboard would resume agents that are still running locally.
31
+ */
32
+ export declare function buildSingleRunPlan(candidates: MigrationCandidate[], runId: string): MigrationPlan;
33
+ export declare function captureCloudEnv(includeAll?: boolean): Record<string, string>;
34
+ /** Copy project dotenv files only for explicit multi-agent workspace migration. */
35
+ export declare function copyProjectEnvFiles(sourceRoot: string, targetRoot: string): Promise<number>;
36
+ export declare function copyRudderState(repoRoot: string, repoStage: string, onlyRuns?: string[]): Promise<{
37
+ runs: number;
38
+ files: string[];
39
+ }>;
40
+ /** Bundle, upload, wait for the home machine to stage them, then hand the local records over. */
41
+ export declare function moveAgentsToHome(client: CloudClient, repoRoot: string, slug: string, candidates: MoveCandidate[], options: CloudCommandOptions): Promise<{
42
+ adopted: string[];
43
+ failed: Array<{
44
+ runId: string;
45
+ error: string;
46
+ }>;
47
+ }>;
48
+ export {};