From 753c58fc1a37d33e58bce1dbe88b29f3d0cc4ae7 Mon Sep 17 00:00:00 2001 From: Haileyesus Date: Mon, 6 Apr 2026 11:47:45 +0300 Subject: [PATCH] feat: add jsonlPath to session data and database schema --- .../claude/claude.session-processor.ts | 1 + .../codex/codex.session-processor.ts | 1 + .../cursor/cursor.session-processor.ts | 1 + .../gemini/gemini.session-processor.ts | 1 + .../src/modules/sessions/sessions.watcher.ts | 1 + server/src/shared/database/migrations.ts | 1 + .../database/repositories/sessions.db.ts | 26 +++++++++++++------ server/src/shared/database/schema.ts | 1 + server/src/shared/database/types.ts | 1 + server/src/shared/types/session.ts | 1 + 10 files changed, 27 insertions(+), 8 deletions(-) diff --git a/server/src/modules/providers/claude/claude.session-processor.ts b/server/src/modules/providers/claude/claude.session-processor.ts index ce79a59c..31ef68fd 100644 --- a/server/src/modules/providers/claude/claude.session-processor.ts +++ b/server/src/modules/providers/claude/claude.session-processor.ts @@ -45,6 +45,7 @@ export async function processClaudeSessions() { result.sessionName, createdAt, updatedAt, + file, ); } } diff --git a/server/src/modules/providers/codex/codex.session-processor.ts b/server/src/modules/providers/codex/codex.session-processor.ts index 9e1d1d4a..8bd76065 100644 --- a/server/src/modules/providers/codex/codex.session-processor.ts +++ b/server/src/modules/providers/codex/codex.session-processor.ts @@ -46,6 +46,7 @@ export async function processCodexSessions() { result.sessionName, createdAt, updatedAt, + file, ); } } diff --git a/server/src/modules/providers/cursor/cursor.session-processor.ts b/server/src/modules/providers/cursor/cursor.session-processor.ts index 9a689aa0..8b1a1d9f 100644 --- a/server/src/modules/providers/cursor/cursor.session-processor.ts +++ b/server/src/modules/providers/cursor/cursor.session-processor.ts @@ -174,6 +174,7 @@ export async function processCursorSessions() { result.sessionName, createdAt, updatedAt, + file, ); } } diff --git a/server/src/modules/providers/gemini/gemini.session-processor.ts b/server/src/modules/providers/gemini/gemini.session-processor.ts index 5c03e85c..6a9da1a6 100644 --- a/server/src/modules/providers/gemini/gemini.session-processor.ts +++ b/server/src/modules/providers/gemini/gemini.session-processor.ts @@ -100,6 +100,7 @@ export async function processGeminiSessions() { result.sessionName, createdAt, updatedAt, + file, ); } } diff --git a/server/src/modules/sessions/sessions.watcher.ts b/server/src/modules/sessions/sessions.watcher.ts index 11dc5677..683a248d 100644 --- a/server/src/modules/sessions/sessions.watcher.ts +++ b/server/src/modules/sessions/sessions.watcher.ts @@ -121,6 +121,7 @@ const onUpdate = async ( sessionName, createdAt, updatedAt, + filePath, ); } break; diff --git a/server/src/shared/database/migrations.ts b/server/src/shared/database/migrations.ts index 8ea5d6b4..538a57cf 100644 --- a/server/src/shared/database/migrations.ts +++ b/server/src/shared/database/migrations.ts @@ -56,6 +56,7 @@ export const runMigrations = (db: Database) => { const sessionColumnNames = sessionsTableInfo.map((col) => col.name); addColumnToTableIfNotExists(db, "sessions", sessionColumnNames, "created_at", "DATETIME"); addColumnToTableIfNotExists(db, "sessions", sessionColumnNames, "updated_at", "DATETIME"); + addColumnToTableIfNotExists(db, "sessions", sessionColumnNames, "jsonl_path", "TEXT"); db.exec("UPDATE sessions SET created_at = COALESCE(created_at, CURRENT_TIMESTAMP)"); db.exec("UPDATE sessions SET updated_at = COALESCE(updated_at, CURRENT_TIMESTAMP)"); diff --git a/server/src/shared/database/repositories/sessions.db.ts b/server/src/shared/database/repositories/sessions.db.ts index c57c5861..893d5cd0 100644 --- a/server/src/shared/database/repositories/sessions.db.ts +++ b/server/src/shared/database/repositories/sessions.db.ts @@ -14,7 +14,7 @@ type SessionNameLookupRow = { type SessionMetadataLookupRow = Pick< SessionsRow, - 'session_id' | 'provider' | 'workspace_path' | 'created_at' | 'updated_at' + 'session_id' | 'provider' | 'workspace_path' | 'jsonl_path' | 'created_at' | 'updated_at' >; function normalizeTimestamp(value?: string): string | null { @@ -65,6 +65,7 @@ export const sessionsDb = { customName?: string, createdAt?: string, updatedAt?: string, + jsonlPath?: string | null, ): void { const db = getConnection(); const createdAtValue = normalizeTimestamp(createdAt); @@ -76,13 +77,22 @@ export const sessionsDb = { workspaceOriginalPathsDb.createWorkspacePath(normalizedWorkspacePath); db.prepare( - `INSERT INTO sessions (session_id, provider, custom_name, workspace_path, created_at, updated_at) - VALUES (?, ?, ?, ?, COALESCE(?, CURRENT_TIMESTAMP), COALESCE(?, CURRENT_TIMESTAMP)) + `INSERT INTO sessions (session_id, provider, custom_name, workspace_path, jsonl_path, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, COALESCE(?, CURRENT_TIMESTAMP), COALESCE(?, CURRENT_TIMESTAMP)) ON CONFLICT(session_id) DO UPDATE SET updated_at = excluded.updated_at, - workspace_path = excluded.workspace_path + workspace_path = excluded.workspace_path, + jsonl_path = excluded.jsonl_path WHERE sessions.provider = excluded.provider` - ).run(session_id, provider, customName, normalizedWorkspacePath, createdAtValue, updatedAtValue); + ).run( + session_id, + provider, + customName, + normalizedWorkspacePath, + jsonlPath ?? null, + createdAtValue, + updatedAtValue, + ); }, /** Updates a custom session name by session id, regardless of provider. */ @@ -109,7 +119,7 @@ export const sessionsDb = { const db = getConnection(); const row = db .prepare( - `SELECT session_id, provider, workspace_path, created_at, updated_at + `SELECT session_id, provider, workspace_path, jsonl_path, created_at, updated_at FROM sessions WHERE session_id = ?` ) @@ -122,7 +132,7 @@ export const sessionsDb = { const db = getConnection(); return db .prepare( - `SELECT session_id, provider, workspace_path, custom_name, created_at, updated_at + `SELECT session_id, provider, workspace_path, jsonl_path, custom_name, created_at, updated_at FROM sessions` ) .all() as SessionsRow[]; @@ -132,7 +142,7 @@ export const sessionsDb = { const db = getConnection(); return db .prepare( - `SELECT session_id, provider, workspace_path, custom_name, created_at, updated_at + `SELECT session_id, provider, workspace_path, jsonl_path, custom_name, created_at, updated_at FROM sessions WHERE workspace_path = ?` ) diff --git a/server/src/shared/database/schema.ts b/server/src/shared/database/schema.ts index 3c825dee..758936dd 100644 --- a/server/src/shared/database/schema.ts +++ b/server/src/shared/database/schema.ts @@ -75,6 +75,7 @@ CREATE TABLE IF NOT EXISTS sessions ( provider TEXT NOT NULL, custom_name TEXT, workspace_path TEXT NOT NULL, + jsonl_path TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (workspace_path) REFERENCES workspace_original_paths(workspace_path) diff --git a/server/src/shared/database/types.ts b/server/src/shared/database/types.ts index b5055f8a..68d365e3 100644 --- a/server/src/shared/database/types.ts +++ b/server/src/shared/database/types.ts @@ -100,6 +100,7 @@ export type SessionsRow = { session_id: string; provider: LLMProvider; workspace_path: string; + jsonl_path: string | null; custom_name: string | null; created_at: string; updated_at: string; diff --git a/server/src/shared/types/session.ts b/server/src/shared/types/session.ts index 8d107fa1..540dc64d 100644 --- a/server/src/shared/types/session.ts +++ b/server/src/shared/types/session.ts @@ -2,4 +2,5 @@ export type SessionData = { sessionId: string; workspacePath: string; sessionName?: string; + jsonlPath?: string | null; };