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.
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 +0 -2
  9. package/dist/backends/claude-tmux.js +8 -21
  10. package/dist/backends/claude-tmux.js.map +1 -1
  11. package/dist/backends/codex-appserver.d.ts +44 -2
  12. package/dist/backends/codex-appserver.js +291 -109
  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 +115 -338
  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,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
- 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 sendTime = new Date().toISOString();
77
- await this.store.updateSession(championId, {
78
- lastUsed: sendTime,
79
- status: 'active',
80
- codexTurnInProgress: true,
81
- lastTurnStatus: undefined,
82
- lastTurnError: undefined
83
- });
84
- let sendResult;
85
- try {
86
- sendResult = await this.codexBackend.sendMessage(session.championId, session.internalId, message, {
87
- workspacePath: session.path,
88
- model: session.model
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
- await this.store.updateSession(championId, {
103
- internalId: sendResult.threadId,
104
- appServerPid: sendResult.appServerPid,
105
- appServerPort: sendResult.appServerPort
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
- if (session.cli === 'codex') {
122
- await this.codexBackend.killSession(session.championId, session.appServerPid, session.internalId, session.appServerPort);
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
- if (session.cli === 'codex' && !(await this.hasActiveCodexSessions())) {
138
- await this.codexBackend.stopAppServer();
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
- if (session.cli === 'codex') {
145
- const exists = await this.codexBackend.sessionExists(session.championId, session.appServerPid, session.appServerPort, session.internalId);
146
- return { championId: session.championId, liveness: exists ? 'alive' : 'dead' };
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 deadCodexSessionIds = deadSessions
160
- .filter((session) => session.cli === 'codex')
161
- .map((session) => session.championId);
162
- const deadNonCodexSessionIds = deadSessions
163
- .filter((session) => session.cli !== 'codex')
164
- .map((session) => session.championId);
165
- if (deadCodexSessionIds.length > 0) {
166
- await Promise.all(deadCodexSessionIds.map(async (deadSessionId) => {
167
- await this.store.updateSession(deadSessionId, {
168
- status: 'inactive',
169
- codexTurnInProgress: false
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
- if (session.cli === 'codex') {
181
- const safeCount = Math.max(1, count);
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
- if (session.cli === 'codex') {
196
- if (session.codexTurnInProgress) {
197
- return 'working';
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
- const transcriptPath = (0, claude_parser_1.getClaudeTranscriptPath)(session.path, session.internalId);
222
- const transcriptEntries = await (0, claude_parser_1.readClaudeTranscript)(transcriptPath);
223
- return (0, claude_parser_1.inferTranscriptStatus)(transcriptEntries);
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
- if (session.cli === 'codex') {
228
- const timeoutMs = Math.max(1, options.timeoutSeconds ?? 300) * 1000;
229
- if (!session.codexTurnInProgress && session.lastTurnStatus === 'failed') {
230
- // Re-check live thread status before giving up — cached 'failed' may be stale
231
- let liveStatus;
232
- try {
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
- const transcriptPath = (0, claude_parser_1.getClaudeTranscriptPath)(session.path, session.internalId);
306
- const timeoutMs = Math.max(1, options.timeoutSeconds ?? 300) * 1000;
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: false,
370
- timedOut: true,
371
- elapsedMs: Date.now() - startTime
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
- if ((await this.claudeBackend.sessionExists((0, champion_ids_1.toTmuxSessionName)(candidate))) === 'alive') {
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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"}
@@ -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 === 'yolo' || candidate.mode === 'native' || candidate.mode === 'docker') &&
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 = Array.isArray(parsed.sessions)
114
- ? parsed.sessions.filter(isStoredSession)
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