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