From 4193157124cb43641eedaa2d9b7675935174dced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=A9=98?= Date: Tue, 26 May 2026 14:27:31 +0000 Subject: [PATCH] refactor(hermes): clean up loadHermesSessionFromDb MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove unnecessary Promise.resolve() wrappers (sync function) - Use try/finally for db.close() instead of manual close at each exit - Flatten nested try/catch Follow-up to #535 review nits. 小橘 🍊 --- .../src/session-detail.ts | 68 +++++++++---------- 1 file changed, 32 insertions(+), 36 deletions(-) diff --git a/packages/workflow-agent-hermes/src/session-detail.ts b/packages/workflow-agent-hermes/src/session-detail.ts index 2170cee..87e9928 100644 --- a/packages/workflow-agent-hermes/src/session-detail.ts +++ b/packages/workflow-agent-hermes/src/session-detail.ts @@ -150,46 +150,42 @@ function dbMessageToSessionMessage(row: DbMessageRow): HermesSessionMessage { export function loadHermesSessionFromDb( sessionId: string, dbPath: string | null = null, -): Promise { +): HermesSessionJson | null { const resolvedPath = dbPath ?? getHermesDbPath(); + let db: InstanceType | null = null; try { - const db = new Database(resolvedPath, { readonly: true }); - try { - const session = db - .query("SELECT id, model, started_at FROM sessions WHERE id = ?") - .get(sessionId) as DbSessionRow | null; - if (session === null) { - db.close(); - return Promise.resolve(null); - } - const rows = db - .query( - "SELECT role, content, reasoning, tool_calls FROM messages WHERE session_id = ? ORDER BY id", - ) - .all(sessionId) as DbMessageRow[]; - db.close(); - - const messages: HermesSessionMessage[] = []; - for (const row of rows) { - const role = row.role; - if (role !== "user" && role !== "assistant" && role !== "tool") { - continue; - } - messages.push(dbMessageToSessionMessage(row)); - } - - return Promise.resolve({ - session_id: session.id, - model: session.model, - session_start: new Date(session.started_at * 1000).toISOString(), - messages, - }); - } catch { - db.close(); - return Promise.resolve(null); + db = new Database(resolvedPath, { readonly: true }); + const session = db + .query("SELECT id, model, started_at FROM sessions WHERE id = ?") + .get(sessionId) as DbSessionRow | null; + if (session === null) { + return null; } + const rows = db + .query( + "SELECT role, content, reasoning, tool_calls FROM messages WHERE session_id = ? ORDER BY id", + ) + .all(sessionId) as DbMessageRow[]; + + const messages: HermesSessionMessage[] = []; + for (const row of rows) { + const role = row.role; + if (role !== "user" && role !== "assistant" && role !== "tool") { + continue; + } + messages.push(dbMessageToSessionMessage(row)); + } + + return { + session_id: session.id, + model: session.model, + session_start: new Date(session.started_at * 1000).toISOString(), + messages, + }; } catch { - return Promise.resolve(null); + return null; + } finally { + db?.close(); } }