update changelog and context default (#1045)

This commit is contained in:
ekko
2026-05-26 19:35:48 +08:00
committed by GitHub
parent 82680f5c0b
commit 42f7b64ffb
17 changed files with 150 additions and 44 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "hermes-web-ui",
"version": "0.6.1",
"version": "0.6.2",
"description": "Self-hosted AI chat dashboard for Hermes Agent — multi-model web UI with multi-platform integration",
"repository": {
"type": "git",
@@ -148,12 +148,12 @@ function selectBridgeCommand(command: { name: string; args: string; insertText?:
// --- Context info ---
const contextLength = ref(200000)
const FALLBACK_CONTEXT = 200000
const contextLength = ref(256000)
const FALLBACK_CONTEXT = 256000
// Context length editing
const showContextEditModal = ref(false)
const editingContextLimit = ref(200000)
const editingContextLimit = ref(256000)
const isSavingContextLimit = ref(false)
async function handleEditContextLimit() {
+16
View File
@@ -5,6 +5,22 @@ export interface ChangelogEntry {
}
export const changelog: ChangelogEntry[] = [
{
version: '0.6.2',
date: '2026-05-26',
changes: [
'changelog.new_0_6_2_1',
'changelog.new_0_6_2_2',
'changelog.new_0_6_2_3',
'changelog.new_0_6_2_4',
'changelog.new_0_6_2_5',
'changelog.new_0_6_2_6',
'changelog.new_0_6_2_7',
'changelog.new_0_6_2_8',
'changelog.new_0_6_2_9',
'changelog.new_0_6_2_10',
],
},
{
version: '0.6.1',
date: '2026-05-25',
+12 -2
View File
@@ -197,7 +197,7 @@ export default {
contextEditTitle: 'Kontextlänge bearbeiten',
contextEditDesc: 'Kontextlängenlimit für aktuelles Modell festlegen (in Tokens)',
contextEditPlaceholder: 'Kontextlänge eingeben',
contextEditHint: 'Häufige Werte: 200k (Claude), 128k (GPT-4), 32k (GPT-3.5)',
contextEditHint: 'Häufige Werte: 256k (Hermes-Standard), 128k (GPT-4), 32k (GPT-3.5)',
contextEditSave: 'Speichern',
contextEditCancel: 'Abbrechen',
contextEditInvalid: 'Bitte geben Sie eine gültige Kontextlänge ein',
@@ -588,7 +588,7 @@ jobTriggered: 'Job ausgelost',
customType: 'Benutzerdefiniert',
provider: 'Anbieter',
contextLength: 'Kontextlange',
contextLengthPlaceholder: 'z.B. 200000 (optional)',
contextLengthPlaceholder: 'z.B. 256000 (optional)',
local: 'Lokal ({host})',
selectProviderRequired: 'Bitte wahlen Sie einen Anbieter',
baseUrlRequired: 'Basis-URL ist erforderlich',
@@ -1068,6 +1068,16 @@ jobTriggered: 'Job ausgelost',
// Anderungsprotokoll
changelog: {
new_0_6_2_1: 'Web Bridge unterstützt jetzt /plan-Befehle mit korrektem Run-Start und sichtbarem Befehlsstatus',
new_0_6_2_2: 'Das Befehlsmenü im Chat-Eingabefeld enthält jetzt /goal und /subgoal mit Status, Pause, Resume, Done und Clear',
new_0_6_2_3: 'Goal- und Subgoal-Workflows sind jetzt in Chat-Sessions integriert, inklusive Ziel-Fortsetzungen und Statusupdates',
new_0_6_2_4: 'Zielkanaloptionen für Job-Zustellung sind wiederhergestellt, damit geplante Jobs das richtige Ziel auswählen können',
new_0_6_2_5: 'Kontext-token-Nutzung wird nach Reconnects mit snapshot-bewusster Berechnung korrekt fortgesetzt',
new_0_6_2_6: 'Kontext-Checkpoint-Komprimierung ist bei langsamer Codex-Zusammenfassung zuverlässiger: Web UI wartet 5 Minuten und der Python bridge broker beendet worker-Anfragen nicht mehr nach 2 Minuten',
new_0_6_2_7: 'Chat-Queue-Promotion ist korrigiert, sodass queued-Nachrichten nicht zu früh in die Nachrichtenliste springen, auch in synchronisierten Fenstern',
new_0_6_2_8: 'Clarify-Dialoge senden Freitext nicht mehr per Enter ab und beantwortete Prompts öffnen nach Sessionwechsel nicht erneut',
new_0_6_2_9: 'Bridge-Terminal-Umgebungsrefresh und stale-pid-Cleanup sind enger begrenzt und reduzieren veraltete Laufzeitstatus in der UI',
new_0_6_2_10: 'Die Standard-Kontextlänge folgt jetzt dem Hermes-Standard von 256.000 Tokens',
new_0_5_31_1: 'Bridge-Broker-Neustarts gehärtet, finale Gruppenchat-Stream-Darstellung korrigiert und {\'@\'}all-Routing für Gruppenchats hinzugefügt',
new_0_5_31_2: 'Dateimanager kann absolute Pfade kopieren; mobile Session-Schublade liegt nicht mehr hinter Chat-Inhalten',
new_0_5_31_3: 'Profilauswahl zeigt jetzt Avatare, eigene Avatar-Uploads, Laufzeitstatus-Dialog sowie Gateway-/Profil-Neustartaktionen',
+12 -2
View File
@@ -197,7 +197,7 @@ export default {
contextEditTitle: 'Edit Context Length',
contextEditDesc: 'Set context length limit for current model (in tokens)',
contextEditPlaceholder: 'Enter context length',
contextEditHint: 'Common values: 200k (Claude), 128k (GPT-4), 32k (GPT-3.5)',
contextEditHint: 'Common values: 256k (Hermes default), 128k (GPT-4), 32k (GPT-3.5)',
contextEditSave: 'Save',
contextEditCancel: 'Cancel',
contextEditInvalid: 'Please enter a valid context length',
@@ -712,7 +712,7 @@ export default {
customType: 'Custom',
provider: 'Provider',
contextLength: 'Context Length',
contextLengthPlaceholder: 'e.g. 200000 (optional)',
contextLengthPlaceholder: 'e.g. 256000 (optional)',
local: 'Local ({host})',
selectProviderRequired: 'Please select a provider',
baseUrlRequired: 'Base URL is required',
@@ -1290,6 +1290,16 @@ export default {
// Changelog
changelog: {
new_0_6_2_1: 'Web Bridge now supports /plan commands with correct run startup and visible command state',
new_0_6_2_2: 'The chat input command menu now includes /goal and /subgoal commands, including status, pause, resume, done, and clear actions',
new_0_6_2_3: 'Goal and subgoal workflows now integrate with chat sessions, including goal continuations and status updates',
new_0_6_2_4: 'Job delivery target channel options are restored so scheduled jobs can pick the intended destination',
new_0_6_2_5: 'Context token usage now resumes accurately with snapshot-aware calculations after reconnects',
new_0_6_2_6: 'Context checkpoint compression is more reliable for slow Codex summarization: Web UI waits 5 minutes and the Python bridge broker no longer cuts off worker requests after 2 minutes',
new_0_6_2_7: 'Chat queue promotion is fixed so queued messages do not jump into the message list early, including synced windows',
new_0_6_2_8: 'Clarify prompts no longer submit open-text replies on Enter and answered prompts no longer reopen after switching sessions',
new_0_6_2_9: 'Bridge terminal environment refresh and stale pid cleanup are scoped more tightly, reducing stale runtime status in the UI',
new_0_6_2_10: 'The default context length now follows the Hermes standard of 256,000 tokens',
new_0_5_31_1: "Harden Bridge broker restarts, fix final group-chat stream rendering, and add {'@'}all routing for group chat",
new_0_5_31_2: 'File manager can copy absolute paths, and the mobile session drawer overlay no longer falls behind chat content',
new_0_5_31_3: 'Profile selector now shows avatars, custom avatar uploads, runtime status modal, and gateway/profile restart actions',
+12 -2
View File
@@ -197,7 +197,7 @@ export default {
contextEditTitle: 'Editar longitud del contexto',
contextEditDesc: 'Establecer el límite de longitud del contexto para el modelo actual (en tokens)',
contextEditPlaceholder: 'Ingresa la longitud del contexto',
contextEditHint: 'Valores comunes: 200k (Claude), 128k (GPT-4), 32k (GPT-3.5)',
contextEditHint: 'Valores comunes: 256k (Hermes predeterminado), 128k (GPT-4), 32k (GPT-3.5)',
contextEditSave: 'Guardar',
contextEditCancel: 'Cancelar',
contextEditInvalid: 'Por favor ingresa una longitud de contexto válida',
@@ -588,7 +588,7 @@ jobTriggered: 'Job ejecutado',
customType: 'Personalizado',
provider: 'Proveedor',
contextLength: 'Longitud del contexto',
contextLengthPlaceholder: 'ej. 200000 (opcional)',
contextLengthPlaceholder: 'ej. 256000 (opcional)',
local: 'Local ({host})',
selectProviderRequired: 'Por favor, selecciona un proveedor',
baseUrlRequired: 'La URL base es obligatoria',
@@ -1068,6 +1068,16 @@ jobTriggered: 'Job ejecutado',
// Registro de cambios
changelog: {
new_0_6_2_1: 'Web Bridge ahora soporta comandos /plan con inicio correcto del run y estado visible del comando',
new_0_6_2_2: 'El menú de comandos del input de chat ahora incluye /goal y /subgoal, con acciones de estado, pausa, reanudar, finalizar y limpiar',
new_0_6_2_3: 'Los flujos de Goal y subgoal se integran con sesiones de chat, incluyendo continuaciones de objetivos y actualizaciones de estado',
new_0_6_2_4: 'Se restauran las opciones de canal destino para jobs, permitiendo que los jobs programados elijan el destino previsto',
new_0_6_2_5: 'El uso de tokens de contexto se reanuda con precisión tras reconexiones mediante cálculos conscientes del snapshot',
new_0_6_2_6: 'La compresión de checkpoints de contexto es más fiable con resúmenes Codex lentos: Web UI espera 5 minutos y el Python bridge broker ya no corta requests de worker a los 2 minutos',
new_0_6_2_7: 'La promoción de cola de chat está corregida para que los mensajes queued no salten antes de tiempo a la lista, incluso en ventanas sincronizadas',
new_0_6_2_8: 'Los prompts Clarify ya no envían respuestas de texto libre con Enter y los prompts respondidos no se reabren al cambiar de sesión',
new_0_6_2_9: 'El refresco de entorno del terminal Bridge y la limpieza de stale pid quedan mejor acotados, reduciendo estados runtime obsoletos en la UI',
new_0_6_2_10: 'La longitud de contexto predeterminada ahora sigue el estándar Hermes de 256.000 tokens',
new_0_5_31_1: 'Reinicios del Bridge broker reforzados, renderizado final del stream de chat grupal corregido y enrutamiento {\'@\'}all agregado',
new_0_5_31_2: 'El gestor de archivos puede copiar rutas absolutas y el cajón móvil de sesiones ya no queda detrás del chat',
new_0_5_31_3: 'Selector de perfiles con avatares, subida de avatar personalizado, modal de estado runtime y acciones de reinicio de gateway/perfil',
+12 -2
View File
@@ -197,7 +197,7 @@ export default {
contextEditTitle: 'Modifier la longueur du contexte',
contextEditDesc: 'Définir la limite de longueur du contexte pour le modèle actuel (en tokens)',
contextEditPlaceholder: 'Entrez la longueur du contexte',
contextEditHint: 'Valeurs courantes : 200k (Claude), 128k (GPT-4), 32k (GPT-3.5)',
contextEditHint: 'Valeurs courantes : 256k (Hermes par défaut), 128k (GPT-4), 32k (GPT-3.5)',
contextEditSave: 'Enregistrer',
contextEditCancel: 'Annuler',
contextEditInvalid: 'Veuillez entrer une longueur de contexte valide',
@@ -588,7 +588,7 @@ jobTriggered: 'Job declenche',
customType: 'Personnalise',
provider: 'Fournisseur',
contextLength: 'Longueur du contexte',
contextLengthPlaceholder: 'ex. 200000 (facultatif)',
contextLengthPlaceholder: 'ex. 256000 (facultatif)',
local: 'Local ({host})',
selectProviderRequired: 'Veuillez selectionner un fournisseur',
baseUrlRequired: 'L\'URL de base est requise',
@@ -1068,6 +1068,16 @@ jobTriggered: 'Job declenche',
// Journal des modifications
changelog: {
new_0_6_2_1: 'Web Bridge prend désormais en charge les commandes /plan avec démarrage correct du run et état de commande visible',
new_0_6_2_2: 'Le menu de commandes du champ de chat inclut maintenant /goal et /subgoal, avec les actions état, pause, reprise, terminé et effacer',
new_0_6_2_3: 'Les workflows Goal et subgoal sont intégrés aux sessions de chat, avec reprises de goal et mises à jour de statut',
new_0_6_2_4: 'Les options de canal cible des jobs sont restaurées afin que les jobs planifiés choisissent la bonne destination',
new_0_6_2_5: 'Lusage des tokens de contexte reprend correctement après reconnexion grâce aux calculs tenant compte des snapshots',
new_0_6_2_6: 'La compression des checkpoints de contexte est plus fiable quand le résumé Codex est lent : Web UI attend 5 minutes et le Python bridge broker ne coupe plus les requêtes worker après 2 minutes',
new_0_6_2_7: 'La promotion de la file du chat est corrigée afin que les messages queued nentrent plus trop tôt dans la liste, y compris dans les fenêtres synchronisées',
new_0_6_2_8: 'Les prompts Clarify nenvoient plus les réponses texte avec Entrée, et les prompts déjà répondus ne se rouvrent plus après changement de session',
new_0_6_2_9: 'Le refresh denvironnement terminal Bridge et le nettoyage stale pid sont mieux limités, réduisant les états runtime obsolètes dans lUI',
new_0_6_2_10: 'La longueur de contexte par défaut suit désormais le standard Hermes de 256 000 tokens',
new_0_5_31_1: 'Redémarrages Bridge broker renforcés, rendu final du flux de chat de groupe corrigé et routage {\'@\'}all ajouté',
new_0_5_31_2: 'Le gestionnaire de fichiers peut copier les chemins absolus et le tiroir mobile des sessions ne passe plus derrière le chat',
new_0_5_31_3: 'Sélecteur de profils avec avatars, upload davatar personnalisé, modal d’état runtime et actions de redémarrage gateway/profil',
+12 -2
View File
@@ -197,7 +197,7 @@ export default {
contextEditTitle: 'コンテキスト長を編集',
contextEditDesc: '現在のモデルのコンテキスト長制限を設定(トークン数)',
contextEditPlaceholder: 'コンテキスト長を入力',
contextEditHint: '一般的な値:200k (Claude), 128k (GPT-4), 32k (GPT-3.5)',
contextEditHint: '一般的な値:256k (Hermes 既定), 128k (GPT-4), 32k (GPT-3.5)',
contextEditSave: '保存',
contextEditCancel: 'キャンセル',
contextEditInvalid: '有効なコンテキスト長を入力してください',
@@ -588,7 +588,7 @@ export default {
customType: 'カスタム',
provider: 'プロバイダー',
contextLength: 'コンテキスト長',
contextLengthPlaceholder: '例: 200000(任意)',
contextLengthPlaceholder: '例: 256000(任意)',
local: 'ローカル ({host})',
selectProviderRequired: 'プロバイダーを選択してください',
baseUrlRequired: 'ベース URL は必須です',
@@ -1068,6 +1068,16 @@ export default {
// 更新履歴
changelog: {
new_0_6_2_1: 'Web Bridge が /plan コマンドに対応し、run の開始とコマンド状態の表示が正しく動作するようになりました',
new_0_6_2_2: 'チャット入力のコマンドメニューに /goal と /subgoal を追加し、status、pause、resume、done、clear 操作に対応しました',
new_0_6_2_3: 'Goal と subgoal のワークフローをチャットセッションに統合し、目標の継続とステータス更新に対応しました',
new_0_6_2_4: 'ジョブ配信先チャネルの選択肢を復元し、スケジュール済みジョブが意図した宛先を選べるようになりました',
new_0_6_2_5: '再接続後のコンテキスト token 使用量を snapshot 対応の計算で正確に復元します',
new_0_6_2_6: 'Codex の要約が遅い場合でもコンテキスト checkpoint 圧縮が安定します。Web UI は 5 分待機し、Python bridge broker は 2 分で worker request を打ち切りません',
new_0_6_2_7: 'チャットキューの昇格処理を修正し、同期された複数ウィンドウを含め queued メッセージが早くメッセージ一覧へ入らないようにしました',
new_0_6_2_8: 'Clarify プロンプトは Enter で自由入力を送信せず、回答済みプロンプトはセッション切り替え後に再表示されません',
new_0_6_2_9: 'Bridge terminal の環境更新と stale pid cleanup の範囲を絞り、UI に古い runtime 状態が残りにくくしました',
new_0_6_2_10: '既定のコンテキスト長を Hermes 標準に合わせて 256,000 tokens に変更しました',
new_0_5_31_1: 'Bridge broker の再起動を強化し、グループチャット最終ストリーム表示を修正し、{\'@\'}all ルーティングを追加',
new_0_5_31_2: 'ファイルマネージャーで絶対パスをコピー可能にし、モバイルセッションドロワーがチャット内容の背面に回らないよう修正',
new_0_5_31_3: 'Profile セレクターにアバター、カスタムアバターアップロード、実行状態モーダル、gateway/Profile 再起動操作を追加',
+12 -2
View File
@@ -197,7 +197,7 @@ export default {
contextEditTitle: '컨텍스트 길이 편집',
contextEditDesc: '현재 모델의 컨텍스트 길이 제한 설정 (토큰 수)',
contextEditPlaceholder: '컨텍스트 길이 입력',
contextEditHint: '일반적인 값: 200k (Claude), 128k (GPT-4), 32k (GPT-3.5)',
contextEditHint: '일반적인 값: 256k (Hermes 기본값), 128k (GPT-4), 32k (GPT-3.5)',
contextEditSave: '저장',
contextEditCancel: '취소',
contextEditInvalid: '유효한 컨텍스트 길이를 입력하세요',
@@ -588,7 +588,7 @@ export default {
customType: '사용자 지정',
provider: '공급자',
contextLength: '컨텍스트 길이',
contextLengthPlaceholder: '예: 200000 (선택사항)',
contextLengthPlaceholder: '예: 256000 (선택사항)',
local: '로컬 ({host})',
selectProviderRequired: 'Provider를 선택해 주세요',
baseUrlRequired: 'Base URL을 입력해 주세요',
@@ -1068,6 +1068,16 @@ export default {
// 변경 이력
changelog: {
new_0_6_2_1: 'Web Bridge가 /plan 명령을 지원하며 run 시작과 명령 상태 표시가 올바르게 동작합니다',
new_0_6_2_2: '채팅 입력 명령 메뉴에 /goal 및 /subgoal이 추가되어 상태, 일시정지, 재개, 완료, 초기화 작업을 지원합니다',
new_0_6_2_3: 'Goal 및 subgoal 워크플로가 채팅 세션에 통합되어 목표 이어가기와 상태 업데이트를 지원합니다',
new_0_6_2_4: '작업 전달 대상 채널 옵션을 복원해 예약 작업이 의도한 대상을 선택할 수 있습니다',
new_0_6_2_5: '재연결 후 컨텍스트 token 사용량이 snapshot 인식 계산으로 정확하게 복원됩니다',
new_0_6_2_6: 'Codex 요약이 느릴 때도 컨텍스트 checkpoint 압축이 더 안정적입니다. Web UI는 5분 동안 대기하고 Python bridge broker는 2분 후 worker request를 끊지 않습니다',
new_0_6_2_7: '채팅 큐 승격을 수정해 동기화된 창을 포함해 queued 메시지가 너무 일찍 메시지 목록에 들어가지 않습니다',
new_0_6_2_8: 'Clarify 프롬프트는 Enter로 자유 입력 답변을 제출하지 않으며, 답변된 프롬프트는 세션 전환 후 다시 열리지 않습니다',
new_0_6_2_9: 'Bridge terminal 환경 갱신과 stale pid 정리 범위를 더 정확히 제한해 UI의 오래된 runtime 상태를 줄입니다',
new_0_6_2_10: '기본 컨텍스트 길이가 Hermes 표준에 맞춰 256,000 tokens로 변경되었습니다',
new_0_5_31_1: 'Bridge broker 재시작 안정화, 그룹 채팅 최종 스트림 렌더링 수정, 그룹 채팅 {\'@\'}all 라우팅 추가',
new_0_5_31_2: '파일 관리자가 절대 경로를 복사할 수 있고 모바일 세션 드로어가 채팅 콘텐츠 뒤로 가지 않음',
new_0_5_31_3: 'Profile 선택기에 아바타, 사용자 지정 아바타 업로드, 런타임 상태 모달, gateway/Profile 재시작 액션 추가',
+12 -2
View File
@@ -197,7 +197,7 @@ export default {
contextEditTitle: 'Editar tamanho do contexto',
contextEditDesc: 'Definir o limite de tamanho do contexto para o modelo atual (em tokens)',
contextEditPlaceholder: 'Digite o tamanho do contexto',
contextEditHint: 'Valores comuns: 200k (Claude), 128k (GPT-4), 32k (GPT-3.5)',
contextEditHint: 'Valores comuns: 256k (Hermes padrão), 128k (GPT-4), 32k (GPT-3.5)',
contextEditSave: 'Salvar',
contextEditCancel: 'Cancelar',
contextEditInvalid: 'Por favor, insira um tamanho de contexto válido',
@@ -588,7 +588,7 @@ jobTriggered: 'Job acionado',
customType: 'Personalizado',
provider: 'Provedor',
contextLength: 'Tamanho do contexto',
contextLengthPlaceholder: 'ex: 200000 (opcional)',
contextLengthPlaceholder: 'ex: 256000 (opcional)',
local: 'Local ({host})',
selectProviderRequired: 'Por favor, selecione um provedor',
baseUrlRequired: 'A URL base e obrigatoria',
@@ -1068,6 +1068,16 @@ jobTriggered: 'Job acionado',
// Registro de alteracoes
changelog: {
new_0_6_2_1: 'Web Bridge agora suporta comandos /plan com início correto do run e estado visível do comando',
new_0_6_2_2: 'O menu de comandos no input do chat agora inclui /goal e /subgoal, com ações de status, pausar, retomar, concluir e limpar',
new_0_6_2_3: 'Workflows de Goal e subgoal agora integram sessões de chat, incluindo continuações de objetivo e atualizações de status',
new_0_6_2_4: 'Opções de canal destino para jobs foram restauradas para que jobs agendados escolham o destino correto',
new_0_6_2_5: 'O uso de tokens de contexto agora retoma com precisão após reconexões usando cálculos conscientes de snapshot',
new_0_6_2_6: 'A compressão de checkpoints de contexto está mais confiável quando o resumo do Codex é lento: Web UI espera 5 minutos e o Python bridge broker não corta requests de worker após 2 minutos',
new_0_6_2_7: 'A promoção da fila do chat foi corrigida para que mensagens queued não entrem cedo demais na lista, inclusive em janelas sincronizadas',
new_0_6_2_8: 'Prompts Clarify não enviam mais respostas de texto livre com Enter, e prompts respondidos não reabrem após trocar de sessão',
new_0_6_2_9: 'Refresh do ambiente do terminal Bridge e limpeza de stale pid foram melhor delimitados, reduzindo status runtime obsoleto na UI',
new_0_6_2_10: 'O comprimento de contexto padrão agora segue o padrão Hermes de 256.000 tokens',
new_0_5_31_1: 'Reinícios do Bridge broker reforçados, renderização final do stream de chat em grupo corrigida e roteamento {\'@\'}all adicionado',
new_0_5_31_2: 'Gerenciador de arquivos pode copiar caminhos absolutos e a gaveta móvel de sessões não fica mais atrás do chat',
new_0_5_31_3: 'Seletor de Profile mostra avatares, upload de avatar personalizado, modal de status runtime e ações de restart de gateway/Profile',
+12 -2
View File
@@ -197,7 +197,7 @@ export default {
contextEditTitle: '編輯上下文長度',
contextEditDesc: '設定目前模型的上下文長度限制(token 數量)',
contextEditPlaceholder: '請輸入上下文長度',
contextEditHint: '常見值:200k (Claude), 128k (GPT-4), 32k (GPT-3.5)',
contextEditHint: '常見值:256k (Hermes 預設), 128k (GPT-4), 32k (GPT-3.5)',
contextEditSave: '儲存',
contextEditCancel: '取消',
contextEditInvalid: '請輸入有效的上下文長度',
@@ -686,7 +686,7 @@ export default {
customType: '自訂',
provider: 'Provider',
contextLength: '上下文長度',
contextLengthPlaceholder: '例如 200000(選填)',
contextLengthPlaceholder: '例如 256000(選填)',
local: '本地 ({host})',
selectProviderRequired: '請選擇 Provider',
baseUrlRequired: 'Base URL 為必填項',
@@ -1295,6 +1295,16 @@ export default {
// 更新日誌
changelog: {
new_0_6_2_1: 'Web Bridge 支援 /plan 命令,計畫命令會正確啟動並顯示執行狀態',
new_0_6_2_2: '聊天輸入框指令選單新增 /goal 和 /subgoal,支援狀態、暫停、恢復、完成和清空等操作',
new_0_6_2_3: 'Goal 與 subgoal 工作流接入聊天工作階段,支援目標延續與狀態更新',
new_0_6_2_4: '修復任務投遞目標渠道選項,排程任務可以選擇正確的投遞位置',
new_0_6_2_5: '上下文 token 用量在重新連線後會依快照感知邏輯準確恢復',
new_0_6_2_6: '上下文檢查點壓縮對較慢的 Codex 摘要更穩定:Web UI 等待 5 分鐘,Python bridge broker 不再於 2 分鐘後提前切斷 worker 請求',
new_0_6_2_7: '修復聊天佇列推進,queued 訊息不會提前跳入訊息列表,多視窗同步場景也保持一致',
new_0_6_2_8: 'Clarify 彈窗輸入框不再按 Enter 直接提交,已回覆的 Clarify 也不會在切換工作階段後重複彈出',
new_0_6_2_9: 'Bridge 終端環境刷新與 stale pid 清理收斂到更準確的作用域,減少前端執行狀態殘留',
new_0_6_2_10: '預設上下文長度遵循 Hermes 規範,調整為 256,000 tokens',
new_0_5_31_1: "增強 Bridge Broker 重啟穩定性,修復群聊最終串流渲染,並新增群聊 {'@'}all 路由",
new_0_5_31_2: '檔案管理支援複製絕對路徑,並修復行動端工作階段抽屜層級遮擋問題',
new_0_5_31_3: 'Profile 選擇器新增頭像展示、自訂頭像、執行狀態彈窗,以及網關/Profile 重啟操作',
+12 -2
View File
@@ -197,7 +197,7 @@ export default {
contextEditTitle: '编辑上下文长度',
contextEditDesc: '设置当前模型的上下文长度限制(token 数量)',
contextEditPlaceholder: '请输入上下文长度',
contextEditHint: '常见值:200k (Claude), 128k (GPT-4), 32k (GPT-3.5)',
contextEditHint: '常见值:256k (Hermes 默认), 128k (GPT-4), 32k (GPT-3.5)',
contextEditSave: '保存',
contextEditCancel: '取消',
contextEditInvalid: '请输入有效的上下文长度',
@@ -712,7 +712,7 @@ export default {
customType: '自定义',
provider: 'Provider',
contextLength: '上下文长度',
contextLengthPlaceholder: '例如 200000(可选)',
contextLengthPlaceholder: '例如 256000(可选)',
local: '本地 ({host})',
selectProviderRequired: '请选择 Provider',
baseUrlRequired: 'Base URL 为必填项',
@@ -1292,6 +1292,16 @@ export default {
// 更新日志
changelog: {
new_0_6_2_1: 'Web Bridge 支持 /plan 命令,计划命令会正确启动并展示运行状态',
new_0_6_2_2: '聊天输入框指令菜单新增 /goal 和 /subgoal,支持状态、暂停、恢复、完成和清空等操作',
new_0_6_2_3: 'Goal 和 subgoal 工作流接入聊天会话,支持目标延续和状态更新',
new_0_6_2_4: '修复任务投递目标渠道选项,定时任务可以选择正确的投递位置',
new_0_6_2_5: '上下文 token 用量在重连后会按快照感知逻辑准确恢复',
new_0_6_2_6: '上下文检查点压缩对较慢的 Codex 总结更稳定:Web UI 等待 5 分钟,Python bridge broker 不再在 2 分钟后提前切断 worker 请求',
new_0_6_2_7: '修复聊天队列推进,queued 消息不会提前跳入消息列表,多窗口同步场景也保持一致',
new_0_6_2_8: 'Clarify 弹窗输入框不再按 Enter 直接提交,已回复的 Clarify 也不会在切换会话后重复弹出',
new_0_6_2_9: 'Bridge 终端环境刷新和 stale pid 清理收敛到更准确的作用域,减少前端运行状态残留',
new_0_6_2_10: '默认上下文长度遵循 Hermes 规范,调整为 256,000 tokens',
new_0_5_31_1: "增强 Bridge Broker 重启稳定性,修复群聊最终流式渲染,并新增群聊 {'@'}all 路由",
new_0_5_31_2: '文件管理支持复制绝对路径,并修复移动端会话抽屉层级遮挡问题',
new_0_5_31_3: 'Profile 选择器新增头像展示、自定义头像、运行状态弹窗,以及网关/Profile 重启操作',
@@ -8,7 +8,7 @@ import { detectHermesHome } from './hermes-path'
const HERMES_BASE = detectHermesHome()
const MODELS_DEV_CACHE = resolve(HERMES_BASE, 'models_dev_cache.json')
const DEFAULT_CONTEXT_LENGTH = 200_000
const DEFAULT_CONTEXT_LENGTH = 256_000
export interface ModelContextLengthOptions {
profile?: string
@@ -112,7 +112,7 @@ function getDefaultProvider(config: any): string | null {
/**
* Read context_length from config.yaml, only as a sibling of default.
* e.g. model:\n default: gpt-5.4\n context_length: 200000
* e.g. model:\n default: gpt-5.4\n context_length: 256000
*/
function getConfigContextLength(config: any): number | null {
const model = config?.model
+1 -1
View File
@@ -141,7 +141,7 @@ export async function mockHermesApi(page: Page, options: MockHermesApiOptions =
}
if (pathname === '/api/hermes/sessions/context-length') {
await route.fulfill(jsonResponse({ context_length: 200000 }))
await route.fulfill(jsonResponse({ context_length: 256000 }))
return
}
+8 -8
View File
@@ -71,7 +71,7 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
it('does not scan other providers when the configured provider exists without that model', async () => {
@@ -79,7 +79,7 @@ describe('getModelContextLength', () => {
writeModelsCache({
'openai-codex': {
models: {
'gpt-5.4': { limit: { context: 200_000 } },
'gpt-5.4': { limit: { context: 256_000 } },
},
},
openai: {
@@ -91,7 +91,7 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
it('uses the configured provider cache entry when the provider matches', async () => {
@@ -241,7 +241,7 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
it('does not trust custom:name alone when the matched custom provider entry points at an unknown proxy url', async () => {
@@ -256,7 +256,7 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
it('does not fall through to a unique global match after a resolved custom:name provider misses in its scoped cache provider', async () => {
@@ -276,7 +276,7 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
it('allows a unique global model-name fallback for unresolved custom providers', async () => {
@@ -321,7 +321,7 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
it('does not guess across multiple cache providers when a custom provider remains unresolved', async () => {
@@ -341,6 +341,6 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
})
+10 -10
View File
@@ -87,7 +87,7 @@ describe('run chat compression trigger', () => {
readConfigYamlForProfileMock.mockReset()
getSessionMock.mockReturnValue({ id: 'session-1', profile: 'default' })
getModelContextLengthMock.mockReturnValue(200_000)
getModelContextLengthMock.mockReturnValue(256_000)
calcAndUpdateUsageMock.mockResolvedValue({ inputTokens: 1_000, outputTokens: 0 })
estimateUsageTokensFromMessagesMock.mockReturnValue({ inputTokens: 0, outputTokens: 0 })
getCompressionSnapshotMock.mockReturnValue(null)
@@ -142,7 +142,7 @@ describe('run chat compression trigger', () => {
readConfigYamlForProfileMock.mockResolvedValue({
compression: { threshold: 0.25, target_ratio: 0.1, protect_last_n: 7, protect_first_n: 2 },
})
calcAndUpdateUsageMock.mockResolvedValue({ inputTokens: 60_000, outputTokens: 0 })
calcAndUpdateUsageMock.mockResolvedValue({ inputTokens: 70_000, outputTokens: 0 })
compressorCompressMock.mockResolvedValue({
messages: [{ role: 'user', content: 'compressed' }],
meta: {
@@ -212,7 +212,7 @@ describe('run chat compression trigger', () => {
emit,
new Map(),
{},
vi.fn(async () => 120_000),
vi.fn(async () => 160_000),
)
expect(history).toEqual([{ role: 'user', content: 'compressed by local context estimate' }])
@@ -356,7 +356,7 @@ describe('run chat compression trigger', () => {
emit,
new Map(),
{},
vi.fn(async () => 120_000),
vi.fn(async () => 160_000),
700,
)
@@ -387,7 +387,7 @@ describe('run chat compression trigger', () => {
emit,
new Map(),
{},
vi.fn(async () => 120_000),
vi.fn(async () => 160_000),
)).rejects.toBeInstanceOf(ContextWindowTooSmallError)
expect(emit).not.toHaveBeenCalledWith('usage.updated', expect.anything())
@@ -420,7 +420,7 @@ describe('run chat compression trigger', () => {
vi.fn(),
new Map(),
{},
vi.fn(async () => 120_000),
vi.fn(async () => 160_000),
)).rejects.toBeInstanceOf(ContextWindowTooSmallError)
expect(compressorCompressMock).not.toHaveBeenCalled()
@@ -443,7 +443,7 @@ describe('run chat compression trigger', () => {
readConfigYamlForProfileMock.mockResolvedValue({
compression: { protect_last_n: 5 },
})
calcAndUpdateUsageMock.mockResolvedValue({ inputTokens: 120_000, outputTokens: 0 })
calcAndUpdateUsageMock.mockResolvedValue({ inputTokens: 160_000, outputTokens: 0 })
compressorCompressMock.mockResolvedValue({
messages: [{ role: 'user', content: 'compressed' }],
meta: {
@@ -468,8 +468,8 @@ describe('run chat compression trigger', () => {
expect(compressorConstructorMock).toHaveBeenCalledWith({
config: {
triggerTokens: 100_000,
summaryBudget: 40_000,
triggerTokens: 128_000,
summaryBudget: 51_200,
headMessageCount: 3,
tailMessageCount: 5,
},
@@ -544,7 +544,7 @@ describe('run chat compression trigger', () => {
readConfigYamlForProfileMock.mockResolvedValue({
compression: { protect_first_n: 2, protect_last_n: 3 },
})
estimateUsageTokensFromMessagesMock.mockReturnValue({ inputTokens: 120_000, outputTokens: 0 })
estimateUsageTokensFromMessagesMock.mockReturnValue({ inputTokens: 160_000, outputTokens: 0 })
compressorCompressMock.mockResolvedValue({
messages: [{ role: 'user', content: 'updated stale compressed' }],
meta: {
+1 -1
View File
@@ -16,7 +16,7 @@ const listWorkspaceFoldersMock = vi.fn(async (ctx: any) => { ctx.body = { folder
const usageBatchMock = vi.fn(async (ctx: any) => { ctx.body = {} })
const usageSingleMock = vi.fn(async (ctx: any) => { ctx.body = { input_tokens: 0, output_tokens: 0 } })
const usageStatsMock = vi.fn(async (ctx: any) => { ctx.body = { total_input_tokens: 0, total_output_tokens: 0 } })
const contextLengthMock = vi.fn(async (ctx: any) => { ctx.body = { context_length: 200000 } })
const contextLengthMock = vi.fn(async (ctx: any) => { ctx.body = { context_length: 256000 } })
const batchRemoveMock = vi.fn(async (ctx: any) => { ctx.body = { deleted: 1, failed: 0, errors: [] } })
const exportSessionMock = vi.fn(async (ctx: any) => { ctx.body = JSON.stringify({ id: ctx.params.id }) })