Pārlūkot izejas kodu

feat(codex): 运行时面板展示桥接状态(P4)

已应用行加「桥接」标记(title 说明转换含义);运行状态面板加桥接行(上游真实地址);前端类型同步 bridged/bridge 字段。验证:pnpm type:check 89 条基线/本改动 0 报错;pnpm build exit=0。
cc 2 nedēļas atpakaļ
vecāks
revīzija
0d765ae344

+ 20 - 0
ai-electron/frontend/src/ai/views/aiPlugin/index.vue

@@ -174,6 +174,12 @@
             <b class="ai-plugin__mono">{{ status?.defaultModel || '未配置' }}</b>
             <span>Provider</span>
             <b class="ai-plugin__mono">{{ status?.providerId || '—' }}</b>
+            <template v-if="status?.bridge?.running">
+              <span>桥接</span>
+              <b class="ai-plugin__mono ai-plugin__ellipsis" :title="status.bridge.upstream || ''">
+                {{ status.bridge.upstream || '运行中' }}
+              </b>
+            </template>
             <span>CODEX_HOME</span>
             <b class="ai-plugin__mono ai-plugin__ellipsis" :title="status?.codexHome">
               {{ status?.codexHome || '—' }}
@@ -252,6 +258,9 @@
             已应用:<b>{{ status.applied.name || status.applied.model }}</b>
             <span class="ai-plugin__mono">{{ status.applied.model }}</span>
             <span class="ai-plugin__mono">{{ status.applied.baseUrl || status.applied.builtinProvider }}</span>
+            <span v-if="status.applied.bridged" class="ai-plugin__bridge-chip" title="端点只提供 /chat/completions,由内置桥接转换为 Responses 协议">
+              桥接
+            </span>
             <span class="ai-plugin__sub">{{ status.applied.appliedAt }}</span>
           </div>
           <div class="ai-plugin__note">
@@ -1230,6 +1239,17 @@
       color: var(--ai-text-2);
     }
 
+    /* chat-only 端点经内置桥接接入的标记 */
+    &__bridge-chip {
+      padding: 1px 8px;
+      font-size: 11px;
+      color: var(--ai-primary);
+      background: var(--ai-primary-soft);
+      border: 1px solid var(--ai-primary);
+      border-radius: 999px;
+      cursor: help;
+    }
+
     &__note {
       margin-top: var(--ai-sp-2);
       font-size: 12px;

+ 4 - 0
ai-electron/frontend/src/codex/api/codexApi.ts

@@ -99,6 +99,8 @@ export interface AppliedProviderInfo {
   builtinProvider: string | null;
   name: string | null;
   appliedAt: string;
+  /** true 表示经内置桥接转换(chat-only 端点);此时 baseUrl 是上游真实地址 */
+  bridged?: boolean;
 }
 
 export interface CodexStatus {
@@ -112,6 +114,8 @@ export interface CodexStatus {
   degraded: boolean;
   error: string | null;
   applied: AppliedProviderInfo | null;
+  /** 内置 Responses→Chat 桥接运行状态;未桥接为 null */
+  bridge?: { running: boolean; upstream: string | null } | null;
 }
 
 export function codexPing(): Promise<CodexPingResult> {