fix: add missing i18n key and unify session data source (#408)

- Add `chat.sessionNotFound` translation key to all 8 locales
- Fix history page data source inconsistency:
  - Change `getHermesSession` to prioritize database over CLI
  - Now consistent with `listHermesSessions` behavior
  - Prevents "session in list but detail not found" issue
- Update CI workflow to trigger on base branch PRs
- Remove debug log from sessions-db

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
ekko
2026-05-03 09:27:51 +08:00
committed by GitHub
parent 8e2d3b3103
commit b61544cb40
11 changed files with 21 additions and 2 deletions
+1
View File
@@ -4,6 +4,7 @@ on:
pull_request:
branches:
- main
- base
jobs:
build:
+1
View File
@@ -130,6 +130,7 @@ export default {
renamed: 'Umbenannt',
renameFailed: 'Umbenennung fehlgeschlagen',
renameSession: 'Sitzung umbenennen',
sessionNotFound: 'Sitzung nicht gefunden',
enterNewTitle: 'Neuen Titel eingeben',
other: 'Sonstige',
runFailed: 'Ausfuhrung fehlgeschlagen',
+1
View File
@@ -153,6 +153,7 @@ export default {
renamed: 'Renamed',
renameFailed: 'Rename failed',
renameSession: 'Rename Session',
sessionNotFound: 'Session not found',
enterNewTitle: 'Enter new title',
workspace: 'Workspace',
setWorkspace: 'Set Workspace',
+1
View File
@@ -130,6 +130,7 @@ export default {
renamed: 'Renombrada',
renameFailed: 'Error al renombrar',
renameSession: 'Renombrar sesion',
sessionNotFound: 'Sesion no encontrada',
enterNewTitle: 'Introduce un nuevo titulo',
other: 'Otro',
runFailed: 'Error en la ejecucion',
+1
View File
@@ -130,6 +130,7 @@ export default {
renamed: 'Renomme',
renameFailed: 'Echec du renommage',
renameSession: 'Renommer la session',
sessionNotFound: 'Session non trouvee',
enterNewTitle: 'Entrez un nouveau titre',
other: 'Autre',
runFailed: 'Echec de l\'execution',
+1
View File
@@ -130,6 +130,7 @@ export default {
renamed: '名前を変更しました',
renameFailed: '名前の変更に失敗しました',
renameSession: 'セッション名の変更',
sessionNotFound: 'セッションが見つかりません',
enterNewTitle: '新しいタイトルを入力',
other: 'その他',
runFailed: '実行に失敗しました',
+1
View File
@@ -130,6 +130,7 @@ export default {
renamed: '이름이 변경되었습니다',
renameFailed: '이름 변경 실패',
renameSession: '세션 이름 변경',
sessionNotFound: '세션을 찾을 수 없습니다',
enterNewTitle: '새 제목을 입력하세요',
other: '기타',
runFailed: '실행 실패',
+1
View File
@@ -130,6 +130,7 @@ export default {
renamed: 'Renomeado',
renameFailed: 'Falha ao renomear',
renameSession: 'Renomear sessao',
sessionNotFound: 'Sessao nao encontrada',
enterNewTitle: 'Digite um novo titulo',
other: 'Outro',
runFailed: 'Falha na execucao',
+1
View File
@@ -153,6 +153,7 @@ export default {
renamed: '已重命名',
renameFailed: '重命名失败',
renameSession: '重命名会话',
sessionNotFound: '会话未找到',
enterNewTitle: '输入新标题',
workspace: '工作区',
setWorkspace: '设置工作区',
@@ -1,7 +1,7 @@
import * as hermesCli from '../../services/hermes/hermes-cli'
import { listConversationSummaries, getConversationDetail } from '../../services/hermes/conversations'
import { listConversationSummariesFromDb, getConversationDetailFromDb } from '../../db/hermes/conversations-db'
import { listSessionSummaries, searchSessionSummaries, getUsageStatsFromDb } from '../../db/hermes/sessions-db'
import { listSessionSummaries, searchSessionSummaries, getUsageStatsFromDb, getSessionDetailFromDb } from '../../db/hermes/sessions-db'
import {
listSessions as localListSessions,
searchSessions as localSearchSessions,
@@ -232,7 +232,18 @@ export async function get(ctx: any) {
* GET /api/hermes/sessions/hermes/:id
*/
export async function getHermesSession(ctx: any) {
// Try database first (consistent with listHermesSessions)
try {
const session = await getSessionDetailFromDb(ctx.params.id)
if (session && session.source !== 'api_server' && session.source !== 'cron') {
ctx.body = { session }
return
}
} catch (err) {
logger.warn(err, 'Hermes Session DB: detail query failed, falling back to CLI')
}
// Fallback to CLI
const session = await hermesCli.getSession(ctx.params.id)
if (!session) {
ctx.status = 404
@@ -573,7 +573,6 @@ async function openSessionDb() {
}
const { DatabaseSync } = await import('node:sqlite')
const dbPath = sessionDbPath()
console.log(`[sessions-db] Opening session db: ${dbPath}`)
try {
return new DatabaseSync(dbPath, { open: true, readOnly: true })
} catch (err: any) {