@viraatdas/rudder 3.4.0 → 3.5.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.
Binary file
@@ -0,0 +1,11 @@
1
+ export type CloudRepoSummary = {
2
+ repo: string;
3
+ agents: number;
4
+ };
5
+ export type OnboardingOptions = {
6
+ json?: boolean;
7
+ /** The account's repos on its cloud machine; null when not signed in. */
8
+ cloudRepos?: () => Promise<CloudRepoSummary[] | null>;
9
+ };
10
+ export declare function onboardingInteractive(json?: boolean): boolean;
11
+ export declare function runLaptopOnboarding(options?: OnboardingOptions): Promise<void>;
@@ -0,0 +1,111 @@
1
+ // A new computer, right after `rudder login` (and from `rudder doctor`): can it
2
+ // run agents, and what is already waiting in the cloud? Claude Code and Codex
3
+ // are offered for install and their own sign-in, at a y/N prompt, only on an
4
+ // interactive terminal. Their logins are never copied from the cloud vault:
5
+ // both rotate refresh tokens, and a shared copy signs one side out.
6
+ import { spawnSync } from "node:child_process";
7
+ import readline from "node:readline/promises";
8
+ import { commandEnv, commandExists } from "./util.js";
9
+ const AGENT_CLIS = [
10
+ {
11
+ command: "claude",
12
+ label: "Claude Code",
13
+ install: ["npm", "i", "-g", "@anthropic-ai/claude-code"],
14
+ login: ["claude", "auth", "login"],
15
+ signedIn: () => {
16
+ const status = spawnSync("claude", ["auth", "status", "--json"], { encoding: "utf8", timeout: 20_000, env: commandEnv() });
17
+ try {
18
+ return Boolean(JSON.parse(status.stdout).loggedIn);
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ },
24
+ },
25
+ {
26
+ command: "codex",
27
+ label: "Codex",
28
+ install: ["npm", "i", "-g", "@openai/codex"],
29
+ login: ["codex", "login"],
30
+ signedIn: () => spawnSync("codex", ["login", "status"], { stdio: "ignore", timeout: 20_000, env: commandEnv() }).status === 0,
31
+ },
32
+ ];
33
+ export function onboardingInteractive(json) {
34
+ return !json && Boolean(process.stdin.isTTY && process.stdout.isTTY) && process.env.RUDDER_SKIP_ONBOARDING !== "1";
35
+ }
36
+ async function confirm(question) {
37
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
38
+ try {
39
+ return /^y(es)?$/i.test((await rl.question(`${question} [y/N] `)).trim());
40
+ }
41
+ finally {
42
+ rl.close();
43
+ }
44
+ }
45
+ function run(argv) {
46
+ console.log(`$ ${argv.join(" ")}`);
47
+ return spawnSync(argv[0], argv.slice(1), { stdio: "inherit", env: commandEnv() }).status === 0;
48
+ }
49
+ async function offerInstall(cli) {
50
+ if (!(await confirm(`Install ${cli.label} now (${cli.install.join(" ")})?`))) {
51
+ return false;
52
+ }
53
+ if (!run(cli.install) || !commandExists(cli.command)) {
54
+ console.log(`${cli.label} did not install. Try \`${cli.install.join(" ")}\` yourself (it may need sudo, or a Node version manager).`);
55
+ return false;
56
+ }
57
+ return true;
58
+ }
59
+ async function offerLogin(cli) {
60
+ if (await confirm(`Sign in to ${cli.label} now (${cli.login.join(" ")})?`)) {
61
+ run(cli.login);
62
+ }
63
+ else {
64
+ console.log(`Later: \`${cli.login.join(" ")}\`.`);
65
+ }
66
+ }
67
+ export async function runLaptopOnboarding(options = {}) {
68
+ if (!onboardingInteractive(options.json)) {
69
+ return;
70
+ }
71
+ console.log("");
72
+ const installed = AGENT_CLIS.filter((cli) => commandExists(cli.command));
73
+ if (installed.length === 0) {
74
+ console.log("Rudder runs agents through Claude Code or Codex, and neither is installed here.");
75
+ for (const cli of AGENT_CLIS) {
76
+ if (await offerInstall(cli)) {
77
+ await offerLogin(cli);
78
+ }
79
+ }
80
+ }
81
+ else {
82
+ for (const cli of installed) {
83
+ if (cli.signedIn()) {
84
+ console.log(`${cli.label}: signed in.`);
85
+ }
86
+ else {
87
+ console.log(`${cli.label}: installed, not signed in on this computer.`);
88
+ await offerLogin(cli);
89
+ }
90
+ }
91
+ }
92
+ if (!AGENT_CLIS.some((cli) => commandExists(cli.command))) {
93
+ console.log("Install one later with `npm i -g @anthropic-ai/claude-code` or `npm i -g @openai/codex`.");
94
+ }
95
+ const repos = options.cloudRepos ? await options.cloudRepos().catch(() => null) : null;
96
+ if (!repos) {
97
+ return;
98
+ }
99
+ console.log("");
100
+ if (repos.length === 0) {
101
+ console.log("Nothing on your cloud machine yet. Run `rudder cloud` in a repo here, or add one from the phone app.");
102
+ return;
103
+ }
104
+ console.log(`On your cloud machine (${repos.length} ${repos.length === 1 ? "repo" : "repos"}):`);
105
+ for (const repo of repos) {
106
+ console.log(` ${repo.repo}${repo.agents ? ` ${repo.agents} ${repo.agents === 1 ? "agent" : "agents"}` : ""}`);
107
+ }
108
+ const example = repos[0].repo.split("/").pop();
109
+ console.log(`\`rudder cloud sync ${example}\` clones one into ~/code with its work.`);
110
+ }
111
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../src/onboarding.ts"],"names":[],"mappings":"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"}
package/dist/qr.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ export type QrLevel = "L" | "M";
2
+ /** The module matrix (true = dark), without a quiet zone. */
3
+ export declare function encodeQr(text: string, level?: QrLevel): boolean[][];
4
+ /**
5
+ * The code drawn with half blocks, two module rows per line, black on white
6
+ * whatever the terminal's own colors are, with a quiet zone around it.
7
+ */
8
+ export declare function renderQrForTerminal(text: string, options?: {
9
+ level?: QrLevel;
10
+ quiet?: number;
11
+ indent?: string;
12
+ }): string;
13
+ export declare function maskBit(mask: number, x: number, y: number): boolean;
package/dist/qr.js ADDED
@@ -0,0 +1,377 @@
1
+ // A small QR code encoder for the terminal: byte mode, error correction L or
2
+ // M, versions 1 to 10 (up to ~270 bytes), which covers the approve link that
3
+ // `rudder login` prints. No dependency: the algorithm follows ISO/IEC 18004
4
+ // the same way Project Nayuki's reference encoder does.
5
+ const LEVEL_FORMAT_BITS = { L: 1, M: 0 };
6
+ // Index = version. Error correction codewords per block, and number of blocks.
7
+ const ECC_PER_BLOCK = {
8
+ L: [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18],
9
+ M: [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26],
10
+ };
11
+ const ECC_BLOCKS = {
12
+ L: [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4],
13
+ M: [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5],
14
+ };
15
+ const MAX_VERSION = 10;
16
+ /** The module matrix (true = dark), without a quiet zone. */
17
+ export function encodeQr(text, level = "M") {
18
+ const data = Buffer.from(text, "utf8");
19
+ let version = 1;
20
+ for (; version <= MAX_VERSION; version += 1) {
21
+ // Mode (4) + count (8 or 16 bits) + payload.
22
+ const countBits = version <= 9 ? 8 : 16;
23
+ if (4 + countBits + data.length * 8 <= dataCodewords(version, level) * 8) {
24
+ break;
25
+ }
26
+ }
27
+ if (version > MAX_VERSION) {
28
+ throw new Error("text is too long for a terminal QR code");
29
+ }
30
+ const capacityBits = dataCodewords(version, level) * 8;
31
+ const bits = [];
32
+ const push = (value, length) => {
33
+ for (let i = length - 1; i >= 0; i -= 1) {
34
+ bits.push((value >>> i) & 1);
35
+ }
36
+ };
37
+ push(0b0100, 4);
38
+ push(data.length, version <= 9 ? 8 : 16);
39
+ for (const byte of data) {
40
+ push(byte, 8);
41
+ }
42
+ push(0, Math.min(4, capacityBits - bits.length));
43
+ push(0, (8 - (bits.length % 8)) % 8);
44
+ for (let pad = 0xec; bits.length < capacityBits; pad ^= 0xec ^ 0x11) {
45
+ push(pad, 8);
46
+ }
47
+ const codewords = [];
48
+ for (let i = 0; i < bits.length; i += 8) {
49
+ let byte = 0;
50
+ for (let j = 0; j < 8; j += 1) {
51
+ byte = (byte << 1) | bits[i + j];
52
+ }
53
+ codewords.push(byte);
54
+ }
55
+ const qr = new Matrix(version);
56
+ qr.drawFunctionPatterns();
57
+ qr.drawCodewords(interleaveWithEcc(codewords, version, level));
58
+ let best = 0;
59
+ let bestPenalty = Infinity;
60
+ for (let mask = 0; mask < 8; mask += 1) {
61
+ qr.applyMask(mask);
62
+ qr.drawFormatBits(level, mask);
63
+ const penalty = qr.penalty();
64
+ if (penalty < bestPenalty) {
65
+ best = mask;
66
+ bestPenalty = penalty;
67
+ }
68
+ qr.applyMask(mask); // XOR undoes it
69
+ }
70
+ qr.applyMask(best);
71
+ qr.drawFormatBits(level, best);
72
+ return qr.modules;
73
+ }
74
+ /**
75
+ * The code drawn with half blocks, two module rows per line, black on white
76
+ * whatever the terminal's own colors are, with a quiet zone around it.
77
+ */
78
+ export function renderQrForTerminal(text, options = {}) {
79
+ const modules = encodeQr(text, options.level ?? "M");
80
+ const quiet = options.quiet ?? 2;
81
+ const size = modules.length + quiet * 2;
82
+ const dark = (x, y) => {
83
+ const mx = x - quiet;
84
+ const my = y - quiet;
85
+ return my >= 0 && my < modules.length && mx >= 0 && mx < modules.length && modules[my][mx];
86
+ };
87
+ const lines = [];
88
+ for (let y = 0; y < size; y += 2) {
89
+ let line = "";
90
+ for (let x = 0; x < size; x += 1) {
91
+ const top = dark(x, y);
92
+ const bottom = y + 1 < size && dark(x, y + 1);
93
+ line += top && bottom ? "█" : top ? "▀" : bottom ? "▄" : " ";
94
+ }
95
+ lines.push(`${options.indent ?? ""}\x1b[30;47m${line}\x1b[0m`);
96
+ }
97
+ return lines.join("\n");
98
+ }
99
+ function rawDataModules(version) {
100
+ let result = (16 * version + 128) * version + 64;
101
+ if (version >= 2) {
102
+ const align = Math.floor(version / 7) + 2;
103
+ result -= (25 * align - 10) * align - 55;
104
+ if (version >= 7) {
105
+ result -= 36;
106
+ }
107
+ }
108
+ return result;
109
+ }
110
+ function dataCodewords(version, level) {
111
+ return Math.floor(rawDataModules(version) / 8) - ECC_PER_BLOCK[level][version] * ECC_BLOCKS[level][version];
112
+ }
113
+ function interleaveWithEcc(data, version, level) {
114
+ const blockCount = ECC_BLOCKS[level][version];
115
+ const eccLength = ECC_PER_BLOCK[level][version];
116
+ const rawCodewords = Math.floor(rawDataModules(version) / 8);
117
+ const shortBlocks = blockCount - (rawCodewords % blockCount);
118
+ const shortLength = Math.floor(rawCodewords / blockCount);
119
+ const divisor = reedSolomonDivisor(eccLength);
120
+ const blocks = [];
121
+ for (let i = 0, k = 0; i < blockCount; i += 1) {
122
+ const length = shortLength - eccLength + (i < shortBlocks ? 0 : 1);
123
+ const block = data.slice(k, k + length);
124
+ k += length;
125
+ const ecc = reedSolomonRemainder(block, divisor);
126
+ if (i < shortBlocks) {
127
+ block.push(0); // placeholder so every block has the same length
128
+ }
129
+ blocks.push(block.concat(ecc));
130
+ }
131
+ const result = [];
132
+ for (let i = 0; i < blocks[0].length; i += 1) {
133
+ blocks.forEach((block, j) => {
134
+ if (i !== shortLength - eccLength || j >= shortBlocks) {
135
+ result.push(block[i]);
136
+ }
137
+ });
138
+ }
139
+ return result;
140
+ }
141
+ function gfMultiply(x, y) {
142
+ let z = 0;
143
+ for (let i = 7; i >= 0; i -= 1) {
144
+ z = (z << 1) ^ ((z >>> 7) * 0x11d);
145
+ z ^= ((y >>> i) & 1) * x;
146
+ }
147
+ return z & 0xff;
148
+ }
149
+ function reedSolomonDivisor(degree) {
150
+ const result = new Array(degree).fill(0);
151
+ result[degree - 1] = 1;
152
+ let root = 1;
153
+ for (let i = 0; i < degree; i += 1) {
154
+ for (let j = 0; j < result.length; j += 1) {
155
+ result[j] = gfMultiply(result[j], root);
156
+ if (j + 1 < result.length) {
157
+ result[j] ^= result[j + 1];
158
+ }
159
+ }
160
+ root = gfMultiply(root, 0x02);
161
+ }
162
+ return result;
163
+ }
164
+ function reedSolomonRemainder(data, divisor) {
165
+ const result = divisor.map(() => 0);
166
+ for (const byte of data) {
167
+ const factor = byte ^ result.shift();
168
+ result.push(0);
169
+ divisor.forEach((coef, i) => {
170
+ result[i] ^= gfMultiply(coef, factor);
171
+ });
172
+ }
173
+ return result;
174
+ }
175
+ class Matrix {
176
+ version;
177
+ size;
178
+ modules;
179
+ isFunction;
180
+ constructor(version) {
181
+ this.version = version;
182
+ this.size = version * 4 + 17;
183
+ this.modules = Array.from({ length: this.size }, () => new Array(this.size).fill(false));
184
+ this.isFunction = Array.from({ length: this.size }, () => new Array(this.size).fill(false));
185
+ }
186
+ set(x, y, dark) {
187
+ this.modules[y][x] = dark;
188
+ this.isFunction[y][x] = true;
189
+ }
190
+ drawFunctionPatterns() {
191
+ for (let i = 0; i < this.size; i += 1) {
192
+ this.set(6, i, i % 2 === 0);
193
+ this.set(i, 6, i % 2 === 0);
194
+ }
195
+ this.drawFinder(3, 3);
196
+ this.drawFinder(this.size - 4, 3);
197
+ this.drawFinder(3, this.size - 4);
198
+ const positions = this.alignmentPositions();
199
+ const last = positions.length - 1;
200
+ positions.forEach((x, i) => {
201
+ positions.forEach((y, j) => {
202
+ if (!((i === 0 && j === 0) || (i === 0 && j === last) || (i === last && j === 0))) {
203
+ this.drawAlignment(x, y);
204
+ }
205
+ });
206
+ });
207
+ // Reserve the format areas (real bits are drawn per mask).
208
+ this.drawFormatBits("M", 0);
209
+ this.drawVersion();
210
+ }
211
+ alignmentPositions() {
212
+ if (this.version === 1) {
213
+ return [];
214
+ }
215
+ const count = Math.floor(this.version / 7) + 2;
216
+ const step = Math.ceil((this.version * 4 + 4) / (count * 2 - 2)) * 2;
217
+ const result = [6];
218
+ for (let pos = this.size - 7; result.length < count; pos -= step) {
219
+ result.splice(1, 0, pos);
220
+ }
221
+ return result;
222
+ }
223
+ drawFinder(cx, cy) {
224
+ for (let dy = -4; dy <= 4; dy += 1) {
225
+ for (let dx = -4; dx <= 4; dx += 1) {
226
+ const x = cx + dx;
227
+ const y = cy + dy;
228
+ if (x >= 0 && x < this.size && y >= 0 && y < this.size) {
229
+ const dist = Math.max(Math.abs(dx), Math.abs(dy));
230
+ this.set(x, y, dist !== 2 && dist !== 4);
231
+ }
232
+ }
233
+ }
234
+ }
235
+ drawAlignment(cx, cy) {
236
+ for (let dy = -2; dy <= 2; dy += 1) {
237
+ for (let dx = -2; dx <= 2; dx += 1) {
238
+ this.set(cx + dx, cy + dy, Math.max(Math.abs(dx), Math.abs(dy)) !== 1);
239
+ }
240
+ }
241
+ }
242
+ drawFormatBits(level, mask) {
243
+ const data = (LEVEL_FORMAT_BITS[level] << 3) | mask;
244
+ let rem = data;
245
+ for (let i = 0; i < 10; i += 1) {
246
+ rem = (rem << 1) ^ ((rem >>> 9) * 0x537);
247
+ }
248
+ const bits = ((data << 10) | rem) ^ 0x5412;
249
+ const bit = (i) => ((bits >>> i) & 1) !== 0;
250
+ for (let i = 0; i <= 5; i += 1) {
251
+ this.set(8, i, bit(i));
252
+ }
253
+ this.set(8, 7, bit(6));
254
+ this.set(8, 8, bit(7));
255
+ this.set(7, 8, bit(8));
256
+ for (let i = 9; i < 15; i += 1) {
257
+ this.set(14 - i, 8, bit(i));
258
+ }
259
+ for (let i = 0; i < 8; i += 1) {
260
+ this.set(this.size - 1 - i, 8, bit(i));
261
+ }
262
+ for (let i = 8; i < 15; i += 1) {
263
+ this.set(8, this.size - 15 + i, bit(i));
264
+ }
265
+ this.set(8, this.size - 8, true); // the dark module
266
+ }
267
+ drawVersion() {
268
+ if (this.version < 7) {
269
+ return;
270
+ }
271
+ let rem = this.version;
272
+ for (let i = 0; i < 12; i += 1) {
273
+ rem = (rem << 1) ^ ((rem >>> 11) * 0x1f25);
274
+ }
275
+ const bits = (this.version << 12) | rem;
276
+ for (let i = 0; i < 18; i += 1) {
277
+ const dark = ((bits >>> i) & 1) !== 0;
278
+ const a = this.size - 11 + (i % 3);
279
+ const b = Math.floor(i / 3);
280
+ this.set(a, b, dark);
281
+ this.set(b, a, dark);
282
+ }
283
+ }
284
+ drawCodewords(codewords) {
285
+ let i = 0;
286
+ for (let right = this.size - 1; right >= 1; right -= 2) {
287
+ if (right === 6) {
288
+ right = 5;
289
+ }
290
+ for (let vert = 0; vert < this.size; vert += 1) {
291
+ for (let j = 0; j < 2; j += 1) {
292
+ const x = right - j;
293
+ const upward = ((right + 1) & 2) === 0;
294
+ const y = upward ? this.size - 1 - vert : vert;
295
+ if (!this.isFunction[y][x] && i < codewords.length * 8) {
296
+ this.modules[y][x] = ((codewords[i >>> 3] >>> (7 - (i & 7))) & 1) !== 0;
297
+ i += 1;
298
+ }
299
+ }
300
+ }
301
+ }
302
+ }
303
+ applyMask(mask) {
304
+ for (let y = 0; y < this.size; y += 1) {
305
+ for (let x = 0; x < this.size; x += 1) {
306
+ if (!this.isFunction[y][x] && maskBit(mask, x, y)) {
307
+ this.modules[y][x] = !this.modules[y][x];
308
+ }
309
+ }
310
+ }
311
+ }
312
+ penalty() {
313
+ const size = this.size;
314
+ const m = this.modules;
315
+ let result = 0;
316
+ // Runs of five or more, and finder-like 1:1:3:1:1 patterns, in rows and columns.
317
+ for (const vertical of [false, true]) {
318
+ for (let a = 0; a < size; a += 1) {
319
+ const line = [];
320
+ for (let b = 0; b < size; b += 1) {
321
+ line.push(vertical ? m[b][a] : m[a][b]);
322
+ }
323
+ let run = 1;
324
+ for (let b = 1; b <= size; b += 1) {
325
+ if (b < size && line[b] === line[b - 1]) {
326
+ run += 1;
327
+ }
328
+ else {
329
+ if (run >= 5) {
330
+ result += run - 2;
331
+ }
332
+ run = 1;
333
+ }
334
+ }
335
+ const padded = [...new Array(4).fill(false), ...line, ...new Array(4).fill(false)];
336
+ for (let b = 0; b + 11 <= padded.length; b += 1) {
337
+ const w = padded.slice(b, b + 11).map((dark) => (dark ? 1 : 0)).join("");
338
+ if (w === "10111010000" || w === "00001011101") {
339
+ result += 40;
340
+ }
341
+ }
342
+ }
343
+ }
344
+ // 2x2 blocks of one color.
345
+ for (let y = 0; y < size - 1; y += 1) {
346
+ for (let x = 0; x < size - 1; x += 1) {
347
+ const c = m[y][x];
348
+ if (c === m[y][x + 1] && c === m[y + 1][x] && c === m[y + 1][x + 1]) {
349
+ result += 3;
350
+ }
351
+ }
352
+ }
353
+ // Balance of dark and light.
354
+ let dark = 0;
355
+ for (const row of m) {
356
+ for (const cell of row) {
357
+ dark += cell ? 1 : 0;
358
+ }
359
+ }
360
+ const total = size * size;
361
+ result += (Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1) * 10;
362
+ return result;
363
+ }
364
+ }
365
+ export function maskBit(mask, x, y) {
366
+ switch (mask) {
367
+ case 0: return (x + y) % 2 === 0;
368
+ case 1: return y % 2 === 0;
369
+ case 2: return x % 3 === 0;
370
+ case 3: return (x + y) % 3 === 0;
371
+ case 4: return (Math.floor(x / 3) + Math.floor(y / 2)) % 2 === 0;
372
+ case 5: return ((x * y) % 2) + ((x * y) % 3) === 0;
373
+ case 6: return (((x * y) % 2) + ((x * y) % 3)) % 2 === 0;
374
+ default: return (((x + y) % 2) + ((x * y) % 3)) % 2 === 0;
375
+ }
376
+ }
377
+ //# sourceMappingURL=qr.js.map
package/dist/qr.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr.js","sourceRoot":"","sources":["../src/qr.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viraatdas/rudder",
3
- "version": "3.4.0",
3
+ "version": "3.5.0",
4
4
  "description": "A TUI for managing coding agents: run Claude Code, Codex and opencode side by side, each in its own isolated jj workspace.",
5
5
  "keywords": [
6
6
  "tui",