Fix bridge history, profile models, and Windows gateway handling (#845)

* feat: support profile-aware group chat bridge flows

* feat: route cron jobs through hermes cli

* Fix group chat routing and isolate bridge tests

* Add Grok image-to-video media skill

* Default Grok videos to media directory

* Fix bridge profile fallback and cron repeat clearing

* Refine bridge chat and gateway platform handling

* Filter bridge tool-call text deltas

* Preserve structured bridge chat history

* Prepare beta release build artifacts

* Fix Windows run profile resolution

* Fix Windows path compatibility checks

* Fix profile-scoped model page display

* Hide Windows subprocess windows for jobs and updates

* Hide Windows file backend subprocess windows

* Avoid Windows gateway restart lock conflicts

* Treat Windows gateway lock as running on startup

* Force release Windows gateway lock on restart

* Tighten Windows gateway lock cleanup

* Update chat e2e source expectation

* Bump package version to 0.5.30

---------

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
ekko
2026-05-19 16:09:59 +08:00
committed by GitHub
parent 3d74d78698
commit 9a9416c99c
129 changed files with 7017 additions and 1838 deletions
+4 -1
View File
@@ -158,10 +158,11 @@ export default {
contextUsed: 'Kontext verwendet:',
sessions: 'Sitzungen',
webUiSessions: 'Sitzungen',
allProfiles: 'Alle Profile',
sessionScopeHint: 'Chat zeigt nur Web-UI/API-Server-Sitzungen. CLI-, Telegram-, Discord-, Cron- und andere Kanal-Sitzungen sind schreibgeschützt im Verlauf.',
openHistory: 'Verlauf öffnen',
hermesHistory: 'Hermes-Verlauf',
historyScopeHint: 'Schreibgeschützte Hermes-Verlaufssitzungen, nach Quelle gruppiert.',
historyScopeHint: 'Schreibgeschützte Hermes-Verlaufssitzungen des aktuellen Profils, nach Quelle gruppiert.',
noSessions: 'Keine Sitzungen',
newChat: 'Neuer Chat',
approvalKicker: 'Terminal-Berechtigung',
@@ -460,6 +461,8 @@ jobTriggered: 'Job ausgelost',
customModelHint: 'Für vom Provider unterstützte Modelle, die die API nicht zurückgibt; keine Anzeige-Umbenennung. Enter zum Laden.',
noProviders: 'Keine Anbieter gefunden. Fugen Sie einen benutzerdefinierten Anbieter hinzu, um zu beginnen.',
clearVisibleModels: 'Auswahl löschen',
currentDefault: 'Aktueller Standard',
defaultShort: 'Standard',
builtIn: 'Integriert',
customType: 'Benutzerdefiniert',
provider: 'Anbieter',
+5 -1
View File
@@ -171,10 +171,11 @@ export default {
contextUsed: 'Context used:',
sessions: 'Sessions',
webUiSessions: 'Sessions',
allProfiles: 'All profiles',
sessionScopeHint: 'Chat shows Web UI/API Server sessions only. CLI, Telegram, Discord, Cron, and other channel sessions are read-only in History.',
openHistory: 'Open History',
hermesHistory: 'Hermes History',
historyScopeHint: 'Read-only Hermes history sessions grouped by source.',
historyScopeHint: 'Read-only Hermes history sessions for the current profile, grouped by source.',
noSessions: 'No sessions',
searchTitle: 'Search Sessions',
searchSubtitle: 'Search by title or message content',
@@ -587,6 +588,7 @@ export default {
xaiLoginTitle: 'xAI Grok OAuth Login',
xaiWaiting: 'Complete authorization in the opened xAI page. This window will close automatically once approved.',
xaiOpenLink: 'Open xAI authorization page',
xaiCopyLink: 'Copy authorization link',
xaiApproved: 'Sign-in succeeded!',
xaiExpired: 'The authorization link has expired. Please retry.',
customBadge: 'CUSTOM',
@@ -618,6 +620,8 @@ export default {
visibilitySaveFailed: 'Failed to save visible models',
showAllModels: 'Show all models',
clearVisibleModels: 'Clear selection',
currentDefault: 'Current default',
defaultShort: 'Default',
builtIn: 'Built-in',
customType: 'Custom',
provider: 'Provider',
+4 -1
View File
@@ -158,10 +158,11 @@ export default {
contextUsed: 'Contexto utilizado:',
sessions: 'Sesiones',
webUiSessions: 'Sesiones',
allProfiles: 'Todos los perfiles',
sessionScopeHint: 'Chat solo muestra sesiones de Web UI/API Server. Las sesiones de CLI, Telegram, Discord, Cron y otros canales son de solo lectura en Historial.',
openHistory: 'Abrir historial',
hermesHistory: 'Historial de Hermes',
historyScopeHint: 'Sesiones del historial de Hermes, de solo lectura y agrupadas por origen.',
historyScopeHint: 'Sesiones del historial de Hermes del perfil actual, de solo lectura y agrupadas por origen.',
noSessions: 'Sin sesiones',
newChat: 'Nuevo chat',
approvalKicker: 'Permiso de terminal',
@@ -460,6 +461,8 @@ jobTriggered: 'Job ejecutado',
customModelHint: 'Para modelos compatibles con el proveedor que la API no devuelve; no es un cambio de nombre visible. Enter para cargar.',
noProviders: 'No se encontraron proveedores. Anade un proveedor personalizado para comenzar.',
clearVisibleModels: 'Borrar selección',
currentDefault: 'Predeterminado actual',
defaultShort: 'Predeterminado',
builtIn: 'Integrado',
customType: 'Personalizado',
provider: 'Proveedor',
+4 -1
View File
@@ -158,10 +158,11 @@ export default {
contextUsed: 'Contexte utilise :',
sessions: 'Sessions',
webUiSessions: 'Sessions',
allProfiles: 'Tous les profils',
sessionScopeHint: 'Le chat affiche uniquement les sessions Web UI/API Server. Les sessions CLI, Telegram, Discord, Cron et autres canaux sont en lecture seule dans Historique.',
openHistory: 'Ouvrir lhistorique',
hermesHistory: 'Historique Hermes',
historyScopeHint: 'Sessions dhistorique Hermes en lecture seule, regroupées par source.',
historyScopeHint: 'Sessions dhistorique Hermes du profil actuel en lecture seule, regroupées par source.',
noSessions: 'Aucune session',
newChat: 'Nouvelle discussion',
approvalKicker: 'Permission terminal',
@@ -460,6 +461,8 @@ jobTriggered: 'Job declenche',
customModelHint: 'Pour les modèles pris en charge par le fournisseur mais non renvoyés par lAPI ; ce nest pas un renommage affiché. Entrée pour charger.',
noProviders: 'Aucun fournisseur trouve. Ajoutez un fournisseur personnalise pour commencer.',
clearVisibleModels: 'Effacer la sélection',
currentDefault: 'Par défaut actuel',
defaultShort: 'Défaut',
builtIn: 'Integre',
customType: 'Personnalise',
provider: 'Fournisseur',
+4 -1
View File
@@ -158,10 +158,11 @@ export default {
contextUsed: 'コンテキスト使用量:',
sessions: 'セッション',
webUiSessions: 'セッション',
allProfiles: 'すべてのプロファイル',
sessionScopeHint: 'チャットには Web UI/API Server セッションのみ表示されます。CLI、Telegram、Discord、Cron などのチャンネルセッションは履歴で読み取り専用として表示されます。',
openHistory: '履歴を開く',
hermesHistory: 'Hermes 履歴',
historyScopeHint: 'ソース別にグループ化された Hermes 履歴セッションを読み取り専用で表示します。',
historyScopeHint: '現在の profile の Hermes 履歴セッションをソース別に読み取り専用で表示します。',
noSessions: 'セッションがありません',
newChat: '新しいチャット',
approvalKicker: 'ターミナル権限',
@@ -460,6 +461,8 @@ export default {
customModelHint: 'プロバイダーは対応しているが API が返さないモデル用です。表示名の変更ではありません。Enter で読み込み。',
noProviders: 'プロバイダーがありません。カスタムプロバイダーを追加して始めましょう。',
clearVisibleModels: '選択をクリア',
currentDefault: '現在のデフォルト',
defaultShort: 'デフォルト',
builtIn: '組み込み',
customType: 'カスタム',
provider: 'プロバイダー',
+4 -1
View File
@@ -158,10 +158,11 @@ export default {
contextUsed: '사용된 컨텍스트:',
sessions: '세션',
webUiSessions: '세션',
allProfiles: '모든 프로필',
sessionScopeHint: '채팅에는 Web UI/API Server 세션만 표시됩니다. CLI, Telegram, Discord, Cron 등 채널 세션은 기록에서 읽기 전용으로 볼 수 있습니다.',
openHistory: '기록 열기',
hermesHistory: 'Hermes 기록',
historyScopeHint: '소스별로 그룹화된 Hermes 기록 세션을 읽기 전용으로 봅니다.',
historyScopeHint: '현재 profile의 Hermes 기록 세션을 소스별로 읽기 전용으로 봅니다.',
noSessions: '세션 없음',
newChat: '새 채팅',
approvalKicker: '터미널 권한',
@@ -460,6 +461,8 @@ export default {
customModelHint: '제공자는 지원하지만 API가 반환하지 않는 모델용입니다. 표시 이름 변경이 아닙니다. Enter로 불러옵니다.',
noProviders: 'Provider가 없습니다. 사용자 지정 Provider를 추가하여 시작하세요.',
clearVisibleModels: '선택 지우기',
currentDefault: '현재 기본값',
defaultShort: '기본값',
builtIn: '내장',
customType: '사용자 지정',
provider: 'Provider',
+4 -1
View File
@@ -158,10 +158,11 @@ export default {
contextUsed: 'Contexto utilizado:',
sessions: 'Sessoes',
webUiSessions: 'Sessões',
allProfiles: 'Todos os perfis',
sessionScopeHint: 'O chat mostra apenas sessões da Web UI/API Server. Sessões de CLI, Telegram, Discord, Cron e outros canais são somente leitura no Histórico.',
openHistory: 'Abrir histórico',
hermesHistory: 'Histórico Hermes',
historyScopeHint: 'Sessões do histórico Hermes somente leitura, agrupadas por origem.',
historyScopeHint: 'Sessões do histórico Hermes do perfil atual, somente leitura, agrupadas por origem.',
noSessions: 'Sem sessoes',
newChat: 'Novo chat',
approvalKicker: 'Permissão do terminal',
@@ -460,6 +461,8 @@ jobTriggered: 'Job acionado',
customModelHint: 'Para modelos compatíveis com o provedor que a API não retorna; não é uma renomeação de exibição. Enter para carregar.',
noProviders: 'Nenhum provedor encontrado. Adicione um provedor personalizado para comecar.',
clearVisibleModels: 'Limpar seleção',
currentDefault: 'Padrão atual',
defaultShort: 'Padrão',
builtIn: 'Integrado',
customType: 'Personalizado',
provider: 'Provedor',
+4 -1
View File
@@ -170,10 +170,11 @@ export default {
contextUsed: '上下文已用:',
sessions: '工作階段',
webUiSessions: '工作階段',
allProfiles: '全部設定',
sessionScopeHint: '這裡只顯示目前工作階段;CLI、Telegram、Discord、Cron 等頻道工作階段在歷史中以唯讀方式查看。',
openHistory: '開啟歷史',
hermesHistory: 'Hermes 歷史',
historyScopeHint: '這裡按來源以唯讀方式查看 Hermes 歷史工作階段。',
historyScopeHint: '這裡按來源以唯讀方式查看目前 profile 的 Hermes 歷史工作階段。',
noSessions: '目前無工作階段',
searchTitle: '搜尋工作階段',
searchSubtitle: '依標題或訊息內容搜尋',
@@ -610,6 +611,8 @@ export default {
visibilitySaveFailed: '儲存可見模型失敗',
showAllModels: '顯示全部模型',
clearVisibleModels: '取消全選',
currentDefault: '目前預設',
defaultShort: '預設',
aliasEdit: '重新命名',
aliasTitle: '模型顯示名',
aliasTitleFor: '{model} 的顯示名',
+5 -1
View File
@@ -171,10 +171,11 @@ export default {
contextUsed: '上下文已用:',
sessions: '会话',
webUiSessions: '会话',
allProfiles: '全部配置',
sessionScopeHint: '这里只显示当前会话;CLI、Telegram、Discord、Cron 等通道会话在历史中只读查看。',
openHistory: '打开历史',
hermesHistory: 'Hermes 历史',
historyScopeHint: '这里按来源只读查看 Hermes 历史会话。',
historyScopeHint: '这里按来源只读查看当前 profile 的 Hermes 历史会话。',
noSessions: '暂无会话',
searchTitle: '搜索会话',
searchSubtitle: '按标题或消息内容搜索',
@@ -587,6 +588,7 @@ export default {
xaiLoginTitle: 'xAI Grok OAuth 登录',
xaiWaiting: '请在打开的 xAI 页面完成授权。授权完成后窗口会自动关闭。',
xaiOpenLink: '打开 xAI 授权页',
xaiCopyLink: '复制授权链接',
xaiApproved: '登录成功!',
xaiExpired: '授权链接已过期,请重试。',
customBadge: '自定义',
@@ -618,6 +620,8 @@ export default {
visibilitySaveFailed: '保存可见模型失败',
showAllModels: '显示全部模型',
clearVisibleModels: '取消全选',
currentDefault: '当前默认',
defaultShort: '默认',
builtIn: '内置',
customType: '自定义',
provider: 'Provider',