mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-06-20 16:02:05 +08:00
Compare commits
3 Commits
browser-us
...
desktop-se
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7ca355651f | ||
|
|
a12ca8eed3 | ||
|
|
e88539170e |
@@ -25,6 +25,21 @@ export class ClaudeSessionSynchronizer implements IProviderSessionSynchronizer {
|
|||||||
private readonly provider = 'claude' as const;
|
private readonly provider = 'claude' as const;
|
||||||
private readonly claudeHome = path.join(os.homedir(), '.claude');
|
private readonly claudeHome = path.join(os.homedir(), '.claude');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true when a JSONL file is a subagent transcript rather than a
|
||||||
|
* top-level session.
|
||||||
|
*
|
||||||
|
* Claude stores subagent transcripts under a `subagents/` directory, e.g.
|
||||||
|
* `~/.claude/projects/<encoded-cwd>/<session-id>/subagents/agent-<id>.jsonl`.
|
||||||
|
* Those files repeat the parent session's `sessionId`, so indexing them as
|
||||||
|
* standalone sessions overwrites the parent row's `jsonl_path` and corrupts
|
||||||
|
* the main session record. The recursive scan in `synchronize()` reaches
|
||||||
|
* them, so both entry points must skip them.
|
||||||
|
*/
|
||||||
|
private isSubagentTranscript(filePath: string): boolean {
|
||||||
|
return path.normalize(filePath).split(path.sep).includes('subagents');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scans ~/.claude/projects and upserts discovered sessions into DB.
|
* Scans ~/.claude/projects and upserts discovered sessions into DB.
|
||||||
*/
|
*/
|
||||||
@@ -38,6 +53,10 @@ export class ClaudeSessionSynchronizer implements IProviderSessionSynchronizer {
|
|||||||
|
|
||||||
let processed = 0;
|
let processed = 0;
|
||||||
for (const filePath of files) {
|
for (const filePath of files) {
|
||||||
|
if (this.isSubagentTranscript(filePath)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const parsed = await this.processSessionFile(filePath, nameMap);
|
const parsed = await this.processSessionFile(filePath, nameMap);
|
||||||
if (!parsed) {
|
if (!parsed) {
|
||||||
continue;
|
continue;
|
||||||
@@ -66,6 +85,9 @@ export class ClaudeSessionSynchronizer implements IProviderSessionSynchronizer {
|
|||||||
if (!filePath.endsWith('.jsonl')) {
|
if (!filePath.endsWith('.jsonl')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
if (this.isSubagentTranscript(filePath)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
const nameMap = await buildLookupMap(path.join(this.claudeHome, 'history.jsonl'), 'sessionId', 'display');
|
const nameMap = await buildLookupMap(path.join(this.claudeHome, 'history.jsonl'), 'sessionId', 'display');
|
||||||
const parsed = await this.processSessionFile(filePath, nameMap);
|
const parsed = await this.processSessionFile(filePath, nameMap);
|
||||||
|
|||||||
@@ -106,7 +106,13 @@
|
|||||||
"deleteProjectFailed": "Projekt konnte nicht entfernt werden. Bitte erneut versuchen.",
|
"deleteProjectFailed": "Projekt konnte nicht entfernt werden. Bitte erneut versuchen.",
|
||||||
"deleteProjectError": "Fehler beim Entfernen des Projekts. Bitte erneut versuchen.",
|
"deleteProjectError": "Fehler beim Entfernen des Projekts. Bitte erneut versuchen.",
|
||||||
"createProjectFailed": "Projekt konnte nicht erstellt werden. Bitte erneut versuchen.",
|
"createProjectFailed": "Projekt konnte nicht erstellt werden. Bitte erneut versuchen.",
|
||||||
"createProjectError": "Fehler beim Erstellen des Projekts. Bitte erneut versuchen."
|
"createProjectError": "Fehler beim Erstellen des Projekts. Bitte erneut versuchen.",
|
||||||
|
"updateProjectError": "Fehler beim Aktualisieren des Projekts. Bitte erneut versuchen.",
|
||||||
|
"refreshError": "Aktualisierung fehlgeschlagen. Bitte erneut versuchen.",
|
||||||
|
"restoreProjectFailed": "Projekt konnte nicht wiederhergestellt werden. Bitte erneut versuchen.",
|
||||||
|
"restoreProjectError": "Fehler beim Wiederherstellen des Projekts. Bitte erneut versuchen.",
|
||||||
|
"restoreSessionFailed": "Sitzung konnte nicht wiederhergestellt werden. Bitte erneut versuchen.",
|
||||||
|
"restoreSessionError": "Fehler beim Wiederherstellen der Sitzung. Bitte erneut versuchen."
|
||||||
},
|
},
|
||||||
"version": {
|
"version": {
|
||||||
"updateAvailable": "Update verfügbar"
|
"updateAvailable": "Update verfügbar"
|
||||||
|
|||||||
@@ -106,7 +106,13 @@
|
|||||||
"deleteProjectFailed": "Failed to remove project. Please try again.",
|
"deleteProjectFailed": "Failed to remove project. Please try again.",
|
||||||
"deleteProjectError": "Error removing project. Please try again.",
|
"deleteProjectError": "Error removing project. Please try again.",
|
||||||
"createProjectFailed": "Failed to create project. Please try again.",
|
"createProjectFailed": "Failed to create project. Please try again.",
|
||||||
"createProjectError": "Error creating project. Please try again."
|
"createProjectError": "Error creating project. Please try again.",
|
||||||
|
"updateProjectError": "Error updating project. Please try again.",
|
||||||
|
"refreshError": "Failed to refresh. Please try again.",
|
||||||
|
"restoreProjectFailed": "Failed to restore project. Please try again.",
|
||||||
|
"restoreProjectError": "Error restoring project. Please try again.",
|
||||||
|
"restoreSessionFailed": "Failed to restore session. Please try again.",
|
||||||
|
"restoreSessionError": "Error restoring session. Please try again."
|
||||||
},
|
},
|
||||||
"version": {
|
"version": {
|
||||||
"updateAvailable": "Update available"
|
"updateAvailable": "Update available"
|
||||||
|
|||||||
@@ -106,7 +106,13 @@
|
|||||||
"deleteProjectFailed": "Échec de la suppression du projet. Veuillez réessayer.",
|
"deleteProjectFailed": "Échec de la suppression du projet. Veuillez réessayer.",
|
||||||
"deleteProjectError": "Erreur lors de la suppression du projet. Veuillez réessayer.",
|
"deleteProjectError": "Erreur lors de la suppression du projet. Veuillez réessayer.",
|
||||||
"createProjectFailed": "Échec de la création du projet. Veuillez réessayer.",
|
"createProjectFailed": "Échec de la création du projet. Veuillez réessayer.",
|
||||||
"createProjectError": "Erreur lors de la création du projet. Veuillez réessayer."
|
"createProjectError": "Erreur lors de la création du projet. Veuillez réessayer.",
|
||||||
|
"updateProjectError": "Erreur lors de la mise à jour du projet. Veuillez réessayer.",
|
||||||
|
"refreshError": "Échec de l'actualisation. Veuillez réessayer.",
|
||||||
|
"restoreProjectFailed": "Échec de la restauration du projet. Veuillez réessayer.",
|
||||||
|
"restoreProjectError": "Erreur lors de la restauration du projet. Veuillez réessayer.",
|
||||||
|
"restoreSessionFailed": "Échec de la restauration de la session. Veuillez réessayer.",
|
||||||
|
"restoreSessionError": "Erreur lors de la restauration de la session. Veuillez réessayer."
|
||||||
},
|
},
|
||||||
"version": {
|
"version": {
|
||||||
"updateAvailable": "Mise à jour disponible"
|
"updateAvailable": "Mise à jour disponible"
|
||||||
|
|||||||
@@ -106,7 +106,13 @@
|
|||||||
"deleteProjectFailed": "Impossibile rimuovere il progetto. Riprova.",
|
"deleteProjectFailed": "Impossibile rimuovere il progetto. Riprova.",
|
||||||
"deleteProjectError": "Errore durante la rimozione del progetto. Riprova.",
|
"deleteProjectError": "Errore durante la rimozione del progetto. Riprova.",
|
||||||
"createProjectFailed": "Impossibile creare il progetto. Riprova.",
|
"createProjectFailed": "Impossibile creare il progetto. Riprova.",
|
||||||
"createProjectError": "Errore durante la creazione del progetto. Riprova."
|
"createProjectError": "Errore durante la creazione del progetto. Riprova.",
|
||||||
|
"updateProjectError": "Errore durante l'aggiornamento del progetto. Riprova.",
|
||||||
|
"refreshError": "Aggiornamento non riuscito. Riprova.",
|
||||||
|
"restoreProjectFailed": "Impossibile ripristinare il progetto. Riprova.",
|
||||||
|
"restoreProjectError": "Errore durante il ripristino del progetto. Riprova.",
|
||||||
|
"restoreSessionFailed": "Impossibile ripristinare la sessione. Riprova.",
|
||||||
|
"restoreSessionError": "Errore durante il ripristino della sessione. Riprova."
|
||||||
},
|
},
|
||||||
"version": {
|
"version": {
|
||||||
"updateAvailable": "Aggiornamento disponibile"
|
"updateAvailable": "Aggiornamento disponibile"
|
||||||
|
|||||||
@@ -105,7 +105,13 @@
|
|||||||
"deleteProjectFailed": "プロジェクトの除去に失敗しました。もう一度お試しください。",
|
"deleteProjectFailed": "プロジェクトの除去に失敗しました。もう一度お試しください。",
|
||||||
"deleteProjectError": "プロジェクトの除去でエラーが発生しました。もう一度お試しください。",
|
"deleteProjectError": "プロジェクトの除去でエラーが発生しました。もう一度お試しください。",
|
||||||
"createProjectFailed": "プロジェクトの作成に失敗しました。もう一度お試しください。",
|
"createProjectFailed": "プロジェクトの作成に失敗しました。もう一度お試しください。",
|
||||||
"createProjectError": "プロジェクトの作成でエラーが発生しました。もう一度お試しください。"
|
"createProjectError": "プロジェクトの作成でエラーが発生しました。もう一度お試しください。",
|
||||||
|
"updateProjectError": "プロジェクトの更新でエラーが発生しました。もう一度お試しください。",
|
||||||
|
"refreshError": "更新に失敗しました。もう一度お試しください。",
|
||||||
|
"restoreProjectFailed": "プロジェクトの復元に失敗しました。もう一度お試しください。",
|
||||||
|
"restoreProjectError": "プロジェクトの復元でエラーが発生しました。もう一度お試しください。",
|
||||||
|
"restoreSessionFailed": "セッションの復元に失敗しました。もう一度お試しください。",
|
||||||
|
"restoreSessionError": "セッションの復元でエラーが発生しました。もう一度お試しください。"
|
||||||
},
|
},
|
||||||
"version": {
|
"version": {
|
||||||
"updateAvailable": "アップデートあり"
|
"updateAvailable": "アップデートあり"
|
||||||
|
|||||||
@@ -105,7 +105,13 @@
|
|||||||
"deleteProjectFailed": "프로젝트 제거 실패. 다시 시도해주세요.",
|
"deleteProjectFailed": "프로젝트 제거 실패. 다시 시도해주세요.",
|
||||||
"deleteProjectError": "프로젝트 제거 오류. 다시 시도해주세요.",
|
"deleteProjectError": "프로젝트 제거 오류. 다시 시도해주세요.",
|
||||||
"createProjectFailed": "프로젝트 생성 실패. 다시 시도해주세요.",
|
"createProjectFailed": "프로젝트 생성 실패. 다시 시도해주세요.",
|
||||||
"createProjectError": "프로젝트 생성 오류. 다시 시도해주세요."
|
"createProjectError": "프로젝트 생성 오류. 다시 시도해주세요.",
|
||||||
|
"updateProjectError": "프로젝트 업데이트 오류. 다시 시도해주세요.",
|
||||||
|
"refreshError": "새로고침 실패. 다시 시도해주세요.",
|
||||||
|
"restoreProjectFailed": "프로젝트 복원 실패. 다시 시도해주세요.",
|
||||||
|
"restoreProjectError": "프로젝트 복원 오류. 다시 시도해주세요.",
|
||||||
|
"restoreSessionFailed": "세션 복원 실패. 다시 시도해주세요.",
|
||||||
|
"restoreSessionError": "세션 복원 오류. 다시 시도해주세요."
|
||||||
},
|
},
|
||||||
"version": {
|
"version": {
|
||||||
"updateAvailable": "업데이트 가능"
|
"updateAvailable": "업데이트 가능"
|
||||||
|
|||||||
@@ -106,7 +106,13 @@
|
|||||||
"deleteProjectFailed": "Не удалось убрать проект. Попробуйте снова.",
|
"deleteProjectFailed": "Не удалось убрать проект. Попробуйте снова.",
|
||||||
"deleteProjectError": "Ошибка при удалении проекта из списка. Попробуйте снова.",
|
"deleteProjectError": "Ошибка при удалении проекта из списка. Попробуйте снова.",
|
||||||
"createProjectFailed": "Не удалось создать проект. Попробуйте снова.",
|
"createProjectFailed": "Не удалось создать проект. Попробуйте снова.",
|
||||||
"createProjectError": "Ошибка при создании проекта. Попробуйте снова."
|
"createProjectError": "Ошибка при создании проекта. Попробуйте снова.",
|
||||||
|
"updateProjectError": "Ошибка при обновлении проекта. Попробуйте снова.",
|
||||||
|
"refreshError": "Не удалось обновить. Попробуйте снова.",
|
||||||
|
"restoreProjectFailed": "Не удалось восстановить проект. Попробуйте снова.",
|
||||||
|
"restoreProjectError": "Ошибка при восстановлении проекта. Попробуйте снова.",
|
||||||
|
"restoreSessionFailed": "Не удалось восстановить сеанс. Попробуйте снова.",
|
||||||
|
"restoreSessionError": "Ошибка при восстановлении сеанса. Попробуйте снова."
|
||||||
},
|
},
|
||||||
"version": {
|
"version": {
|
||||||
"updateAvailable": "Доступно обновление"
|
"updateAvailable": "Доступно обновление"
|
||||||
|
|||||||
@@ -106,7 +106,13 @@
|
|||||||
"deleteProjectFailed": "Proje kaldırılamadı. Lütfen tekrar dene.",
|
"deleteProjectFailed": "Proje kaldırılamadı. Lütfen tekrar dene.",
|
||||||
"deleteProjectError": "Proje kaldırılırken hata oluştu. Lütfen tekrar dene.",
|
"deleteProjectError": "Proje kaldırılırken hata oluştu. Lütfen tekrar dene.",
|
||||||
"createProjectFailed": "Proje oluşturulamadı. Lütfen tekrar dene.",
|
"createProjectFailed": "Proje oluşturulamadı. Lütfen tekrar dene.",
|
||||||
"createProjectError": "Proje oluşturulurken hata oluştu. Lütfen tekrar dene."
|
"createProjectError": "Proje oluşturulurken hata oluştu. Lütfen tekrar dene.",
|
||||||
|
"updateProjectError": "Proje güncellenirken hata oluştu. Lütfen tekrar dene.",
|
||||||
|
"refreshError": "Yenileme başarısız. Lütfen tekrar dene.",
|
||||||
|
"restoreProjectFailed": "Proje geri yüklenemedi. Lütfen tekrar dene.",
|
||||||
|
"restoreProjectError": "Proje geri yüklenirken hata oluştu. Lütfen tekrar dene.",
|
||||||
|
"restoreSessionFailed": "Oturum geri yüklenemedi. Lütfen tekrar dene.",
|
||||||
|
"restoreSessionError": "Oturum geri yüklenirken hata oluştu. Lütfen tekrar dene."
|
||||||
},
|
},
|
||||||
"version": {
|
"version": {
|
||||||
"updateAvailable": "Güncelleme mevcut"
|
"updateAvailable": "Güncelleme mevcut"
|
||||||
|
|||||||
@@ -106,7 +106,13 @@
|
|||||||
"deleteProjectFailed": "移除项目失败,请重试。",
|
"deleteProjectFailed": "移除项目失败,请重试。",
|
||||||
"deleteProjectError": "移除项目时出错,请重试。",
|
"deleteProjectError": "移除项目时出错,请重试。",
|
||||||
"createProjectFailed": "创建项目失败,请重试。",
|
"createProjectFailed": "创建项目失败,请重试。",
|
||||||
"createProjectError": "创建项目时出错,请重试。"
|
"createProjectError": "创建项目时出错,请重试。",
|
||||||
|
"updateProjectError": "更新项目时出错,请重试。",
|
||||||
|
"refreshError": "刷新失败,请重试。",
|
||||||
|
"restoreProjectFailed": "恢复项目失败,请重试。",
|
||||||
|
"restoreProjectError": "恢复项目时出错,请重试。",
|
||||||
|
"restoreSessionFailed": "恢复会话失败,请重试。",
|
||||||
|
"restoreSessionError": "恢复会话时出错,请重试。"
|
||||||
},
|
},
|
||||||
"version": {
|
"version": {
|
||||||
"updateAvailable": "有可用更新"
|
"updateAvailable": "有可用更新"
|
||||||
|
|||||||
@@ -105,7 +105,13 @@
|
|||||||
"deleteProjectFailed": "移除專案失敗,請重試。",
|
"deleteProjectFailed": "移除專案失敗,請重試。",
|
||||||
"deleteProjectError": "移除專案時出錯,請重試。",
|
"deleteProjectError": "移除專案時出錯,請重試。",
|
||||||
"createProjectFailed": "建立專案失敗,請重試。",
|
"createProjectFailed": "建立專案失敗,請重試。",
|
||||||
"createProjectError": "建立專案時出錯,請重試。"
|
"createProjectError": "建立專案時出錯,請重試。",
|
||||||
|
"updateProjectError": "更新專案時出錯,請重試。",
|
||||||
|
"refreshError": "重新整理失敗,請重試。",
|
||||||
|
"restoreProjectFailed": "還原專案失敗,請重試。",
|
||||||
|
"restoreProjectError": "還原專案時出錯,請重試。",
|
||||||
|
"restoreSessionFailed": "還原工作階段失敗,請重試。",
|
||||||
|
"restoreSessionError": "還原工作階段時出錯,請重試。"
|
||||||
},
|
},
|
||||||
"version": {
|
"version": {
|
||||||
"updateAvailable": "有可用更新"
|
"updateAvailable": "有可用更新"
|
||||||
|
|||||||
Reference in New Issue
Block a user