@viraatdas/rudder 2.10.6 → 2.10.8

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.
@@ -0,0 +1,212 @@
1
+ import fsp from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { buildFanoutDag, planTask, scaffoldPlan } from "./planner.js";
4
+ import { currentBranch, findRepoRoot } from "./git.js";
5
+ import { ensureColocated, ensureJj } from "./jj.js";
6
+ import { startRun } from "./run-manager.js";
7
+ import { projectStateDir } from "./state.js";
8
+ import { pathExists } from "./util.js";
9
+ export function recipesDir(repoRoot) {
10
+ return path.join(projectStateDir(repoRoot), "recipes");
11
+ }
12
+ export async function listRecipes(repoRoot = findRepoRoot()) {
13
+ const dirs = [recipesDir(repoRoot)];
14
+ const recipes = [];
15
+ for (const dir of dirs) {
16
+ const entries = await fsp.readdir(dir, { withFileTypes: true }).catch(() => []);
17
+ for (const entry of entries) {
18
+ if (!entry.isFile() || !entry.name.endsWith(".md")) {
19
+ continue;
20
+ }
21
+ const recipe = await readRecipe(path.join(dir, entry.name)).catch(() => null);
22
+ if (recipe) {
23
+ recipes.push(recipe);
24
+ }
25
+ }
26
+ }
27
+ return recipes.sort((a, b) => a.name.localeCompare(b.name));
28
+ }
29
+ export async function findRecipe(name, repoRoot = findRepoRoot()) {
30
+ const normalized = name.trim();
31
+ if (!normalized) {
32
+ return null;
33
+ }
34
+ for (const recipe of await listRecipes(repoRoot)) {
35
+ if (recipe.name === normalized || path.basename(recipe.sourcePath, ".md") === normalized) {
36
+ return recipe;
37
+ }
38
+ }
39
+ return null;
40
+ }
41
+ export async function readRecipe(filePath) {
42
+ const text = await fsp.readFile(filePath, "utf8");
43
+ const { meta, body } = parseFrontmatter(text);
44
+ const fallbackName = path.basename(filePath, ".md");
45
+ const name = (meta.name || fallbackName).trim();
46
+ const mode = parseMode(meta.mode);
47
+ const backend = parseBackend(meta.backend);
48
+ const effort = parseEffort(meta.effort);
49
+ const prompt = (meta.prompt || body).trim();
50
+ if (!name) {
51
+ throw new Error(`${filePath}: recipe name cannot be empty`);
52
+ }
53
+ if (!prompt) {
54
+ throw new Error(`${filePath}: recipe prompt/body cannot be empty`);
55
+ }
56
+ return {
57
+ name,
58
+ ...(meta.description ? { description: meta.description } : {}),
59
+ mode,
60
+ prompt,
61
+ ...(backend ? { backend } : {}),
62
+ ...(meta.model ? { model: meta.model } : {}),
63
+ ...(effort ? { effort } : {}),
64
+ ...(meta.requiresApproval ? { requiresApproval: parseBoolean(meta.requiresApproval) } : {}),
65
+ ...(meta.reviewGate === "auto" || meta.reviewGate === "manual" ? { reviewGate: meta.reviewGate } : {}),
66
+ sourcePath: filePath,
67
+ };
68
+ }
69
+ export function renderRecipePrompt(recipe, args) {
70
+ return recipe.prompt.replace(/\{\{\s*([A-Za-z0-9_.-]+)\s*\}\}/g, (_match, key) => args[key] ?? "");
71
+ }
72
+ export async function runRecipe(name, args = {}, opts = {}) {
73
+ const repoRoot = opts.repoRoot ?? findRepoRoot();
74
+ const previousCwd = process.cwd();
75
+ process.chdir(repoRoot);
76
+ try {
77
+ const recipe = await findRecipe(name, repoRoot);
78
+ if (!recipe) {
79
+ throw new Error(`Recipe not found: ${name}`);
80
+ }
81
+ const prompt = renderRecipePrompt(recipe, args);
82
+ switch (recipe.mode) {
83
+ case "run":
84
+ case "ask":
85
+ case "inject":
86
+ await startRun({
87
+ task: prompt,
88
+ backend: recipe.backend,
89
+ model: recipe.model,
90
+ detach: true,
91
+ worktree: recipe.mode !== "ask",
92
+ queue: false,
93
+ json: opts.json,
94
+ view: "shell",
95
+ origin: { kind: "recipe", id: recipe.name, source: recipe.sourcePath },
96
+ });
97
+ return;
98
+ case "plan":
99
+ ensureJj();
100
+ await ensureColocated(repoRoot);
101
+ await scaffoldPlan(repoRoot, await planTask(prompt, {
102
+ root: repoRoot,
103
+ branch: await currentBranch(repoRoot).catch(() => "main"),
104
+ ...(recipe.backend ? { backend: recipe.backend } : {}),
105
+ }));
106
+ if (!opts.json) {
107
+ console.log(`planned recipe ${recipe.name}`);
108
+ }
109
+ return;
110
+ case "fanout": {
111
+ ensureJj();
112
+ await ensureColocated(repoRoot);
113
+ const dag = buildFanoutDag(prompt, 3, recipe.backend ? { backend: recipe.backend } : {});
114
+ await scaffoldPlan(repoRoot, dag);
115
+ if (!opts.json) {
116
+ console.log(`fanout recipe ${recipe.name}: ${dag.nodes.length} node(s)`);
117
+ }
118
+ return;
119
+ }
120
+ }
121
+ }
122
+ finally {
123
+ process.chdir(previousCwd);
124
+ }
125
+ }
126
+ export async function initRecipeTemplates(repoRoot = findRepoRoot()) {
127
+ const dir = recipesDir(repoRoot);
128
+ await fsp.mkdir(dir, { recursive: true });
129
+ const templates = [
130
+ {
131
+ name: "review-plan.md",
132
+ content: [
133
+ "---",
134
+ "name: review-plan",
135
+ "description: Review the active plan or implementation direction before code changes",
136
+ "mode: plan",
137
+ "backend: claude",
138
+ "---",
139
+ "",
140
+ "Review this repository and produce a concise implementation plan for: {{task}}",
141
+ "Call out risks, interfaces, and tests before any worker starts.",
142
+ "",
143
+ ].join("\n"),
144
+ },
145
+ {
146
+ name: "validate-changes.md",
147
+ content: [
148
+ "---",
149
+ "name: validate-changes",
150
+ "description: Validate current changes with tests and code review",
151
+ "mode: run",
152
+ "backend: claude",
153
+ "---",
154
+ "",
155
+ "Review the current worktree changes, run the smallest relevant checks, and report concrete issues.",
156
+ "Do not make broad refactors. Fix only clear validation failures.",
157
+ "",
158
+ ].join("\n"),
159
+ },
160
+ ];
161
+ const written = [];
162
+ for (const template of templates) {
163
+ const target = path.join(dir, template.name);
164
+ if (!(await pathExists(target))) {
165
+ await fsp.writeFile(target, template.content, "utf8");
166
+ written.push(target);
167
+ }
168
+ }
169
+ return written;
170
+ }
171
+ function parseFrontmatter(text) {
172
+ if (!text.startsWith("---\n")) {
173
+ return { meta: {}, body: text };
174
+ }
175
+ const end = text.indexOf("\n---", 4);
176
+ if (end < 0) {
177
+ return { meta: {}, body: text };
178
+ }
179
+ const raw = text.slice(4, end).trim();
180
+ const body = text.slice(end + 4).replace(/^\r?\n/, "");
181
+ const meta = {};
182
+ for (const line of raw.split(/\r?\n/)) {
183
+ const idx = line.indexOf(":");
184
+ if (idx <= 0) {
185
+ continue;
186
+ }
187
+ const key = line.slice(0, idx).trim();
188
+ const value = line.slice(idx + 1).trim().replace(/^["']|["']$/g, "");
189
+ if (key) {
190
+ meta[key] = value;
191
+ }
192
+ }
193
+ return { meta, body };
194
+ }
195
+ function parseMode(value) {
196
+ if (value === "plan" || value === "fanout" || value === "ask" || value === "inject") {
197
+ return value;
198
+ }
199
+ return "run";
200
+ }
201
+ function parseBackend(value) {
202
+ return value === "claude" || value === "codex" || value === "acpx" ? value : undefined;
203
+ }
204
+ function parseEffort(value) {
205
+ return value === "low" || value === "medium" || value === "high" || value === "xhigh" || value === "max"
206
+ ? value
207
+ : undefined;
208
+ }
209
+ function parseBoolean(value) {
210
+ return value === "true" || value === "1" || value === "yes";
211
+ }
212
+ //# sourceMappingURL=recipes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipes.js","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
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>;
@@ -0,0 +1,153 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routines.js","sourceRoot":"","sources":["../src/routines.ts"],"names":[],"mappings":"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"}
@@ -14,26 +14,6 @@ export declare function startRun(params: {
14
14
  silent?: boolean;
15
15
  view?: "default" | "shell";
16
16
  }): Promise<RunRecord>;
17
- export declare function startNativeRun(params: {
18
- task: string;
19
- tmuxSessionName: string;
20
- backend?: Exclude<BackendId, "acpx">;
21
- model?: string;
22
- effort?: EffortLevel;
23
- workerPaneId?: string;
24
- focus?: boolean;
25
- silent?: boolean;
26
- }): Promise<RunRecord>;
27
- export declare function startNativePlan(params: {
28
- task: string;
29
- tmuxSessionName: string;
30
- backend?: Exclude<BackendId, "acpx">;
31
- model?: string;
32
- effort?: EffortLevel;
33
- workerPaneId?: string;
34
- focus?: boolean;
35
- silent?: boolean;
36
- }): Promise<RunRecord>;
37
17
  export declare function continueRun(params: {
38
18
  runId: string;
39
19
  prompt: string;
@@ -79,4 +59,3 @@ export declare function deleteRun(runId: string, options?: {
79
59
  silent?: boolean;
80
60
  }): Promise<void>;
81
61
  export declare function cleanupRuns(force?: boolean): Promise<void>;
82
- export declare function reconcileNativeTerminals(repoRoot: string): Promise<void>;