refactor: move session parsing and file watcher logic to specific folders

This commit is contained in:
Haileyesus
2026-03-25 10:52:44 +03:00
parent 3e268e201a
commit 3b7a9d35c2
13 changed files with 342 additions and 338 deletions

View File

@@ -0,0 +1,34 @@
import os from 'os';
import path from 'path';
import { sessionsDb } from '@/shared/database/repositories/sessions.db.js';
import { buildLookupMap, extractFirstValidJsonlData, findFilesRecursivelyCreatedAfterLastScan, SessionData } from '@/modules/sessions/sessions.utils.js';
export async function processCodexSessionFile(file: string, nameMap?: Map<string, string>): Promise<SessionData | null> {
if (!nameMap) {
const base = path.join(os.homedir(), '.codex');
nameMap = await buildLookupMap(path.join(base, 'session_index.jsonl'), 'id', 'thread_name');
}
// Codex nests the required data inside a `payload` object
return extractFirstValidJsonlData(file, (data) => ({
workspacePath: data?.payload?.cwd,
sessionId: data?.payload?.id,
sessionName: nameMap!.get(data?.payload?.id) || 'Untitled Codex Session'
}));
}
export async function getCodexSessions() {
const base = path.join(os.homedir(), '.codex');
// Use the thread_name attribute as requested
const nameMap = await buildLookupMap(path.join(base, 'session_index.jsonl'), 'id', 'thread_name');
const files = await findFilesRecursivelyCreatedAfterLastScan(path.join(base, 'sessions'), '.jsonl');
for (const file of files) {
const result = await processCodexSessionFile(file, nameMap);
if (result) {
sessionsDb.createSession(result.sessionId, 'codex', result.workspacePath, result.sessionName);
}
}
}