fix(i18n+tests): complete locale parity + bump test windows for new menu action

PR #2294 added the show_previous_messaging_sessions setting and a "Hide
from list" menu action for external sessions, but tripped 8 tests:

  - 4 locale-parity tests (tests/test_{japanese,russian,spanish,chinese}_locale.py)
    demand every en key be defined in ja/ru/es/zh blocks. The contributor
    only added the 5 new keys to en + ko, leaving ja/ru/es/zh/it/de/zh-TW/pt/fr
    missing them. tests/test_provider_quota_status.py also requires the two
    settings_{label,desc}_previous_messaging_sessions keys in ALL 11 locales.

  - tests/test_1466_sidebar_cancel_clarify.py read the first 5200 chars of
    _openSessionActionMenu to find cancelSessionStream/delete actions; the
    new "Hide from list" branch (17 lines for external sessions) pushed
    those past the read window.

  - tests/test_issue1611_session_profile_filtering.py grep'd for the
    literal string `_keep_latest_messaging_session_per_source(scoped)`,
    which no longer exists after the call was rewritten as a multi-line
    keyword-arg form.

Fixes:

1. Translations for the 5 new i18n keys added to all 9 missing locales
   (it, ja, ru, es, de, zh-CN, zh-TW, pt, fr):
   - session_hide_external
   - session_hide_external_desc
   - session_hidden
   - settings_label_previous_messaging_sessions
   - settings_desc_previous_messaging_sessions

   Where the locale already used the English fallback for related keys
   (ru/es/de session_archive), I provided localized translations for the
   new keys to match the project's general direction. Native-script
   quality, not machine-translation.

2. test_1466 window bumped 5200 → 6400 with a comment explaining the
   bump (mirrors the existing 3200→4400→5200 history annotations).

3. test_1611 dedupe-position check loosened to match the function name
   without the `(scoped)` suffix so it tolerates both single-line and
   keyword-arg call shapes.

Tests: full suite 5828 passed / 63 skipped / 0 failed (was 8 failed).
Behavioral harness verifies the toggle's claimed behavior — off (default)
hides reset/compression segments, on shows all rows in timestamp order.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nathan Esquenazi
2026-05-17 21:38:06 -07:00
parent 3a53592107
commit e8dbf94a6f
3 changed files with 56 additions and 6 deletions
+45
View File
@@ -1648,12 +1648,15 @@ const LOCALES = {
session_move_project_desc_has: 'Cambia il progetto per questa conversazione',
session_move_project_desc_none: 'Assegna un progetto a questa conversazione',
session_archive: 'Archivia conversazione',
session_hide_external: 'Nascondi dalla lista',
session_restore: 'Ripristina conversazione',
session_archive_desc: 'Nascondi questa conversazione fino a mostrare archiviate',
session_archive_worktree_desc: 'Nascondi questa conversazione; mantieni il suo worktree su disco',
session_hide_external_desc: 'Nascondi questa sessione importata dalla WebUI senza eliminare lo storico originale.',
session_restore_desc: 'Riporta questa conversazione nella lista principale',
session_archived: 'Sessione archiviata',
session_archived_worktree: 'Sessione archiviata. Il worktree rimane su disco.',
session_hidden: 'Sessione nascosta dalla lista',
session_restored: 'Sessione ripristinata',
session_archive_failed: 'Archiviazione fallita: ',
session_duplicate: 'Duplica conversazione',
@@ -1764,6 +1767,7 @@ const LOCALES = {
settings_label_sidebar_density: 'Densità sidebar',
cmd_reasoning: 'Mostra/nascondi ragionamento, imposta livello sforzo o controlla stato attuale',
settings_label_external_sessions: 'Mostra sessioni non-WebUI',
settings_label_previous_messaging_sessions: 'Mostra sessioni di messaggistica precedenti',
settings_label_sync_insights: 'Sincronizza con insights',
settings_label_check_updates: 'Verifica aggiornamenti',
settings_label_whats_new_summary: "Summarize What's New with AI",
@@ -1994,6 +1998,7 @@ const LOCALES = {
settings_auto_title_refresh_20: 'Ogni 20 scambi',
settings_desc_auto_title_refresh: 'Rigenera automaticamente il titolo della sessione in base all\'ultimo scambio, mantenendolo pertinente mentre la conversazione evolve. Richiede un modello LLM per la generazione titoli.',
settings_desc_external_sessions: 'Mostra conversazioni da CLI, Telegram, Discord, Slack e altri canali nella lista sessioni. Clicca per importare e continuare.',
settings_desc_previous_messaging_sessions: 'Mostra sessioni Discord, Telegram, Slack e Weixin più vecchie sostituite da reset o compressione.',
settings_desc_sync_insights: 'Rispecchia l\'uso token WebUI su state.db così hermes /insights include i dati delle sessioni browser. Disattivato per impostazione predefinita.',
settings_desc_check_updates: 'Mostra un banner quando sono disponibili versioni più recenti della WebUI o dell\'Agente. Esegue un git fetch in background periodicamente.',
settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.",
@@ -2853,12 +2858,15 @@ const LOCALES = {
session_move_project_desc_has: 'この会話のプロジェクトを変更',
session_move_project_desc_none: 'この会話にプロジェクトを割り当て',
session_archive: '会話をアーカイブ',
session_hide_external: 'リストから非表示',
session_restore: '会話を復元',
session_archive_desc: 'アーカイブを表示するまでこの会話を非表示にする',
session_archive_worktree_desc: 'この会話を非表示にし、worktree はディスク上に残します',
session_hide_external_desc: '元の履歴を削除せずに、この取り込んだセッションを WebUI のリストから非表示にします。',
session_restore_desc: 'この会話をメイン一覧に戻す',
session_archived: 'セッションをアーカイブしました',
session_archived_worktree: 'セッションをアーカイブしました。Worktree はディスク上に残ります。',
session_hidden: 'セッションをリストから非表示にしました',
session_restored: 'セッションを復元しました',
session_archive_failed: 'アーカイブ失敗: ',
session_duplicate: '会話を複製',
@@ -2969,6 +2977,7 @@ const LOCALES = {
settings_label_sidebar_density: 'サイドバー密度',
cmd_reasoning: '思考表示の切り替え (表示/非表示)、努力レベル設定、現在状態の確認',
settings_label_external_sessions: '非WebUIセッションを表示',
settings_label_previous_messaging_sessions: '以前のメッセージングセッションを表示',
settings_label_sync_insights: 'インサイトに同期',
settings_label_check_updates: 'アップデートを確認',
settings_label_whats_new_summary: "Summarize What's New with AI",
@@ -3204,6 +3213,7 @@ const LOCALES = {
settings_auto_title_refresh_20: '20 回ごと',
settings_desc_auto_title_refresh: '最新のやり取りに基づいてセッションタイトルを自動再生成し、会話の進行に合わせて適切に保ちます。LLM タイトル生成モデルの設定が必要です。',
settings_desc_external_sessions: 'CLI、Telegram、Discord、Slack その他のチャネルからの会話をセッション一覧に表示します。クリックでインポートして続行できます。',
settings_desc_previous_messaging_sessions: 'reset または compression によって置き換えられた以前の Discord、Telegram、Slack、Weixin セッションを表示します。',
settings_desc_sync_insights: 'WebUI のトークン使用量を state.db にミラーし、hermes /insights にブラウザセッションのデータを含めます。デフォルトはオフ。',
settings_desc_check_updates: 'WebUI または Agent の新しいバージョンが利用可能な時にバナーを表示します。バックグラウンドで定期的に git fetch を実行します。',
settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.",
@@ -3988,6 +3998,7 @@ const LOCALES = {
settings_label_sidebar_density: 'Плотность боковой панели',
cmd_reasoning: 'Toggle thinking visibility (show/hide), set effort level, or check current status',
settings_label_external_sessions: 'Показывать внешние сеансы',
settings_label_previous_messaging_sessions: 'Показывать предыдущие сеансы обмена сообщениями',
settings_label_sync_insights: 'Синхронизировать с Insights',
settings_label_check_updates: 'Проверять обновления',
settings_label_whats_new_summary: "Summarize What's New with AI",
@@ -4172,6 +4183,7 @@ const LOCALES = {
settings_auto_title_refresh_20: 'Каждые 20 обменов',
settings_desc_auto_title_refresh: 'Автоматически переформулирует заголовок сессии на основе последнего обмена, чтобы он оставался актуальным по мере развития беседы. Требует настроенную модель генерации заголовков.',
settings_desc_external_sessions: 'Показать беседы из CLI, Telegram, Discord, Slack и других каналов в списке сеансов. Нажмите для импорта и продолжения.',
settings_desc_previous_messaging_sessions: 'Показывать предыдущие сеансы Discord, Telegram, Slack и Weixin, замененные сбросом или сжатием.',
settings_desc_sync_insights: 'Синхронизирует использование токенов WebUI в state.db, чтобы Hermes /insights включал данные браузерных сеансов. Выключено по умолчанию.',
settings_desc_check_updates: 'Показывает баннер, когда доступны более новые версии WebUI или Agent. Периодически выполняет git fetch в фоне.',
settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.",
@@ -4566,11 +4578,14 @@ const LOCALES = {
// Session management and settings keys (en fallback — pending translation)
session_archive: 'Archive conversation',
session_hide_external: 'Скрыть из списка',
session_archive_desc: 'Hide this conversation until archived is shown',
session_archive_worktree_desc: 'Hide this conversation; keep its worktree on disk',
session_hide_external_desc: 'Скрыть эту импортированную сессию из WebUI без удаления исходной истории.',
session_archive_failed: 'Archive failed: ',
session_archived: 'Session archived',
session_archived_worktree: 'Session archived. Worktree remains on disk.',
session_hidden: 'Сессия скрыта из списка',
session_delete: 'Delete conversation',
session_delete_desc: 'Permanently remove this conversation',
session_delete_confirm: 'Delete this conversation?',
@@ -5122,6 +5137,7 @@ const LOCALES = {
settings_label_sidebar_density: 'Densidad de la barra lateral',
cmd_reasoning: 'Toggle thinking visibility (show/hide), set effort level, or check current status',
settings_label_external_sessions: 'Mostrar sesiones externas',
settings_label_previous_messaging_sessions: 'Mostrar sesiones de mensajería anteriores',
settings_label_sync_insights: 'Sincronizar con insights',
settings_label_check_updates: 'Buscar actualizaciones',
settings_label_whats_new_summary: "Summarize What's New with AI",
@@ -5317,6 +5333,7 @@ const LOCALES = {
settings_auto_title_refresh_20: 'Cada 20 intercambios',
settings_desc_auto_title_refresh: 'Regenera automáticamente el título de la sesión basándose en el último intercambio, manteniéndolo relevante a medida que evoluciona la conversación. Requiere un modelo LLM de generación de títulos configurado.',
settings_desc_external_sessions: 'Mostrar conversaciones de CLI, Telegram, Discord, Slack y otros canales en la lista de sesiones. Haz clic para importar y continuar.',
settings_desc_previous_messaging_sessions: 'Mostrar sesiones antiguas de Discord, Telegram, Slack y Weixin reemplazadas por reset o compresión.',
settings_desc_sync_insights: 'Refleja el uso de tokens de la WebUI en state.db para que hermes /insights incluya datos de sesiones del navegador. Desactivado por defecto.',
settings_desc_check_updates: 'Muestra un banner cuando haya versiones más nuevas de la WebUI o del Agent. Ejecuta periódicamente un git fetch en segundo plano.',
settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.",
@@ -5698,11 +5715,14 @@ const LOCALES = {
cmd_status: 'Show session info',
// Session management and settings keys (en fallback — pending translation)
session_archive: 'Archive conversation',
session_hide_external: 'Ocultar de la lista',
session_archive_desc: 'Hide this conversation until archived is shown',
session_archive_worktree_desc: 'Ocultar esta conversación; conservar su worktree en disco',
session_hide_external_desc: 'Ocultar esta sesión importada de WebUI sin eliminar el historial original.',
session_archive_failed: 'Archive failed: ',
session_archived: 'Session archived',
session_archived_worktree: 'Sesión archivada. El worktree permanece en disco.',
session_hidden: 'Sesión ocultada de la lista',
session_delete: 'Delete conversation',
session_delete_desc: 'Permanently remove this conversation',
session_delete_confirm: '¿Eliminar esta conversación?',
@@ -6249,6 +6269,7 @@ const LOCALES = {
settings_label_sidebar_density: 'Seitenleistendichte',
cmd_reasoning: 'Toggle thinking visibility (show/hide), set effort level, or check current status',
settings_label_external_sessions: 'Externe Sitzungen anzeigen',
settings_label_previous_messaging_sessions: 'Vorherige Messaging-Sitzungen anzeigen',
settings_label_sync_insights: 'Mit Insights synchronisieren',
settings_label_check_updates: 'Nach Updates suchen',
settings_label_whats_new_summary: "Summarize What's New with AI",
@@ -6434,6 +6455,7 @@ const LOCALES = {
settings_auto_title_refresh_20: 'Alle 20 Antworten',
settings_desc_auto_title_refresh: 'Generiert den Sitzungstitel automatisch anhand des letzten Austauschs neu und hält ihn so aktuell, während sich das Gespräch entwickelt. Erfordert ein konfiguriertes LLM-Titelgenerierungsmodell.',
settings_desc_external_sessions: 'Zeigt Gespräche von CLI, Telegram, Discord, Slack und anderen Kanälen in der Sitzungsliste an. Klicken zum Importieren und Fortsetzen.',
settings_desc_previous_messaging_sessions: 'Zeigt ältere Discord-, Telegram-, Slack- und Weixin-Sitzungen, die durch Reset oder Compression ersetzt wurden.',
settings_desc_sync_insights: 'Spiegelt den WebUI-Token-Verbrauch in die state.db, sodass hermes /insights Browser-Sitzungsdaten enthält. Standardmäßig aus.',
settings_desc_check_updates: 'Zeigt ein Banner an, wenn neuere Versionen der WebUI oder des Agenten verfügbar sind. Führt regelmäßig einen Git-Fetch im Hintergrund aus.',
settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.",
@@ -6561,11 +6583,14 @@ const LOCALES = {
// Session management and settings keys (en fallback — pending translation)
session_archive: 'Archive conversation',
session_hide_external: 'Aus Liste ausblenden',
session_archive_desc: 'Hide this conversation until archived is shown',
session_archive_worktree_desc: 'Diese Konversation ausblenden; den Worktree auf der Festplatte behalten',
session_hide_external_desc: 'Diese importierte Sitzung aus der WebUI-Liste ausblenden, ohne den ursprünglichen Verlauf zu löschen.',
session_archive_failed: 'Archive failed: ',
session_archived: 'Session archived',
session_archived_worktree: 'Sitzung archiviert. Der Worktree bleibt auf der Festplatte.',
session_hidden: 'Sitzung aus Liste ausgeblendet',
session_delete: 'Delete conversation',
session_delete_desc: 'Permanently remove this conversation',
session_delete_confirm: 'Diese Konversation löschen?',
@@ -7426,6 +7451,7 @@ const LOCALES = {
settings_label_sidebar_density: '侧边栏密度',
cmd_reasoning: '切换思维可见性(显示/隐藏)、设置工作强度或查看当前状态',
settings_label_external_sessions: '显示外部会话',
settings_label_previous_messaging_sessions: '显示以前的消息会话',
settings_label_sync_insights: '同步到 insights',
settings_label_check_updates: '检查更新',
settings_label_whats_new_summary: "Summarize What's New with AI",
@@ -7684,6 +7710,7 @@ const LOCALES = {
settings_auto_title_refresh_20: '每 20 轮对话',
settings_desc_auto_title_refresh: '基于最新对话自动重新生成会话标题,使其随对话发展保持相关。需要配置 LLM 标题生成模型。',
settings_desc_external_sessions: '在会话列表中显示来自 CLI、Telegram、Discord、Slack 等渠道的对话。点击可导入并继续对话。',
settings_desc_previous_messaging_sessions: '显示被 reset 或 compression 替换的较旧的 Discord、Telegram、Slack 和 Weixin 会话。',
settings_desc_sync_insights: '将 WebUI token 使用情况同步到 state.db,使 hermes /insights 包含浏览器会话数据。默认关闭。',
settings_desc_check_updates: '当有更新的 WebUI 或助手版本时显示横幅。会在后台定期执行 git fetch。',
settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.",
@@ -7992,11 +8019,14 @@ const LOCALES = {
// Session management and settings keys (en fallback — pending translation)
session_archive: '归档会话',
session_hide_external: '从列表中隐藏',
session_archive_desc: '隐藏此会话,直到显示归档',
session_archive_worktree_desc: '隐藏此会话;保留磁盘上的 worktree',
session_hide_external_desc: '从 WebUI 列表中隐藏此导入的会话,不删除原始历史记录。',
session_archive_failed: '归档失败:',
session_archived: '会话已归档',
session_archived_worktree: '会话已归档。Worktree 仍保留在磁盘上。',
session_hidden: '已从列表中隐藏会话',
session_delete: '删除会话',
session_delete_desc: '永久删除此会话',
session_delete_confirm: '删除此会话?',
@@ -8462,12 +8492,15 @@ const LOCALES = {
session_move_project_desc_has: '變更此對話的專案',
session_move_project_desc_none: '為此對話指定專案',
session_archive: '封存對話',
session_hide_external: '從列表中隱藏',
session_restore: '還原對話',
session_archive_desc: '隱藏此對話,直到開啟顯示封存',
session_archive_worktree_desc: '隱藏此對話;保留磁碟上的 worktree',
session_hide_external_desc: '從 WebUI 列表中隱藏此匯入的對話,不刪除原始歷史記錄。',
session_restore_desc: '將此對話移回主清單',
session_archived: '對話已封存',
session_archived_worktree: '對話已封存。Worktree 仍保留在磁碟上。',
session_hidden: '已從列表中隱藏對話',
session_restored: '對話已還原',
session_archive_failed: '封存失敗:',
session_duplicate: '複製對話',
@@ -8578,6 +8611,7 @@ const LOCALES = {
settings_label_sidebar_density: '側邊欄密度',
cmd_reasoning: '切換思考區塊可見性(顯示/隱藏)或設定努力等級',
settings_label_external_sessions: '顯示外部會話',
settings_label_previous_messaging_sessions: '顯示以前的訊息對話',
settings_label_sync_insights: '\u540c\u6b65\u5230 insights',
settings_label_check_updates: '\u6aa2\u67e5\u66f4\u65b0',
settings_label_whats_new_summary: "Summarize What's New with AI",
@@ -8760,6 +8794,7 @@ const LOCALES = {
settings_auto_title_refresh_20: '\u6bcf 20 \u8f2a\u5c0d\u8a71',
settings_desc_auto_title_refresh: '\u57fa\u65bc\u6700\u65b0\u5c0d\u8a71\u81ea\u52d5\u91cd\u65b0\u751f\u6210\u6703\u8a71\u6a19\u984c\uff0c\u4f7f\u5176\u968f\u5c0d\u8a71\u767c\u5c55\u4fdd\u6301\u76f8\u95dc\u3002\u9700\u8981\u914d\u7f6e LLM \u6a19\u984c\u751f\u6210\u6a21\u578b\u3002',
settings_desc_external_sessions: '在會話列表中顯示來自 CLI、Telegram、Discord、Slack 等管道的對話。點擊可導入並繼續對話。',
settings_desc_previous_messaging_sessions: '顯示被 reset 或 compression 替換的較舊的 Discord、Telegram、Slack 和 Weixin 對話。',
settings_desc_sync_insights: '將 WebUI token 使用情況同步到 state.db,使 hermes /insights 包含瀏覽器會話數據。預設未啟用。',
settings_desc_check_updates: '當有更新的 WebUI 或助手版本時顯示標記。將在後台正常執行 Git-Fetch。',
settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.",
@@ -9759,12 +9794,15 @@ const LOCALES = {
session_move_project_desc_has: 'Mudar projeto desta conversa',
session_move_project_desc_none: 'Atribuir projeto a esta conversa',
session_archive: 'Arquivar conversa',
session_hide_external: 'Ocultar da lista',
session_restore: 'Restaurar conversa',
session_archive_desc: 'Esconder conversa até mostrar arquivados',
session_archive_worktree_desc: 'Esconder esta conversa; manter o worktree no disco',
session_hide_external_desc: 'Ocultar esta sessão importada do WebUI sem excluir o histórico original.',
session_restore_desc: 'Trazer conversa de volta à lista principal',
session_archived: 'Sessão arquivada',
session_archived_worktree: 'Sessão arquivada. O worktree permanece no disco.',
session_hidden: 'Sessão ocultada da lista',
session_restored: 'Sessão restaurada',
session_archive_failed: 'Falha ao arquivar: ',
session_duplicate: 'Duplicar conversa',
@@ -9871,6 +9909,7 @@ const LOCALES = {
settings_label_sidebar_density: 'Densidade da sidebar',
cmd_reasoning: 'Alternar visibilidade do pensamento (mostrar/ocultar)',
settings_label_external_sessions: 'Mostrar sessões externas',
settings_label_previous_messaging_sessions: 'Mostrar sessões de mensagens anteriores',
settings_label_sync_insights: 'Sincronizar para insights',
settings_label_check_updates: 'Verificar atualizações',
settings_label_whats_new_summary: "Summarize What's New with AI",
@@ -10059,6 +10098,7 @@ const LOCALES = {
settings_auto_title_refresh_20: 'A cada 20 trocas',
settings_desc_auto_title_refresh: 'Re-gera título da sessão baseado na última troca.',
settings_desc_external_sessions: 'Mostrar conversas de CLI, Telegram, Discord, Slack e outros canais na lista de sessões. Clique para importar e continuar.',
settings_desc_previous_messaging_sessions: 'Mostrar sessões antigas de Discord, Telegram, Slack e Weixin substituídas por reset ou compressão.',
settings_desc_sync_insights: 'Espelha uso de tokens para state.db.',
settings_desc_check_updates: 'Mostrar banner quando versões mais novas estiverem disponíveis.',
settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.",
@@ -11997,12 +12037,15 @@ const LOCALES = {
session_move_project_desc_has: 'Changer le projet pour cette conversation',
session_move_project_desc_none: 'Attribuer un projet à cette conversation',
session_archive: 'Archiver une conversation',
session_hide_external: 'Masquer de la liste',
session_restore: 'Restaurer la conversation',
session_archive_desc: 'Masquer cette conversation jusqu\'à ce que l\'archive soit affichée',
session_archive_worktree_desc: 'Cachez cette conversation ; garder son arbre de travail sur le disque',
session_hide_external_desc: 'Masquer cette session importée du WebUI sans supprimer l\'historique d\'origine.',
session_restore_desc: 'Ramenez cette conversation dans la liste principale',
session_archived: 'Séance archivée',
session_archived_worktree: 'Séance archivée. Worktree reste sur le disque.',
session_hidden: 'Session masquée de la liste',
session_restored: 'Session restaurée',
session_archive_failed: 'Échec de l\'archivage :',
session_duplicate: 'Conversation en double',
@@ -12109,6 +12152,7 @@ const LOCALES = {
settings_label_sidebar_density: 'Densité de la barre latérale',
cmd_reasoning: 'Basculez la visibilité de la réflexion (afficher/masquer), définir le niveau d\'effort ou vérifier l\'état actuel',
settings_label_external_sessions: 'Afficher les sessions non-WebUI',
settings_label_previous_messaging_sessions: 'Afficher les sessions de messagerie précédentes',
settings_label_sync_insights: 'Synchroniser avec les insights',
settings_label_check_updates: 'Vérifier les mises à jour',
settings_label_whats_new_summary: "Summarize What's New with AI",
@@ -12306,6 +12350,7 @@ const LOCALES = {
settings_auto_title_refresh_20: 'Tous les 20 échanges',
settings_desc_auto_title_refresh: 'Régénère automatiquement le titre de la session en fonction du dernier échange, le gardant ainsi pertinent à mesure que la conversation évolue. Nécessite la configuration dun modèle de génération de titres LLM.',
settings_desc_external_sessions: 'Affichez les conversations de CLI, Telegram, Discord, Slack et d\'autres chaînes dans la liste des sessions. Cliquez pour importer et continuer.',
settings_desc_previous_messaging_sessions: 'Affichez les anciennes sessions Discord, Telegram, Slack et Weixin remplacées par reset ou compression.',
settings_desc_sync_insights: 'Met en miroir l\'utilisation du jeton WebUI dans state.db afin que Hermes /insights inclut les données de session du navigateur. Désactivé par défaut.',
settings_desc_check_updates: 'Afficher une bannière lorsque des versions plus récentes de WebUI ou de l\'agent sont disponibles. Exécute périodiquement une récupération git en arrière-plan.',
settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.",
+6 -5
View File
@@ -23,12 +23,12 @@ class TestSidebarCancelAction:
"""Running sessions need a context-menu cancel action even when not active pane."""
# Window bumped from 3200 → 4400 in #1764 to accommodate the new
# Rename action item, then to 5200 in #2111 for response-aware archive
# toast handling inside _openSessionActionMenu before the stop/delete
# actions.
# toast handling, then to 6400 in #2294 for the new "Hide from list"
# action prepended for external sessions.
# The `session.active_stream_id` / cancelSessionStream / delete checks
# are positional further down in the function, so growing the prefix
# required growing this read window.
body = _function_body(SESSIONS_JS, "_openSessionActionMenu", 5200)
body = _function_body(SESSIONS_JS, "_openSessionActionMenu", 6400)
assert "session.active_stream_id" in body, (
"sidebar action menu must detect per-session active_stream_id instead of S.activeStreamId"
)
@@ -75,8 +75,9 @@ class TestSidebarCancelAction:
def test_cli_sessions_hide_duplicate_and_delete_in_action_menu(self):
"""Session action menu should hide duplicate/delete for CLI-origin sessions."""
# Window bumped 3600 → 4800 in #1764 (Rename action prepended), then
# to 5200 in #2111 for response-aware archive toast handling.
body = _function_body(SESSIONS_JS, "_openSessionActionMenu", 5200)
# to 5200 in #2111 for response-aware archive toast handling, then
# to 6400 in #2294 for the "Hide from list" action on external sessions.
body = _function_body(SESSIONS_JS, "_openSessionActionMenu", 6400)
assert "const isCliSession = _isCliSession(session);" in body
assert "const isExternalSession = isMessagingSession || isCliSession;" in body
assert "if(!isExternalSession)" in body
@@ -164,7 +164,11 @@ def test_keep_latest_messaging_runs_after_profile_filter():
block = src[handler_idx:next_handler]
filter_idx = block.find('_profiles_match(s.get("profile"), active_profile)')
dedupe_idx = block.find('_keep_latest_messaging_session_per_source(scoped)')
# The dedupe call can be either single-line `(scoped)` or multi-line
# `(\n scoped,\n show_previous_messaging_sessions=…,\n)`; match the
# function name + the first arg position rather than coupling to the call
# shape. (#2294 added the keyword-arg form.)
dedupe_idx = block.find('_keep_latest_messaging_session_per_source(')
assert filter_idx > 0, "Profile filter not found in /api/sessions handler"
assert dedupe_idx > 0, "Messaging dedupe must run on the scoped list"
assert filter_idx < dedupe_idx, (