From 2d44090a4970d3fa90883591f5d0c70913f4eea0 Mon Sep 17 00:00:00 2001 From: Robin Bially <7304732+robin-bially@users.noreply.github.com> Date: Mon, 26 Oct 2026 12:05:30 +0100 Subject: [PATCH 1/3] fix(gui): show Terra as the separate memory background model The shadow-call badge listed only the intercepted helper slugs, so an enabled intercept looked as if no background call could still reach OpenAI. Codex's memory consolidation also runs in the background and asks for Terra, but Memory-Routing controls that phase. Keep Terra out of sourceModels: it is a normal foreground and subagent model, and intercepting it wholesale would redirect user turns. Render it as its own memory entry and explain the separation in the dashboard, Models settings, tooltips, and the configuration reference. --- .../docs/reference/configuration/server.md | 4 ++++ gui/src/i18n/de.ts | 9 +++++---- gui/src/i18n/en.ts | 9 +++++---- gui/src/i18n/fr.ts | 9 +++++---- gui/src/i18n/ja.ts | 9 +++++---- gui/src/i18n/ko.ts | 9 +++++---- gui/src/i18n/pt.ts | 9 +++++---- gui/src/i18n/ru.ts | 9 +++++---- gui/src/i18n/tr.ts | 9 +++++---- gui/src/i18n/vi.ts | 9 +++++---- gui/src/i18n/zh-TW.ts | 9 +++++---- gui/src/i18n/zh.ts | 9 +++++---- gui/src/pages/Models.tsx | 4 ++-- gui/src/pages/dashboard-overview-sections.tsx | 5 +++-- gui/src/pages/shadow-call-source.ts | 12 ++++++++++++ gui/tests/shadow-call-source.test.ts | 18 ++++++++++++++++++ 16 files changed, 94 insertions(+), 48 deletions(-) diff --git a/docs-site/src/content/docs/reference/configuration/server.md b/docs-site/src/content/docs/reference/configuration/server.md index ae044e3faa9..f4b674d8f22 100644 --- a/docs-site/src/content/docs/reference/configuration/server.md +++ b/docs-site/src/content/docs/reference/configuration/server.md @@ -935,6 +935,10 @@ replacement keeps the request's configured reasoning effort. Set `sourceModels` uses different helper ids. A non-empty `sourceModels` replaces the default prefixes instead of extending them, so include `gpt-6-luna` (and `gpt-5.6-luna` for 0.145.0-0.153.x clients) in the list when current clients should still be intercepted. +Memory consolidation is separate: Codex asks for Terra there, and +`memoryModels.consolidation` controls that phase. Terra is also a normal foreground and subagent +model, so it stays out of the default shadow source set; the dashboard shows it as its own +Memory-Routing entry next to the shadow-call sources. Matching bare model ids are eligible for interception, but explicit user turns keep their selected model: `x-codex-turn-metadata` must contain both `request_kind: "turn"` and `thread_source: "user"`. Spawned children also keep their model, identified by the `x-openai-subagent: collab_spawn` connection header (HTTP request or WebSocket diff --git a/gui/src/i18n/de.ts b/gui/src/i18n/de.ts index 6e9bf71f05d..d52cb31a6a8 100644 --- a/gui/src/i18n/de.ts +++ b/gui/src/i18n/de.ts @@ -576,13 +576,14 @@ export const de: Record = { "memoryModels.saved": "Memory-Einstellungen gespeichert.", "memoryModels.saveFailed": "Speichern fehlgeschlagen. Deine Änderungen stehen noch da; versuch es erneut.", "dash.shadowCallIntercept": "Shadow-Call-Abfangen", - "dash.shadowCallInterceptHint": "Fängt die Hintergrund-Hilfsaufrufe der Codex-App ({models}) ab und leitet sie an das gewählte Modell um.", - "dash.shadowCallWarning": "⚠ Bei Aktivierung werden ALLE Anfragen an {models} durch das gewählte Modell ersetzt.", + "shadowCall.memoryLabel": "Memory: Terra", + "dash.shadowCallInterceptHint": "Fängt die Hintergrund-Hilfsaufrufe der Codex-App ({models}) für Titel, Commit-Nachrichten und Skill-Orchestrierung ab. Die Memory-Konsolidierung läuft mit Terra und wird separat über Memory-Routing gesteuert.", + "dash.shadowCallWarning": "⚠ Bei Aktivierung werden ALLE Anfragen an {models} durch das gewählte Modell ersetzt. Terra (Memory-Konsolidierung) läuft separat über Memory-Routing.", "dash.shadowCallOriginal": "Original", "dash.shadowCallModel": "Ersatzmodell", - "dash.shadowCallTooltip": "Die Codex-App ruft im Hintergrund ein Hilfsmodell für Titelgenerierung, Commit-Nachrichten und Skill-Orchestrierung auf. Das Modell wechselt zwischen Client-Versionen, daher fängt opencodex diesen Satz ab: {models}.", + "dash.shadowCallTooltip": "Die Codex-App ruft im Hintergrund ein Hilfsmodell für Titelgenerierung, Commit-Nachrichten und Skill-Orchestrierung auf. Das Modell wechselt zwischen Client-Versionen, daher fängt opencodex diesen Satz ab: {models}. Die Memory-Konsolidierung nutzt Terra und wird über das separate Memory-Routing gesteuert; dieser Schalter umfasst sie nicht.", "models.shadowCallIntercept": "Shadow-Call-Abfangen", - "models.shadowCallInterceptHint": "Fängt die Hintergrund-Hilfsaufrufe der Codex-App ({models}) ab und leitet sie an das gewählte Modell um.", + "models.shadowCallInterceptHint": "Fängt die Hintergrund-Hilfsaufrufe der Codex-App ({models}) für Titel, Commit-Nachrichten und Skill-Orchestrierung ab. Die Memory-Konsolidierung (Terra) läuft separat über Memory-Routing.", "models.autoReviewOverride": "Auto-Review-Überschreibung", "models.autoReviewOverrideHint": "Legt fest, welches Modell Codex für die automatische Prüfung (Approval-Reviewer) verwendet. Wird beim Katalog-Abgleich auf alle Zeilen angewendet; ein autoReviewModel auf Anbieterebene hat weiterhin Vorrang.", "models.autoReviewPending": "Ausstehend", diff --git a/gui/src/i18n/en.ts b/gui/src/i18n/en.ts index e5aa8db2d1f..941883176cf 100644 --- a/gui/src/i18n/en.ts +++ b/gui/src/i18n/en.ts @@ -594,13 +594,14 @@ export const en = { "memoryModels.saved": "Memory settings saved.", "memoryModels.saveFailed": "Could not save. Your changes are still here; try again.", "dash.shadowCallIntercept": "Shadow Call Intercept", - "dash.shadowCallInterceptHint": "Intercepts Codex App's background helper calls ({models}) for title generation and commit messages and redirects them to your chosen model.", - "dash.shadowCallWarning": "⚠ When enabled, ALL requests for {models} will be replaced with the selected model.", + "shadowCall.memoryLabel": "Memory: Terra", + "dash.shadowCallInterceptHint": "Intercepts Codex App's background helper calls ({models}) for titles, commit messages, and skill orchestration. Memory consolidation runs on Terra and is routed separately under Memory-Routing.", + "dash.shadowCallWarning": "⚠ When enabled, ALL requests for {models} will be replaced with the selected model. Terra (memory consolidation) is routed separately.", "dash.shadowCallOriginal": "Original", "dash.shadowCallModel": "Replacement model", - "dash.shadowCallTooltip": "Codex App makes background helper calls for thread title generation, commit message generation, and skill orchestration. The helper model changed across client versions, so opencodex intercepts every model in this set: {models}. Enable this to redirect those calls to your chosen model.", + "dash.shadowCallTooltip": "Codex App makes background helper calls for thread title generation, commit message generation, and skill orchestration. The helper model changed across client versions, so opencodex intercepts every model in this set: {models}. Enable this to redirect those calls to your chosen model. Memory consolidation uses Terra and is controlled by the separate Memory-Routing panel; this switch does not include it.", "models.shadowCallIntercept": "Shadow Call Intercept", - "models.shadowCallInterceptHint": "Intercepts Codex App's background helper calls ({models}) for titles and commit messages and redirects them to your chosen model.", + "models.shadowCallInterceptHint": "Intercepts Codex App's background helper calls ({models}) for titles, commit messages, and skill orchestration. Memory consolidation (Terra) is routed separately under Memory-Routing.", "models.autoReviewOverride": "Auto-review override", "models.autoReviewOverrideHint": "Chooses the model Codex uses for auto-review (the approval reviewer). Applied to every catalog row at sync; a provider-scoped autoReviewModel still takes precedence on its own rows.", "models.autoReviewPending": "Pending", diff --git a/gui/src/i18n/fr.ts b/gui/src/i18n/fr.ts index 06c65d62cd2..f32961a7740 100644 --- a/gui/src/i18n/fr.ts +++ b/gui/src/i18n/fr.ts @@ -584,13 +584,14 @@ export const fr: Record = { "memoryModels.saved": "Réglages de mémoire enregistrés.", "memoryModels.saveFailed": "Échec de l'enregistrement. Vos modifications sont conservées ; réessayez.", "dash.shadowCallIntercept": "Interception des appels fantômes", - "dash.shadowCallInterceptHint": "Intercepte les appels auxiliaires en arrière-plan de l’application Codex ({models}) pour générer les titres et les messages de commit, puis les redirige vers le modèle choisi.", - "dash.shadowCallWarning": "⚠ Lorsque cette option est activée, TOUTES les requêtes destinées à {models} sont remplacées par le modèle sélectionné.", + "shadowCall.memoryLabel": "Mémoire : Terra", + "dash.shadowCallInterceptHint": "Intercepte les appels auxiliaires en arrière-plan de l’application Codex ({models}) pour les titres, les messages de commit et l’orchestration des compétences. La consolidation de la mémoire utilise Terra et passe par le routage de la mémoire séparé.", + "dash.shadowCallWarning": "⚠ Lorsque cette option est activée, TOUTES les requêtes destinées à {models} sont remplacées par le modèle sélectionné. Terra (consolidation de la mémoire) passe par le routage de la mémoire séparé.", "dash.shadowCallOriginal": "Original", "dash.shadowCallModel": "Modèle de remplacement", - "dash.shadowCallTooltip": "L’application Codex effectue des appels auxiliaires en arrière-plan pour générer les titres de fils, les messages de commit et orchestrer les compétences. Le modèle auxiliaire ayant changé selon les versions du client, opencodex intercepte tous les modèles de cet ensemble : {models}. Activez cette option pour rediriger ces appels vers le modèle choisi.", + "dash.shadowCallTooltip": "L’application Codex effectue des appels auxiliaires en arrière-plan pour générer les titres de fils, les messages de commit et orchestrer les compétences. Le modèle auxiliaire ayant changé selon les versions du client, opencodex intercepte tous les modèles de cet ensemble : {models}. Activez cette option pour rediriger ces appels vers le modèle choisi. La consolidation de la mémoire utilise Terra et dépend du panneau de routage de la mémoire séparé ; cette option ne la couvre pas.", "models.shadowCallIntercept": "Interception des appels fantômes", - "models.shadowCallInterceptHint": "Intercepte les appels auxiliaires en arrière-plan de l’application Codex ({models}) pour les titres et les messages de commit, puis les redirige vers le modèle choisi.", + "models.shadowCallInterceptHint": "Intercepte les appels auxiliaires en arrière-plan de l’application Codex ({models}) pour les titres, les messages de commit et l’orchestration des compétences. La consolidation de la mémoire (Terra) passe par le routage de la mémoire séparé.", "models.autoReviewOverride": "Remplacement de la revue automatique", "models.autoReviewOverrideHint": "Choisit le modèle que Codex utilise pour la revue automatique (le modèle de revue des demandes d'approbation). Appliqué à chaque ligne du catalogue à la synchronisation ; un autoReviewModel défini au niveau du fournisseur reste prioritaire sur ses lignes.", "models.autoReviewPending": "En attente", diff --git a/gui/src/i18n/ja.ts b/gui/src/i18n/ja.ts index 751c3053bfa..57ef85b3380 100644 --- a/gui/src/i18n/ja.ts +++ b/gui/src/i18n/ja.ts @@ -585,13 +585,14 @@ export const ja: Record = { "memoryModels.saved": "メモリ設定を保存しました。", "memoryModels.saveFailed": "保存できませんでした。変更は残っています。もう一度お試しください。", "dash.shadowCallIntercept": "シャドウコール傍受", - "dash.shadowCallInterceptHint": "Codex App のバックグラウンドヘルパー呼び出し({models}: タイトル生成、コミットメッセージ)を傍受し、選択したモデルにリダイレクトします。", - "dash.shadowCallWarning": "⚠ オンにすると、{models} へのリクエストがすべて選択したモデルに置き換えられます。", + "shadowCall.memoryLabel": "メモリ: Terra", + "dash.shadowCallInterceptHint": "Codex App のバックグラウンドヘルパー呼び出し({models}: タイトル、コミットメッセージ、スキルオーケストレーション)を傍受し、選択したモデルにリダイレクトします。メモリの統合は Terra で実行され、別のメモリルーティングで制御されます。", + "dash.shadowCallWarning": "⚠ オンにすると、{models} へのリクエストがすべて選択したモデルに置き換えられます。Terra(メモリ統合)は別のメモリルーティングで処理されます。", "dash.shadowCallOriginal": "元のモデル", "dash.shadowCallModel": "差し替えモデル", - "dash.shadowCallTooltip": "Codex App はスレッドタイトル生成、コミットメッセージ生成、スキルオーケストレーションをバックグラウンドで呼び出します。使われるモデルはクライアントのバージョンによって変わるため、opencodex は {models} をまとめて傍受します。これをオンにすると、それらの呼び出しを選択したモデルにリダイレクトします。", + "dash.shadowCallTooltip": "Codex App はスレッドタイトル生成、コミットメッセージ生成、スキルオーケストレーションをバックグラウンドで呼び出します。使われるモデルはクライアントのバージョンによって変わるため、opencodex は {models} をまとめて傍受します。これをオンにすると、それらの呼び出しを選択したモデルにリダイレクトします。メモリの統合は Terra を使用し、別のメモリルーティングパネルで制御されます。このスイッチには含まれません。", "models.shadowCallIntercept": "シャドウコール傍受", - "models.shadowCallInterceptHint": "Codex App のバックグラウンドヘルパー呼び出し({models}: タイトル、コミットメッセージ)を傍受し、選択したモデルにリダイレクトします。", + "models.shadowCallInterceptHint": "Codex App のバックグラウンドヘルパー呼び出し({models}: タイトル、コミットメッセージ、スキルオーケストレーション)を傍受し、選択したモデルにリダイレクトします。メモリの統合(Terra)は別のメモリルーティングで処理されます。", "models.autoReviewOverride": "自動レビューの上書き", "models.autoReviewOverrideHint": "Codex の自動レビュー(承認レビュアー)が使うモデルを指定します。カタログ同期時にすべての行へ適用され、プロバイダー固有の autoReviewModel がその行では引き続き優先されます。", "models.autoReviewPending": "保留中", diff --git a/gui/src/i18n/ko.ts b/gui/src/i18n/ko.ts index 4e5f35e6e32..964281d41b6 100644 --- a/gui/src/i18n/ko.ts +++ b/gui/src/i18n/ko.ts @@ -580,13 +580,14 @@ export const ko: Record = { "memoryModels.saved": "메모리 설정을 저장했습니다.", "memoryModels.saveFailed": "저장하지 못했습니다. 변경 사항은 그대로 있습니다. 다시 시도하세요.", "dash.shadowCallIntercept": "쉐도우 호출 가로채기", - "dash.shadowCallInterceptHint": "Codex 앱이 제목·커밋 메시지 생성에 쓰는 백그라운드 호출({models})을 가로채 선택한 모델로 바꿉니다.", - "dash.shadowCallWarning": "⚠ 활성화하면 {models} 요청이 모두 선택한 모델로 대체됩니다.", + "shadowCall.memoryLabel": "메모리: Terra", + "dash.shadowCallInterceptHint": "Codex 앱이 제목·커밋 메시지·스킬 오케스트레이션에 쓰는 백그라운드 호출({models})을 가로채 선택한 모델로 바꿉니다. 메모리 통합은 Terra로 실행되며 별도의 메모리 라우팅에서 제어합니다.", + "dash.shadowCallWarning": "⚠ 활성화하면 {models} 요청이 모두 선택한 모델로 대체됩니다. Terra(메모리 통합)는 별도의 메모리 라우팅으로 처리됩니다.", "dash.shadowCallOriginal": "원본", "dash.shadowCallModel": "대체 모델", - "dash.shadowCallTooltip": "Codex 앱은 스레드 제목 자동 생성, 커밋 메시지 생성, 스킬 오케스트레이션 같은 내부 작업을 백그라운드로 호출합니다. 이때 쓰는 모델은 클라이언트 버전마다 달라서 opencodex는 {models}를 모두 가로챕니다. 이 설정을 켜면 해당 호출이 선택한 모델로 넘어갑니다.", + "dash.shadowCallTooltip": "Codex 앱은 스레드 제목 자동 생성, 커밋 메시지 생성, 스킬 오케스트레이션 같은 내부 작업을 백그라운드로 호출합니다. 이때 쓰는 모델은 클라이언트 버전마다 달라서 opencodex는 {models}를 모두 가로챕니다. 이 설정을 켜면 해당 호출이 선택한 모델로 넘어갑니다. 메모리 통합은 Terra를 사용하며 별도의 메모리 라우팅 패널에서 제어합니다. 이 스위치에는 포함되지 않습니다.", "models.shadowCallIntercept": "쉐도우 호출 가로채기", - "models.shadowCallInterceptHint": "Codex 앱의 백그라운드 호출({models}, 제목·커밋 메시지)을 가로채 선택한 모델로 바꿉니다.", + "models.shadowCallInterceptHint": "Codex 앱의 백그라운드 호출({models}, 제목·커밋 메시지·스킬 오케스트레이션)을 가로채 선택한 모델로 바꿉니다. 메모리 통합(Terra)은 별도의 메모리 라우팅으로 처리됩니다.", "models.autoReviewOverride": "자동 검토 재정의", "models.autoReviewOverrideHint": "Codex의 자동 검토(승인 검토자)에 사용할 모델을 지정합니다. 카탈로그 동기화 시 모든 행에 적용되며, 공급자별 autoReviewModel이 해당 행에서 계속 우선합니다.", "models.autoReviewPending": "보류 중", diff --git a/gui/src/i18n/pt.ts b/gui/src/i18n/pt.ts index 86515085682..803254f94ed 100644 --- a/gui/src/i18n/pt.ts +++ b/gui/src/i18n/pt.ts @@ -598,13 +598,14 @@ export const pt: Record = { "memoryModels.saved": "Configurações de memória salvas.", "memoryModels.saveFailed": "Não foi possível salvar. Suas alterações continuam aqui; tente novamente.", "dash.shadowCallIntercept": "Shadow Call Intercept", - "dash.shadowCallInterceptHint": "Intercepta as chamadas auxiliares em segundo plano do Codex App ({models}) para geração de títulos e mensagens de commit e as redireciona ao modelo escolhido.", - "dash.shadowCallWarning": "⚠ Quando ativado, TODAS as requisições para {models} serão substituídas pelo modelo selecionado.", + "shadowCall.memoryLabel": "Memória: Terra", + "dash.shadowCallInterceptHint": "Intercepta as chamadas auxiliares em segundo plano do Codex App ({models}) para títulos, mensagens de commit e orquestração de skills. A consolidação de memória usa Terra e é roteada separadamente pelo Roteamento de memória.", + "dash.shadowCallWarning": "⚠ Quando ativado, TODAS as requisições para {models} serão substituídas pelo modelo selecionado. Terra (consolidação de memória) é roteado separadamente.", "dash.shadowCallOriginal": "Original", "dash.shadowCallModel": "Modelo substituto", - "dash.shadowCallTooltip": "O Codex App faz chamadas auxiliares em segundo plano para geração de título de thread, geração de mensagem de commit e orquestração de skills. O modelo auxiliar mudou entre versões do cliente, então o opencodex intercepta todos os modelos deste conjunto: {models}. Ative para redirecionar essas chamadas ao modelo escolhido.", + "dash.shadowCallTooltip": "O Codex App faz chamadas auxiliares em segundo plano para geração de título de thread, geração de mensagem de commit e orquestração de skills. O modelo auxiliar mudou entre versões do cliente, então o opencodex intercepta todos os modelos deste conjunto: {models}. Ative para redirecionar essas chamadas ao modelo escolhido. A consolidação de memória usa Terra e é controlada pelo painel separado de Roteamento de memória; esta opção não a inclui.", "models.shadowCallIntercept": "Shadow Call Intercept", - "models.shadowCallInterceptHint": "Intercepta as chamadas auxiliares em segundo plano do Codex App ({models}) para títulos e mensagens de commit e as redireciona ao modelo escolhido.", + "models.shadowCallInterceptHint": "Intercepta as chamadas auxiliares em segundo plano do Codex App ({models}) para títulos, mensagens de commit e orquestração de skills. A consolidação de memória (Terra) é roteada separadamente pelo Roteamento de memória.", "models.autoReviewOverride": "Substituição da revisão automática", "models.autoReviewOverrideHint": "Define o modelo que o Codex usa na revisão automática (revisor de aprovação). Aplicado a todas as linhas do catálogo na sincronização; um autoReviewModel no provedor continua tendo prioridade nas próprias linhas.", "models.autoReviewPending": "Pendente", diff --git a/gui/src/i18n/ru.ts b/gui/src/i18n/ru.ts index b19c9bb91bc..9af21b33b27 100644 --- a/gui/src/i18n/ru.ts +++ b/gui/src/i18n/ru.ts @@ -585,13 +585,14 @@ export const ru: Record = { "memoryModels.saved": "Настройки памяти сохранены.", "memoryModels.saveFailed": "Не удалось сохранить. Ваши изменения на месте; попробуйте снова.", "dash.shadowCallIntercept": "Перехват теневых вызовов", - "dash.shadowCallInterceptHint": "Перехватывает фоновые служебные вызовы Codex App ({models}: генерация заголовков, сообщений коммитов) и перенаправляет их на выбранную вами модель.", - "dash.shadowCallWarning": "⚠ Когда функция включена, ВСЕ запросы к {models} будут заменены выбранной моделью.", + "shadowCall.memoryLabel": "Память: Terra", + "dash.shadowCallInterceptHint": "Перехватывает фоновые служебные вызовы Codex App ({models}: заголовки, сообщения коммитов, оркестрация навыков) и перенаправляет их на выбранную вами модель. Консолидация памяти выполняется на Terra и управляется отдельной маршрутизацией памяти.", + "dash.shadowCallWarning": "⚠ Когда функция включена, ВСЕ запросы к {models} будут заменены выбранной моделью. Terra (консолидация памяти) маршрутизируется отдельно.", "dash.shadowCallOriginal": "Оригинал", "dash.shadowCallModel": "Модель-замена", - "dash.shadowCallTooltip": "Codex App в фоновом режиме вызывает служебную модель для генерации заголовков тредов, сообщений коммитов и оркестрации навыков. Эта модель менялась между версиями клиента, поэтому opencodex перехватывает весь набор: {models}. Включите функцию, чтобы перенаправлять такие вызовы на выбранную вами модель.", + "dash.shadowCallTooltip": "Codex App в фоновом режиме вызывает служебную модель для генерации заголовков тредов, сообщений коммитов и оркестрации навыков. Эта модель менялась между версиями клиента, поэтому opencodex перехватывает весь набор: {models}. Включите функцию, чтобы перенаправлять такие вызовы на выбранную вами модель. Консолидация памяти выполняется на Terra и управляется отдельной панелью маршрутизации памяти; этот переключатель её не затрагивает.", "models.shadowCallIntercept": "Перехват теневых вызовов", - "models.shadowCallInterceptHint": "Перехватывает фоновые служебные вызовы Codex App ({models}: заголовки, сообщения коммитов) и перенаправляет их на выбранную вами модель.", + "models.shadowCallInterceptHint": "Перехватывает фоновые служебные вызовы Codex App ({models}: заголовки, сообщения коммитов, оркестрация навыков) и перенаправляет их на выбранную вами модель. Консолидация памяти (Terra) маршрутизируется отдельно.", "models.autoReviewOverride": "Переопределение авто-проверки", "models.autoReviewOverrideHint": "Задаёт модель, которую Codex использует для автоматической проверки (ревьюера подтверждений). Применяется ко всем строкам каталога при синхронизации; autoReviewModel на уровне провайдера по-прежнему имеет приоритет.", "models.autoReviewPending": "Ожидание", diff --git a/gui/src/i18n/tr.ts b/gui/src/i18n/tr.ts index 045137082a9..1f68a2e0979 100644 --- a/gui/src/i18n/tr.ts +++ b/gui/src/i18n/tr.ts @@ -586,13 +586,14 @@ export const tr: Record = { "memoryModels.saved": "Bellek ayarları kaydedildi.", "memoryModels.saveFailed": "Kaydedilemedi. Değişiklikleriniz duruyor; tekrar deneyin.", "dash.shadowCallIntercept": "Gölge Çağrı Yakalama", - "dash.shadowCallInterceptHint": "Codex App'in arka plan yardımcı çağrılarını ({models}) başlık oluşturma ve commit mesajları için yakalar ve seçtiğiniz modele yönlendirir.", - "dash.shadowCallWarning": "⚠ Etkinleştirildiğinde, {models} için olan TÜM istekler seçilen modelle değiştirilecektir.", + "shadowCall.memoryLabel": "Bellek: Terra", + "dash.shadowCallInterceptHint": "Codex App'in başlık, commit mesajı ve beceri orkestrasyonu için yaptığı arka plan yardımcı çağrılarını ({models}) yakalar ve seçtiğiniz modele yönlendirir. Bellek birleştirme Terra ile çalışır ve ayrı Bellek yönlendirmesi üzerinden denetlenir.", + "dash.shadowCallWarning": "⚠ Etkinleştirildiğinde, {models} için olan TÜM istekler seçilen modelle değiştirilecektir. Terra (bellek birleştirme) ayrı olarak yönlendirilir.", "dash.shadowCallOriginal": "Orijinal", "dash.shadowCallModel": "Yedek model", - "dash.shadowCallTooltip": "Codex App arka planda başlık ve commit mesajı oluşturmak için yardımcı çağrılar yapar (orijinal {models}). Etkinleştirerek bunları seçtiğiniz modele yönlendirebilirsiniz.", + "dash.shadowCallTooltip": "Codex App arka planda başlık ve commit mesajı oluşturmak için yardımcı çağrılar yapar (orijinal {models}). Etkinleştirerek bunları seçtiğiniz modele yönlendirebilirsiniz. Bellek birleştirme Terra kullanır ve ayrı Bellek yönlendirmesi panelinden denetlenir; bu anahtar onu kapsamaz.", "models.shadowCallIntercept": "Gölge Çağrı Yakalama", - "models.shadowCallInterceptHint": "Codex App'in başlıklar ve commit mesajları için yaptığı arka plan çağrılarını ({models}) yakalar ve seçtiğiniz modele yönlendirir.", + "models.shadowCallInterceptHint": "Codex App'in başlıklar, commit mesajları ve beceri orkestrasyonu için yaptığı arka plan çağrılarını ({models}) yakalar ve seçtiğiniz modele yönlendirir. Bellek birleştirme (Terra) ayrı Bellek yönlendirmesi üzerinden yapılır.", "models.autoReviewOverride": "Otomatik inceleme geçersiz kılma", "models.autoReviewOverrideHint": "Codex’in otomatik incelemesi (onay gözden geçiren) için kullanılacak modeli seçer. Katalog eşitlemesinde tüm satırlara uygulanır; sağlayıcıya özel autoReviewModel kendi satırlarında yine önceliklidir.", "models.autoReviewPending": "Beklemede", diff --git a/gui/src/i18n/vi.ts b/gui/src/i18n/vi.ts index b53ab8972d2..0168f4bf21b 100644 --- a/gui/src/i18n/vi.ts +++ b/gui/src/i18n/vi.ts @@ -584,13 +584,14 @@ export const vi: Record = { "memoryModels.saved": "Đã lưu cài đặt bộ nhớ.", "memoryModels.saveFailed": "Không lưu được. Thay đổi của bạn vẫn còn; hãy thử lại.", "dash.shadowCallIntercept": "Shadow Call Intercept", - "dash.shadowCallInterceptHint": "Chặn các lệnh gọi helper nền ({models}) của ứng dụng Codex để tạo tiêu đề và commit messages, sau đó chuyển hướng chúng đến model bạn đã chọn.", - "dash.shadowCallWarning": "⚠ Khi được bật, TẤT CẢ yêu cầu đối với {models} sẽ được thay thế bằng model được chọn.", + "shadowCall.memoryLabel": "Bộ nhớ: Terra", + "dash.shadowCallInterceptHint": "Chặn các lệnh gọi helper nền ({models}) của ứng dụng Codex để tạo tiêu đề, commit message và điều phối kĩ năng, sau đó chuyển hướng chúng đến model bạn đã chọn. Hợp nhất bộ nhớ chạy trên Terra và được định tuyến riêng trong Định tuyến bộ nhớ.", + "dash.shadowCallWarning": "⚠ Khi được bật, TẤT CẢ yêu cầu đối với {models} sẽ được thay thế bằng model được chọn. Terra (hợp nhất bộ nhớ) được định tuyến riêng.", "dash.shadowCallOriginal": "Gốc", "dash.shadowCallModel": "Model thay thế", - "dash.shadowCallTooltip": "Ứng dụng Codex thực hiện các lệnh gọi helper ngầm để tạo tiêu đề chuỗi, tạo commit message và điều phối các kĩ năng. Helper model có thể thay đổi giữa các phiên bản client, do đó opencodex chặn mọi model trong tập hợp này: {models}. Hãy bật tính năng này để chuyển hướng các lệnh gọi đó đến model bạn chọn.", + "dash.shadowCallTooltip": "Ứng dụng Codex thực hiện các lệnh gọi helper ngầm để tạo tiêu đề chuỗi, tạo commit message và điều phối các kĩ năng. Helper model có thể thay đổi giữa các phiên bản client, do đó opencodex chặn mọi model trong tập hợp này: {models}. Hãy bật tính năng này để chuyển hướng các lệnh gọi đó đến model bạn chọn. Hợp nhất bộ nhớ dùng Terra và được điều khiển bởi bảng Định tuyến bộ nhớ riêng; công tắc này không bao gồm nó.", "models.shadowCallIntercept": "Shadow Call Intercept", - "models.shadowCallInterceptHint": "Chặn các lệnh gọi helper nền ({models}) của ứng dụng Codex để tạo tiêu đề và commit messages, và chuyển hướng chúng đến model bạn chọn.", + "models.shadowCallInterceptHint": "Chặn các lệnh gọi helper nền ({models}) của ứng dụng Codex để tạo tiêu đề, commit message và điều phối kĩ năng, rồi chuyển hướng chúng đến model bạn chọn. Hợp nhất bộ nhớ (Terra) được định tuyến riêng trong Định tuyến bộ nhớ.", "models.autoReviewOverride": "Ghi đè duyệt tự động", "models.autoReviewOverrideHint": "Chọn model Codex dùng cho việc duyệt tự động (mô hình đánh giá phê duyệt). Áp dụng cho mọi hàng trong catalog khi đồng bộ; autoReviewModel ở cấp nhà cung cấp vẫn được ưu tiên trên các hàng đó.", "models.autoReviewPending": "Đang chờ", diff --git a/gui/src/i18n/zh-TW.ts b/gui/src/i18n/zh-TW.ts index e7d73063988..c4c064d46b8 100644 --- a/gui/src/i18n/zh-TW.ts +++ b/gui/src/i18n/zh-TW.ts @@ -461,13 +461,14 @@ export const zhTW: Record = { "memoryModels.saved": "記憶設定已儲存。", "memoryModels.saveFailed": "儲存失敗。你的變更還在,請再試一次。", "dash.shadowCallIntercept": "影子呼叫攔截", - "dash.shadowCallInterceptHint": "攔截 Codex 應用的背景 helper 呼叫({models})以生成標題與提交訊息,並將它們重定向到您選擇的模型。", - "dash.shadowCallWarning": "⚠ 啟用後,{models} 的所有請求將被替換為所選模型。", + "shadowCall.memoryLabel": "記憶: Terra", + "dash.shadowCallInterceptHint": "攔截 Codex 應用的背景 helper 呼叫({models}:標題、提交訊息、技能編排),並將它們重定向到您選擇的模型。記憶合併使用 Terra 執行,並由獨立的記憶路由控制。", + "dash.shadowCallWarning": "⚠ 啟用後,{models} 的所有請求將被替換為所選模型。Terra(記憶合併)會透過獨立的記憶路由處理。", "dash.shadowCallOriginal": "原始", "dash.shadowCallModel": "替代模型", - "dash.shadowCallTooltip": "Codex 應用會為執行緒標題生成、提交訊息生成與技能編排發出背景 helper 呼叫。helper 模型因客戶端版本而異,因此 opencodex 攔截此集合中的每個模型:{models}。啟用此選項可將這些呼叫重定向到您選擇的模型。", + "dash.shadowCallTooltip": "Codex 應用會為執行緒標題生成、提交訊息生成與技能編排發出背景 helper 呼叫。helper 模型因客戶端版本而異,因此 opencodex 攔截此集合中的每個模型:{models}。啟用此選項可將這些呼叫重定向到您選擇的模型。記憶合併使用 Terra,並由獨立的記憶路由面板控制;此開關不包含它。", "models.shadowCallIntercept": "影子呼叫攔截", - "models.shadowCallInterceptHint": "攔截 Codex 應用的背景 helper 呼叫({models})以生成標題與提交訊息,並將它們重定向到您選擇的模型。", + "models.shadowCallInterceptHint": "攔截 Codex 應用的背景 helper 呼叫({models}:標題、提交訊息、技能編排)並重定向到您選擇的模型。記憶合併(Terra)會透過獨立的記憶路由處理。", "models.autoReviewOverride": "自動審查覆寫", "models.autoReviewOverrideHint": "指定 Codex 自動審查(核准審查模型)所使用的模型。同步型錄時套用到所有資料列;提供者層級的 autoReviewModel 在這些資料列上仍具優先權。", "models.autoReviewPending": "待定", diff --git a/gui/src/i18n/zh.ts b/gui/src/i18n/zh.ts index b44f55410ef..1228b5a2d4b 100644 --- a/gui/src/i18n/zh.ts +++ b/gui/src/i18n/zh.ts @@ -580,13 +580,14 @@ export const zh: Record = { "memoryModels.saved": "记忆设置已保存。", "memoryModels.saveFailed": "保存失败。你的改动仍在,请重试。", "dash.shadowCallIntercept": "影子调用拦截", - "dash.shadowCallInterceptHint": "拦截 Codex 应用的后台辅助调用({models}:标题生成、提交消息)并重定向到所选模型。", - "dash.shadowCallWarning": "⚠ 启用后,所有对 {models} 的请求都将被替换为所选模型。", + "shadowCall.memoryLabel": "记忆: Terra", + "dash.shadowCallInterceptHint": "拦截 Codex 应用的后台辅助调用({models}:标题生成、提交消息、技能编排)并重定向到所选模型。记忆整合由 Terra 运行,并通过单独的记忆路由控制。", + "dash.shadowCallWarning": "⚠ 启用后,所有对 {models} 的请求都将被替换为所选模型。Terra(记忆整合)通过单独的记忆路由处理。", "dash.shadowCallOriginal": "原始", "dash.shadowCallModel": "替代模型", - "dash.shadowCallTooltip": "Codex 应用会在后台调用辅助模型来生成线程标题、提交消息以及进行技能编排。该模型随客户端版本变化,因此 opencodex 会同时拦截这些模型:{models}。启用此选项可将这些调用重定向到您选择的模型。", + "dash.shadowCallTooltip": "Codex 应用会在后台调用辅助模型来生成线程标题、提交消息以及进行技能编排。该模型随客户端版本变化,因此 opencodex 会同时拦截这些模型:{models}。启用此选项可将这些调用重定向到您选择的模型。记忆整合使用 Terra,并由单独的记忆路由面板控制;此开关不包含它。", "models.shadowCallIntercept": "影子调用拦截", - "models.shadowCallInterceptHint": "拦截 Codex 应用的后台辅助调用({models})并重定向到所选模型。", + "models.shadowCallInterceptHint": "拦截 Codex 应用的后台辅助调用({models}:标题生成、提交消息、技能编排)并重定向到所选模型。记忆整合(Terra)通过单独的记忆路由处理。", "models.autoReviewOverride": "自动审查覆盖", "models.autoReviewOverrideHint": "指定 Codex 自动审查(审批审查模型)使用的模型。同步目录时应用于所有行;提供方级的 autoReviewModel 在这些行上仍然优先。", "models.autoReviewPending": "待定", diff --git a/gui/src/pages/Models.tsx b/gui/src/pages/Models.tsx index 96ddcc9e432..6f172b0727f 100644 --- a/gui/src/pages/Models.tsx +++ b/gui/src/pages/Models.tsx @@ -90,7 +90,7 @@ import { DiscoveryDependencyHint, EmptyProviderHint } from "./models-provider-hi import SubagentSurfaceWarningModal from "../components/SubagentSurfaceWarningModal"; import { SUBAGENT_SURFACE_GUIDE_URL, readSubagentSurfaceAdvisory } from "../subagent-surface"; import { shadowCallModelOptions } from "./dashboard-shared"; -import { shadowSourceModelBadge, shadowSourceModelLabel } from "./shadow-call-source"; +import { shadowBackgroundModelBadge, shadowSourceModelLabel } from "./shadow-call-source"; import { ModelCatalogDelivery } from "./models-catalog-state"; import { CustomModelsSummary, InfoHint, ModelsSettingsPanel, SettingsRow } from "./models-settings-panel"; import { modelsSettingsSummary } from "./models-settings-summary"; @@ -1971,7 +1971,7 @@ export default function Models({ apiBase, restartEpoch = 0, connected = false, c ⓘ} busy={!shadowCall}> - {t("models.shadowCallOriginal", { models: shadowSourceModelBadge(shadowCall?.sourceModels) })} + {t("models.shadowCallOriginal", { models: shadowBackgroundModelBadge(shadowCall?.sourceModels, t("shadowCall.memoryLabel")) })} void saveShadowCall({ enabled: !shadowCall?.enabled })} disabled={!shadowCall || shadowCallSaving} label={t("models.shadowCallIntercept")} />