@viraatdas/rudder 0.2.0 → 0.3.1
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/README.md +15 -1
- package/dist/backends.js +20 -6
- package/dist/backends.js.map +1 -1
- package/dist/brain.js +12 -3
- package/dist/brain.js.map +1 -1
- package/dist/run-manager.d.ts +6 -0
- package/dist/run-manager.js +255 -56
- package/dist/run-manager.js.map +1 -1
- package/dist/state.d.ts +1 -0
- package/dist/state.js +7 -0
- package/dist/state.js.map +1 -1
- package/dist/tui.js +209 -30
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +14 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -68,7 +68,8 @@ rudder
|
|
|
68
68
|
|
|
69
69
|
Type a task in the prompt dock and press `Enter`. Rudder starts the agent in the
|
|
70
70
|
background, keeps its transcript visible, and tracks planner/verifier work in
|
|
71
|
-
the agent pane.
|
|
71
|
+
the agent pane. TUI runs default to isolated worktrees so parallel agents do not
|
|
72
|
+
touch the same checkout.
|
|
72
73
|
|
|
73
74
|
```text
|
|
74
75
|
Enter submit task or slash command
|
|
@@ -76,9 +77,12 @@ Tab switch backend
|
|
|
76
77
|
j/k select agent run
|
|
77
78
|
x expand or collapse selected run
|
|
78
79
|
l expand transcript
|
|
80
|
+
Esc/c type a follow-up to the selected agent; if it is running, Enter interrupts and redirects it
|
|
81
|
+
n return to new-agent mode
|
|
79
82
|
w toggle worktree auto/always
|
|
80
83
|
s stop selected run
|
|
81
84
|
m merge selected worktree run
|
|
85
|
+
M merge all completed worktree runs
|
|
82
86
|
? help
|
|
83
87
|
q quit
|
|
84
88
|
```
|
|
@@ -88,13 +92,23 @@ Slash commands are available inside the TUI:
|
|
|
88
92
|
```text
|
|
89
93
|
/backend claude|codex|acpx
|
|
90
94
|
/model <model>
|
|
95
|
+
/agent [runId]
|
|
96
|
+
/interrupt [runId]
|
|
97
|
+
/new
|
|
91
98
|
/worktree auto|always
|
|
92
99
|
/stop [runId]
|
|
93
100
|
/merge [runId] [--allow-dirty]
|
|
101
|
+
/merge-all [--allow-dirty]
|
|
94
102
|
/clear
|
|
95
103
|
/exit
|
|
96
104
|
```
|
|
97
105
|
|
|
106
|
+
After an agent finishes, Rudder waits 10 seconds for user input and then sends
|
|
107
|
+
an automatic steering prompt asking what remains, whether the work looks good,
|
|
108
|
+
and whether the relevant checks were run. Each run also updates
|
|
109
|
+
`.rudder/agent-context.md`; that generated file is injected into new agent
|
|
110
|
+
prompts so agents can see what other agents are working on.
|
|
111
|
+
|
|
98
112
|
Direct one-shot commands still work:
|
|
99
113
|
|
|
100
114
|
```bash
|
package/dist/backends.js
CHANGED
|
@@ -20,7 +20,9 @@ function claudeBackend() {
|
|
|
20
20
|
: { ok: false, message: "claude is not on PATH" };
|
|
21
21
|
},
|
|
22
22
|
async run(request, emit) {
|
|
23
|
-
const
|
|
23
|
+
const existingSessionId = request.run.session?.nativeSessionId;
|
|
24
|
+
const isFollowUp = (request.run.turns?.length ?? 0) > 1;
|
|
25
|
+
const sessionId = existingSessionId ?? randomUUID();
|
|
24
26
|
request.run.session = {
|
|
25
27
|
...(request.run.session ?? {}),
|
|
26
28
|
nativeSessionId: sessionId,
|
|
@@ -43,8 +45,9 @@ function claudeBackend() {
|
|
|
43
45
|
"--include-partial-messages",
|
|
44
46
|
"--append-system-prompt",
|
|
45
47
|
request.contract,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
...(isFollowUp && existingSessionId
|
|
49
|
+
? ["--resume", existingSessionId, "--fork-session"]
|
|
50
|
+
: ["--session-id", sessionId]),
|
|
48
51
|
];
|
|
49
52
|
return await spawnAndStream({
|
|
50
53
|
command: "claude",
|
|
@@ -191,7 +194,7 @@ async function spawnAndStream(params) {
|
|
|
191
194
|
const enqueueBackendLine = (line, stderr) => {
|
|
192
195
|
emitQueue = emitQueue
|
|
193
196
|
.then(async () => {
|
|
194
|
-
await emitBackendLine(params.request.run
|
|
197
|
+
await emitBackendLine(params.request.run, line, params.emit, stderr, streamState);
|
|
195
198
|
})
|
|
196
199
|
.catch(async (error) => {
|
|
197
200
|
await params.emit({
|
|
@@ -249,7 +252,7 @@ async function spawnAndStream(params) {
|
|
|
249
252
|
});
|
|
250
253
|
});
|
|
251
254
|
}
|
|
252
|
-
async function emitBackendLine(
|
|
255
|
+
async function emitBackendLine(run, line, emit, stderr, streamState) {
|
|
253
256
|
const trimmed = line.trimEnd();
|
|
254
257
|
if (!trimmed) {
|
|
255
258
|
return;
|
|
@@ -259,14 +262,25 @@ async function emitBackendLine(runId, line, emit, stderr, streamState) {
|
|
|
259
262
|
if (isStreamingTextEvent(parsed)) {
|
|
260
263
|
streamState.sawStreamingText = true;
|
|
261
264
|
}
|
|
265
|
+
const sessionId = sessionIdFromBackendData(parsed);
|
|
266
|
+
if (sessionId && run.session?.nativeSessionId !== sessionId) {
|
|
267
|
+
run.session = {
|
|
268
|
+
...(run.session ?? {}),
|
|
269
|
+
nativeSessionId: sessionId,
|
|
270
|
+
};
|
|
271
|
+
await saveRunRecord(run);
|
|
272
|
+
}
|
|
262
273
|
await emit({
|
|
263
274
|
ts: nowIso(),
|
|
264
|
-
runId,
|
|
275
|
+
runId: run.id,
|
|
265
276
|
type: stderr ? "backend.error" : "backend.output",
|
|
266
277
|
message: message || undefined,
|
|
267
278
|
data: parsed ?? trimmed,
|
|
268
279
|
});
|
|
269
280
|
}
|
|
281
|
+
function sessionIdFromBackendData(data) {
|
|
282
|
+
return isRecord(data) && typeof data.session_id === "string" ? data.session_id : undefined;
|
|
283
|
+
}
|
|
270
284
|
function textFromBackendData(data, sawStreamingText) {
|
|
271
285
|
if (!data || typeof data !== "object") {
|
|
272
286
|
return "";
|
package/dist/backends.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backends.js","sourceRoot":"","sources":["../src/backends.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"backends.js","sourceRoot":"","sources":["../src/backends.ts"],"names":[],"mappings":"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"}
|
package/dist/brain.js
CHANGED
|
@@ -2,7 +2,7 @@ import fsp from "node:fs/promises";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { currentBranch, currentCommit, gitDiff, gitStatus, hasChanges } from "./git.js";
|
|
4
4
|
import { pathExists, readJson, runCommand, writeJson } from "./util.js";
|
|
5
|
-
import { specPath, verifierPath } from "./state.js";
|
|
5
|
+
import { agentContextPath, specPath, verifierPath } from "./state.js";
|
|
6
6
|
const INSTRUCTION_FILES = ["AGENTS.md", "CLAUDE.md", "README.md"];
|
|
7
7
|
export async function createSpec(run) {
|
|
8
8
|
const workspace = run.worktree.path;
|
|
@@ -18,9 +18,18 @@ export async function createSpec(run) {
|
|
|
18
18
|
content: content.slice(0, 12_000),
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
+
const contextFile = agentContextPath(run.repoRoot);
|
|
22
|
+
if (await pathExists(contextFile)) {
|
|
23
|
+
const content = await fsp.readFile(contextFile, "utf8");
|
|
24
|
+
instructionsFiles.push({
|
|
25
|
+
path: ".rudder/agent-context.md",
|
|
26
|
+
content: content.slice(0, 12_000),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
const task = run.currentPrompt ?? run.task;
|
|
21
30
|
const spec = {
|
|
22
31
|
runId: run.id,
|
|
23
|
-
task
|
|
32
|
+
task,
|
|
24
33
|
createdAt: new Date().toISOString(),
|
|
25
34
|
repo: {
|
|
26
35
|
root: workspace,
|
|
@@ -29,7 +38,7 @@ export async function createSpec(run) {
|
|
|
29
38
|
status: await gitStatus(workspace),
|
|
30
39
|
},
|
|
31
40
|
instructionsFiles,
|
|
32
|
-
acceptanceCriteria: buildAcceptanceCriteria(
|
|
41
|
+
acceptanceCriteria: buildAcceptanceCriteria(task),
|
|
33
42
|
suggestedTests: await suggestTests(workspace),
|
|
34
43
|
};
|
|
35
44
|
await writeJson(specPath(run.repoRoot, run.id), spec);
|
package/dist/brain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain.js","sourceRoot":"","sources":["../src/brain.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,kBAAkB,CAAC;AACnC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"brain.js","sourceRoot":"","sources":["../src/brain.ts"],"names":[],"mappings":"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"}
|
package/dist/run-manager.d.ts
CHANGED
|
@@ -13,6 +13,12 @@ export declare function startRun(params: {
|
|
|
13
13
|
silent?: boolean;
|
|
14
14
|
view?: "default" | "shell";
|
|
15
15
|
}): Promise<RunRecord>;
|
|
16
|
+
export declare function continueRun(params: {
|
|
17
|
+
runId: string;
|
|
18
|
+
prompt: string;
|
|
19
|
+
interrupt?: boolean;
|
|
20
|
+
silent?: boolean;
|
|
21
|
+
}): Promise<RunRecord>;
|
|
16
22
|
export declare function workerRun(repoRoot: string, runId: string): Promise<void>;
|
|
17
23
|
export declare function statusRuns(options?: {
|
|
18
24
|
json?: boolean;
|
package/dist/run-manager.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import fsp from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
3
4
|
import { createSpec, renderContract, verifyRun } from "./brain.js";
|
|
4
5
|
import { getBackend } from "./backends.js";
|
|
5
|
-
import { createRunRecord, eventsPath, listRuns, loadConfig, loadRunRecord, outputPath, resolveRun, runDir, saveConfig, saveRunRecord, } from "./state.js";
|
|
6
|
+
import { createRunRecord, agentContextPath, eventsPath, listRuns, loadConfig, loadRunRecord, outputPath, resolveRun, runDir, saveConfig, saveRunRecord, } from "./state.js";
|
|
6
7
|
import { appendEvent, } from "./state.js";
|
|
7
8
|
import { activeRunsForCheckout, createRunWorktree, currentBranch, currentCommit, findRepoRoot, mergeRunIntoCurrentBranch, processAlive, removeWorktree, } from "./git.js";
|
|
8
9
|
import { ensureDir, isTty, newRunId, nowIso, pathExists, shortenHome } from "./util.js";
|
|
10
|
+
const AUTO_STEER_DELAY_MS = 10_000;
|
|
9
11
|
export async function startRun(params) {
|
|
10
12
|
const repoRoot = findRepoRoot();
|
|
11
13
|
const config = await loadConfig();
|
|
@@ -47,6 +49,7 @@ export async function startRun(params) {
|
|
|
47
49
|
? `Created worktree ${shortenHome(worktreeInfo.path)}`
|
|
48
50
|
: "Created run in current checkout",
|
|
49
51
|
});
|
|
52
|
+
await writeAgentContext(repoRoot);
|
|
50
53
|
config.lastUsedBackend = backend;
|
|
51
54
|
await saveConfig(config);
|
|
52
55
|
const worker = spawn(process.execPath, [process.argv[1] ?? "", "__worker", "--repo", repoRoot, "--run", run.id], {
|
|
@@ -92,72 +95,165 @@ export async function startRun(params) {
|
|
|
92
95
|
});
|
|
93
96
|
return run;
|
|
94
97
|
}
|
|
98
|
+
export async function continueRun(params) {
|
|
99
|
+
const repoRoot = findRepoRoot();
|
|
100
|
+
const run = await loadRunRecord(repoRoot, params.runId);
|
|
101
|
+
if (!run) {
|
|
102
|
+
throw new Error(`Run not found: ${params.runId}`);
|
|
103
|
+
}
|
|
104
|
+
if (isActiveStatus(run.status) && run.status !== "steering" && !params.interrupt) {
|
|
105
|
+
throw new Error("That agent is still running. Wait for it to finish before sending another message.");
|
|
106
|
+
}
|
|
107
|
+
if (params.interrupt && run.process?.pid && processAlive(run.process.pid)) {
|
|
108
|
+
process.kill(run.process.pid, "SIGTERM");
|
|
109
|
+
await delay(350);
|
|
110
|
+
}
|
|
111
|
+
const prompt = params.prompt.trim();
|
|
112
|
+
if (!prompt) {
|
|
113
|
+
throw new Error("Missing prompt.");
|
|
114
|
+
}
|
|
115
|
+
const ts = nowIso();
|
|
116
|
+
run.status = "running";
|
|
117
|
+
run.currentPrompt = prompt;
|
|
118
|
+
run.lastUserInputAt = ts;
|
|
119
|
+
run.turns = [...(run.turns ?? []), { ts, prompt, source: "user" }];
|
|
120
|
+
run.autoSteer = { count: 0, max: run.autoSteer?.max ?? 2 };
|
|
121
|
+
await saveRunRecord(run);
|
|
122
|
+
await emit(run, {
|
|
123
|
+
ts,
|
|
124
|
+
runId: run.id,
|
|
125
|
+
type: "run.continued",
|
|
126
|
+
message: params.interrupt ? "User interrupted and redirected the agent" : "User continued the agent",
|
|
127
|
+
data: { prompt },
|
|
128
|
+
});
|
|
129
|
+
await writeAgentContext(repoRoot);
|
|
130
|
+
const worker = spawn(process.execPath, [process.argv[1] ?? "", "__worker", "--repo", repoRoot, "--run", run.id], {
|
|
131
|
+
cwd: repoRoot,
|
|
132
|
+
detached: true,
|
|
133
|
+
stdio: "ignore",
|
|
134
|
+
});
|
|
135
|
+
worker.unref();
|
|
136
|
+
run.process = {
|
|
137
|
+
pid: worker.pid,
|
|
138
|
+
startedAt: nowIso(),
|
|
139
|
+
};
|
|
140
|
+
await saveRunRecord(run);
|
|
141
|
+
if (!params.silent) {
|
|
142
|
+
console.log(`Continued ${run.id}`);
|
|
143
|
+
}
|
|
144
|
+
return run;
|
|
145
|
+
}
|
|
95
146
|
export async function workerRun(repoRoot, runId) {
|
|
96
147
|
const run = await loadRunRecord(repoRoot, runId);
|
|
97
148
|
if (!run) {
|
|
98
149
|
throw new Error(`Run not found: ${runId}`);
|
|
99
150
|
}
|
|
100
151
|
try {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
152
|
+
let current = run;
|
|
153
|
+
while (true) {
|
|
154
|
+
const pass = await runBackendPass(current);
|
|
155
|
+
current = pass.run;
|
|
156
|
+
if (pass.exitCode !== 0) {
|
|
157
|
+
if (await newerWorkerOwnsRun(repoRoot, current)) {
|
|
158
|
+
await writeAgentContext(repoRoot);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
current.status = "failed";
|
|
162
|
+
await saveRunRecord(current);
|
|
163
|
+
await emit(current, {
|
|
164
|
+
ts: nowIso(),
|
|
165
|
+
runId,
|
|
166
|
+
type: "run.failed",
|
|
167
|
+
message: `Backend exited with ${pass.exitCode}`,
|
|
168
|
+
});
|
|
169
|
+
await writeAgentContext(repoRoot);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
current.status = "verifying";
|
|
173
|
+
await saveRunRecord(current);
|
|
174
|
+
const verification = await verifyRun(current);
|
|
175
|
+
current.verification = verification;
|
|
176
|
+
await saveRunRecord(current);
|
|
177
|
+
await emit(current, {
|
|
178
|
+
ts: nowIso(),
|
|
179
|
+
runId,
|
|
180
|
+
type: "verifier.result",
|
|
181
|
+
message: verification.notes,
|
|
182
|
+
data: verification,
|
|
183
|
+
});
|
|
184
|
+
if (await shouldAutoSteer(current, verification)) {
|
|
185
|
+
const waitingSince = nowIso();
|
|
186
|
+
current.status = "steering";
|
|
187
|
+
current.autoSteer = {
|
|
188
|
+
count: current.autoSteer?.count ?? 0,
|
|
189
|
+
max: current.autoSteer?.max ?? 2,
|
|
190
|
+
waitingSince,
|
|
191
|
+
};
|
|
192
|
+
await saveRunRecord(current);
|
|
193
|
+
await emit(current, {
|
|
194
|
+
ts: waitingSince,
|
|
195
|
+
runId,
|
|
196
|
+
type: "steerer.waiting",
|
|
197
|
+
message: "Waiting 10 seconds before automatic steering",
|
|
198
|
+
});
|
|
199
|
+
await writeAgentContext(repoRoot);
|
|
200
|
+
await delay(AUTO_STEER_DELAY_MS);
|
|
201
|
+
const latest = await loadRunRecord(repoRoot, runId);
|
|
202
|
+
if (!latest) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (latest.lastUserInputAt && latest.lastUserInputAt > waitingSince) {
|
|
206
|
+
if (latest.status !== "running") {
|
|
207
|
+
latest.status = "completed";
|
|
208
|
+
await saveRunRecord(latest);
|
|
209
|
+
await emit(latest, {
|
|
210
|
+
ts: nowIso(),
|
|
211
|
+
runId,
|
|
212
|
+
type: "run.completed",
|
|
213
|
+
message: "Run completed; user follow-up took over steering",
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
await writeAgentContext(repoRoot);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const steeringPrompt = buildSteeringPrompt(verification);
|
|
220
|
+
latest.currentPrompt = steeringPrompt;
|
|
221
|
+
latest.turns = [...(latest.turns ?? []), { ts: nowIso(), prompt: steeringPrompt, source: "steerer" }];
|
|
222
|
+
latest.autoSteer = {
|
|
223
|
+
count: (latest.autoSteer?.count ?? 0) + 1,
|
|
224
|
+
max: latest.autoSteer?.max ?? 2,
|
|
225
|
+
};
|
|
226
|
+
latest.status = "running";
|
|
227
|
+
await saveRunRecord(latest);
|
|
228
|
+
await emit(latest, {
|
|
229
|
+
ts: nowIso(),
|
|
230
|
+
runId,
|
|
231
|
+
type: "steerer.prompt",
|
|
232
|
+
message: "Automatic steering prompt sent",
|
|
233
|
+
data: { prompt: steeringPrompt },
|
|
234
|
+
});
|
|
235
|
+
current = latest;
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
current.status = verification.shouldContinue ? "failed" : "completed";
|
|
239
|
+
await saveRunRecord(current);
|
|
240
|
+
await emit(current, {
|
|
131
241
|
ts: nowIso(),
|
|
132
242
|
runId,
|
|
133
|
-
type: "run.failed",
|
|
134
|
-
message:
|
|
243
|
+
type: current.status === "completed" ? "run.completed" : "run.failed",
|
|
244
|
+
message: current.status === "completed"
|
|
245
|
+
? "Run completed"
|
|
246
|
+
: `Run failed verification: ${verification.missing.join("; ")}`,
|
|
135
247
|
});
|
|
248
|
+
await writeAgentContext(repoRoot);
|
|
136
249
|
return;
|
|
137
250
|
}
|
|
138
|
-
run.status = "verifying";
|
|
139
|
-
await saveRunRecord(run);
|
|
140
|
-
const verification = await verifyRun(run);
|
|
141
|
-
run.verification = verification;
|
|
142
|
-
run.status = verification.shouldContinue ? "failed" : "completed";
|
|
143
|
-
await saveRunRecord(run);
|
|
144
|
-
await emit(run, {
|
|
145
|
-
ts: nowIso(),
|
|
146
|
-
runId,
|
|
147
|
-
type: "verifier.result",
|
|
148
|
-
message: verification.notes,
|
|
149
|
-
data: verification,
|
|
150
|
-
});
|
|
151
|
-
await emit(run, {
|
|
152
|
-
ts: nowIso(),
|
|
153
|
-
runId,
|
|
154
|
-
type: run.status === "completed" ? "run.completed" : "run.failed",
|
|
155
|
-
message: run.status === "completed"
|
|
156
|
-
? "Run completed"
|
|
157
|
-
: `Run failed verification: ${verification.missing.join("; ")}`,
|
|
158
|
-
});
|
|
159
251
|
}
|
|
160
252
|
catch (error) {
|
|
253
|
+
if (await newerWorkerOwnsRun(repoRoot, run)) {
|
|
254
|
+
await writeAgentContext(repoRoot);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
161
257
|
const message = error instanceof Error ? error.message : String(error);
|
|
162
258
|
run.status = "failed";
|
|
163
259
|
run.process = {
|
|
@@ -173,12 +269,111 @@ export async function workerRun(repoRoot, runId) {
|
|
|
173
269
|
type: "run.failed",
|
|
174
270
|
message,
|
|
175
271
|
});
|
|
272
|
+
await writeAgentContext(repoRoot);
|
|
176
273
|
}
|
|
177
274
|
}
|
|
275
|
+
async function newerWorkerOwnsRun(repoRoot, staleRun) {
|
|
276
|
+
const latest = await loadRunRecord(repoRoot, staleRun.id);
|
|
277
|
+
return Boolean(latest &&
|
|
278
|
+
isActiveStatus(latest.status) &&
|
|
279
|
+
latest.process?.startedAt &&
|
|
280
|
+
staleRun.process?.startedAt &&
|
|
281
|
+
latest.process.startedAt !== staleRun.process.startedAt);
|
|
282
|
+
}
|
|
283
|
+
async function runBackendPass(run) {
|
|
284
|
+
const spec = await createSpec(run);
|
|
285
|
+
await emit(run, {
|
|
286
|
+
ts: nowIso(),
|
|
287
|
+
runId: run.id,
|
|
288
|
+
type: "planner.spec",
|
|
289
|
+
message: "Planner contract created",
|
|
290
|
+
data: spec,
|
|
291
|
+
});
|
|
292
|
+
const backend = getBackend(run.backend);
|
|
293
|
+
const health = await backend.verify();
|
|
294
|
+
if (!health.ok) {
|
|
295
|
+
throw new Error(health.message);
|
|
296
|
+
}
|
|
297
|
+
const exitCode = await backend.run({
|
|
298
|
+
run,
|
|
299
|
+
prompt: run.currentPrompt ?? run.task,
|
|
300
|
+
contract: renderContract(spec),
|
|
301
|
+
}, async (event) => {
|
|
302
|
+
await emit(run, event);
|
|
303
|
+
});
|
|
304
|
+
run.process = {
|
|
305
|
+
...(run.process ?? {}),
|
|
306
|
+
endedAt: nowIso(),
|
|
307
|
+
exitCode,
|
|
308
|
+
signal: null,
|
|
309
|
+
};
|
|
310
|
+
await saveRunRecord(run);
|
|
311
|
+
return { run, exitCode };
|
|
312
|
+
}
|
|
313
|
+
async function shouldAutoSteer(run, verification) {
|
|
314
|
+
if (run.status === "cancelled" || run.status === "merged" || run.status === "merge-conflict") {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
const max = run.autoSteer?.max ?? 2;
|
|
318
|
+
const count = run.autoSteer?.count ?? 0;
|
|
319
|
+
if (count >= max) {
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
if (verification.shouldContinue || verification.missing.length > 0) {
|
|
323
|
+
return true;
|
|
324
|
+
}
|
|
325
|
+
return count === 0;
|
|
326
|
+
}
|
|
327
|
+
function buildSteeringPrompt(verification) {
|
|
328
|
+
const missing = verification.missing.length
|
|
329
|
+
? `\nKnown gaps:\n${verification.missing.map((item) => `- ${item}`).join("\n")}`
|
|
330
|
+
: "";
|
|
331
|
+
return [
|
|
332
|
+
"Rudder automatic steering check:",
|
|
333
|
+
"Pause and review the work you just completed.",
|
|
334
|
+
"What remaining tasks are there, if any?",
|
|
335
|
+
"Does the implementation look correct and scoped?",
|
|
336
|
+
"Were the relevant tests/checks run? If not, run the smallest useful checks now or explain why not.",
|
|
337
|
+
"If anything is missing, fix it. If everything is done, say that clearly and do not make unnecessary changes.",
|
|
338
|
+
missing,
|
|
339
|
+
]
|
|
340
|
+
.filter(Boolean)
|
|
341
|
+
.join("\n");
|
|
342
|
+
}
|
|
343
|
+
async function writeAgentContext(repoRoot) {
|
|
344
|
+
const runs = await listRuns(repoRoot);
|
|
345
|
+
const active = runs.filter((run) => isActiveStatus(run.status));
|
|
346
|
+
const lines = [
|
|
347
|
+
"# Rudder Agent Context",
|
|
348
|
+
"",
|
|
349
|
+
"This file is generated by Rudder and injected into new agent prompts so each agent can see what the others are doing.",
|
|
350
|
+
"",
|
|
351
|
+
`Updated: ${nowIso()}`,
|
|
352
|
+
"",
|
|
353
|
+
"## Active Agents",
|
|
354
|
+
...(active.length
|
|
355
|
+
? active.map((run) => formatAgentContextRun(run))
|
|
356
|
+
: ["- None"]),
|
|
357
|
+
"",
|
|
358
|
+
"## Recent Agents",
|
|
359
|
+
...runs.slice(0, 12).map((run) => formatAgentContextRun(run)),
|
|
360
|
+
"",
|
|
361
|
+
];
|
|
362
|
+
await ensureDir(path.dirname(agentContextPath(repoRoot)));
|
|
363
|
+
await fsp.writeFile(agentContextPath(repoRoot), `${lines.join("\n")}\n`, "utf8");
|
|
364
|
+
}
|
|
365
|
+
function formatAgentContextRun(run) {
|
|
366
|
+
const location = run.worktree.enabled ? `worktree=${shortenHome(run.worktree.path)}` : "current checkout";
|
|
367
|
+
const prompt = run.currentPrompt && run.currentPrompt !== run.task ? ` current="${run.currentPrompt.slice(0, 140)}"` : "";
|
|
368
|
+
return `- ${run.id}: ${run.status}, ${run.backend}, ${location}, task="${run.task.slice(0, 140)}"${prompt}`;
|
|
369
|
+
}
|
|
370
|
+
function delay(ms) {
|
|
371
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
372
|
+
}
|
|
178
373
|
export async function statusRuns(options) {
|
|
179
374
|
const repoRoot = findRepoRoot();
|
|
180
375
|
const runs = await listRuns(repoRoot);
|
|
181
|
-
const active = runs.filter((run) =>
|
|
376
|
+
const active = runs.filter((run) => isActiveStatus(run.status));
|
|
182
377
|
if (options?.json) {
|
|
183
378
|
console.log(JSON.stringify({ repoRoot, active, runs }, null, 2));
|
|
184
379
|
return;
|
|
@@ -282,6 +477,7 @@ export async function stopRun(runId, options) {
|
|
|
282
477
|
};
|
|
283
478
|
await saveRunRecord(run);
|
|
284
479
|
await emit(run, { ts: nowIso(), runId, type: "run.cancelled", message: "Run cancelled" });
|
|
480
|
+
await writeAgentContext(repoRoot);
|
|
285
481
|
if (!options?.silent) {
|
|
286
482
|
console.log(`Stopped ${runId}`);
|
|
287
483
|
}
|
|
@@ -303,11 +499,13 @@ export async function mergeRun(runId, allowDirty = false, options) {
|
|
|
303
499
|
data: (merged.merge ?? {}),
|
|
304
500
|
});
|
|
305
501
|
if (merged.merge?.status === "merged") {
|
|
502
|
+
await writeAgentContext(repoRoot);
|
|
306
503
|
if (!options?.silent) {
|
|
307
504
|
console.log(`Merged ${runId}`);
|
|
308
505
|
}
|
|
309
506
|
return;
|
|
310
507
|
}
|
|
508
|
+
await writeAgentContext(repoRoot);
|
|
311
509
|
if (!options?.silent) {
|
|
312
510
|
console.log(`Merge conflict for ${runId}`);
|
|
313
511
|
for (const file of merged.merge?.conflictedFiles ?? []) {
|
|
@@ -328,6 +526,7 @@ export async function cleanupRuns(force = false) {
|
|
|
328
526
|
await removeWorktree(repoRoot, run.worktree.path, force).catch(() => undefined);
|
|
329
527
|
console.log(`Removed ${shortenHome(run.worktree.path)}`);
|
|
330
528
|
}
|
|
529
|
+
await writeAgentContext(repoRoot);
|
|
331
530
|
}
|
|
332
531
|
async function emit(run, event) {
|
|
333
532
|
await ensureDir(runDir(run.repoRoot, run.id));
|
|
@@ -588,7 +787,7 @@ async function followFile(file, startOffset, onChunk, signal) {
|
|
|
588
787
|
}
|
|
589
788
|
}
|
|
590
789
|
function isActiveStatus(status) {
|
|
591
|
-
return status === "created" || status === "running" || status === "verifying";
|
|
790
|
+
return status === "created" || status === "running" || status === "steering" || status === "verifying";
|
|
592
791
|
}
|
|
593
792
|
function terminalExitCode(status) {
|
|
594
793
|
return status === "completed" || status === "merged" ? 0 : 1;
|