@viraatdas/rudder 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/tui.js ADDED
@@ -0,0 +1,549 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import fsp from "node:fs/promises";
3
+ import { useCallback, useEffect, useState } from "react";
4
+ import { Box, Text, render, useApp, useInput, useWindowSize } from "ink";
5
+ import { currentBranch, findRepoRoot } from "./git.js";
6
+ import { eventsPath, listRuns, loadConfig, outputPath, } from "./state.js";
7
+ import { mergeRun, startRun, stopRun } from "./run-manager.js";
8
+ import { pathExists, shortenHome } from "./util.js";
9
+ const BACKENDS = ["claude", "codex", "acpx"];
10
+ export async function runInteractiveTui(defaults) {
11
+ const instance = render(_jsx(RudderTui, { defaults: defaults ?? {} }), {
12
+ alternateScreen: true,
13
+ exitOnCtrlC: false,
14
+ maxFps: 12,
15
+ });
16
+ await instance.waitUntilExit();
17
+ }
18
+ function RudderTui({ defaults }) {
19
+ const app = useApp();
20
+ const size = useWindowSize();
21
+ const [repoRoot, setRepoRoot] = useState(() => findRepoRoot());
22
+ const [branch, setBranch] = useState("HEAD");
23
+ const [config, setConfig] = useState(null);
24
+ const [backend, setBackend] = useState(defaults.backend ?? "claude");
25
+ const [model, setModel] = useState(defaults.model);
26
+ const [worktreeMode, setWorktreeMode] = useState(defaults.worktree ? "always" : "auto");
27
+ const [runs, setRuns] = useState([]);
28
+ const [selectedRunId, setSelectedRunId] = useState();
29
+ const [expandedRunIds, setExpandedRunIds] = useState(new Set());
30
+ const [transcriptExpanded, setTranscriptExpanded] = useState(false);
31
+ const [input, setInput] = useState("");
32
+ const [notice, setNotice] = useState("Ready");
33
+ const [helpOpen, setHelpOpen] = useState(false);
34
+ const [submitting, setSubmitting] = useState(false);
35
+ const [preferencesLoaded, setPreferencesLoaded] = useState(false);
36
+ const refresh = useCallback(async () => {
37
+ const root = findRepoRoot();
38
+ const [nextConfig, nextBranch, nextRuns] = await Promise.all([
39
+ loadConfig(),
40
+ currentBranch(root),
41
+ loadUiRuns(root),
42
+ ]);
43
+ setRepoRoot(root);
44
+ setConfig(nextConfig);
45
+ setBranch(nextBranch);
46
+ setRuns(nextRuns);
47
+ if (!preferencesLoaded) {
48
+ setBackend(defaults.backend ?? nextConfig.lastUsedBackend ?? nextConfig.defaultBackend);
49
+ setModel(defaults.model);
50
+ setPreferencesLoaded(true);
51
+ }
52
+ setSelectedRunId((current) => current ?? nextRuns[0]?.id);
53
+ }, [defaults.backend, defaults.model, preferencesLoaded]);
54
+ useEffect(() => {
55
+ void refresh();
56
+ const timer = setInterval(() => {
57
+ void refresh();
58
+ }, 800);
59
+ return () => clearInterval(timer);
60
+ }, [refresh]);
61
+ const selectedIndex = Math.max(0, runs.findIndex((run) => run.id === selectedRunId));
62
+ const selectedRun = runs[selectedIndex];
63
+ const activeCount = runs.filter((run) => isActive(run.status)).length;
64
+ const selectedExpanded = Boolean(selectedRun && expandedRunIds.has(selectedRun.id));
65
+ const submitTask = useCallback(async (task) => {
66
+ const trimmed = task.trim();
67
+ if (!trimmed || submitting) {
68
+ return;
69
+ }
70
+ setSubmitting(true);
71
+ setNotice(`Starting ${backend}...`);
72
+ try {
73
+ const run = await startRun({
74
+ task: trimmed,
75
+ backend,
76
+ model,
77
+ detach: true,
78
+ worktree: worktreeMode === "always",
79
+ silent: true,
80
+ view: "shell",
81
+ });
82
+ setInput("");
83
+ setSelectedRunId(run.id);
84
+ setExpandedRunIds((current) => new Set(current).add(run.id));
85
+ setNotice(`Started ${run.id}`);
86
+ await refresh();
87
+ }
88
+ catch (error) {
89
+ setNotice(error instanceof Error ? error.message : String(error));
90
+ }
91
+ finally {
92
+ setSubmitting(false);
93
+ }
94
+ }, [backend, model, refresh, submitting, worktreeMode]);
95
+ const handleCommand = useCallback(async (line) => {
96
+ const [command = "", ...args] = line.slice(1).trim().split(/\s+/).filter(Boolean);
97
+ switch (command) {
98
+ case "":
99
+ case "help":
100
+ case "?":
101
+ setHelpOpen((value) => !value);
102
+ setInput("");
103
+ return;
104
+ case "q":
105
+ case "quit":
106
+ case "exit":
107
+ app.exit();
108
+ return;
109
+ case "backend":
110
+ if (isBackend(args[0])) {
111
+ setBackend(args[0]);
112
+ setModel(undefined);
113
+ setNotice(`Backend ${args[0]}`);
114
+ }
115
+ else {
116
+ setNotice("Usage: /backend claude|codex|acpx");
117
+ }
118
+ setInput("");
119
+ return;
120
+ case "model":
121
+ setModel(args.join(" ") || undefined);
122
+ setNotice(args.length ? `Model ${args.join(" ")}` : "Using backend default model");
123
+ setInput("");
124
+ return;
125
+ case "worktree":
126
+ setWorktreeMode(args[0] === "always" || args[0] === "on" ? "always" : "auto");
127
+ setNotice(`Worktrees ${args[0] === "always" || args[0] === "on" ? "always" : "auto"}`);
128
+ setInput("");
129
+ return;
130
+ case "stop":
131
+ await runAction(args[0] ?? selectedRun?.id, async (id) => stopRun(id, { silent: true }), "Stopped", setNotice, refresh);
132
+ setInput("");
133
+ return;
134
+ case "merge":
135
+ await runAction(args[0] ?? selectedRun?.id, async (id) => mergeRun(id, args.includes("--allow-dirty"), { silent: true }), "Merged", setNotice, refresh);
136
+ setInput("");
137
+ return;
138
+ case "clear":
139
+ setExpandedRunIds(new Set());
140
+ setNotice("Collapsed all runs");
141
+ setInput("");
142
+ return;
143
+ default:
144
+ setNotice(`Unknown command: /${command}`);
145
+ setInput("");
146
+ }
147
+ }, [app, refresh, selectedRun?.id]);
148
+ useInput((value, key) => {
149
+ if (key.ctrl && value === "c") {
150
+ app.exit();
151
+ return;
152
+ }
153
+ if (key.escape) {
154
+ if (input) {
155
+ setInput("");
156
+ }
157
+ else if (helpOpen) {
158
+ setHelpOpen(false);
159
+ }
160
+ else if (transcriptExpanded) {
161
+ setTranscriptExpanded(false);
162
+ }
163
+ return;
164
+ }
165
+ if (key.tab) {
166
+ cycleBackend(backend, setBackend);
167
+ setModel(undefined);
168
+ return;
169
+ }
170
+ if (key.upArrow || (input.length === 0 && value === "k")) {
171
+ selectRelative(runs, selectedRunId, -1, setSelectedRunId);
172
+ return;
173
+ }
174
+ if (key.downArrow || (input.length === 0 && value === "j")) {
175
+ selectRelative(runs, selectedRunId, 1, setSelectedRunId);
176
+ return;
177
+ }
178
+ if (key.pageUp) {
179
+ selectRelative(runs, selectedRunId, -5, setSelectedRunId);
180
+ return;
181
+ }
182
+ if (key.pageDown) {
183
+ selectRelative(runs, selectedRunId, 5, setSelectedRunId);
184
+ return;
185
+ }
186
+ if (key.return) {
187
+ if (input.trim().startsWith("/")) {
188
+ void handleCommand(input);
189
+ }
190
+ else {
191
+ void submitTask(input);
192
+ }
193
+ return;
194
+ }
195
+ if (key.backspace || key.delete) {
196
+ setInput((current) => current.slice(0, -1));
197
+ return;
198
+ }
199
+ if (input.length === 0 && value === "q") {
200
+ app.exit();
201
+ return;
202
+ }
203
+ if (input.length === 0 && value === "?") {
204
+ setHelpOpen((current) => !current);
205
+ return;
206
+ }
207
+ if (input.length === 0 && value === "r") {
208
+ void refresh();
209
+ setNotice("Refreshed");
210
+ return;
211
+ }
212
+ if (input.length === 0 && value === "b") {
213
+ cycleBackend(backend, setBackend);
214
+ setModel(undefined);
215
+ return;
216
+ }
217
+ if (input.length === 0 && value === "w") {
218
+ setWorktreeMode((current) => current === "auto" ? "always" : "auto");
219
+ return;
220
+ }
221
+ if (input.length === 0 && value === "x" && selectedRun) {
222
+ setExpandedRunIds((current) => toggleSet(current, selectedRun.id));
223
+ return;
224
+ }
225
+ if (input.length === 0 && value === "l" && selectedRun) {
226
+ setTranscriptExpanded((current) => !current);
227
+ return;
228
+ }
229
+ if (input.length === 0 && value === "s" && selectedRun) {
230
+ void runAction(selectedRun.id, async (id) => stopRun(id, { silent: true }), "Stopped", setNotice, refresh);
231
+ return;
232
+ }
233
+ if (input.length === 0 && value === "m" && selectedRun) {
234
+ void runAction(selectedRun.id, async (id) => mergeRun(id, false, { silent: true }), "Merged", setNotice, refresh);
235
+ return;
236
+ }
237
+ if (isPrintable(value)) {
238
+ setInput((current) => current + value);
239
+ }
240
+ });
241
+ const width = Math.max(80, size.columns);
242
+ const height = Math.max(24, size.rows);
243
+ const railWidth = Math.min(42, Math.max(30, Math.floor(width * 0.34)));
244
+ const detailWidth = Math.max(30, width - railWidth - 1);
245
+ const detailHeight = Math.max(8, height - 8);
246
+ return (_jsxs(Box, { flexDirection: "column", width: width, height: height, children: [_jsx(Header, { repoRoot: repoRoot, branch: branch, backend: backend, model: model ?? modelForBackend(backend, config), activeCount: activeCount, worktreeMode: worktreeMode }), _jsxs(Box, { flexGrow: 1, minHeight: 0, children: [_jsx(RunRail, { runs: runs, selectedRunId: selectedRun?.id, width: railWidth, expandedRunIds: expandedRunIds }), _jsx(Box, { flexDirection: "column", flexGrow: 1, marginLeft: 1, children: _jsx(DetailPane, { run: selectedRun, width: detailWidth, height: detailHeight, expanded: selectedExpanded, transcriptExpanded: transcriptExpanded }) })] }), helpOpen ? _jsx(Help, {}) : null, _jsx(PromptDock, { input: input, backend: backend, model: model ?? modelForBackend(backend, config), notice: notice, submitting: submitting }), _jsx(Footer, {})] }));
247
+ }
248
+ function Header(props) {
249
+ return (_jsxs(Box, { borderStyle: "single", borderColor: "cyan", paddingX: 1, justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "cyan", children: "rudder" }), _jsxs(Text, { color: "gray", children: [" ", shortenHome(props.repoRoot), " "] }), _jsx(Text, { color: "gray", children: props.branch })] }), _jsxs(Box, { children: [_jsx(Text, { color: "green", children: props.backend }), _jsx(Text, { color: "gray", children: props.model ? ` ${props.model}` : "" }), _jsxs(Text, { color: "gray", children: [" worktree:", props.worktreeMode] }), _jsxs(Text, { color: props.activeCount > 0 ? "yellow" : "gray", children: [" active:", props.activeCount] })] })] }));
250
+ }
251
+ function RunRail(props) {
252
+ const visible = props.runs.slice(0, 12);
253
+ return (_jsxs(Box, { flexDirection: "column", width: props.width, borderStyle: "single", borderColor: "gray", paddingX: 1, children: [_jsxs(Box, { justifyContent: "space-between", children: [_jsx(Text, { bold: true, children: "agents" }), _jsxs(Text, { color: "gray", children: [props.runs.length, " runs"] })] }), visible.length === 0 ? (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "No runs yet. Type a task below." }) })) : null, visible.map((run) => (_jsx(RunCard, { run: run, selected: run.id === props.selectedRunId, expanded: props.expandedRunIds.has(run.id), width: props.width - 4 }, run.id)))] }));
254
+ }
255
+ function RunCard(props) {
256
+ const tone = statusColor(props.run.status);
257
+ const label = props.selected ? ">" : " ";
258
+ const task = truncate(props.run.task, Math.max(12, props.width - 14));
259
+ const meta = `${props.run.worktree.enabled ? "wt" : "co"} ${props.expanded ? "open" : "closed"}`;
260
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Text, { wrap: "truncate", color: props.selected ? "white" : "gray", bold: props.selected, children: [label, " ", statusGlyph(props.run.status), " ", props.run.backend, " ", task] }), _jsxs(Text, { wrap: "truncate", color: tone, children: [props.run.status, " ", _jsx(Text, { color: "gray", children: meta })] })] }));
261
+ }
262
+ function DetailPane(props) {
263
+ if (!props.run) {
264
+ return (_jsx(Box, { width: props.width, height: props.height, borderStyle: "single", borderColor: "gray", paddingX: 1, flexDirection: "column", children: _jsx(Text, { color: "gray", children: "No agent selected." }) }));
265
+ }
266
+ const workLimit = props.expanded ? 10 : 5;
267
+ const outputHeight = props.transcriptExpanded ? Math.max(8, props.height - 7) : Math.max(5, Math.floor(props.height * 0.45));
268
+ const contentWidth = Math.max(10, props.width - 4);
269
+ return (_jsxs(Box, { width: props.width, height: props.height, borderStyle: "single", borderColor: statusColor(props.run.status), paddingX: 1, flexDirection: "column", children: [_jsx(Text, { children: " " }), _jsxs(Text, { wrap: "truncate", color: statusColor(props.run.status), children: [props.run.status, " ", props.run.backend, " ", shortId(props.run.id), " ", props.run.task] }), _jsx(Text, { wrap: "truncate", color: "gray", children: props.run.worktree.enabled ? shortenHome(props.run.worktree.path) : "current checkout" }), !props.transcriptExpanded ? (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, children: "work" }), props.run.work.slice(-workLimit).map((item, index) => (_jsx(Text, { color: toneColor(item.tone), wrap: "truncate", children: formatWorkLine(item, contentWidth) }, `${item.label}-${index}`))), props.run.work.length === 0 ? _jsx(Text, { color: "gray", children: "No worker events yet." }) : null] })) : null, _jsxs(Box, { flexDirection: "column", marginTop: 1, minHeight: 0, children: [_jsx(Text, { bold: true, children: "transcript" }), _jsx(Box, { height: outputHeight, overflow: "hidden", flexDirection: "column", children: tailLines(props.run.output, outputHeight).map((line, index) => (_jsx(Text, { wrap: "truncate", children: line || " " }, index))) })] })] }));
270
+ }
271
+ function Help() {
272
+ return (_jsxs(Box, { borderStyle: "single", borderColor: "yellow", paddingX: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, color: "yellow", children: "keys" }), _jsxs(Text, { children: [_jsx(Text, { color: "cyan", children: "Enter" }), " submit task or slash command ", _jsx(Text, { color: "cyan", children: "Tab" }), " switch backend ", _jsx(Text, { color: "cyan", children: "j/k" }), " or arrows select run"] }), _jsxs(Text, { children: [_jsx(Text, { color: "cyan", children: "x" }), " expand/collapse run ", _jsx(Text, { color: "cyan", children: "l" }), " expand transcript ", _jsx(Text, { color: "cyan", children: "w" }), " worktree auto/always"] }), _jsxs(Text, { children: [_jsx(Text, { color: "cyan", children: "s" }), " stop selected ", _jsx(Text, { color: "cyan", children: "m" }), " merge selected ", _jsx(Text, { color: "cyan", children: "r" }), " refresh ", _jsx(Text, { color: "cyan", children: "q" }), " quit"] }), _jsx(Text, { color: "gray", children: "Slash: /backend claude|codex|acpx, /model <name>, /worktree auto|always, /stop, /merge, /exit" })] }));
273
+ }
274
+ function PromptDock(props) {
275
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "cyan", paddingX: 1, children: [_jsxs(Box, { justifyContent: "space-between", children: [_jsx(Text, { color: "gray", children: props.notice }), _jsxs(Text, { color: "gray", children: [props.backend, props.model ? ` ${props.model}` : ""] })] }), _jsxs(Text, { children: [_jsx(Text, { color: props.submitting ? "yellow" : "cyan", children: props.submitting ? "starting" : "task" }), _jsxs(Text, { children: [" ", props.input] }), _jsx(Text, { color: "cyan", children: "_" })] })] }));
276
+ }
277
+ function Footer() {
278
+ return (_jsxs(Box, { justifyContent: "space-between", children: [_jsx(Text, { color: "gray", children: "Enter submit Tab backend j/k select x expand l log w wt" }), _jsx(Text, { color: "gray", children: "? help q quit" })] }));
279
+ }
280
+ async function loadUiRuns(repoRoot) {
281
+ const runs = await listRuns(repoRoot);
282
+ return await Promise.all(runs.map(async (run) => {
283
+ const [output, events] = await Promise.all([
284
+ readTextIfExists(outputPath(repoRoot, run.id)),
285
+ readEvents(repoRoot, run.id),
286
+ ]);
287
+ return {
288
+ ...run,
289
+ output,
290
+ events,
291
+ work: buildWork(events, run),
292
+ };
293
+ }));
294
+ }
295
+ async function readTextIfExists(file) {
296
+ if (!(await pathExists(file))) {
297
+ return "";
298
+ }
299
+ return await fsp.readFile(file, "utf8").catch(() => "");
300
+ }
301
+ async function readEvents(repoRoot, runId) {
302
+ const file = eventsPath(repoRoot, runId);
303
+ const raw = await readTextIfExists(file);
304
+ return raw
305
+ .split(/\r?\n/)
306
+ .map((line) => line.trim())
307
+ .filter(Boolean)
308
+ .map((line) => {
309
+ try {
310
+ return JSON.parse(line);
311
+ }
312
+ catch {
313
+ return null;
314
+ }
315
+ })
316
+ .filter((event) => Boolean(event));
317
+ }
318
+ function buildWork(events, run) {
319
+ const items = [];
320
+ for (const event of events) {
321
+ if (event.type === "run.created") {
322
+ items.push({ label: run.worktree.enabled ? "worktree prepared" : "checkout claimed", detail: event.message, tone: "info" });
323
+ continue;
324
+ }
325
+ if (event.type === "planner.spec") {
326
+ items.push({ label: "planner contract", detail: "acceptance criteria generated", tone: "info" });
327
+ continue;
328
+ }
329
+ if (event.type === "run.started") {
330
+ items.push({ label: "worker started", detail: objectField(event.data, "command") ?? run.backend, tone: "info" });
331
+ continue;
332
+ }
333
+ if (event.type === "backend.output") {
334
+ const tool = toolSummary(event.data);
335
+ if (tool) {
336
+ items.push(tool);
337
+ }
338
+ continue;
339
+ }
340
+ if (event.type === "backend.error") {
341
+ items.push({ label: "backend error", detail: event.message, tone: "danger" });
342
+ continue;
343
+ }
344
+ if (event.type === "verifier.result") {
345
+ const missing = missingCount(event.data);
346
+ items.push({ label: "verifier", detail: missing ? `${missing} missing item${missing === 1 ? "" : "s"}` : "accepted", tone: missing ? "warning" : "success" });
347
+ continue;
348
+ }
349
+ if (event.type === "run.completed") {
350
+ items.push({ label: "completed", detail: event.message, tone: "success" });
351
+ continue;
352
+ }
353
+ if (event.type === "run.failed") {
354
+ items.push({ label: "failed", detail: event.message, tone: "danger" });
355
+ continue;
356
+ }
357
+ if (event.type === "run.cancelled") {
358
+ items.push({ label: "cancelled", detail: event.message, tone: "warning" });
359
+ continue;
360
+ }
361
+ if (event.type === "merge.result") {
362
+ items.push({ label: "merge", detail: event.message, tone: event.message?.includes("conflict") ? "warning" : "success" });
363
+ }
364
+ }
365
+ return compactWork(items);
366
+ }
367
+ function toolSummary(data) {
368
+ if (!isRecord(data) || data.type !== "stream_event" || !isRecord(data.event)) {
369
+ return null;
370
+ }
371
+ const event = data.event;
372
+ if (event.type === "content_block_start" && isRecord(event.content_block)) {
373
+ const block = event.content_block;
374
+ if (block.type === "tool_use") {
375
+ return { label: "tool", detail: typeof block.name === "string" ? block.name : "tool_use", tone: "muted" };
376
+ }
377
+ }
378
+ return null;
379
+ }
380
+ function compactWork(items) {
381
+ const compacted = [];
382
+ for (const item of items) {
383
+ const last = compacted.at(-1);
384
+ if (last && last.label === item.label && last.detail === item.detail && last.tone === item.tone) {
385
+ continue;
386
+ }
387
+ compacted.push(item);
388
+ }
389
+ return compacted;
390
+ }
391
+ function formatWorkLine(item, width) {
392
+ const raw = `${workGlyph(item.tone)} ${item.label}${item.detail ? ` ${item.detail}` : ""}`;
393
+ return truncate(raw, width).padEnd(width, " ");
394
+ }
395
+ async function runAction(runId, action, success, setNotice, refresh) {
396
+ if (!runId) {
397
+ setNotice("No run selected");
398
+ return;
399
+ }
400
+ try {
401
+ await action(runId);
402
+ setNotice(`${success} ${shortId(runId)}`);
403
+ await refresh();
404
+ }
405
+ catch (error) {
406
+ setNotice(error instanceof Error ? error.message : String(error));
407
+ }
408
+ }
409
+ function selectRelative(runs, selectedRunId, delta, setSelectedRunId) {
410
+ if (runs.length === 0) {
411
+ return;
412
+ }
413
+ const index = Math.max(0, runs.findIndex((run) => run.id === selectedRunId));
414
+ const next = Math.min(runs.length - 1, Math.max(0, index + delta));
415
+ setSelectedRunId(runs[next]?.id);
416
+ }
417
+ function cycleBackend(current, setBackend) {
418
+ const index = BACKENDS.indexOf(current);
419
+ setBackend(BACKENDS[(index + 1) % BACKENDS.length] ?? "claude");
420
+ }
421
+ function toggleSet(current, value) {
422
+ const next = new Set(current);
423
+ if (next.has(value)) {
424
+ next.delete(value);
425
+ }
426
+ else {
427
+ next.add(value);
428
+ }
429
+ return next;
430
+ }
431
+ function modelForBackend(backend, config) {
432
+ if (!config) {
433
+ return undefined;
434
+ }
435
+ if (backend === "claude") {
436
+ return config.backends.claude?.model;
437
+ }
438
+ if (backend === "codex") {
439
+ return config.backends.codex?.model;
440
+ }
441
+ return config.backends.acpx?.model;
442
+ }
443
+ function isBackend(value) {
444
+ return value === "claude" || value === "codex" || value === "acpx";
445
+ }
446
+ function isPrintable(value) {
447
+ return value.length > 0 && !/[\u0000-\u001f\u007f]/.test(value);
448
+ }
449
+ function isActive(status) {
450
+ return status === "created" || status === "running" || status === "verifying";
451
+ }
452
+ function statusGlyph(status) {
453
+ if (status === "completed" || status === "merged") {
454
+ return "ok";
455
+ }
456
+ if (status === "failed" || status === "merge-conflict") {
457
+ return "!!";
458
+ }
459
+ if (status === "cancelled") {
460
+ return "--";
461
+ }
462
+ return "..";
463
+ }
464
+ function statusColor(status) {
465
+ if (status === "completed" || status === "merged") {
466
+ return "green";
467
+ }
468
+ if (status === "failed" || status === "merge-conflict") {
469
+ return "red";
470
+ }
471
+ if (status === "cancelled") {
472
+ return "yellow";
473
+ }
474
+ if (status === "verifying") {
475
+ return "magenta";
476
+ }
477
+ return "cyan";
478
+ }
479
+ function toneColor(tone) {
480
+ if (tone === "success") {
481
+ return "green";
482
+ }
483
+ if (tone === "warning") {
484
+ return "yellow";
485
+ }
486
+ if (tone === "danger") {
487
+ return "red";
488
+ }
489
+ if (tone === "info") {
490
+ return "cyan";
491
+ }
492
+ return "gray";
493
+ }
494
+ function workGlyph(tone) {
495
+ if (tone === "success") {
496
+ return "ok";
497
+ }
498
+ if (tone === "warning") {
499
+ return "??";
500
+ }
501
+ if (tone === "danger") {
502
+ return "!!";
503
+ }
504
+ if (tone === "info") {
505
+ return "->";
506
+ }
507
+ return "--";
508
+ }
509
+ function missingCount(data) {
510
+ if (!isRecord(data) || !Array.isArray(data.missing)) {
511
+ return 0;
512
+ }
513
+ return data.missing.length;
514
+ }
515
+ function objectField(data, key) {
516
+ return isRecord(data) && typeof data[key] === "string" ? data[key] : undefined;
517
+ }
518
+ function isRecord(value) {
519
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
520
+ }
521
+ function tailLines(text, maxLines) {
522
+ const normalized = text.replace(/\r/g, "");
523
+ const lines = normalized.includes("\n") ? normalized.split("\n") : chunkLine(normalized, 96);
524
+ const visible = lines.filter((line, index) => line.length > 0 || index < lines.length - 1).slice(-Math.max(1, maxLines));
525
+ return visible.length ? visible : ["No transcript yet."];
526
+ }
527
+ function chunkLine(text, width) {
528
+ if (!text) {
529
+ return [];
530
+ }
531
+ const chunks = [];
532
+ for (let i = 0; i < text.length; i += width) {
533
+ chunks.push(text.slice(i, i + width));
534
+ }
535
+ return chunks;
536
+ }
537
+ function shortId(runId) {
538
+ return runId.slice(0, 14);
539
+ }
540
+ function truncate(value, width) {
541
+ if (value.length <= width) {
542
+ return value;
543
+ }
544
+ if (width <= 1) {
545
+ return value.slice(0, width);
546
+ }
547
+ return `${value.slice(0, Math.max(0, width - 3))}...`;
548
+ }
549
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viraatdas/rudder",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "A coding-agent harness for Claude Code, Codex, and acpx with worktree-isolated runs.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -25,6 +25,11 @@
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^22.15.3",
28
+ "@types/react": "^19.2.14",
28
29
  "typescript": "^5.8.3"
30
+ },
31
+ "dependencies": {
32
+ "ink": "^7.0.3",
33
+ "react": "^19.2.6"
29
34
  }
30
35
  }