refactor(hermes): clean up loadHermesSessionFromDb

- 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.

小橘 🍊
This commit is contained in:
2026-05-26 14:27:31 +00:00
parent 6ff1414cf0
commit 4193157124
@@ -150,46 +150,42 @@ function dbMessageToSessionMessage(row: DbMessageRow): HermesSessionMessage {
export function loadHermesSessionFromDb( export function loadHermesSessionFromDb(
sessionId: string, sessionId: string,
dbPath: string | null = null, dbPath: string | null = null,
): Promise<HermesSessionJson | null> { ): HermesSessionJson | null {
const resolvedPath = dbPath ?? getHermesDbPath(); const resolvedPath = dbPath ?? getHermesDbPath();
let db: InstanceType<typeof Database> | null = null;
try { try {
const db = new Database(resolvedPath, { readonly: true }); db = new Database(resolvedPath, { readonly: true });
try { const session = db
const session = db .query("SELECT id, model, started_at FROM sessions WHERE id = ?")
.query("SELECT id, model, started_at FROM sessions WHERE id = ?") .get(sessionId) as DbSessionRow | null;
.get(sessionId) as DbSessionRow | null; if (session === null) {
if (session === null) { return 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);
} }
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 { } catch {
return Promise.resolve(null); return null;
} finally {
db?.close();
} }
} }