@viraatdas/rudder 2.10.8 → 2.10.9

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/repl.js DELETED
@@ -1,241 +0,0 @@
1
- import readline from "node:readline/promises";
2
- import { stdin as input, stdout as output } from "node:process";
3
- import { runDoctor } from "./auth.js";
4
- import { currentBranch, findRepoRoot } from "./git.js";
5
- import { cleanupRuns, listProjectRuns, mergeRun, printLogs, startRun, statusRuns, stopRun, syncRun, watchRun, } from "./run-manager.js";
6
- import { loadConfig, rememberBackendSelection } from "./state.js";
7
- import { shortenHome } from "./util.js";
8
- export async function runInteractiveShell(defaults) {
9
- const config = await loadConfig();
10
- const backend = defaults?.backend ?? config.lastUsedBackend ?? config.defaultBackend;
11
- const state = {
12
- backend,
13
- model: defaults?.model ?? modelForBackend(backend, config),
14
- worktree: defaults?.worktree ? "always" : "auto",
15
- detach: Boolean(defaults?.detach),
16
- };
17
- const repoRoot = findRepoRoot();
18
- const branch = await currentBranch(repoRoot);
19
- console.log("rudder");
20
- console.log(`${shortenHome(repoRoot)}${branch ? ` ${branch}` : ""} ${formatBackend(state)} worktree:${state.worktree}`);
21
- console.log("Type a task. /help for commands. Ctrl-C detaches while watching.");
22
- const rl = readline.createInterface({ input, output });
23
- try {
24
- while (true) {
25
- const line = await rl.question(`${promptLabel(state)} `).catch((error) => {
26
- if (isReadlineClosed(error)) {
27
- return "/exit";
28
- }
29
- throw error;
30
- });
31
- const trimmed = line.trim();
32
- if (!trimmed) {
33
- continue;
34
- }
35
- if (trimmed.startsWith("/")) {
36
- const shouldExit = await handleSlashCommand(trimmed, state);
37
- if (shouldExit) {
38
- return;
39
- }
40
- continue;
41
- }
42
- await runTaskFromShell(trimmed, state);
43
- }
44
- }
45
- finally {
46
- rl.close();
47
- }
48
- }
49
- async function handleSlashCommand(line, state) {
50
- const [command = "", ...args] = line.slice(1).trim().split(/\s+/).filter(Boolean);
51
- switch (command) {
52
- case "?":
53
- case "help":
54
- printShellHelp();
55
- return false;
56
- case "exit":
57
- case "quit":
58
- case "q":
59
- return true;
60
- case "backend":
61
- if (setBackend(state, args[0])) {
62
- await rememberBackendSelection({ backend: state.backend });
63
- }
64
- return false;
65
- case "model":
66
- state.model = args.join(" ") || undefined;
67
- await rememberBackendSelection({
68
- backend: state.backend,
69
- model: state.model,
70
- updateModel: true,
71
- });
72
- console.log(`model: ${state.model || "(backend default)"}`);
73
- return false;
74
- case "worktree":
75
- setWorktree(state, args[0]);
76
- return false;
77
- case "detach":
78
- state.detach = parseOnOff(args[0], !state.detach);
79
- console.log(`watch: ${state.detach ? "off" : "on"}`);
80
- return false;
81
- case "status":
82
- await statusRuns();
83
- return false;
84
- case "runs":
85
- await listProjectRuns();
86
- return false;
87
- case "watch":
88
- await watchFromShell(args[0]);
89
- return false;
90
- case "logs":
91
- await printLogs(args[0], args.includes("--follow") || args.includes("-f"));
92
- return false;
93
- case "stop":
94
- if (!args[0]) {
95
- console.log("usage: /stop <run>");
96
- return false;
97
- }
98
- await stopRun(args[0]);
99
- return false;
100
- case "merge":
101
- if (!args[0]) {
102
- console.log("usage: /merge <run>");
103
- return false;
104
- }
105
- await mergeRun(args[0], args.includes("--allow-dirty"));
106
- return false;
107
- case "sync":
108
- await syncRun(args[0]);
109
- return false;
110
- case "cleanup":
111
- await cleanupRuns(args.includes("--force"));
112
- return false;
113
- case "doctor":
114
- await runDoctor();
115
- return false;
116
- case "clear":
117
- process.stdout.write("\x1Bc");
118
- return false;
119
- default:
120
- console.log(`Unknown command: /${command}`);
121
- console.log("Type /help for commands.");
122
- return false;
123
- }
124
- }
125
- async function runTaskFromShell(task, state) {
126
- const controller = new AbortController();
127
- let detachedBySignal = false;
128
- const onSigint = () => {
129
- detachedBySignal = true;
130
- controller.abort();
131
- console.log("\n[rudder] detached. Run continues in the background.");
132
- };
133
- process.once("SIGINT", onSigint);
134
- try {
135
- await startRun({
136
- task,
137
- backend: state.backend,
138
- model: state.model,
139
- detach: state.detach,
140
- worktree: state.worktree === "always",
141
- exitOnComplete: false,
142
- watchSignal: controller.signal,
143
- quiet: true,
144
- view: "shell",
145
- });
146
- }
147
- finally {
148
- process.off("SIGINT", onSigint);
149
- }
150
- if (state.detach || detachedBySignal) {
151
- console.log("[rudder] use /status, /watch, or /logs to follow up.");
152
- }
153
- }
154
- async function watchFromShell(runId) {
155
- const controller = new AbortController();
156
- const onSigint = () => {
157
- controller.abort();
158
- console.log("\n[rudder] detached from watch.");
159
- };
160
- process.once("SIGINT", onSigint);
161
- try {
162
- await watchRun({ runId, follow: true, exitOnComplete: false, signal: controller.signal, view: "shell" });
163
- }
164
- finally {
165
- process.off("SIGINT", onSigint);
166
- }
167
- }
168
- function setBackend(state, value) {
169
- if (value !== "claude" && value !== "codex" && value !== "acpx") {
170
- console.log("usage: /backend claude|codex|acpx");
171
- return false;
172
- }
173
- state.backend = value;
174
- state.model = undefined;
175
- console.log(`backend: ${formatBackend(state)}`);
176
- return true;
177
- }
178
- function setWorktree(state, value) {
179
- if (value === "auto" || value === undefined) {
180
- state.worktree = "auto";
181
- }
182
- else if (value === "always" || value === "on") {
183
- state.worktree = "always";
184
- }
185
- else {
186
- console.log("usage: /worktree auto|always");
187
- return;
188
- }
189
- console.log(`worktree: ${state.worktree}`);
190
- }
191
- function parseOnOff(value, fallback) {
192
- if (!value) {
193
- return fallback;
194
- }
195
- if (["on", "yes", "true", "1"].includes(value.toLowerCase())) {
196
- return true;
197
- }
198
- if (["off", "no", "false", "0"].includes(value.toLowerCase())) {
199
- return false;
200
- }
201
- return fallback;
202
- }
203
- function printShellHelp() {
204
- console.log(`Commands:
205
- /backend claude|codex|acpx Choose worker backend
206
- /model <model> Set model for new tasks
207
- /worktree auto|always Isolate runs in worktrees/workspaces
208
- /detach on|off Start tasks without watching output
209
- /status Show active runs
210
- /runs List recent runs
211
- /watch [run] Attach to a run
212
- /logs [run] [--follow] Print saved output
213
- /stop <run> Cancel a run
214
- /merge <run> Merge a worktree run
215
- /sync [run] Rebase a worktree onto its base branch; conflicts stay in that worktree
216
- /cleanup [--force] Remove merged worktrees
217
- /doctor Check local tools and auth
218
- /exit Leave the shell
219
-
220
- Type any non-command line to start a task.`);
221
- }
222
- function promptLabel(state) {
223
- void state;
224
- return ">";
225
- }
226
- function formatBackend(state) {
227
- return `${state.backend}${state.model ? ` (${state.model})` : ""}`;
228
- }
229
- function modelForBackend(backend, config) {
230
- if (backend === "claude") {
231
- return config.backends.claude?.model;
232
- }
233
- if (backend === "codex") {
234
- return config.backends.codex?.model;
235
- }
236
- return config.backends.acpx?.model;
237
- }
238
- function isReadlineClosed(error) {
239
- return error instanceof Error && error.message.includes("readline was closed");
240
- }
241
- //# sourceMappingURL=repl.js.map
package/dist/repl.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"repl.js","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import type { RudderBus } from "./bus.js";
2
- import type { RoutineDefinition, RoutineState } from "./types.js";
3
- export declare function routinesConfigPath(repoRoot: string): string;
4
- export declare function routinesStatePath(repoRoot: string): string;
5
- export declare function loadRoutines(repoRoot: string): Promise<RoutineDefinition[]>;
6
- export declare function loadRoutineState(repoRoot: string): Promise<RoutineState>;
7
- export declare function saveRoutineState(repoRoot: string, state: RoutineState): Promise<void>;
8
- export declare function tickRoutines(repoRoot: string, bus: RudderBus): Promise<void>;
9
- export declare function initRoutineTemplates(repoRoot: string): Promise<string>;
package/dist/routines.js DELETED
@@ -1,153 +0,0 @@
1
- import fsp from "node:fs/promises";
2
- import path from "node:path";
3
- import { reconcileInjection } from "./scheduler.js";
4
- import { loadConfig, projectStateDir } from "./state.js";
5
- import { nowIso, readJson, writeJson } from "./util.js";
6
- import { runRecipe } from "./recipes.js";
7
- export function routinesConfigPath(repoRoot) {
8
- return path.join(projectStateDir(repoRoot), "routines.json");
9
- }
10
- export function routinesStatePath(repoRoot) {
11
- return path.join(projectStateDir(repoRoot), "routines-state.json");
12
- }
13
- export async function loadRoutines(repoRoot) {
14
- const config = await loadConfig();
15
- if (config.routines?.enabled === false) {
16
- return [];
17
- }
18
- const raw = await readJson(routinesConfigPath(repoRoot));
19
- if (!raw || raw.version !== 1 || !Array.isArray(raw.routines)) {
20
- return [];
21
- }
22
- return raw.routines.filter(isRoutineDefinition);
23
- }
24
- export async function loadRoutineState(repoRoot) {
25
- const state = await readJson(routinesStatePath(repoRoot));
26
- if (state?.version === 1 && state.routines) {
27
- return state;
28
- }
29
- return { version: 1, routines: {} };
30
- }
31
- export async function saveRoutineState(repoRoot, state) {
32
- await fsp.mkdir(projectStateDir(repoRoot), { recursive: true });
33
- await writeJson(routinesStatePath(repoRoot), state, { mode: 0o600 });
34
- }
35
- export async function tickRoutines(repoRoot, bus) {
36
- const routines = await loadRoutines(repoRoot);
37
- if (!routines.length) {
38
- return;
39
- }
40
- const state = await loadRoutineState(repoRoot);
41
- let changed = false;
42
- const now = Date.now();
43
- for (const routine of routines) {
44
- const current = state.routines[routine.id] ?? { running: 0 };
45
- state.routines[routine.id] = current;
46
- if (routine.enabled === false) {
47
- continue;
48
- }
49
- if (!routine.intervalMs || routine.intervalMs <= 0) {
50
- continue;
51
- }
52
- const last = current.lastTriggeredAt ? Date.parse(current.lastTriggeredAt) : 0;
53
- if (Number.isFinite(last) && now - last < routine.intervalMs) {
54
- continue;
55
- }
56
- const maxConcurrent = routine.maxConcurrent ?? 1;
57
- if ((current.running ?? 0) >= maxConcurrent) {
58
- bus.publish({
59
- ts: nowIso(),
60
- runId: "routine",
61
- type: "routine.skipped",
62
- message: `routine ${routine.id} skipped: already running`,
63
- data: { routineId: routine.id },
64
- });
65
- continue;
66
- }
67
- current.lastTriggeredAt = nowIso();
68
- current.running = (current.running ?? 0) + 1;
69
- changed = true;
70
- bus.publish({
71
- ts: nowIso(),
72
- runId: "routine",
73
- type: "routine.triggered",
74
- message: `routine ${routine.id} triggered`,
75
- data: { routineId: routine.id },
76
- });
77
- void executeRoutine(repoRoot, routine, bus).finally(async () => {
78
- const latest = await loadRoutineState(repoRoot);
79
- const entry = latest.routines[routine.id] ?? { running: 0 };
80
- entry.running = Math.max(0, (entry.running ?? 1) - 1);
81
- entry.lastCompletedAt = nowIso();
82
- latest.routines[routine.id] = entry;
83
- await saveRoutineState(repoRoot, latest).catch(() => undefined);
84
- bus.publish({
85
- ts: nowIso(),
86
- runId: "routine",
87
- type: "routine.completed",
88
- message: `routine ${routine.id} completed`,
89
- data: { routineId: routine.id },
90
- });
91
- });
92
- }
93
- if (changed) {
94
- await saveRoutineState(repoRoot, state);
95
- }
96
- }
97
- export async function initRoutineTemplates(repoRoot) {
98
- const target = routinesConfigPath(repoRoot);
99
- const config = {
100
- version: 1,
101
- routines: [
102
- {
103
- id: "daily-context-audit",
104
- description: "Run a context audit reminder once a day",
105
- enabled: false,
106
- intervalMs: 24 * 60 * 60 * 1000,
107
- action: {
108
- kind: "task",
109
- prompt: "Run `rudder context audit`, summarize high-severity issues, and suggest the smallest cleanup.",
110
- title: "Daily context audit",
111
- },
112
- },
113
- ],
114
- };
115
- await fsp.mkdir(projectStateDir(repoRoot), { recursive: true });
116
- await writeJson(target, config, { mode: 0o600 });
117
- return target;
118
- }
119
- async function executeRoutine(repoRoot, routine, bus) {
120
- switch (routine.action.kind) {
121
- case "task":
122
- await reconcileInjection(repoRoot, {
123
- prompt: routine.action.prompt,
124
- ...(routine.action.title ? { title: routine.action.title } : {}),
125
- ...(routine.action.backend ? { backend: routine.action.backend } : {}),
126
- ...(routine.action.model ? { model: routine.action.model } : {}),
127
- ...(routine.action.effort ? { effort: routine.action.effort } : {}),
128
- }, bus);
129
- return;
130
- case "recipe":
131
- await runRecipe(routine.action.name, routine.action.args ?? {}, { repoRoot });
132
- return;
133
- case "review-all":
134
- case "cloud":
135
- bus.publish({
136
- ts: nowIso(),
137
- runId: "routine",
138
- type: "routine.skipped",
139
- message: `routine ${routine.id} action ${routine.action.kind} is not supported in daemon v1`,
140
- data: { routineId: routine.id },
141
- });
142
- return;
143
- }
144
- }
145
- function isRoutineDefinition(value) {
146
- const routine = value;
147
- if (!routine || typeof routine.id !== "string" || !routine.id.trim() || !routine.action) {
148
- return false;
149
- }
150
- const action = routine.action;
151
- return action.kind === "task" || action.kind === "recipe" || action.kind === "review-all" || action.kind === "cloud";
152
- }
153
- //# sourceMappingURL=routines.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routines.js","sourceRoot":"","sources":["../src/routines.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { BackendId } from "./types.js";
2
- type PaneDefaults = {
3
- tmuxSessionName: string;
4
- backend?: BackendId;
5
- model?: string;
6
- };
7
- export declare function runTmuxAgentPane(defaults: PaneDefaults): Promise<void>;
8
- export declare function runTmuxTaskPane(defaults: PaneDefaults): Promise<void>;
9
- export declare function runTmuxWorkerIdle(defaults: PaneDefaults): Promise<void>;
10
- export {};