@viraatdas/rudder 0.3.9 → 0.4.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/README.md +26 -43
- package/dist/main.js +81 -2
- package/dist/main.js.map +1 -1
- package/dist/native-agents.d.ts +6 -0
- package/dist/native-agents.js +60 -0
- package/dist/native-agents.js.map +1 -0
- package/dist/run-manager.d.ts +9 -0
- package/dist/run-manager.js +119 -1
- package/dist/run-manager.js.map +1 -1
- package/dist/tmux-dashboard.d.ts +8 -0
- package/dist/tmux-dashboard.js +323 -0
- package/dist/tmux-dashboard.js.map +1 -0
- package/dist/tmux.d.ts +20 -0
- package/dist/tmux.js +90 -0
- package/dist/tmux.js.map +1 -0
- package/dist/tui.js +39 -5
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
[](https://nodejs.org/)
|
|
6
6
|
[](#run)
|
|
7
7
|
|
|
8
|
-
Rudder is a Claude Code-style terminal
|
|
9
|
-
letting parallel tasks fight over the same checkout. It
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
Rudder is a Claude Code-style terminal command center for running coding agents
|
|
9
|
+
without letting parallel tasks fight over the same checkout. It opens a tmux
|
|
10
|
+
dashboard, creates one git worktree per task, and launches real Claude Code or
|
|
11
|
+
Codex terminal panes so you keep the full native agent experience.
|
|
12
12
|
|
|
13
13
|
## Quick Start
|
|
14
14
|
|
|
@@ -40,6 +40,7 @@ npx @viraatdas/rudder@latest --help
|
|
|
40
40
|
|
|
41
41
|
- Node.js 20 or newer
|
|
42
42
|
- Git, for run tracking and worktree isolation
|
|
43
|
+
- tmux, for the native multi-pane dashboard
|
|
43
44
|
- Claude Code and/or Codex installed and logged in
|
|
44
45
|
|
|
45
46
|
Check your setup:
|
|
@@ -66,42 +67,33 @@ Detected auth sources:
|
|
|
66
67
|
|
|
67
68
|
## Run
|
|
68
69
|
|
|
69
|
-
Open the
|
|
70
|
+
Open the tmux dashboard:
|
|
70
71
|
|
|
71
72
|
```bash
|
|
72
73
|
rudder
|
|
73
74
|
```
|
|
74
75
|
|
|
75
|
-
The
|
|
76
|
-
|
|
76
|
+
The dashboard stays in one pane. Every task opens a separate native worker pane
|
|
77
|
+
running `claude` or `codex` in its own git worktree. Focus a worker pane to use
|
|
78
|
+
Claude Code or Codex directly, including their slash commands, interrupts,
|
|
79
|
+
copy/paste, model controls, resume behavior, and terminal UI.
|
|
77
80
|
|
|
78
81
|
| Key | Action |
|
|
79
82
|
| --- | --- |
|
|
80
|
-
| `
|
|
81
|
-
| `
|
|
83
|
+
| `Enter` | Start a task, or focus the selected worker if the task box is empty |
|
|
84
|
+
| `Tab` | Toggle backend between Claude and Codex |
|
|
82
85
|
| `j` / `k` or arrows | Select an agent run |
|
|
83
|
-
| `
|
|
84
|
-
| `n` | Return to new-task mode |
|
|
86
|
+
| `f` | Focus the selected native worker pane |
|
|
85
87
|
| `o` or `/model` | Open the model picker |
|
|
86
|
-
| `/` | Open searchable slash commands |
|
|
87
|
-
| `x` | Expand/collapse selected run |
|
|
88
|
-
| `l` | Expand/collapse transcript |
|
|
89
88
|
| `s` | Stop selected run |
|
|
90
|
-
| `d` | Delete selected run, with an offer to merge
|
|
91
|
-
| `y` | Copy the selected worker transcript to the clipboard |
|
|
89
|
+
| `d` | Delete selected run, with an offer to merge first when there are changes |
|
|
92
90
|
| `m` | Merge selected completed worktree run |
|
|
93
|
-
| `M` | Merge all completed worktree runs |
|
|
94
91
|
| `Cmd+Backspace` / `Ctrl+U` | Clear the input line |
|
|
95
|
-
|
|
|
96
|
-
| `q` | Quit |
|
|
92
|
+
| `q` or `Ctrl+C` | Detach from the tmux session |
|
|
97
93
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
Paste works directly in the task and worker input. For long pasted prompts,
|
|
103
|
-
Rudder normalizes line breaks into spaces so the prompt stays inside the input
|
|
104
|
-
box.
|
|
94
|
+
Inside a worker pane, Rudder is out of the way. You are in the real Claude Code
|
|
95
|
+
or Codex process. Use tmux mouse support, your terminal copy mode, or native
|
|
96
|
+
agent keybindings normally.
|
|
105
97
|
|
|
106
98
|
Slash commands:
|
|
107
99
|
|
|
@@ -109,27 +101,16 @@ Slash commands:
|
|
|
109
101
|
/backend claude|codex
|
|
110
102
|
/model
|
|
111
103
|
/model <model-id>
|
|
112
|
-
/agent [runId]
|
|
113
|
-
/interrupt [runId]
|
|
114
|
-
/new
|
|
115
|
-
/worktree auto|always
|
|
116
|
-
/stop [runId]
|
|
117
|
-
/delete [runId]
|
|
118
|
-
/copy [runId]
|
|
119
|
-
/merge [runId] [--allow-dirty]
|
|
120
|
-
/merge-all [--allow-dirty]
|
|
121
|
-
/clear
|
|
122
|
-
/exit
|
|
123
104
|
```
|
|
124
105
|
|
|
125
|
-
|
|
126
|
-
|
|
106
|
+
If tmux is not installed, or you pass `--no-tmux`, Rudder falls back to the
|
|
107
|
+
legacy full-screen stream TUI.
|
|
127
108
|
|
|
128
109
|
## Models
|
|
129
110
|
|
|
130
111
|
`/model` opens a bounded picker for the active backend. Rudder passes the
|
|
131
112
|
selected value straight through to the underlying CLI: Claude uses
|
|
132
|
-
`claude --model <value>`, and Codex uses `codex
|
|
113
|
+
`claude --model <value>`, and Codex uses `codex --model <value>`.
|
|
133
114
|
|
|
134
115
|
- Claude is alias-first like Claude Code itself: `sonnet`, `sonnet[1m]`,
|
|
135
116
|
`opus`, `opus[1m]`, and `haiku` appear before explicit model IDs.
|
|
@@ -166,9 +147,10 @@ Each run gets a lightweight Rudder contract with:
|
|
|
166
147
|
- acceptance criteria for the task
|
|
167
148
|
- suggested verification commands
|
|
168
149
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
150
|
+
For tmux-launched agents, the contract is injected into the native process at
|
|
151
|
+
startup. The worker pane remains yours after the initial task, so you can keep
|
|
152
|
+
typing into Claude Code or Codex directly. Headless one-shot runs still use
|
|
153
|
+
Rudder's verifier and steering loop.
|
|
172
154
|
|
|
173
155
|
## One-Shot Commands
|
|
174
156
|
|
|
@@ -177,6 +159,7 @@ rudder "fix the failing tests"
|
|
|
177
159
|
rudder claude "fix the auth redirect bug"
|
|
178
160
|
rudder codex --model gpt-5.5 "refactor the parser"
|
|
179
161
|
rudder run -d "rewrite this module"
|
|
162
|
+
rudder tui
|
|
180
163
|
```
|
|
181
164
|
|
|
182
165
|
## Run Management
|
package/dist/main.js
CHANGED
|
@@ -2,10 +2,13 @@ import fsp from "node:fs/promises";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import { authStoreExists, runDoctor, runOnboard } from "./auth.js";
|
|
5
|
+
import { findRepoRoot } from "./git.js";
|
|
5
6
|
import { cleanupRuns, deleteRun, listProjectRuns, mergeRun, printLogs, startRun, statusRuns, stopRun, watchRun, workerRun, } from "./run-manager.js";
|
|
6
7
|
import { runInteractiveShell } from "./repl.js";
|
|
8
|
+
import { runTmuxDashboard } from "./tmux-dashboard.js";
|
|
7
9
|
import { runInteractiveTui } from "./tui.js";
|
|
8
10
|
import { isTty } from "./util.js";
|
|
11
|
+
import { attachTmuxSession, ensureTmuxDashboardSession, hasTmux, repoTmuxSessionName, shellCommand } from "./tmux.js";
|
|
9
12
|
export async function main() {
|
|
10
13
|
const parsed = parseArgs(process.argv.slice(2));
|
|
11
14
|
if (parsed.flags.version || parsed.command === "version") {
|
|
@@ -32,6 +35,10 @@ export async function main() {
|
|
|
32
35
|
}
|
|
33
36
|
if (!parsed.command && isTty() && !parsed.flags.help) {
|
|
34
37
|
await maybeOnboard();
|
|
38
|
+
if (!parsed.flags.noTmux && !parsed.flags.headless && hasTmux()) {
|
|
39
|
+
await openTmuxDashboard(parsed);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
35
42
|
await runInteractiveTui({
|
|
36
43
|
backend: parsed.flags.backend,
|
|
37
44
|
model: parsed.flags.model,
|
|
@@ -44,6 +51,25 @@ export async function main() {
|
|
|
44
51
|
return;
|
|
45
52
|
}
|
|
46
53
|
switch (parsed.command) {
|
|
54
|
+
case "__dashboard": {
|
|
55
|
+
const repo = parsed.flags.repo;
|
|
56
|
+
const tmuxSessionName = parsed.flags.tmuxSession;
|
|
57
|
+
if (!repo || !tmuxSessionName) {
|
|
58
|
+
throw new Error("__dashboard requires --repo and --tmux-session");
|
|
59
|
+
}
|
|
60
|
+
process.chdir(repo);
|
|
61
|
+
await runTmuxDashboard({
|
|
62
|
+
tmuxSessionName,
|
|
63
|
+
backend: parsed.flags.backend,
|
|
64
|
+
model: parsed.flags.model,
|
|
65
|
+
});
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
case "tmux":
|
|
69
|
+
case "dashboard":
|
|
70
|
+
await maybeOnboard();
|
|
71
|
+
await openTmuxDashboard(parsed);
|
|
72
|
+
return;
|
|
47
73
|
case "tui":
|
|
48
74
|
await maybeOnboard();
|
|
49
75
|
await runInteractiveTui({
|
|
@@ -256,6 +282,14 @@ function parseArgs(argv) {
|
|
|
256
282
|
parsed.flags.nonInteractive = true;
|
|
257
283
|
continue;
|
|
258
284
|
}
|
|
285
|
+
if (arg === "--no-tmux") {
|
|
286
|
+
parsed.flags.noTmux = true;
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
if (arg === "--headless") {
|
|
290
|
+
parsed.flags.headless = true;
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
259
293
|
if (takesValue(arg, "--model", "-m")) {
|
|
260
294
|
parsed.flags.model = readValue(argv, ++i, arg);
|
|
261
295
|
continue;
|
|
@@ -276,6 +310,10 @@ function parseArgs(argv) {
|
|
|
276
310
|
parsed.flags.run = readValue(argv, ++i, arg);
|
|
277
311
|
continue;
|
|
278
312
|
}
|
|
313
|
+
if (takesValue(arg, "--tmux-session")) {
|
|
314
|
+
parsed.flags.tmuxSession = readValue(argv, ++i, arg);
|
|
315
|
+
continue;
|
|
316
|
+
}
|
|
279
317
|
if (arg.startsWith("--model=")) {
|
|
280
318
|
parsed.flags.model = arg.slice("--model=".length);
|
|
281
319
|
continue;
|
|
@@ -296,6 +334,10 @@ function parseArgs(argv) {
|
|
|
296
334
|
parsed.flags.run = arg.slice("--run=".length);
|
|
297
335
|
continue;
|
|
298
336
|
}
|
|
337
|
+
if (arg.startsWith("--tmux-session=")) {
|
|
338
|
+
parsed.flags.tmuxSession = arg.slice("--tmux-session=".length);
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
299
341
|
if (!parsed.command && !arg.startsWith("-")) {
|
|
300
342
|
parsed.command = arg;
|
|
301
343
|
continue;
|
|
@@ -330,6 +372,40 @@ async function maybeOnboard() {
|
|
|
330
372
|
}
|
|
331
373
|
await runOnboard();
|
|
332
374
|
}
|
|
375
|
+
async function openTmuxDashboard(parsed) {
|
|
376
|
+
if (!hasTmux()) {
|
|
377
|
+
await runInteractiveTui({
|
|
378
|
+
backend: parsed.flags.backend,
|
|
379
|
+
model: parsed.flags.model,
|
|
380
|
+
worktree: parsed.flags.worktree,
|
|
381
|
+
detach: parsed.flags.detach,
|
|
382
|
+
});
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
const repoRoot = findRepoRoot();
|
|
386
|
+
const sessionName = parsed.flags.tmuxSession ?? repoTmuxSessionName(repoRoot);
|
|
387
|
+
const entry = process.argv[1];
|
|
388
|
+
if (!entry) {
|
|
389
|
+
throw new Error("Cannot locate Rudder entrypoint.");
|
|
390
|
+
}
|
|
391
|
+
const args = [
|
|
392
|
+
entry,
|
|
393
|
+
"__dashboard",
|
|
394
|
+
"--repo",
|
|
395
|
+
repoRoot,
|
|
396
|
+
"--tmux-session",
|
|
397
|
+
sessionName,
|
|
398
|
+
...(parsed.flags.backend ? ["--backend", parsed.flags.backend] : []),
|
|
399
|
+
...(parsed.flags.model ? ["--model", parsed.flags.model] : []),
|
|
400
|
+
];
|
|
401
|
+
await ensureTmuxDashboardSession({
|
|
402
|
+
repoRoot,
|
|
403
|
+
sessionName,
|
|
404
|
+
dashboardCommand: shellCommand(process.execPath, args),
|
|
405
|
+
});
|
|
406
|
+
const code = await attachTmuxSession(sessionName);
|
|
407
|
+
process.exitCode = code;
|
|
408
|
+
}
|
|
333
409
|
async function packageVersion() {
|
|
334
410
|
const packageFile = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "package.json");
|
|
335
411
|
const raw = await fsp.readFile(packageFile, "utf8").catch(() => "");
|
|
@@ -343,8 +419,9 @@ function printHelp() {
|
|
|
343
419
|
console.log(`rudder
|
|
344
420
|
|
|
345
421
|
Usage:
|
|
346
|
-
rudder Open
|
|
347
|
-
rudder
|
|
422
|
+
rudder Open tmux dashboard with native agent panes
|
|
423
|
+
rudder tmux Open tmux dashboard with native agent panes
|
|
424
|
+
rudder tui Open legacy full-screen stream TUI
|
|
348
425
|
rudder "task"
|
|
349
426
|
rudder run [options] "task"
|
|
350
427
|
rudder claude [options] "task"
|
|
@@ -371,6 +448,8 @@ Options:
|
|
|
371
448
|
-m, --model <model> Backend model
|
|
372
449
|
-b, --backend <backend> claude or codex
|
|
373
450
|
-C, --cwd <dir> Run from another directory
|
|
451
|
+
--no-tmux Use the legacy TUI for bare rudder
|
|
452
|
+
--headless Alias for --no-tmux on bare rudder
|
|
374
453
|
--json Machine-readable output
|
|
375
454
|
-v, --version Print version
|
|
376
455
|
--allow-dirty Allow merge into dirty target branch
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { shellQuote } from "./util.js";
|
|
2
|
+
export function nativeAgentCommand(params) {
|
|
3
|
+
const args = params.run.backend === "codex"
|
|
4
|
+
? codexArgs(params.run, params.prompt, params.contract)
|
|
5
|
+
: claudeArgs(params.run, params.prompt, params.contract);
|
|
6
|
+
return args.map(shellQuote).join(" ");
|
|
7
|
+
}
|
|
8
|
+
function claudeArgs(run, prompt, contract) {
|
|
9
|
+
const model = run.model || "sonnet";
|
|
10
|
+
const sessionId = run.session?.nativeSessionId;
|
|
11
|
+
return compact([
|
|
12
|
+
"claude",
|
|
13
|
+
"--model",
|
|
14
|
+
model,
|
|
15
|
+
"--effort",
|
|
16
|
+
"xhigh",
|
|
17
|
+
"--permission-mode",
|
|
18
|
+
"bypassPermissions",
|
|
19
|
+
"--dangerously-skip-permissions",
|
|
20
|
+
"--append-system-prompt",
|
|
21
|
+
contract,
|
|
22
|
+
"--name",
|
|
23
|
+
paneTitle(run),
|
|
24
|
+
sessionId ? "--session-id" : undefined,
|
|
25
|
+
sessionId,
|
|
26
|
+
prompt,
|
|
27
|
+
]);
|
|
28
|
+
}
|
|
29
|
+
function codexArgs(run, prompt, contract) {
|
|
30
|
+
const model = run.model || "gpt-5.5";
|
|
31
|
+
return [
|
|
32
|
+
"codex",
|
|
33
|
+
"--model",
|
|
34
|
+
model,
|
|
35
|
+
"--sandbox",
|
|
36
|
+
"danger-full-access",
|
|
37
|
+
"--ask-for-approval",
|
|
38
|
+
"never",
|
|
39
|
+
"--dangerously-bypass-approvals-and-sandbox",
|
|
40
|
+
"--enable",
|
|
41
|
+
"goals",
|
|
42
|
+
"-c",
|
|
43
|
+
'model_reasoning_effort="xhigh"',
|
|
44
|
+
"-c",
|
|
45
|
+
'model_reasoning_summary="detailed"',
|
|
46
|
+
"-c",
|
|
47
|
+
"model_supports_reasoning_summaries=true",
|
|
48
|
+
"--cd",
|
|
49
|
+
run.worktree.path,
|
|
50
|
+
[contract, "", prompt].join("\n"),
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
function paneTitle(run) {
|
|
54
|
+
const words = run.task.replace(/\s+/g, " ").trim().slice(0, 34);
|
|
55
|
+
return `${run.backend}:${words || run.id.slice(0, 12)}`;
|
|
56
|
+
}
|
|
57
|
+
function compact(values) {
|
|
58
|
+
return values.filter((value) => Boolean(value));
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=native-agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-agents.js","sourceRoot":"","sources":["../src/native-agents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,UAAU,kBAAkB,CAAC,MAIlC;IACC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO;QACzC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;QACvD,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,UAAU,CAAC,GAAc,EAAE,MAAc,EAAE,QAAgB;IAClE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC;IACpC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC;IAC/C,OAAO,OAAO,CAAC;QACb,QAAQ;QACR,SAAS;QACT,KAAK;QACL,UAAU;QACV,OAAO;QACP,mBAAmB;QACnB,mBAAmB;QACnB,gCAAgC;QAChC,wBAAwB;QACxB,QAAQ;QACR,QAAQ;QACR,SAAS,CAAC,GAAG,CAAC;QACd,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;QACtC,SAAS;QACT,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,GAAc,EAAE,MAAc,EAAE,QAAgB;IACjE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC;IACrC,OAAO;QACL,OAAO;QACP,SAAS;QACT,KAAK;QACL,WAAW;QACX,oBAAoB;QACpB,oBAAoB;QACpB,OAAO;QACP,4CAA4C;QAC5C,UAAU;QACV,OAAO;QACP,IAAI;QACJ,gCAAgC;QAChC,IAAI;QACJ,oCAAoC;QACpC,IAAI;QACJ,yCAAyC;QACzC,MAAM;QACN,GAAG,CAAC,QAAQ,CAAC,IAAI;QACjB,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,GAAc;IAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChE,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,KAAK,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,OAAO,CAAC,MAAiC;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACnE,CAAC"}
|
package/dist/run-manager.d.ts
CHANGED
|
@@ -13,6 +13,14 @@ export declare function startRun(params: {
|
|
|
13
13
|
silent?: boolean;
|
|
14
14
|
view?: "default" | "shell";
|
|
15
15
|
}): Promise<RunRecord>;
|
|
16
|
+
export declare function startNativeRun(params: {
|
|
17
|
+
task: string;
|
|
18
|
+
tmuxSessionName: string;
|
|
19
|
+
backend?: Exclude<BackendId, "acpx">;
|
|
20
|
+
model?: string;
|
|
21
|
+
focus?: boolean;
|
|
22
|
+
silent?: boolean;
|
|
23
|
+
}): Promise<RunRecord>;
|
|
16
24
|
export declare function continueRun(params: {
|
|
17
25
|
runId: string;
|
|
18
26
|
prompt: string;
|
|
@@ -20,6 +28,7 @@ export declare function continueRun(params: {
|
|
|
20
28
|
silent?: boolean;
|
|
21
29
|
}): Promise<RunRecord>;
|
|
22
30
|
export declare function workerRun(repoRoot: string, runId: string): Promise<void>;
|
|
31
|
+
export declare function writeAgentContext(repoRoot: string): Promise<void>;
|
|
23
32
|
export declare function statusRuns(options?: {
|
|
24
33
|
json?: boolean;
|
|
25
34
|
}): Promise<void>;
|
package/dist/run-manager.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
2
3
|
import fsp from "node:fs/promises";
|
|
3
4
|
import path from "node:path";
|
|
4
5
|
import { createSpec, renderContract, verifyRun } from "./brain.js";
|
|
5
6
|
import { getBackend } from "./backends.js";
|
|
7
|
+
import { nativeAgentCommand } from "./native-agents.js";
|
|
6
8
|
import { createRunRecord, agentContextPath, eventsPath, listRuns, loadConfig, loadRunRecord, outputPath, resolveRun, runDir, saveConfig, saveRunRecord, } from "./state.js";
|
|
7
9
|
import { appendEvent, } from "./state.js";
|
|
8
10
|
import { activeRunsForCheckout, createRunWorktree, currentBranch, currentCommit, findRepoRoot, hasChanges, mergeRunIntoCurrentBranch, processAlive, removeWorktree, } from "./git.js";
|
|
9
11
|
import { ensureDir, isTty, newRunId, nowIso, pathExists, shortenHome } from "./util.js";
|
|
12
|
+
import { createAgentPane, killPane, selectPane } from "./tmux.js";
|
|
10
13
|
const AUTO_STEER_DELAY_MS = 10_000;
|
|
11
14
|
export async function startRun(params) {
|
|
12
15
|
const repoRoot = findRepoRoot();
|
|
@@ -95,6 +98,109 @@ export async function startRun(params) {
|
|
|
95
98
|
});
|
|
96
99
|
return run;
|
|
97
100
|
}
|
|
101
|
+
export async function startNativeRun(params) {
|
|
102
|
+
const repoRoot = findRepoRoot();
|
|
103
|
+
const config = await loadConfig();
|
|
104
|
+
const backend = params.backend ?? toNativeBackend(config.lastUsedBackend ?? config.defaultBackend);
|
|
105
|
+
const model = params.model ??
|
|
106
|
+
(backend === "claude"
|
|
107
|
+
? normalizeClaudeDefault(config.backends.claude?.model)
|
|
108
|
+
: config.backends.codex?.model);
|
|
109
|
+
const baseCommit = await currentCommit(repoRoot);
|
|
110
|
+
const targetBranch = await currentBranch(repoRoot);
|
|
111
|
+
const id = newRunId(params.task);
|
|
112
|
+
const worktreeInfo = await createRunWorktree({ repoRoot, runId: id, task: params.task, baseCommit });
|
|
113
|
+
const run = await createRunRecord({
|
|
114
|
+
id,
|
|
115
|
+
repoRoot,
|
|
116
|
+
task: params.task,
|
|
117
|
+
backend,
|
|
118
|
+
model,
|
|
119
|
+
targetBranch,
|
|
120
|
+
baseCommit,
|
|
121
|
+
useWorktree: true,
|
|
122
|
+
worktreeBranch: worktreeInfo.branch,
|
|
123
|
+
worktreePath: worktreeInfo.path,
|
|
124
|
+
});
|
|
125
|
+
run.session = {
|
|
126
|
+
...(run.session ?? {}),
|
|
127
|
+
nativeSessionId: backend === "claude" ? randomUUID() : run.session?.nativeSessionId,
|
|
128
|
+
sessionName: params.tmuxSessionName,
|
|
129
|
+
};
|
|
130
|
+
run.status = "running";
|
|
131
|
+
await saveRunRecord(run);
|
|
132
|
+
await emit(run, {
|
|
133
|
+
ts: nowIso(),
|
|
134
|
+
runId: run.id,
|
|
135
|
+
type: "run.created",
|
|
136
|
+
message: `Created worktree ${shortenHome(worktreeInfo.path)}`,
|
|
137
|
+
});
|
|
138
|
+
await writeAgentContext(repoRoot);
|
|
139
|
+
config.lastUsedBackend = backend;
|
|
140
|
+
await saveConfig(config);
|
|
141
|
+
try {
|
|
142
|
+
const backendAdapter = getBackend(backend);
|
|
143
|
+
const health = await backendAdapter.verify();
|
|
144
|
+
if (!health.ok) {
|
|
145
|
+
throw new Error(health.message);
|
|
146
|
+
}
|
|
147
|
+
const spec = await createSpec(run);
|
|
148
|
+
await emit(run, {
|
|
149
|
+
ts: nowIso(),
|
|
150
|
+
runId: run.id,
|
|
151
|
+
type: "planner.spec",
|
|
152
|
+
message: "Planner contract created",
|
|
153
|
+
data: spec,
|
|
154
|
+
});
|
|
155
|
+
const contract = renderContract(spec);
|
|
156
|
+
const command = nativeAgentCommand({
|
|
157
|
+
run,
|
|
158
|
+
prompt: params.task,
|
|
159
|
+
contract,
|
|
160
|
+
});
|
|
161
|
+
await ensureDir(path.dirname(outputPath(repoRoot, run.id)));
|
|
162
|
+
const title = `${backend}:${shortTask(params.task)}`;
|
|
163
|
+
const paneId = await createAgentPane({
|
|
164
|
+
sessionName: params.tmuxSessionName,
|
|
165
|
+
cwd: worktreeInfo.path,
|
|
166
|
+
title,
|
|
167
|
+
command,
|
|
168
|
+
logPath: outputPath(repoRoot, run.id),
|
|
169
|
+
});
|
|
170
|
+
run.terminal = {
|
|
171
|
+
kind: "tmux",
|
|
172
|
+
sessionName: params.tmuxSessionName,
|
|
173
|
+
paneId,
|
|
174
|
+
paneTitle: title,
|
|
175
|
+
logPath: outputPath(repoRoot, run.id),
|
|
176
|
+
launchedAt: nowIso(),
|
|
177
|
+
};
|
|
178
|
+
await saveRunRecord(run);
|
|
179
|
+
await emit(run, {
|
|
180
|
+
ts: nowIso(),
|
|
181
|
+
runId: run.id,
|
|
182
|
+
type: "run.started",
|
|
183
|
+
message: `${backend} pane started`,
|
|
184
|
+
data: { paneId, worktree: worktreeInfo.path },
|
|
185
|
+
});
|
|
186
|
+
await writeAgentContext(repoRoot);
|
|
187
|
+
if (params.focus !== false && paneId) {
|
|
188
|
+
await selectPane(paneId);
|
|
189
|
+
}
|
|
190
|
+
if (!params.silent) {
|
|
191
|
+
console.log(`Started ${run.id}`);
|
|
192
|
+
}
|
|
193
|
+
return run;
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
197
|
+
run.status = "failed";
|
|
198
|
+
await saveRunRecord(run);
|
|
199
|
+
await emit(run, { ts: nowIso(), runId: run.id, type: "run.failed", message });
|
|
200
|
+
await writeAgentContext(repoRoot);
|
|
201
|
+
throw error;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
98
204
|
export async function continueRun(params) {
|
|
99
205
|
const repoRoot = findRepoRoot();
|
|
100
206
|
const run = await loadRunRecord(repoRoot, params.runId);
|
|
@@ -343,7 +449,7 @@ function buildSteeringPrompt(verification) {
|
|
|
343
449
|
.filter(Boolean)
|
|
344
450
|
.join("\n");
|
|
345
451
|
}
|
|
346
|
-
async function writeAgentContext(repoRoot) {
|
|
452
|
+
export async function writeAgentContext(repoRoot) {
|
|
347
453
|
const runs = await listRuns(repoRoot);
|
|
348
454
|
const active = runs.filter((run) => isActiveStatus(run.status));
|
|
349
455
|
const lines = [
|
|
@@ -376,6 +482,12 @@ function delay(ms) {
|
|
|
376
482
|
function normalizeClaudeDefault(model) {
|
|
377
483
|
return model === "opus" ? "sonnet" : model;
|
|
378
484
|
}
|
|
485
|
+
function toNativeBackend(backend) {
|
|
486
|
+
return backend === "codex" ? "codex" : "claude";
|
|
487
|
+
}
|
|
488
|
+
function shortTask(task) {
|
|
489
|
+
return task.replace(/\s+/g, " ").trim().slice(0, 34) || "agent";
|
|
490
|
+
}
|
|
379
491
|
export async function statusRuns(options) {
|
|
380
492
|
const repoRoot = findRepoRoot();
|
|
381
493
|
const runs = await listRuns(repoRoot);
|
|
@@ -475,6 +587,9 @@ export async function stopRun(runId, options) {
|
|
|
475
587
|
if (run.process?.pid && processAlive(run.process.pid)) {
|
|
476
588
|
process.kill(run.process.pid, "SIGTERM");
|
|
477
589
|
}
|
|
590
|
+
if (run.terminal?.kind === "tmux") {
|
|
591
|
+
await killPane(run.terminal.paneId).catch(() => undefined);
|
|
592
|
+
}
|
|
478
593
|
run.status = "cancelled";
|
|
479
594
|
run.process = {
|
|
480
595
|
...(run.process ?? {}),
|
|
@@ -535,6 +650,9 @@ export async function deleteRun(runId, options) {
|
|
|
535
650
|
if (latest.process?.pid && processAlive(latest.process.pid)) {
|
|
536
651
|
process.kill(latest.process.pid, "SIGTERM");
|
|
537
652
|
}
|
|
653
|
+
if (latest.terminal?.kind === "tmux") {
|
|
654
|
+
await killPane(latest.terminal.paneId).catch(() => undefined);
|
|
655
|
+
}
|
|
538
656
|
if (latest.worktree.enabled) {
|
|
539
657
|
await removeWorktree(repoRoot, latest.worktree.path, options?.force ?? true).catch(() => undefined);
|
|
540
658
|
}
|