From d1c523c442ed19fa19cf0ecc0d534f6aeaf6b430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=A9=98?= Date: Thu, 4 Jun 2026 23:06:52 +0000 Subject: [PATCH] feat: agent-hermes reads real token counts from session DB - Add inputTokens/outputTokens to HermesSessionJson type - Query input_tokens, output_tokens from sessions table in loadHermesSessionFromDb - Update test fixture schema with token columns - runPrompt now reports real token counts from Hermes state.db Refs #76, #68 --- packages/agent-hermes/__tests__/session-detail.test.ts | 4 +++- packages/agent-hermes/src/hermes.ts | 4 ++-- packages/agent-hermes/src/session-detail.ts | 10 ++++++++-- packages/agent-hermes/src/types.ts | 2 ++ 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/agent-hermes/__tests__/session-detail.test.ts b/packages/agent-hermes/__tests__/session-detail.test.ts index 45ef717..2a67126 100644 --- a/packages/agent-hermes/__tests__/session-detail.test.ts +++ b/packages/agent-hermes/__tests__/session-detail.test.ts @@ -140,7 +140,9 @@ function createTestDb(dbPath: string): TestDb { db.exec(`CREATE TABLE sessions ( id TEXT PRIMARY KEY, model TEXT NOT NULL, - started_at INTEGER NOT NULL + started_at INTEGER NOT NULL, + input_tokens INTEGER DEFAULT 0, + output_tokens INTEGER DEFAULT 0 )`); db.exec(`CREATE TABLE messages ( id INTEGER PRIMARY KEY AUTOINCREMENT, diff --git a/packages/agent-hermes/src/hermes.ts b/packages/agent-hermes/src/hermes.ts index ad46a2c..76a700a 100644 --- a/packages/agent-hermes/src/hermes.ts +++ b/packages/agent-hermes/src/hermes.ts @@ -127,8 +127,8 @@ export function createHermesAgent(resumeDisabled: boolean): () => Promise const usage: Usage = { turns, - inputTokens: 0, - outputTokens: 0, + inputTokens: session !== null ? session.inputTokens : 0, + outputTokens: session !== null ? session.outputTokens : 0, duration: Math.round(durationSec), }; diff --git a/packages/agent-hermes/src/session-detail.ts b/packages/agent-hermes/src/session-detail.ts index 195b878..c1304e6 100644 --- a/packages/agent-hermes/src/session-detail.ts +++ b/packages/agent-hermes/src/session-detail.ts @@ -106,7 +106,7 @@ function parseSessionJson(raw: unknown): HermesSessionJson | null { messages.push(msg); } } - return { session_id, model, session_start, messages }; + return { session_id, model, session_start, messages, inputTokens: 0, outputTokens: 0 }; } export function getHermesDbPath(): string { @@ -117,6 +117,8 @@ type DbSessionRow = { id: string; model: string; started_at: number; + input_tokens: number; + output_tokens: number; }; type DbMessageRow = { @@ -156,7 +158,9 @@ export function loadHermesSessionFromDb( try { db = new DatabaseSync(resolvedPath, { readOnly: true }); const session = db - .prepare("SELECT id, model, started_at FROM sessions WHERE id = ?") + .prepare( + "SELECT id, model, started_at, input_tokens, output_tokens FROM sessions WHERE id = ?", + ) .get(sessionId) as DbSessionRow | null; if (session === null) { return null; @@ -181,6 +185,8 @@ export function loadHermesSessionFromDb( model: session.model, session_start: new Date(session.started_at * 1000).toISOString(), messages, + inputTokens: session.input_tokens ?? 0, + outputTokens: session.output_tokens ?? 0, }; } catch { return null; diff --git a/packages/agent-hermes/src/types.ts b/packages/agent-hermes/src/types.ts index 4aa32cf..53f6b0e 100644 --- a/packages/agent-hermes/src/types.ts +++ b/packages/agent-hermes/src/types.ts @@ -40,4 +40,6 @@ export type HermesSessionJson = { model: string; session_start: string; messages: HermesSessionMessage[]; + inputTokens: number; + outputTokens: number; };