@coralai/sps-cli 0.10.2 → 0.11.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/commands/workerDashboard.d.ts.map +1 -1
- package/dist/commands/workerDashboard.js +39 -11
- package/dist/commands/workerDashboard.js.map +1 -1
- package/dist/core/config.d.ts +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +1 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/state.d.ts +10 -0
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +5 -0
- package/dist/core/state.js.map +1 -1
- package/dist/engines/CloseoutEngine.d.ts.map +1 -1
- package/dist/engines/CloseoutEngine.js +79 -28
- package/dist/engines/CloseoutEngine.js.map +1 -1
- package/dist/engines/ExecutionEngine.d.ts +5 -0
- package/dist/engines/ExecutionEngine.d.ts.map +1 -1
- package/dist/engines/ExecutionEngine.js +62 -14
- package/dist/engines/ExecutionEngine.js.map +1 -1
- package/dist/engines/MonitorEngine.d.ts.map +1 -1
- package/dist/engines/MonitorEngine.js +6 -1
- package/dist/engines/MonitorEngine.js.map +1 -1
- package/dist/interfaces/WorkerProvider.d.ts +68 -15
- package/dist/interfaces/WorkerProvider.d.ts.map +1 -1
- package/dist/providers/ClaudePrintProvider.d.ts +50 -0
- package/dist/providers/ClaudePrintProvider.d.ts.map +1 -0
- package/dist/providers/ClaudePrintProvider.js +220 -0
- package/dist/providers/ClaudePrintProvider.js.map +1 -0
- package/dist/providers/ClaudeTmuxProvider.d.ts +94 -0
- package/dist/providers/ClaudeTmuxProvider.d.ts.map +1 -0
- package/dist/providers/ClaudeTmuxProvider.js +331 -0
- package/dist/providers/ClaudeTmuxProvider.js.map +1 -0
- package/dist/providers/ClaudeWorkerProvider.d.ts +5 -93
- package/dist/providers/ClaudeWorkerProvider.d.ts.map +1 -1
- package/dist/providers/ClaudeWorkerProvider.js +3 -303
- package/dist/providers/ClaudeWorkerProvider.js.map +1 -1
- package/dist/providers/CodexExecProvider.d.ts +31 -0
- package/dist/providers/CodexExecProvider.d.ts.map +1 -0
- package/dist/providers/CodexExecProvider.js +180 -0
- package/dist/providers/CodexExecProvider.js.map +1 -0
- package/dist/providers/CodexTmuxProvider.d.ts +71 -0
- package/dist/providers/CodexTmuxProvider.d.ts.map +1 -0
- package/dist/providers/CodexTmuxProvider.js +351 -0
- package/dist/providers/CodexTmuxProvider.js.map +1 -0
- package/dist/providers/CodexWorkerProvider.d.ts +5 -70
- package/dist/providers/CodexWorkerProvider.d.ts.map +1 -1
- package/dist/providers/CodexWorkerProvider.js +3 -328
- package/dist/providers/CodexWorkerProvider.js.map +1 -1
- package/dist/providers/outputParser.d.ts +39 -0
- package/dist/providers/outputParser.d.ts.map +1 -0
- package/dist/providers/outputParser.js +183 -0
- package/dist/providers/outputParser.js.map +1 -0
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +18 -6
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/streamRenderer.d.ts +13 -0
- package/dist/providers/streamRenderer.d.ts.map +1 -0
- package/dist/providers/streamRenderer.js +106 -0
- package/dist/providers/streamRenderer.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeTmuxProvider.js","sourceRoot":"","sources":["../../src/providers/ClaudeTmuxProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,94 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
constructor(config: ProjectConfig);
|
|
7
|
-
/**
|
|
8
|
-
* Ensure worktree directory exists and is clean.
|
|
9
|
-
* This is largely a no-op when the worktree is already prepared.
|
|
10
|
-
*/
|
|
11
|
-
prepareEnv(worktree: string, _seq: string): Promise<void>;
|
|
12
|
-
/**
|
|
13
|
-
* Launch a Claude Code worker inside a tmux session.
|
|
14
|
-
*
|
|
15
|
-
* Session reuse strategy (WORKER_SESSION_REUSE=true):
|
|
16
|
-
* 1. Session exists + Claude running → reuse: /clear + cd worktree (keep context hot)
|
|
17
|
-
* 2. Session exists + Claude not running → reuse session: cd + start claude
|
|
18
|
-
* 3. No session → create new session + start claude
|
|
19
|
-
*/
|
|
20
|
-
launch(session: string, worktree: string): Promise<void>;
|
|
21
|
-
private log;
|
|
22
|
-
/**
|
|
23
|
-
* Poll tmux pane text until Claude's ready prompt appears.
|
|
24
|
-
* Default timeout: 30 seconds, poll interval: 2 seconds.
|
|
25
|
-
*/
|
|
26
|
-
waitReady(session: string, timeoutMs?: number): Promise<boolean>;
|
|
27
|
-
/**
|
|
28
|
-
* Send a task prompt file to the Claude session.
|
|
29
|
-
*/
|
|
30
|
-
sendTask(session: string, promptFile: string): Promise<void>;
|
|
31
|
-
/**
|
|
32
|
-
* Inspect a tmux session: check if alive and capture pane text.
|
|
33
|
-
*/
|
|
34
|
-
inspect(session: string): Promise<{
|
|
35
|
-
alive: boolean;
|
|
36
|
-
paneText: string;
|
|
37
|
-
}>;
|
|
38
|
-
/**
|
|
39
|
-
* Multi-layer completion detection chain.
|
|
40
|
-
*
|
|
41
|
-
* Priority order:
|
|
42
|
-
* 1. task_completed marker file in logDir
|
|
43
|
-
* 2. Waiting for confirmation prompts (delegates to detectWaiting)
|
|
44
|
-
* 3. Completion keywords in pane text
|
|
45
|
-
* 4. MR exists on GitLab (skipped — returns ALIVE)
|
|
46
|
-
* 5. tmux session alive → ALIVE
|
|
47
|
-
* 6. Session dead + restart limit exceeded → DEAD_EXCEEDED
|
|
48
|
-
*/
|
|
49
|
-
detectCompleted(session: string, logDir: string, _branch: string): Promise<WorkerStatus>;
|
|
50
|
-
/**
|
|
51
|
-
* Detect whether the worker is waiting for user confirmation.
|
|
52
|
-
* Returns whether the prompt is destructive (delete/remove/drop etc.).
|
|
53
|
-
*/
|
|
54
|
-
detectWaiting(session: string): Promise<{
|
|
55
|
-
waiting: boolean;
|
|
56
|
-
destructive: boolean;
|
|
57
|
-
prompt: string;
|
|
58
|
-
}>;
|
|
59
|
-
/**
|
|
60
|
-
* Check pane text for blocked indicators (errors, stuck states).
|
|
61
|
-
*/
|
|
62
|
-
detectBlocked(session: string): Promise<boolean>;
|
|
63
|
-
/**
|
|
64
|
-
* Send a fix prompt to the Claude session (e.g. after CI failure).
|
|
65
|
-
*/
|
|
66
|
-
sendFix(session: string, fixPrompt: string): Promise<void>;
|
|
67
|
-
/**
|
|
68
|
-
* Send conflict resolution instructions to the Claude session.
|
|
69
|
-
*/
|
|
70
|
-
resolveConflict(session: string, worktree: string, branch: string): Promise<void>;
|
|
71
|
-
/**
|
|
72
|
-
* Release a worker session after task completion.
|
|
73
|
-
*
|
|
74
|
-
* WORKER_SESSION_REUSE=true: do nothing — keep Claude running so the
|
|
75
|
-
* next task can hot-reuse the session via /clear + cd (preserves
|
|
76
|
-
* session state, env vars, loaded MCP servers, etc.).
|
|
77
|
-
*
|
|
78
|
-
* WORKER_SESSION_REUSE=false: exit Claude but keep tmux session alive
|
|
79
|
-
* (next launch will restart Claude in the existing session).
|
|
80
|
-
*/
|
|
81
|
-
release(session: string): Promise<void>;
|
|
82
|
-
/**
|
|
83
|
-
* Force-stop a worker session (error recovery, cleanup).
|
|
84
|
-
* Always exits Claude and kills the tmux session.
|
|
85
|
-
*/
|
|
86
|
-
stop(session: string): Promise<void>;
|
|
87
|
-
/**
|
|
88
|
-
* Capture the last 100 lines of pane text as a summary.
|
|
89
|
-
*/
|
|
90
|
-
collectSummary(session: string): Promise<string>;
|
|
91
|
-
/** Helper: sleep for the given milliseconds. */
|
|
92
|
-
private sleep;
|
|
93
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Use ClaudeTmuxProvider or ClaudePrintProvider directly.
|
|
3
|
+
* This re-export exists for backward compatibility with existing imports.
|
|
4
|
+
*/
|
|
5
|
+
export { ClaudeTmuxProvider as ClaudeWorkerProvider } from './ClaudeTmuxProvider.js';
|
|
94
6
|
//# sourceMappingURL=ClaudeWorkerProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeWorkerProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ClaudeWorkerProvider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClaudeWorkerProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ClaudeWorkerProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,306 +1,6 @@
|
|
|
1
|
-
import { execFileSync } from 'node:child_process';
|
|
2
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
-
/** Completion keywords detected in pane text (priority 3). */
|
|
4
|
-
const COMPLETION_KEYWORDS = /\b(done|完成|全部完成|MR created|merge request|已提交|已推送)\b|🎉/i;
|
|
5
|
-
/** Confirmation prompt patterns (priority 2 / detectWaiting). */
|
|
6
|
-
const CONFIRMATION_PROMPT = /(Do you want to proceed|y\/n|press enter|confirm|approve)/i;
|
|
7
|
-
/** Destructive operation indicators. */
|
|
8
|
-
const DESTRUCTIVE_PATTERN = /(delete|remove|drop|rm -rf|truncate|destroy)/i;
|
|
9
|
-
/** Blocked indicators in pane text. */
|
|
10
|
-
const BLOCKED_PATTERN = /(error|fatal|panic|BLOCKED|stuck|cannot proceed|timed out|rate.?limit)/i;
|
|
11
1
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* On "server exited unexpectedly", auto-cleans stale socket and retries once.
|
|
2
|
+
* @deprecated Use ClaudeTmuxProvider or ClaudePrintProvider directly.
|
|
3
|
+
* This re-export exists for backward compatibility with existing imports.
|
|
15
4
|
*/
|
|
16
|
-
|
|
17
|
-
try {
|
|
18
|
-
return execFileSync('tmux', args, {
|
|
19
|
-
encoding: 'utf-8',
|
|
20
|
-
timeout: 10_000,
|
|
21
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
catch (err) {
|
|
25
|
-
const stderr = err.stderr ?? '';
|
|
26
|
-
if (stderr.includes('server exited unexpectedly') || stderr.includes('no server running')) {
|
|
27
|
-
// Stale tmux socket — clean up and retry
|
|
28
|
-
try {
|
|
29
|
-
const uid = process.getuid?.() ?? 1000;
|
|
30
|
-
const { rmSync } = require('node:fs');
|
|
31
|
-
rmSync(`/tmp/tmux-${uid}`, { recursive: true, force: true });
|
|
32
|
-
process.stderr.write('[worker] Cleaned stale tmux socket, retrying\n');
|
|
33
|
-
return execFileSync('tmux', args, {
|
|
34
|
-
encoding: 'utf-8',
|
|
35
|
-
timeout: 10_000,
|
|
36
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/** Check whether a tmux session exists. */
|
|
47
|
-
function sessionExists(session) {
|
|
48
|
-
return tmux(['has-session', '-t', session]) !== null;
|
|
49
|
-
}
|
|
50
|
-
/** Capture recent pane text from a tmux session. */
|
|
51
|
-
function capturePaneText(session, lines) {
|
|
52
|
-
return tmux(['capture-pane', '-t', session, '-p', '-S', `-${lines}`]) ?? '';
|
|
53
|
-
}
|
|
54
|
-
export class ClaudeWorkerProvider {
|
|
55
|
-
config;
|
|
56
|
-
constructor(config) {
|
|
57
|
-
this.config = config;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Ensure worktree directory exists and is clean.
|
|
61
|
-
* This is largely a no-op when the worktree is already prepared.
|
|
62
|
-
*/
|
|
63
|
-
async prepareEnv(worktree, _seq) {
|
|
64
|
-
if (!existsSync(worktree)) {
|
|
65
|
-
throw new Error(`Worktree directory does not exist: ${worktree}`);
|
|
66
|
-
}
|
|
67
|
-
// Verify the directory is a git worktree / repo
|
|
68
|
-
try {
|
|
69
|
-
execFileSync('git', ['-C', worktree, 'rev-parse', '--is-inside-work-tree'], {
|
|
70
|
-
encoding: 'utf-8',
|
|
71
|
-
timeout: 5_000,
|
|
72
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
throw new Error(`Directory is not a git worktree: ${worktree}`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Launch a Claude Code worker inside a tmux session.
|
|
81
|
-
*
|
|
82
|
-
* Session reuse strategy (WORKER_SESSION_REUSE=true):
|
|
83
|
-
* 1. Session exists + Claude running → reuse: /clear + cd worktree (keep context hot)
|
|
84
|
-
* 2. Session exists + Claude not running → reuse session: cd + start claude
|
|
85
|
-
* 3. No session → create new session + start claude
|
|
86
|
-
*/
|
|
87
|
-
async launch(session, worktree) {
|
|
88
|
-
const claudeCmd = 'claude --dangerously-skip-permissions';
|
|
89
|
-
if (sessionExists(session)) {
|
|
90
|
-
const pane = capturePaneText(session, 10);
|
|
91
|
-
const claudeAlive = /❯\s*$/m.test(pane) || /bypass permissions/i.test(pane) || /shortcuts/i.test(pane);
|
|
92
|
-
if (claudeAlive) {
|
|
93
|
-
// Claude is running — reuse instance: clear conversation + switch worktree
|
|
94
|
-
this.log.info(`Reusing live Claude session ${session}`);
|
|
95
|
-
tmux(['send-keys', '-t', session, '/clear', 'Enter']);
|
|
96
|
-
await this.sleep(1_000);
|
|
97
|
-
tmux(['send-keys', '-t', session, `cd ${worktree}`, 'Enter']);
|
|
98
|
-
await this.sleep(500);
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
// Session exists but Claude not running — cd and start claude
|
|
102
|
-
this.log.info(`Reusing tmux session ${session} (Claude not running)`);
|
|
103
|
-
tmux(['send-keys', '-t', session, `cd ${worktree}`, 'Enter']);
|
|
104
|
-
await this.sleep(500);
|
|
105
|
-
tmux(['send-keys', '-t', session, claudeCmd, 'Enter']);
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
// No session — create new
|
|
109
|
-
const result = tmux(['new-session', '-d', '-s', session, '-c', worktree]);
|
|
110
|
-
if (result === null && !sessionExists(session)) {
|
|
111
|
-
throw new Error(`Failed to create tmux session: ${session}`);
|
|
112
|
-
}
|
|
113
|
-
tmux(['send-keys', '-t', session, claudeCmd, 'Enter']);
|
|
114
|
-
}
|
|
115
|
-
log = { info: (msg) => process.stderr.write(`[worker] ${msg}\n`) };
|
|
116
|
-
/**
|
|
117
|
-
* Poll tmux pane text until Claude's ready prompt appears.
|
|
118
|
-
* Default timeout: 30 seconds, poll interval: 2 seconds.
|
|
119
|
-
*/
|
|
120
|
-
async waitReady(session, timeoutMs = 30_000) {
|
|
121
|
-
const pollInterval = 2_000;
|
|
122
|
-
const deadline = Date.now() + timeoutMs;
|
|
123
|
-
// Wait at least 3s for Claude to start loading before polling
|
|
124
|
-
await this.sleep(3_000);
|
|
125
|
-
while (Date.now() < deadline) {
|
|
126
|
-
const text = capturePaneText(session, 15);
|
|
127
|
-
// Match Claude Code's actual ready state:
|
|
128
|
-
// - The ❯ prompt on its own line (Claude's input prompt)
|
|
129
|
-
// - "bypass permissions" indicator (only appears after Claude is fully loaded)
|
|
130
|
-
// - "? for shortcuts" (appears at bottom when ready)
|
|
131
|
-
if (/bypass permissions/i.test(text) ||
|
|
132
|
-
/\? for shortcuts/i.test(text) ||
|
|
133
|
-
/tips for shortcuts/i.test(text)) {
|
|
134
|
-
return true;
|
|
135
|
-
}
|
|
136
|
-
// Also match the ❯ prompt but only if Claude banner has appeared
|
|
137
|
-
if (/Claude Code/i.test(text) && /❯\s*$/m.test(text)) {
|
|
138
|
-
return true;
|
|
139
|
-
}
|
|
140
|
-
await this.sleep(pollInterval);
|
|
141
|
-
}
|
|
142
|
-
return false;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Send a task prompt file to the Claude session.
|
|
146
|
-
*/
|
|
147
|
-
async sendTask(session, promptFile) {
|
|
148
|
-
if (!existsSync(promptFile)) {
|
|
149
|
-
throw new Error(`Prompt file does not exist: ${promptFile}`);
|
|
150
|
-
}
|
|
151
|
-
// Write prompt content to a temp file, load into tmux buffer, paste, then Enter.
|
|
152
|
-
const content = readFileSync(promptFile, 'utf-8').trim();
|
|
153
|
-
const bufferFile = `/tmp/sps-task-${Date.now()}.txt`;
|
|
154
|
-
const { writeFileSync: writeTmp, unlinkSync } = await import('node:fs');
|
|
155
|
-
writeTmp(bufferFile, content);
|
|
156
|
-
tmux(['load-buffer', bufferFile]);
|
|
157
|
-
tmux(['paste-buffer', '-t', session]);
|
|
158
|
-
try {
|
|
159
|
-
unlinkSync(bufferFile);
|
|
160
|
-
}
|
|
161
|
-
catch { /* cleanup */ }
|
|
162
|
-
// Small delay to let paste complete before sending Enter
|
|
163
|
-
await this.sleep(500);
|
|
164
|
-
tmux(['send-keys', '-t', session, 'Enter']);
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Inspect a tmux session: check if alive and capture pane text.
|
|
168
|
-
*/
|
|
169
|
-
async inspect(session) {
|
|
170
|
-
const alive = sessionExists(session);
|
|
171
|
-
const paneText = alive ? capturePaneText(session, 50) : '';
|
|
172
|
-
return { alive, paneText };
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Multi-layer completion detection chain.
|
|
176
|
-
*
|
|
177
|
-
* Priority order:
|
|
178
|
-
* 1. task_completed marker file in logDir
|
|
179
|
-
* 2. Waiting for confirmation prompts (delegates to detectWaiting)
|
|
180
|
-
* 3. Completion keywords in pane text
|
|
181
|
-
* 4. MR exists on GitLab (skipped — returns ALIVE)
|
|
182
|
-
* 5. tmux session alive → ALIVE
|
|
183
|
-
* 6. Session dead + restart limit exceeded → DEAD_EXCEEDED
|
|
184
|
-
*/
|
|
185
|
-
async detectCompleted(session, logDir, _branch) {
|
|
186
|
-
// Priority 1: task_completed marker file
|
|
187
|
-
const markerPath = `${logDir}/task_completed`;
|
|
188
|
-
if (existsSync(markerPath)) {
|
|
189
|
-
return 'COMPLETED';
|
|
190
|
-
}
|
|
191
|
-
// Priority 2: waiting for confirmation
|
|
192
|
-
const waitState = await this.detectWaiting(session);
|
|
193
|
-
if (waitState.waiting) {
|
|
194
|
-
return waitState.destructive ? 'NEEDS_INPUT' : 'AUTO_CONFIRM';
|
|
195
|
-
}
|
|
196
|
-
// Priority 3: completion keywords in pane text
|
|
197
|
-
const paneText = capturePaneText(session, 50);
|
|
198
|
-
if (COMPLETION_KEYWORDS.test(paneText)) {
|
|
199
|
-
return 'COMPLETED';
|
|
200
|
-
}
|
|
201
|
-
// Priority 4: MR exists (skipped for now)
|
|
202
|
-
// Priority 5: session alive
|
|
203
|
-
if (sessionExists(session)) {
|
|
204
|
-
return 'ALIVE';
|
|
205
|
-
}
|
|
206
|
-
// Priority 6: session dead — check restart limit
|
|
207
|
-
// The restart count is tracked externally by the engine via state.json.
|
|
208
|
-
// Here we simply report DEAD_EXCEEDED vs DEAD so the engine can decide.
|
|
209
|
-
// Without access to the restart counter, report DEAD and let the caller
|
|
210
|
-
// escalate to DEAD_EXCEEDED if the limit is reached.
|
|
211
|
-
return 'DEAD';
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Detect whether the worker is waiting for user confirmation.
|
|
215
|
-
* Returns whether the prompt is destructive (delete/remove/drop etc.).
|
|
216
|
-
*/
|
|
217
|
-
async detectWaiting(session) {
|
|
218
|
-
const paneText = capturePaneText(session, 30);
|
|
219
|
-
const match = paneText.match(CONFIRMATION_PROMPT);
|
|
220
|
-
if (!match) {
|
|
221
|
-
return { waiting: false, destructive: false, prompt: '' };
|
|
222
|
-
}
|
|
223
|
-
// Extract the line containing the prompt for context
|
|
224
|
-
const lines = paneText.split('\n');
|
|
225
|
-
const promptLine = lines.find((l) => CONFIRMATION_PROMPT.test(l))?.trim() ?? match[0];
|
|
226
|
-
const destructive = DESTRUCTIVE_PATTERN.test(paneText);
|
|
227
|
-
return { waiting: true, destructive, prompt: promptLine };
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* Check pane text for blocked indicators (errors, stuck states).
|
|
231
|
-
*/
|
|
232
|
-
async detectBlocked(session) {
|
|
233
|
-
const paneText = capturePaneText(session, 30);
|
|
234
|
-
return BLOCKED_PATTERN.test(paneText);
|
|
235
|
-
}
|
|
236
|
-
/**
|
|
237
|
-
* Send a fix prompt to the Claude session (e.g. after CI failure).
|
|
238
|
-
*/
|
|
239
|
-
async sendFix(session, fixPrompt) {
|
|
240
|
-
// Escape any single quotes in the prompt for safe tmux transmission
|
|
241
|
-
const escaped = fixPrompt.replace(/'/g, "'\\''");
|
|
242
|
-
tmux(['send-keys', '-t', session, escaped, 'Enter']);
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Send conflict resolution instructions to the Claude session.
|
|
246
|
-
*/
|
|
247
|
-
async resolveConflict(session, worktree, branch) {
|
|
248
|
-
const instruction = [
|
|
249
|
-
`There is a merge conflict on branch ${branch}.`,
|
|
250
|
-
`Working directory: ${worktree}`,
|
|
251
|
-
'Please resolve the conflict:',
|
|
252
|
-
`1. Run: git fetch origin && git rebase origin/${this.config.GITLAB_MERGE_BRANCH}`,
|
|
253
|
-
'2. Resolve any conflicts in the affected files',
|
|
254
|
-
'3. Run: git add . && git rebase --continue',
|
|
255
|
-
'4. Run: git push --force-with-lease',
|
|
256
|
-
].join('\n');
|
|
257
|
-
tmux(['send-keys', '-t', session, instruction, 'Enter']);
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Release a worker session after task completion.
|
|
261
|
-
*
|
|
262
|
-
* WORKER_SESSION_REUSE=true: do nothing — keep Claude running so the
|
|
263
|
-
* next task can hot-reuse the session via /clear + cd (preserves
|
|
264
|
-
* session state, env vars, loaded MCP servers, etc.).
|
|
265
|
-
*
|
|
266
|
-
* WORKER_SESSION_REUSE=false: exit Claude but keep tmux session alive
|
|
267
|
-
* (next launch will restart Claude in the existing session).
|
|
268
|
-
*/
|
|
269
|
-
async release(session) {
|
|
270
|
-
if (!sessionExists(session))
|
|
271
|
-
return;
|
|
272
|
-
if (this.config.WORKER_SESSION_REUSE) {
|
|
273
|
-
// Keep everything alive — next launch() will /clear + cd + send prompt
|
|
274
|
-
this.log.info(`Session ${session} kept alive for reuse`);
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
// Exit Claude but keep tmux session
|
|
278
|
-
tmux(['send-keys', '-t', session, '/exit', 'Enter']);
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Force-stop a worker session (error recovery, cleanup).
|
|
282
|
-
* Always exits Claude and kills the tmux session.
|
|
283
|
-
*/
|
|
284
|
-
async stop(session) {
|
|
285
|
-
if (!sessionExists(session))
|
|
286
|
-
return;
|
|
287
|
-
tmux(['send-keys', '-t', session, '/exit', 'Enter']);
|
|
288
|
-
for (let i = 0; i < 5; i++) {
|
|
289
|
-
await this.sleep(1_000);
|
|
290
|
-
if (!sessionExists(session))
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
293
|
-
tmux(['kill-session', '-t', session]);
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* Capture the last 100 lines of pane text as a summary.
|
|
297
|
-
*/
|
|
298
|
-
async collectSummary(session) {
|
|
299
|
-
return capturePaneText(session, 100);
|
|
300
|
-
}
|
|
301
|
-
/** Helper: sleep for the given milliseconds. */
|
|
302
|
-
sleep(ms) {
|
|
303
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
304
|
-
}
|
|
305
|
-
}
|
|
5
|
+
export { ClaudeTmuxProvider as ClaudeWorkerProvider } from './ClaudeTmuxProvider.js';
|
|
306
6
|
//# sourceMappingURL=ClaudeWorkerProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeWorkerProvider.js","sourceRoot":"","sources":["../../src/providers/ClaudeWorkerProvider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ClaudeWorkerProvider.js","sourceRoot":"","sources":["../../src/providers/ClaudeWorkerProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ProjectConfig } from '../core/config.js';
|
|
2
|
+
import type { WorkerProvider, LaunchResult } from '../interfaces/WorkerProvider.js';
|
|
3
|
+
import type { WorkerStatus } from '../models/types.js';
|
|
4
|
+
export declare class CodexExecProvider implements WorkerProvider {
|
|
5
|
+
private readonly config;
|
|
6
|
+
constructor(config: ProjectConfig);
|
|
7
|
+
prepareEnv(worktree: string, _seq: string): Promise<void>;
|
|
8
|
+
launch(session: string, worktree: string, promptFile: string): Promise<LaunchResult>;
|
|
9
|
+
inspect(session: string): Promise<{
|
|
10
|
+
alive: boolean;
|
|
11
|
+
paneText: string;
|
|
12
|
+
pid?: number;
|
|
13
|
+
exitCode?: number;
|
|
14
|
+
}>;
|
|
15
|
+
detectCompleted(session: string, logDir: string, _branch: string): Promise<WorkerStatus>;
|
|
16
|
+
detectWaiting(_session: string): Promise<{
|
|
17
|
+
waiting: boolean;
|
|
18
|
+
destructive: boolean;
|
|
19
|
+
prompt: string;
|
|
20
|
+
}>;
|
|
21
|
+
detectBlocked(_session: string): Promise<boolean>;
|
|
22
|
+
sendFix(session: string, fixPrompt: string, resumeSessionId?: string): Promise<LaunchResult>;
|
|
23
|
+
resolveConflict(session: string, worktree: string, branch: string, resumeSessionId?: string): Promise<LaunchResult>;
|
|
24
|
+
release(_session: string): Promise<void>;
|
|
25
|
+
stop(session: string): Promise<void>;
|
|
26
|
+
collectSummary(session: string): Promise<string>;
|
|
27
|
+
private spawnCodex;
|
|
28
|
+
extractSessionIdAsync(session: string): Promise<string | null>;
|
|
29
|
+
private log;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=CodexExecProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodexExecProvider.d.ts","sourceRoot":"","sources":["../../src/providers/CodexExecProvider.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAqBvD,qBAAa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3B,MAAM,EAAE,aAAa;IAI3B,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAazD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAcpF,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QACtC,KAAK,EAAE,OAAO,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAaI,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC;IAsBlB,aAAa,CACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAKhE,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjD,OAAO,CACX,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,YAAY,CAAC;IAUlB,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,YAAY,CAAC;IAmBlB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQtD,OAAO,CAAC,UAAU;IAkEZ,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOpE,OAAO,CAAC,GAAG;CAGZ"}
|