@coralai/sps-cli 0.18.12 → 0.20.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 +55 -9
- package/dist/commands/acpCommand.d.ts +2 -0
- package/dist/commands/acpCommand.d.ts.map +1 -0
- package/dist/commands/acpCommand.js +98 -0
- package/dist/commands/acpCommand.js.map +1 -0
- package/dist/commands/doctor.js +4 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +11 -5
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/tick.d.ts.map +1 -1
- package/dist/commands/tick.js +6 -2
- package/dist/commands/tick.js.map +1 -1
- package/dist/commands/workerDashboard.d.ts.map +1 -1
- package/dist/commands/workerDashboard.js +13 -2
- package/dist/commands/workerDashboard.js.map +1 -1
- package/dist/core/acpState.d.ts +4 -0
- package/dist/core/acpState.d.ts.map +1 -0
- package/dist/core/acpState.js +38 -0
- package/dist/core/acpState.js.map +1 -0
- package/dist/core/config.d.ts +5 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +5 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/paths.d.ts +2 -0
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +1 -0
- package/dist/core/paths.js.map +1 -1
- package/dist/core/state.d.ts +5 -1
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +2 -0
- package/dist/core/state.js.map +1 -1
- package/dist/engines/ExecutionEngine.d.ts.map +1 -1
- package/dist/engines/ExecutionEngine.js +5 -11
- package/dist/engines/ExecutionEngine.js.map +1 -1
- package/dist/interfaces/ACPClient.d.ts +55 -0
- package/dist/interfaces/ACPClient.d.ts.map +1 -0
- package/dist/interfaces/ACPClient.js +2 -0
- package/dist/interfaces/ACPClient.js.map +1 -0
- package/dist/interfaces/AgentRuntime.d.ts +8 -0
- package/dist/interfaces/AgentRuntime.d.ts.map +1 -0
- package/dist/interfaces/AgentRuntime.js +2 -0
- package/dist/interfaces/AgentRuntime.js.map +1 -0
- package/dist/main.js +16 -1
- package/dist/main.js.map +1 -1
- package/dist/manager/merge-mutex.d.ts +20 -0
- package/dist/manager/merge-mutex.d.ts.map +1 -0
- package/dist/manager/merge-mutex.js +38 -0
- package/dist/manager/merge-mutex.js.map +1 -0
- package/dist/manager/post-actions.d.ts +37 -3
- package/dist/manager/post-actions.d.ts.map +1 -1
- package/dist/manager/post-actions.js +242 -34
- package/dist/manager/post-actions.js.map +1 -1
- package/dist/manager/recovery.d.ts.map +1 -1
- package/dist/manager/recovery.js +16 -2
- package/dist/manager/recovery.js.map +1 -1
- package/dist/models/acp.d.ts +33 -0
- package/dist/models/acp.d.ts.map +1 -0
- package/dist/models/acp.js +2 -0
- package/dist/models/acp.js.map +1 -0
- package/dist/providers/ACPWorkerRuntime.d.ts +19 -0
- package/dist/providers/ACPWorkerRuntime.d.ts.map +1 -0
- package/dist/providers/ACPWorkerRuntime.js +200 -0
- package/dist/providers/ACPWorkerRuntime.js.map +1 -0
- package/dist/providers/LocalACPClient.d.ts +11 -0
- package/dist/providers/LocalACPClient.d.ts.map +1 -0
- package/dist/providers/LocalACPClient.js +35 -0
- package/dist/providers/LocalACPClient.js.map +1 -0
- package/dist/providers/acpTmux.d.ts +6 -0
- package/dist/providers/acpTmux.d.ts.map +1 -0
- package/dist/providers/acpTmux.js +51 -0
- package/dist/providers/acpTmux.js.map +1 -0
- package/dist/providers/adapters/ClaudeACPAdapter.d.ts +11 -0
- package/dist/providers/adapters/ClaudeACPAdapter.d.ts.map +1 -0
- package/dist/providers/adapters/ClaudeACPAdapter.js +150 -0
- package/dist/providers/adapters/ClaudeACPAdapter.js.map +1 -0
- package/dist/providers/adapters/CodexACPAdapter.d.ts +11 -0
- package/dist/providers/adapters/CodexACPAdapter.d.ts.map +1 -0
- package/dist/providers/adapters/CodexACPAdapter.js +152 -0
- package/dist/providers/adapters/CodexACPAdapter.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { readACPState, writeACPState } from '../core/acpState.js';
|
|
2
|
+
import { LocalACPClient } from './LocalACPClient.js';
|
|
3
|
+
function now() {
|
|
4
|
+
return new Date().toISOString();
|
|
5
|
+
}
|
|
6
|
+
function previewPrompt(prompt) {
|
|
7
|
+
const oneLine = prompt.replace(/\s+/g, ' ').trim();
|
|
8
|
+
return oneLine.length > 120 ? `${oneLine.slice(0, 117)}...` : oneLine;
|
|
9
|
+
}
|
|
10
|
+
function isTerminalRunStatus(status) {
|
|
11
|
+
return ['completed', 'failed', 'cancelled', 'lost'].includes(status);
|
|
12
|
+
}
|
|
13
|
+
export class ACPWorkerRuntime {
|
|
14
|
+
ctx;
|
|
15
|
+
client;
|
|
16
|
+
constructor(ctx, client = new LocalACPClient()) {
|
|
17
|
+
this.ctx = ctx;
|
|
18
|
+
this.client = client;
|
|
19
|
+
}
|
|
20
|
+
async ensureSession(slot, tool) {
|
|
21
|
+
const state = readACPState(this.ctx.paths.acpStateFile);
|
|
22
|
+
const normalizedSlot = this.normalizeSlot(slot);
|
|
23
|
+
const selectedTool = tool || this.defaultTool();
|
|
24
|
+
const existing = state.sessions[normalizedSlot];
|
|
25
|
+
const sessionName = existing?.sessionName || this.buildSessionName(normalizedSlot);
|
|
26
|
+
const cwd = existing?.cwd || this.ctx.paths.repoDir;
|
|
27
|
+
const result = await this.client.ensureSession({
|
|
28
|
+
sessionName,
|
|
29
|
+
tool: selectedTool,
|
|
30
|
+
cwd,
|
|
31
|
+
resetExisting: !existing,
|
|
32
|
+
});
|
|
33
|
+
const session = this.upsertSession(state, normalizedSlot, {
|
|
34
|
+
slot: normalizedSlot,
|
|
35
|
+
tool: selectedTool,
|
|
36
|
+
sessionId: result.sessionId,
|
|
37
|
+
sessionName,
|
|
38
|
+
cwd,
|
|
39
|
+
status: result.sessionState === 'ready'
|
|
40
|
+
? (existing?.currentRun ? 'active' : 'idle')
|
|
41
|
+
: 'launching',
|
|
42
|
+
sessionState: result.sessionState,
|
|
43
|
+
currentRun: existing?.currentRun || null,
|
|
44
|
+
createdAt: existing?.createdAt || now(),
|
|
45
|
+
updatedAt: now(),
|
|
46
|
+
lastSeenAt: result.lastSeenAt,
|
|
47
|
+
lastPaneText: result.paneText,
|
|
48
|
+
});
|
|
49
|
+
writeACPState(this.ctx.paths.acpStateFile, state, 'acp-ensure-session');
|
|
50
|
+
return session;
|
|
51
|
+
}
|
|
52
|
+
async startRun(slot, prompt, tool) {
|
|
53
|
+
const normalizedSlot = this.normalizeSlot(slot);
|
|
54
|
+
const state = readACPState(this.ctx.paths.acpStateFile);
|
|
55
|
+
const session = await this.ensureSession(normalizedSlot, tool);
|
|
56
|
+
if (session.sessionState !== 'ready') {
|
|
57
|
+
throw new Error(`ACP session ${session.sessionId} is not ready (state=${session.sessionState})`);
|
|
58
|
+
}
|
|
59
|
+
const freshState = readACPState(this.ctx.paths.acpStateFile);
|
|
60
|
+
const existing = freshState.sessions[normalizedSlot] || session;
|
|
61
|
+
if (existing.currentRun && !['completed', 'failed', 'cancelled', 'lost'].includes(existing.currentRun.status)) {
|
|
62
|
+
throw new Error(`Slot ${normalizedSlot} already has an active run (${existing.currentRun.runId})`);
|
|
63
|
+
}
|
|
64
|
+
const result = await this.client.startRun({
|
|
65
|
+
sessionName: existing.sessionName,
|
|
66
|
+
tool: existing.tool,
|
|
67
|
+
prompt,
|
|
68
|
+
});
|
|
69
|
+
const run = {
|
|
70
|
+
runId: result.runId,
|
|
71
|
+
status: result.runState,
|
|
72
|
+
promptPreview: previewPrompt(prompt),
|
|
73
|
+
startedAt: now(),
|
|
74
|
+
updatedAt: now(),
|
|
75
|
+
completedAt: result.runState === 'completed' ? now() : null,
|
|
76
|
+
};
|
|
77
|
+
const updated = this.upsertSession(freshState, normalizedSlot, {
|
|
78
|
+
...existing,
|
|
79
|
+
status: this.slotStatusFromRun(result.runState),
|
|
80
|
+
sessionState: result.runState === 'completed' ? 'ready' : 'busy',
|
|
81
|
+
currentRun: run,
|
|
82
|
+
updatedAt: now(),
|
|
83
|
+
lastSeenAt: result.lastSeenAt,
|
|
84
|
+
lastPaneText: result.paneText,
|
|
85
|
+
});
|
|
86
|
+
writeACPState(this.ctx.paths.acpStateFile, freshState, 'acp-start-run');
|
|
87
|
+
return updated;
|
|
88
|
+
}
|
|
89
|
+
async inspect(slot) {
|
|
90
|
+
const state = readACPState(this.ctx.paths.acpStateFile);
|
|
91
|
+
const slots = slot ? [this.normalizeSlot(slot)] : Object.keys(state.sessions);
|
|
92
|
+
for (const slotName of slots) {
|
|
93
|
+
const session = state.sessions[slotName];
|
|
94
|
+
if (!session)
|
|
95
|
+
continue;
|
|
96
|
+
const sessionInfo = await this.client.inspectSession({
|
|
97
|
+
sessionName: session.sessionName,
|
|
98
|
+
tool: session.tool,
|
|
99
|
+
});
|
|
100
|
+
let nextStatus = session.status;
|
|
101
|
+
let currentRun = session.currentRun;
|
|
102
|
+
let paneText = sessionInfo.paneText;
|
|
103
|
+
if (session.currentRun && !(sessionInfo.sessionState === 'offline' && isTerminalRunStatus(session.currentRun.status))) {
|
|
104
|
+
const runInfo = await this.client.inspectRun({
|
|
105
|
+
sessionName: session.sessionName,
|
|
106
|
+
tool: session.tool,
|
|
107
|
+
activeRun: true,
|
|
108
|
+
});
|
|
109
|
+
paneText = runInfo.paneText || paneText;
|
|
110
|
+
if (runInfo.runState) {
|
|
111
|
+
currentRun = {
|
|
112
|
+
...session.currentRun,
|
|
113
|
+
status: runInfo.runState,
|
|
114
|
+
updatedAt: now(),
|
|
115
|
+
completedAt: runInfo.runState === 'completed' ? (session.currentRun.completedAt || now()) : session.currentRun.completedAt,
|
|
116
|
+
};
|
|
117
|
+
nextStatus = this.slotStatusFromRun(runInfo.runState);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if (sessionInfo.sessionState === 'ready') {
|
|
121
|
+
nextStatus = 'idle';
|
|
122
|
+
}
|
|
123
|
+
else if (sessionInfo.sessionState === 'offline') {
|
|
124
|
+
nextStatus = 'offline';
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
nextStatus = 'launching';
|
|
128
|
+
}
|
|
129
|
+
state.sessions[slotName] = {
|
|
130
|
+
...session,
|
|
131
|
+
status: nextStatus,
|
|
132
|
+
sessionState: sessionInfo.sessionState,
|
|
133
|
+
currentRun,
|
|
134
|
+
updatedAt: now(),
|
|
135
|
+
lastSeenAt: sessionInfo.lastSeenAt,
|
|
136
|
+
lastPaneText: paneText,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
writeACPState(this.ctx.paths.acpStateFile, state, 'acp-inspect');
|
|
140
|
+
return state;
|
|
141
|
+
}
|
|
142
|
+
async stopSession(slot) {
|
|
143
|
+
const normalizedSlot = this.normalizeSlot(slot);
|
|
144
|
+
const state = readACPState(this.ctx.paths.acpStateFile);
|
|
145
|
+
const session = state.sessions[normalizedSlot];
|
|
146
|
+
if (!session) {
|
|
147
|
+
throw new Error(`ACP session not found for slot ${normalizedSlot}`);
|
|
148
|
+
}
|
|
149
|
+
await this.client.stopSession({
|
|
150
|
+
sessionName: session.sessionName,
|
|
151
|
+
tool: session.tool,
|
|
152
|
+
});
|
|
153
|
+
state.sessions[normalizedSlot] = {
|
|
154
|
+
...session,
|
|
155
|
+
status: 'offline',
|
|
156
|
+
sessionState: 'offline',
|
|
157
|
+
currentRun: session.currentRun
|
|
158
|
+
? {
|
|
159
|
+
...session.currentRun,
|
|
160
|
+
status: session.currentRun.status === 'completed' ? 'completed' : 'cancelled',
|
|
161
|
+
updatedAt: now(),
|
|
162
|
+
completedAt: session.currentRun.completedAt || now(),
|
|
163
|
+
}
|
|
164
|
+
: null,
|
|
165
|
+
updatedAt: now(),
|
|
166
|
+
lastSeenAt: now(),
|
|
167
|
+
lastPaneText: '',
|
|
168
|
+
};
|
|
169
|
+
writeACPState(this.ctx.paths.acpStateFile, state, 'acp-stop-session');
|
|
170
|
+
}
|
|
171
|
+
normalizeSlot(slot) {
|
|
172
|
+
if (/^worker-\d+$/.test(slot))
|
|
173
|
+
return slot;
|
|
174
|
+
if (/^\d+$/.test(slot))
|
|
175
|
+
return `worker-${slot}`;
|
|
176
|
+
throw new Error(`Invalid slot: ${slot}. Use worker-N or N`);
|
|
177
|
+
}
|
|
178
|
+
defaultTool() {
|
|
179
|
+
return (this.ctx.config.ACP_AGENT || this.ctx.config.WORKER_TOOL);
|
|
180
|
+
}
|
|
181
|
+
buildSessionName(slot) {
|
|
182
|
+
return `sps-acp-${this.ctx.projectName}-${slot}`;
|
|
183
|
+
}
|
|
184
|
+
slotStatusFromRun(status) {
|
|
185
|
+
switch (status) {
|
|
186
|
+
case 'completed':
|
|
187
|
+
case 'cancelled':
|
|
188
|
+
case 'failed':
|
|
189
|
+
case 'lost':
|
|
190
|
+
return 'idle';
|
|
191
|
+
default:
|
|
192
|
+
return 'active';
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
upsertSession(state, slot, session) {
|
|
196
|
+
state.sessions[slot] = session;
|
|
197
|
+
return session;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=ACPWorkerRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ACPWorkerRuntime.js","sourceRoot":"","sources":["../../src/providers/ACPWorkerRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ACPClient, EnsureSessionInput, EnsureSessionResult, InspectRunInput, InspectRunResult, InspectSessionInput, InspectSessionResult, StartRunInput, StartRunResult, StopSessionInput } from '../interfaces/ACPClient.js';
|
|
2
|
+
export declare class LocalACPClient implements ACPClient {
|
|
3
|
+
private readonly claude;
|
|
4
|
+
private readonly codex;
|
|
5
|
+
ensureSession(input: EnsureSessionInput): Promise<EnsureSessionResult>;
|
|
6
|
+
startRun(input: StartRunInput): Promise<StartRunResult>;
|
|
7
|
+
inspectSession(input: InspectSessionInput): Promise<InspectSessionResult>;
|
|
8
|
+
inspectRun(input: InspectRunInput): Promise<InspectRunResult>;
|
|
9
|
+
stopSession(input: StopSessionInput): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=LocalACPClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalACPClient.d.ts","sourceRoot":"","sources":["../../src/providers/LocalACPClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AAIpC,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAEzC,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMtE,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAMvD,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAMzE,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAM7D,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAO1D"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ClaudeACPAdapter } from './adapters/ClaudeACPAdapter.js';
|
|
2
|
+
import { CodexACPAdapter } from './adapters/CodexACPAdapter.js';
|
|
3
|
+
export class LocalACPClient {
|
|
4
|
+
claude = new ClaudeACPAdapter();
|
|
5
|
+
codex = new CodexACPAdapter();
|
|
6
|
+
async ensureSession(input) {
|
|
7
|
+
return input.tool === 'claude'
|
|
8
|
+
? this.claude.ensureSession(input)
|
|
9
|
+
: this.codex.ensureSession(input);
|
|
10
|
+
}
|
|
11
|
+
async startRun(input) {
|
|
12
|
+
return input.tool === 'claude'
|
|
13
|
+
? this.claude.startRun(input)
|
|
14
|
+
: this.codex.startRun(input);
|
|
15
|
+
}
|
|
16
|
+
async inspectSession(input) {
|
|
17
|
+
return input.tool === 'claude'
|
|
18
|
+
? this.claude.inspectSession(input)
|
|
19
|
+
: this.codex.inspectSession(input);
|
|
20
|
+
}
|
|
21
|
+
async inspectRun(input) {
|
|
22
|
+
return input.tool === 'claude'
|
|
23
|
+
? this.claude.inspectRun(input)
|
|
24
|
+
: this.codex.inspectRun(input);
|
|
25
|
+
}
|
|
26
|
+
async stopSession(input) {
|
|
27
|
+
if (input.tool === 'claude') {
|
|
28
|
+
await this.claude.stopSession(input);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
await this.codex.stopSession(input);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=LocalACPClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalACPClient.js","sourceRoot":"","sources":["../../src/providers/LocalACPClient.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,MAAM,OAAO,cAAc;IACR,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAChC,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IAE/C,KAAK,CAAC,aAAa,CAAC,KAAyB;QAC3C,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAC5B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAoB;QACjC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAC5B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC7B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAA0B;QAC7C,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAC5B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAsB;QACrC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAC5B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;YAC/B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAuB;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function tmux(args: string[]): string | null;
|
|
2
|
+
export declare function sessionExists(session: string): boolean;
|
|
3
|
+
export declare function capturePaneText(session: string, lines: number): string;
|
|
4
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
5
|
+
export declare function pastePrompt(session: string, prompt: string): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=acpTmux.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acpTmux.d.ts","sourceRoot":"","sources":["../../src/providers/acpTmux.ts"],"names":[],"mappings":"AAGA,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAwBlD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import { rmSync, writeFileSync } from 'node:fs';
|
|
3
|
+
export function tmux(args) {
|
|
4
|
+
try {
|
|
5
|
+
return execFileSync('tmux', args, {
|
|
6
|
+
encoding: 'utf-8',
|
|
7
|
+
timeout: 10_000,
|
|
8
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
const stderr = err.stderr ?? '';
|
|
13
|
+
if (stderr.includes('server exited unexpectedly') || stderr.includes('no server running')) {
|
|
14
|
+
try {
|
|
15
|
+
const uid = process.getuid?.() ?? 1000;
|
|
16
|
+
rmSync(`/tmp/tmux-${uid}`, { recursive: true, force: true });
|
|
17
|
+
return execFileSync('tmux', args, {
|
|
18
|
+
encoding: 'utf-8',
|
|
19
|
+
timeout: 10_000,
|
|
20
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function sessionExists(session) {
|
|
31
|
+
return tmux(['has-session', '-t', session]) !== null;
|
|
32
|
+
}
|
|
33
|
+
export function capturePaneText(session, lines) {
|
|
34
|
+
return tmux(['capture-pane', '-t', session, '-p', '-S', `-${lines}`]) ?? '';
|
|
35
|
+
}
|
|
36
|
+
export async function sleep(ms) {
|
|
37
|
+
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
38
|
+
}
|
|
39
|
+
export async function pastePrompt(session, prompt) {
|
|
40
|
+
const bufferFile = `/tmp/sps-acp-${Date.now()}.txt`;
|
|
41
|
+
writeFileSync(bufferFile, prompt);
|
|
42
|
+
tmux(['load-buffer', bufferFile]);
|
|
43
|
+
tmux(['paste-buffer', '-t', session]);
|
|
44
|
+
try {
|
|
45
|
+
rmSync(bufferFile, { force: true });
|
|
46
|
+
}
|
|
47
|
+
catch { /* noop */ }
|
|
48
|
+
await sleep(1_500);
|
|
49
|
+
tmux(['send-keys', '-t', session, 'Enter']);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=acpTmux.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acpTmux.js","sourceRoot":"","sources":["../../src/providers/acpTmux.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,UAAU,IAAI,CAAC,IAAc;IACjC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;YAChC,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,MAAM,GAAI,GAA2B,CAAC,MAAM,IAAI,EAAE,CAAC;QACzD,IAAI,MAAM,CAAC,QAAQ,CAAC,4BAA4B,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC1F,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC;gBACvC,MAAM,CAAC,aAAa,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7D,OAAO,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;oBAChC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,MAAM;oBACf,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;iBAClC,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,KAAa;IAC5D,OAAO,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,EAAU;IACpC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe,EAAE,MAAc;IAC/D,MAAM,UAAU,GAAG,gBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IACpD,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC;QAAC,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;IACjE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;IACnB,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EnsureSessionInput, EnsureSessionResult, InspectRunInput, InspectRunResult, InspectSessionInput, InspectSessionResult, StartRunInput, StartRunResult, StopSessionInput } from '../../interfaces/ACPClient.js';
|
|
2
|
+
export declare class ClaudeACPAdapter {
|
|
3
|
+
ensureSession(input: EnsureSessionInput): Promise<EnsureSessionResult>;
|
|
4
|
+
startRun(input: StartRunInput): Promise<StartRunResult>;
|
|
5
|
+
inspectSession(input: InspectSessionInput): Promise<InspectSessionResult>;
|
|
6
|
+
inspectRun(input: InspectRunInput): Promise<InspectRunResult>;
|
|
7
|
+
stopSession(input: StopSessionInput): Promise<void>;
|
|
8
|
+
private bootstrapSession;
|
|
9
|
+
private waitReady;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=ClaudeACPAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeACPAdapter.d.ts","sourceRoot":"","sources":["../../../src/providers/adapters/ClaudeACPAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,gBAAgB,EACjB,MAAM,+BAA+B,CAAC;AAkBvC,qBAAa,gBAAgB;IACrB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAwBtE,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAyBvD,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAYzE,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqB7D,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAO3C,gBAAgB;YAkChB,SAAS;CAoBxB"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { capturePaneText, pastePrompt, sessionExists, sleep, tmux } from '../acpTmux.js';
|
|
2
|
+
const CLAUDE_READY = /bypass permissions|\? for shortcuts|tips for shortcuts/i;
|
|
3
|
+
const CLAUDE_PROMPT = /❯\s*$/m;
|
|
4
|
+
const CONFIRMATION_PROMPT = /(Do you want to proceed|y\/n|press enter|confirm|approve)/i;
|
|
5
|
+
const THEME_PROMPT = /Choose the text style that looks best with your terminal|Dark mode|Light mode/i;
|
|
6
|
+
const LOGIN_METHOD_PROMPT = /Select login method|Claude account with subscription|Anthropic Console account/i;
|
|
7
|
+
const BROWSER_SIGNIN_PROMPT = /Opening browser to sign in|Browser didn't open\?|Paste code here if prompted/i;
|
|
8
|
+
function isReady(text) {
|
|
9
|
+
return CLAUDE_READY.test(text) || (/Claude Code/i.test(text) && CLAUDE_PROMPT.test(text));
|
|
10
|
+
}
|
|
11
|
+
function needsStartupInput(text) {
|
|
12
|
+
return THEME_PROMPT.test(text) || LOGIN_METHOD_PROMPT.test(text) || BROWSER_SIGNIN_PROMPT.test(text);
|
|
13
|
+
}
|
|
14
|
+
export class ClaudeACPAdapter {
|
|
15
|
+
async ensureSession(input) {
|
|
16
|
+
const claudeCmd = 'claude --dangerously-skip-permissions';
|
|
17
|
+
const ready = await this.bootstrapSession(input, claudeCmd);
|
|
18
|
+
if (!ready) {
|
|
19
|
+
const paneText = capturePaneText(input.sessionName, 80);
|
|
20
|
+
if (needsStartupInput(paneText)) {
|
|
21
|
+
return {
|
|
22
|
+
sessionId: input.sessionName,
|
|
23
|
+
sessionState: 'booting',
|
|
24
|
+
paneText,
|
|
25
|
+
lastSeenAt: new Date().toISOString(),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
throw new Error('Claude ACP session did not become ready within timeout');
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
sessionId: input.sessionName,
|
|
32
|
+
sessionState: 'ready',
|
|
33
|
+
paneText: capturePaneText(input.sessionName, 40),
|
|
34
|
+
lastSeenAt: new Date().toISOString(),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
async startRun(input) {
|
|
38
|
+
await pastePrompt(input.sessionName, input.prompt);
|
|
39
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
40
|
+
await sleep(2_000);
|
|
41
|
+
const pane = capturePaneText(input.sessionName, 20);
|
|
42
|
+
if (!isReady(pane)) {
|
|
43
|
+
return {
|
|
44
|
+
runId: `${Date.now()}`,
|
|
45
|
+
runState: CONFIRMATION_PROMPT.test(pane) ? 'waiting_input' : 'running',
|
|
46
|
+
paneText: pane,
|
|
47
|
+
lastSeenAt: new Date().toISOString(),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
tmux(['send-keys', '-t', input.sessionName, 'Enter']);
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
runId: `${Date.now()}`,
|
|
54
|
+
runState: 'running',
|
|
55
|
+
paneText: capturePaneText(input.sessionName, 20),
|
|
56
|
+
lastSeenAt: new Date().toISOString(),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async inspectSession(input) {
|
|
60
|
+
if (!sessionExists(input.sessionName)) {
|
|
61
|
+
return { sessionState: 'offline', paneText: '', lastSeenAt: new Date().toISOString() };
|
|
62
|
+
}
|
|
63
|
+
const pane = capturePaneText(input.sessionName, 80);
|
|
64
|
+
return {
|
|
65
|
+
sessionState: isReady(pane) ? 'ready' : (needsStartupInput(pane) ? 'booting' : 'busy'),
|
|
66
|
+
paneText: pane,
|
|
67
|
+
lastSeenAt: new Date().toISOString(),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
async inspectRun(input) {
|
|
71
|
+
if (!input.activeRun) {
|
|
72
|
+
return { runState: null, paneText: '', lastSeenAt: new Date().toISOString() };
|
|
73
|
+
}
|
|
74
|
+
if (!sessionExists(input.sessionName)) {
|
|
75
|
+
return { runState: 'lost', paneText: '', lastSeenAt: new Date().toISOString() };
|
|
76
|
+
}
|
|
77
|
+
const pane = capturePaneText(input.sessionName, 120);
|
|
78
|
+
let runState = 'running';
|
|
79
|
+
if (CONFIRMATION_PROMPT.test(pane)) {
|
|
80
|
+
runState = 'waiting_input';
|
|
81
|
+
}
|
|
82
|
+
else if (isReady(pane)) {
|
|
83
|
+
runState = 'completed';
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
runState,
|
|
87
|
+
paneText: pane,
|
|
88
|
+
lastSeenAt: new Date().toISOString(),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
async stopSession(input) {
|
|
92
|
+
if (!sessionExists(input.sessionName))
|
|
93
|
+
return;
|
|
94
|
+
tmux(['send-keys', '-t', input.sessionName, '/exit', 'Enter']);
|
|
95
|
+
await sleep(500);
|
|
96
|
+
tmux(['kill-session', '-t', input.sessionName]);
|
|
97
|
+
}
|
|
98
|
+
async bootstrapSession(input, claudeCmd) {
|
|
99
|
+
if (input.resetExisting && sessionExists(input.sessionName)) {
|
|
100
|
+
tmux(['kill-session', '-t', input.sessionName]);
|
|
101
|
+
await sleep(500);
|
|
102
|
+
}
|
|
103
|
+
if (sessionExists(input.sessionName)) {
|
|
104
|
+
const pane = capturePaneText(input.sessionName, 20);
|
|
105
|
+
if (isReady(pane))
|
|
106
|
+
return true;
|
|
107
|
+
tmux(['send-keys', '-t', input.sessionName, 'C-c']);
|
|
108
|
+
await sleep(500);
|
|
109
|
+
tmux(['send-keys', '-t', input.sessionName, claudeCmd, 'Enter']);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const result = tmux(['new-session', '-d', '-s', input.sessionName, '-c', input.cwd]);
|
|
113
|
+
if (result === null && !sessionExists(input.sessionName)) {
|
|
114
|
+
throw new Error(`Failed to create tmux session: ${input.sessionName}`);
|
|
115
|
+
}
|
|
116
|
+
tmux(['send-keys', '-t', input.sessionName, claudeCmd, 'Enter']);
|
|
117
|
+
}
|
|
118
|
+
if (await this.waitReady(input.sessionName, 90_000)) {
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
tmux(['kill-session', '-t', input.sessionName]);
|
|
122
|
+
await sleep(500);
|
|
123
|
+
const recreate = tmux(['new-session', '-d', '-s', input.sessionName, '-c', input.cwd]);
|
|
124
|
+
if (recreate === null && !sessionExists(input.sessionName)) {
|
|
125
|
+
throw new Error(`Failed to recreate tmux session: ${input.sessionName}`);
|
|
126
|
+
}
|
|
127
|
+
tmux(['send-keys', '-t', input.sessionName, claudeCmd, 'Enter']);
|
|
128
|
+
return this.waitReady(input.sessionName, 90_000);
|
|
129
|
+
}
|
|
130
|
+
async waitReady(session, timeoutMs) {
|
|
131
|
+
const deadline = Date.now() + timeoutMs;
|
|
132
|
+
await sleep(3_000);
|
|
133
|
+
while (Date.now() < deadline) {
|
|
134
|
+
const text = capturePaneText(session, 20);
|
|
135
|
+
if (THEME_PROMPT.test(text) || LOGIN_METHOD_PROMPT.test(text)) {
|
|
136
|
+
tmux(['send-keys', '-t', session, 'Enter']);
|
|
137
|
+
await sleep(2_000);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (BROWSER_SIGNIN_PROMPT.test(text)) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
if (isReady(text))
|
|
144
|
+
return true;
|
|
145
|
+
await sleep(2_000);
|
|
146
|
+
}
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=ClaudeACPAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeACPAdapter.js","sourceRoot":"","sources":["../../../src/providers/adapters/ClaudeACPAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EnsureSessionInput, EnsureSessionResult, InspectRunInput, InspectRunResult, InspectSessionInput, InspectSessionResult, StartRunInput, StartRunResult, StopSessionInput } from '../../interfaces/ACPClient.js';
|
|
2
|
+
export declare class CodexACPAdapter {
|
|
3
|
+
ensureSession(input: EnsureSessionInput): Promise<EnsureSessionResult>;
|
|
4
|
+
startRun(input: StartRunInput): Promise<StartRunResult>;
|
|
5
|
+
inspectSession(input: InspectSessionInput): Promise<InspectSessionResult>;
|
|
6
|
+
inspectRun(input: InspectRunInput): Promise<InspectRunResult>;
|
|
7
|
+
stopSession(input: StopSessionInput): Promise<void>;
|
|
8
|
+
private bootstrapSession;
|
|
9
|
+
private waitReady;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=CodexACPAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodexACPAdapter.d.ts","sourceRoot":"","sources":["../../../src/providers/adapters/CodexACPAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,gBAAgB,EACjB,MAAM,+BAA+B,CAAC;AAiBvC,qBAAa,eAAe;IACpB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAetE,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAyBvD,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAYzE,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqB7D,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAO3C,gBAAgB;YAoChB,SAAS;CAiCxB"}
|