dev-sessions 0.2.2 → 0.2.3
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 +124 -77
- package/dist/backends/backend.d.ts +42 -0
- package/dist/backends/backend.js +3 -0
- package/dist/backends/backend.js.map +1 -0
- package/dist/backends/claude-backend.d.ts +22 -0
- package/dist/backends/claude-backend.js +161 -0
- package/dist/backends/claude-backend.js.map +1 -0
- package/dist/backends/claude-tmux.d.ts +0 -2
- package/dist/backends/claude-tmux.js +8 -21
- package/dist/backends/claude-tmux.js.map +1 -1
- package/dist/backends/codex-appserver.d.ts +44 -2
- package/dist/backends/codex-appserver.js +291 -109
- package/dist/backends/codex-appserver.js.map +1 -1
- package/dist/backends/codex-backend.d.ts +21 -0
- package/dist/backends/codex-backend.js +224 -0
- package/dist/backends/codex-backend.js.map +1 -0
- package/dist/cli.d.ts +3 -1
- package/dist/cli.js +31 -3
- package/dist/cli.js.map +1 -1
- package/dist/gateway/client.d.ts +3 -1
- package/dist/gateway/client.js +24 -2
- package/dist/gateway/client.js.map +1 -1
- package/dist/gateway/server.js +45 -2
- package/dist/gateway/server.js.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/session-manager.d.ts +7 -9
- package/dist/session-manager.js +115 -338
- package/dist/session-manager.js.map +1 -1
- package/dist/session-store.js +16 -4
- package/dist/session-store.js.map +1 -1
- package/dist/transcript/claude-parser.d.ts +1 -0
- package/dist/transcript/claude-parser.js +4 -0
- package/dist/transcript/claude-parser.js.map +1 -1
- package/dist/types.d.ts +6 -1
- package/package.json +1 -1
- package/skills/delegate/SKILL.md +77 -0
- package/skills/dev-sessions/SKILL.md +5 -13
package/dist/session-manager.js
CHANGED
|
@@ -6,149 +6,101 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.SessionManager = void 0;
|
|
7
7
|
exports.shouldUseGatewaySessionManager = shouldUseGatewaySessionManager;
|
|
8
8
|
exports.createDefaultSessionManager = createDefaultSessionManager;
|
|
9
|
-
const node_crypto_1 = require("node:crypto");
|
|
10
|
-
const promises_1 = require("node:fs/promises");
|
|
11
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
12
10
|
const champion_ids_1 = require("./champion-ids");
|
|
11
|
+
const claude_backend_1 = require("./backends/claude-backend");
|
|
13
12
|
const claude_tmux_1 = require("./backends/claude-tmux");
|
|
13
|
+
const codex_backend_1 = require("./backends/codex-backend");
|
|
14
14
|
const codex_appserver_1 = require("./backends/codex-appserver");
|
|
15
15
|
const client_1 = require("./gateway/client");
|
|
16
16
|
const session_store_1 = require("./session-store");
|
|
17
|
-
const claude_parser_1 = require("./transcript/claude-parser");
|
|
18
17
|
class SessionManager {
|
|
19
18
|
store;
|
|
20
|
-
|
|
21
|
-
codexBackend
|
|
22
|
-
constructor(store, claudeBackend, codexBackend = new codex_appserver_1.CodexAppServerBackend()) {
|
|
19
|
+
backends;
|
|
20
|
+
constructor(store, claudeBackend, codexBackend) {
|
|
23
21
|
this.store = store;
|
|
24
|
-
this.
|
|
25
|
-
|
|
22
|
+
this.backends = new Map([
|
|
23
|
+
['claude', claudeBackend],
|
|
24
|
+
['codex', codexBackend]
|
|
25
|
+
]);
|
|
26
|
+
}
|
|
27
|
+
getBackend(cli) {
|
|
28
|
+
const backend = this.backends.get(cli);
|
|
29
|
+
if (!backend) {
|
|
30
|
+
throw new Error(`No backend registered for cli: ${cli}`);
|
|
31
|
+
}
|
|
32
|
+
return backend;
|
|
26
33
|
}
|
|
27
34
|
async createSession(options) {
|
|
28
35
|
const workspacePath = node_path_1.default.resolve(options.path ?? process.cwd());
|
|
29
36
|
const cli = options.cli ?? 'claude';
|
|
37
|
+
const backend = this.getBackend(cli);
|
|
30
38
|
const championId = await this.findAvailableChampionId();
|
|
31
39
|
const timestamp = new Date().toISOString();
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const tmuxSessionName = (0, champion_ids_1.toTmuxSessionName)(championId);
|
|
56
|
-
const internalId = (0, node_crypto_1.randomUUID)();
|
|
57
|
-
await this.claudeBackend.createSession(tmuxSessionName, workspacePath, mode, internalId);
|
|
58
|
-
session = {
|
|
59
|
-
championId,
|
|
60
|
-
internalId,
|
|
61
|
-
cli: 'claude',
|
|
62
|
-
mode,
|
|
63
|
-
path: workspacePath,
|
|
64
|
-
description: options.description,
|
|
65
|
-
status: 'active',
|
|
66
|
-
createdAt: timestamp,
|
|
67
|
-
lastUsed: timestamp
|
|
68
|
-
};
|
|
69
|
-
}
|
|
40
|
+
const result = await backend.create({
|
|
41
|
+
championId,
|
|
42
|
+
workspacePath,
|
|
43
|
+
description: options.description,
|
|
44
|
+
mode: options.mode,
|
|
45
|
+
model: options.model
|
|
46
|
+
});
|
|
47
|
+
const session = {
|
|
48
|
+
championId,
|
|
49
|
+
internalId: result.internalId,
|
|
50
|
+
cli,
|
|
51
|
+
mode: result.mode,
|
|
52
|
+
path: workspacePath,
|
|
53
|
+
description: options.description,
|
|
54
|
+
status: 'active',
|
|
55
|
+
appServerPid: result.appServerPid,
|
|
56
|
+
appServerPort: result.appServerPort,
|
|
57
|
+
model: result.model,
|
|
58
|
+
codexTurnInProgress: result.codexTurnInProgress,
|
|
59
|
+
lastAssistantMessages: result.lastAssistantMessages,
|
|
60
|
+
createdAt: timestamp,
|
|
61
|
+
lastUsed: timestamp
|
|
62
|
+
};
|
|
70
63
|
await this.store.upsertSession(session);
|
|
71
64
|
return session;
|
|
72
65
|
}
|
|
73
66
|
async sendMessage(championId, message) {
|
|
74
67
|
const session = await this.requireSession(championId);
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
if (error instanceof Error) {
|
|
93
|
-
await this.store.updateSession(championId, {
|
|
94
|
-
codexTurnInProgress: false,
|
|
95
|
-
lastTurnStatus: 'failed',
|
|
96
|
-
lastTurnError: error.message,
|
|
97
|
-
lastUsed: new Date().toISOString()
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
throw error;
|
|
68
|
+
const backend = this.getBackend(session.cli);
|
|
69
|
+
const sendTime = new Date().toISOString();
|
|
70
|
+
const preSendFields = backend.preSendStoreFields(session, sendTime);
|
|
71
|
+
if (Object.keys(preSendFields).length > 0) {
|
|
72
|
+
await this.store.updateSession(championId, preSendFields);
|
|
73
|
+
}
|
|
74
|
+
let postSendFields;
|
|
75
|
+
try {
|
|
76
|
+
postSendFields = await backend.send(session, message);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
80
|
+
const errorFields = backend.onSendError(session, err);
|
|
81
|
+
if (Object.keys(errorFields).length > 0) {
|
|
82
|
+
await this.store.updateSession(championId, errorFields);
|
|
101
83
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
});
|
|
107
|
-
return;
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
if (Object.keys(postSendFields).length > 0) {
|
|
87
|
+
await this.store.updateSession(championId, postSendFields);
|
|
108
88
|
}
|
|
109
|
-
const tmuxSessionName = (0, champion_ids_1.toTmuxSessionName)(session.championId);
|
|
110
|
-
const sendTime = new Date().toISOString();
|
|
111
|
-
await this.claudeBackend.sendMessage(tmuxSessionName, message);
|
|
112
|
-
await this.store.updateSession(championId, {
|
|
113
|
-
lastUsed: sendTime,
|
|
114
|
-
status: 'active',
|
|
115
|
-
lastTurnStatus: undefined,
|
|
116
|
-
lastTurnError: undefined
|
|
117
|
-
});
|
|
118
89
|
}
|
|
119
90
|
async killSession(championId) {
|
|
120
91
|
const session = await this.requireSession(championId);
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
const tmuxSessionName = (0, champion_ids_1.toTmuxSessionName)(session.championId);
|
|
126
|
-
try {
|
|
127
|
-
await this.claudeBackend.killSession(tmuxSessionName);
|
|
128
|
-
}
|
|
129
|
-
catch (error) {
|
|
130
|
-
if (!(error instanceof Error) ||
|
|
131
|
-
!/failed to connect server|no server running|can't find session/i.test(error.message)) {
|
|
132
|
-
throw error;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
92
|
+
const backend = this.getBackend(session.cli);
|
|
93
|
+
await backend.kill(session);
|
|
136
94
|
await this.store.deleteSession(championId);
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
95
|
+
const remainingActive = (await this.store.listSessions()).filter((s) => s.status === 'active');
|
|
96
|
+
await backend.afterKill(remainingActive);
|
|
140
97
|
}
|
|
141
98
|
async listSessions() {
|
|
142
99
|
const sessions = (await this.store.listSessions()).filter((session) => session.status === 'active');
|
|
143
100
|
const livenessChecks = await Promise.all(sessions.map(async (session) => {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
const liveness = await this.claudeBackend.sessionExists((0, champion_ids_1.toTmuxSessionName)(session.championId));
|
|
150
|
-
return { championId: session.championId, liveness };
|
|
151
|
-
}
|
|
101
|
+
const backend = this.getBackend(session.cli);
|
|
102
|
+
const liveness = await backend.exists(session);
|
|
103
|
+
return { championId: session.championId, cli: session.cli, liveness };
|
|
152
104
|
}));
|
|
153
105
|
for (const check of livenessChecks) {
|
|
154
106
|
if (check.liveness === 'unknown') {
|
|
@@ -156,219 +108,61 @@ class SessionManager {
|
|
|
156
108
|
}
|
|
157
109
|
}
|
|
158
110
|
const deadSessions = sessions.filter((session) => livenessChecks.some((check) => check.championId === session.championId && check.liveness === 'dead'));
|
|
159
|
-
const
|
|
160
|
-
.filter((
|
|
161
|
-
.map((
|
|
162
|
-
const
|
|
163
|
-
.filter((
|
|
164
|
-
.map((
|
|
165
|
-
if (
|
|
166
|
-
await Promise.all(
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
});
|
|
171
|
-
}));
|
|
172
|
-
}
|
|
173
|
-
if (deadNonCodexSessionIds.length > 0) {
|
|
174
|
-
await this.store.pruneSessions(deadNonCodexSessionIds);
|
|
111
|
+
const deadDeactivateIds = deadSessions
|
|
112
|
+
.filter((s) => this.getBackend(s.cli).deadSessionPolicy === 'deactivate')
|
|
113
|
+
.map((s) => s.championId);
|
|
114
|
+
const deadPruneIds = deadSessions
|
|
115
|
+
.filter((s) => this.getBackend(s.cli).deadSessionPolicy === 'prune')
|
|
116
|
+
.map((s) => s.championId);
|
|
117
|
+
if (deadDeactivateIds.length > 0) {
|
|
118
|
+
await Promise.all(deadDeactivateIds.map((id) => this.store.updateSession(id, { status: 'inactive', codexTurnInProgress: false })));
|
|
119
|
+
}
|
|
120
|
+
if (deadPruneIds.length > 0) {
|
|
121
|
+
await this.store.pruneSessions(deadPruneIds);
|
|
175
122
|
}
|
|
176
123
|
return (await this.store.listSessions()).filter((session) => session.status === 'active');
|
|
177
124
|
}
|
|
178
125
|
async getLastAssistantTextBlocks(championId, count) {
|
|
179
126
|
const session = await this.requireSession(championId);
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
const sessionMessages = session.lastAssistantMessages ?? [];
|
|
183
|
-
if (sessionMessages.length > 0) {
|
|
184
|
-
return sessionMessages.slice(-safeCount);
|
|
185
|
-
}
|
|
186
|
-
return await this.codexBackend.getLastAssistantMessages(championId, session.internalId, safeCount);
|
|
187
|
-
}
|
|
188
|
-
const transcriptPath = (0, claude_parser_1.getClaudeTranscriptPath)(session.path, session.internalId);
|
|
189
|
-
const transcriptEntries = await (0, claude_parser_1.readClaudeTranscript)(transcriptPath);
|
|
190
|
-
const blocks = (0, claude_parser_1.getAssistantTextBlocks)(transcriptEntries);
|
|
191
|
-
return blocks.slice(-Math.max(1, count));
|
|
127
|
+
const backend = this.getBackend(session.cli);
|
|
128
|
+
return backend.getLastMessages(session, count);
|
|
192
129
|
}
|
|
193
130
|
async getSessionStatus(championId) {
|
|
194
131
|
const session = await this.requireSession(championId);
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
if (session.lastTurnStatus === 'failed') {
|
|
200
|
-
// Re-check live thread status — cached 'failed' may be stale (e.g. from a previous bug)
|
|
201
|
-
let liveStatus;
|
|
202
|
-
try {
|
|
203
|
-
liveStatus = await this.codexBackend.getThreadRuntimeStatus(session.internalId);
|
|
204
|
-
}
|
|
205
|
-
catch {
|
|
206
|
-
liveStatus = 'unknown';
|
|
207
|
-
}
|
|
208
|
-
if (liveStatus === 'active') {
|
|
209
|
-
return 'working';
|
|
210
|
-
}
|
|
211
|
-
if (liveStatus === 'idle' || liveStatus === 'notLoaded') {
|
|
212
|
-
await this.store.updateSession(championId, { lastTurnStatus: 'completed', lastTurnError: undefined });
|
|
213
|
-
return 'idle';
|
|
214
|
-
}
|
|
215
|
-
// Truly failed, unknown, or couldn't connect — report cached error
|
|
216
|
-
const suffix = session.lastTurnError ? `: ${session.lastTurnError}` : '';
|
|
217
|
-
throw new Error(`Codex turn failed${suffix}`);
|
|
218
|
-
}
|
|
219
|
-
return 'idle';
|
|
132
|
+
const backend = this.getBackend(session.cli);
|
|
133
|
+
const result = await backend.status(session);
|
|
134
|
+
if (result.storeUpdate && Object.keys(result.storeUpdate).length > 0) {
|
|
135
|
+
await this.store.updateSession(championId, result.storeUpdate);
|
|
220
136
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
137
|
+
if (result.errorToThrow) {
|
|
138
|
+
throw result.errorToThrow;
|
|
139
|
+
}
|
|
140
|
+
return result.status;
|
|
141
|
+
}
|
|
142
|
+
async getSessionLogs(championId) {
|
|
143
|
+
const session = await this.requireSession(championId);
|
|
144
|
+
const backend = this.getBackend(session.cli);
|
|
145
|
+
return backend.getLogs(session);
|
|
146
|
+
}
|
|
147
|
+
async inspectSession(championId) {
|
|
148
|
+
return this.requireSession(championId);
|
|
224
149
|
}
|
|
225
150
|
async waitForSession(championId, options = {}) {
|
|
226
151
|
const session = await this.requireSession(championId);
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
liveStatus = await this.codexBackend.getThreadRuntimeStatus(session.internalId);
|
|
234
|
-
}
|
|
235
|
-
catch {
|
|
236
|
-
liveStatus = 'unknown';
|
|
237
|
-
}
|
|
238
|
-
if (liveStatus === 'idle' || liveStatus === 'notLoaded') {
|
|
239
|
-
await this.store.updateSession(championId, { lastTurnStatus: 'completed', lastTurnError: undefined });
|
|
240
|
-
return { completed: true, timedOut: false, elapsedMs: 0 };
|
|
241
|
-
}
|
|
242
|
-
if (liveStatus !== 'active') {
|
|
243
|
-
// Couldn't determine live status or truly failed — report cached error
|
|
244
|
-
const message = session.lastTurnError
|
|
245
|
-
? `Codex turn failed: ${session.lastTurnError}`
|
|
246
|
-
: 'Codex turn failed';
|
|
247
|
-
throw new Error(message);
|
|
248
|
-
}
|
|
249
|
-
// Thread is active — fall through to waitForThread below
|
|
250
|
-
}
|
|
251
|
-
await this.store.updateSession(championId, {
|
|
252
|
-
lastUsed: new Date().toISOString()
|
|
253
|
-
});
|
|
254
|
-
if (!session.codexTurnInProgress) {
|
|
255
|
-
if (session.lastTurnStatus === 'interrupted') {
|
|
256
|
-
return {
|
|
257
|
-
completed: false,
|
|
258
|
-
timedOut: true,
|
|
259
|
-
elapsedMs: timeoutMs
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
return {
|
|
263
|
-
completed: true,
|
|
264
|
-
timedOut: false,
|
|
265
|
-
elapsedMs: 0
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
let waitResult;
|
|
269
|
-
try {
|
|
270
|
-
waitResult = await this.codexBackend.waitForThread(championId, session.internalId, timeoutMs);
|
|
271
|
-
}
|
|
272
|
-
catch (error) {
|
|
273
|
-
if (error instanceof Error) {
|
|
274
|
-
const latestSession = await this.store.getSession(championId);
|
|
275
|
-
if (latestSession?.cli === 'codex' && latestSession.codexTurnInProgress === true) {
|
|
276
|
-
await this.store.updateSession(championId, {
|
|
277
|
-
codexTurnInProgress: false,
|
|
278
|
-
lastTurnStatus: 'failed',
|
|
279
|
-
lastTurnError: error.message,
|
|
280
|
-
lastUsed: new Date().toISOString()
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
throw error;
|
|
285
|
-
}
|
|
286
|
-
const completionTime = new Date().toISOString();
|
|
287
|
-
const turnStillInProgress = waitResult.timedOut;
|
|
288
|
-
await this.store.updateSession(championId, {
|
|
289
|
-
lastUsed: completionTime,
|
|
290
|
-
codexTurnInProgress: turnStillInProgress,
|
|
291
|
-
codexLastCompletedAt: turnStillInProgress ? session.codexLastCompletedAt : completionTime,
|
|
292
|
-
lastTurnStatus: waitResult.status,
|
|
293
|
-
lastTurnError: waitResult.errorMessage
|
|
294
|
-
});
|
|
295
|
-
if (waitResult.status === 'failed') {
|
|
296
|
-
const message = waitResult.errorMessage ? `Codex turn failed: ${waitResult.errorMessage}` : 'Codex turn failed';
|
|
297
|
-
throw new Error(message);
|
|
298
|
-
}
|
|
299
|
-
return {
|
|
300
|
-
completed: !waitResult.timedOut && waitResult.status !== 'interrupted',
|
|
301
|
-
timedOut: waitResult.timedOut || waitResult.status === 'interrupted',
|
|
302
|
-
elapsedMs: waitResult.elapsedMs
|
|
303
|
-
};
|
|
152
|
+
const backend = this.getBackend(session.cli);
|
|
153
|
+
const timeoutMs = Math.max(0.05, options.timeoutSeconds ?? 300) * 1000;
|
|
154
|
+
const intervalMs = Math.max(0.05, options.intervalSeconds ?? 2) * 1000;
|
|
155
|
+
const result = await backend.wait(session, timeoutMs, intervalMs);
|
|
156
|
+
if (Object.keys(result.storeUpdate).length > 0) {
|
|
157
|
+
await this.store.updateSession(championId, result.storeUpdate);
|
|
304
158
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
const intervalMs = Math.max(1, options.intervalSeconds ?? 2) * 1000;
|
|
308
|
-
const startTime = Date.now();
|
|
309
|
-
const deadline = startTime + timeoutMs;
|
|
310
|
-
const latestSendMs = Date.parse(session.lastUsed);
|
|
311
|
-
const initialEntries = await (0, claude_parser_1.readClaudeTranscript)(transcriptPath);
|
|
312
|
-
const baselineAssistantCount = (0, claude_parser_1.countAssistantMessages)(initialEntries);
|
|
313
|
-
const baselineSystemCount = (0, claude_parser_1.countSystemEntries)(initialEntries);
|
|
314
|
-
let lastMtimeMs = -1;
|
|
315
|
-
let shouldReadTranscript = false;
|
|
316
|
-
let cachedEntries = initialEntries;
|
|
317
|
-
while (Date.now() <= deadline) {
|
|
318
|
-
try {
|
|
319
|
-
const fileStat = await (0, promises_1.stat)(transcriptPath);
|
|
320
|
-
if (fileStat.mtimeMs !== lastMtimeMs) {
|
|
321
|
-
lastMtimeMs = fileStat.mtimeMs;
|
|
322
|
-
shouldReadTranscript = true;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
catch (error) {
|
|
326
|
-
if (error.code !== 'ENOENT') {
|
|
327
|
-
throw error;
|
|
328
|
-
}
|
|
329
|
-
shouldReadTranscript = true;
|
|
330
|
-
cachedEntries = [];
|
|
331
|
-
}
|
|
332
|
-
if (shouldReadTranscript) {
|
|
333
|
-
cachedEntries = await (0, claude_parser_1.readClaudeTranscript)(transcriptPath);
|
|
334
|
-
shouldReadTranscript = false;
|
|
335
|
-
}
|
|
336
|
-
const status = (0, claude_parser_1.inferTranscriptStatus)(cachedEntries);
|
|
337
|
-
const hasNewSystemEntry = (0, claude_parser_1.countSystemEntries)(cachedEntries) > baselineSystemCount;
|
|
338
|
-
const hasNewAssistant = (0, claude_parser_1.countAssistantMessages)(cachedEntries) > baselineAssistantCount;
|
|
339
|
-
const hasRecentAssistant = this.hasAssistantResponseAtOrAfter(cachedEntries, latestSendMs);
|
|
340
|
-
// Primary signal: a new 'system' entry marks the definitive end of a Claude Code turn.
|
|
341
|
-
// This avoids false positives from intermediate tool_use assistant entries.
|
|
342
|
-
if (hasNewSystemEntry && (hasNewAssistant || hasRecentAssistant)) {
|
|
343
|
-
await this.store.updateSession(championId, {
|
|
344
|
-
lastUsed: new Date().toISOString()
|
|
345
|
-
});
|
|
346
|
-
return {
|
|
347
|
-
completed: true,
|
|
348
|
-
timedOut: false,
|
|
349
|
-
elapsedMs: Date.now() - startTime
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
// Fallback: if inferTranscriptStatus reports idle/waiting and we have new assistant
|
|
353
|
-
// entries, the turn is complete. This handles transcripts that may not have system entries.
|
|
354
|
-
if ((status === 'idle' || status === 'waiting_for_input') &&
|
|
355
|
-
(0, claude_parser_1.hasAssistantResponseAfterLatestUser)(cachedEntries) &&
|
|
356
|
-
(hasNewAssistant || hasRecentAssistant)) {
|
|
357
|
-
await this.store.updateSession(championId, {
|
|
358
|
-
lastUsed: new Date().toISOString()
|
|
359
|
-
});
|
|
360
|
-
return {
|
|
361
|
-
completed: true,
|
|
362
|
-
timedOut: false,
|
|
363
|
-
elapsedMs: Date.now() - startTime
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
await this.sleep(intervalMs);
|
|
159
|
+
if (result.errorToThrow) {
|
|
160
|
+
throw result.errorToThrow;
|
|
367
161
|
}
|
|
368
162
|
return {
|
|
369
|
-
completed:
|
|
370
|
-
timedOut:
|
|
371
|
-
elapsedMs:
|
|
163
|
+
completed: result.completed,
|
|
164
|
+
timedOut: result.timedOut,
|
|
165
|
+
elapsedMs: result.elapsedMs
|
|
372
166
|
};
|
|
373
167
|
}
|
|
374
168
|
async requireSession(championId) {
|
|
@@ -379,43 +173,26 @@ class SessionManager {
|
|
|
379
173
|
return session;
|
|
380
174
|
}
|
|
381
175
|
async findAvailableChampionId(maxAttempts = 250) {
|
|
176
|
+
const allBackends = [...this.backends.values()];
|
|
382
177
|
for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
|
|
383
178
|
const candidate = (0, champion_ids_1.generateChampionId)();
|
|
384
179
|
if (await this.store.getSession(candidate)) {
|
|
385
180
|
continue;
|
|
386
181
|
}
|
|
387
|
-
|
|
182
|
+
let taken = false;
|
|
183
|
+
for (const b of allBackends) {
|
|
184
|
+
if (await b.isChampionIdTaken(candidate)) {
|
|
185
|
+
taken = true;
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (taken) {
|
|
388
190
|
continue;
|
|
389
191
|
}
|
|
390
192
|
return candidate;
|
|
391
193
|
}
|
|
392
194
|
throw new Error('Unable to allocate a unique champion ID');
|
|
393
195
|
}
|
|
394
|
-
async sleep(ms) {
|
|
395
|
-
await new Promise((resolve) => {
|
|
396
|
-
setTimeout(resolve, ms);
|
|
397
|
-
});
|
|
398
|
-
}
|
|
399
|
-
async hasActiveCodexSessions() {
|
|
400
|
-
const sessions = await this.store.listSessions();
|
|
401
|
-
return sessions.some((session) => session.status === 'active' && session.cli === 'codex');
|
|
402
|
-
}
|
|
403
|
-
hasAssistantResponseAtOrAfter(entries, thresholdMs) {
|
|
404
|
-
if (!Number.isFinite(thresholdMs)) {
|
|
405
|
-
return false;
|
|
406
|
-
}
|
|
407
|
-
return entries.some((entry) => {
|
|
408
|
-
if (entry.type?.toLowerCase() !== 'assistant') {
|
|
409
|
-
return false;
|
|
410
|
-
}
|
|
411
|
-
const timestamp = entry.timestamp;
|
|
412
|
-
if (typeof timestamp !== 'string') {
|
|
413
|
-
return false;
|
|
414
|
-
}
|
|
415
|
-
const parsed = Date.parse(timestamp);
|
|
416
|
-
return !Number.isNaN(parsed) && parsed >= thresholdMs;
|
|
417
|
-
});
|
|
418
|
-
}
|
|
419
196
|
}
|
|
420
197
|
exports.SessionManager = SessionManager;
|
|
421
198
|
function shouldUseGatewaySessionManager(env = process.env) {
|
|
@@ -427,6 +204,6 @@ function createDefaultSessionManager(env = process.env) {
|
|
|
427
204
|
baseUrl: (0, client_1.resolveGatewayBaseUrl)(env)
|
|
428
205
|
});
|
|
429
206
|
}
|
|
430
|
-
return new SessionManager((0, session_store_1.createDefaultSessionStore)(), new claude_tmux_1.ClaudeTmuxBackend(), new codex_appserver_1.CodexAppServerBackend());
|
|
207
|
+
return new SessionManager((0, session_store_1.createDefaultSessionStore)(), new claude_backend_1.ClaudeBackend(new claude_tmux_1.ClaudeTmuxBackend()), new codex_backend_1.CodexBackend(new codex_appserver_1.CodexAppServerBackend()));
|
|
431
208
|
}
|
|
432
209
|
//# sourceMappingURL=session-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/session-store.js
CHANGED
|
@@ -20,7 +20,7 @@ function isStoredSession(value) {
|
|
|
20
20
|
return (typeof candidate.championId === 'string' &&
|
|
21
21
|
typeof candidate.internalId === 'string' &&
|
|
22
22
|
(candidate.cli === 'claude' || candidate.cli === 'codex') &&
|
|
23
|
-
(candidate.mode === '
|
|
23
|
+
(candidate.mode === 'native' || candidate.mode === 'docker') &&
|
|
24
24
|
typeof candidate.path === 'string' &&
|
|
25
25
|
(candidate.description === undefined || typeof candidate.description === 'string') &&
|
|
26
26
|
(candidate.status === 'active' || candidate.status === 'inactive') &&
|
|
@@ -28,6 +28,7 @@ function isStoredSession(value) {
|
|
|
28
28
|
(candidate.appServerPort === undefined || Number.isInteger(candidate.appServerPort)) &&
|
|
29
29
|
(candidate.model === undefined || typeof candidate.model === 'string') &&
|
|
30
30
|
(candidate.codexTurnInProgress === undefined || typeof candidate.codexTurnInProgress === 'boolean') &&
|
|
31
|
+
(candidate.codexActiveTurnId === undefined || typeof candidate.codexActiveTurnId === 'string') &&
|
|
31
32
|
(candidate.codexLastCompletedAt === undefined || typeof candidate.codexLastCompletedAt === 'string') &&
|
|
32
33
|
(candidate.lastTurnStatus === undefined ||
|
|
33
34
|
candidate.lastTurnStatus === 'completed' ||
|
|
@@ -110,9 +111,20 @@ class SessionStore {
|
|
|
110
111
|
try {
|
|
111
112
|
const raw = await (0, promises_1.readFile)(this.storePath, 'utf8');
|
|
112
113
|
const parsed = JSON.parse(raw);
|
|
113
|
-
const sessions =
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
const sessions = [];
|
|
115
|
+
if (Array.isArray(parsed.sessions)) {
|
|
116
|
+
for (const [index, candidate] of parsed.sessions.entries()) {
|
|
117
|
+
if (isStoredSession(candidate)) {
|
|
118
|
+
sessions.push(candidate);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const candidateChampionId = candidate && typeof candidate === 'object' && typeof candidate.championId === 'string'
|
|
122
|
+
? candidate.championId
|
|
123
|
+
: undefined;
|
|
124
|
+
const championIdSuffix = candidateChampionId ? ` championId=${candidateChampionId}` : '';
|
|
125
|
+
console.warn(`[dev-sessions] ignoring invalid session record in ${this.storePath} at index ${index}${championIdSuffix}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
116
128
|
return {
|
|
117
129
|
version: typeof parsed.version === 'number' ? parsed.version : CURRENT_VERSION,
|
|
118
130
|
sessions
|