File tree Expand file tree Collapse file tree
docs-linhay/spaces/20260511-codex-account-list-tab
frontend/src/features/codex Expand file tree Collapse file tree Original file line number Diff line number Diff line change 10010014 . 后端新增 ` ProbeCodexAccountRouting ` :使用 relay API key 向 sidecar ` /v1/chat/completions ` 发送最小测试请求,通过请求前后 ` auth-files ` 与 ` api-key-usage ` 的 recent request 差量识别命中的 auth-file、codex-api-key 或 openai-compatible provider。
10110115 . OAuth/auth-file 账号详情的模型区域已从只读兼容模型改为可编辑模型映射:加载时合并 ` GetAuthFileModels ` 与 ` ListOAuthModelAliases(provider) ` ,保存时调用 ` UpdateOAuthModelAliases ` 写回 ` oauth-model-alias ` ;该配置按 provider/channel 生效,同一 ` codex ` OAuth 通道共享映射。
10210216 . 路由策略调试区按 Gemini 评审方案重构为“控制台 + 内联策略编辑”:默认先展示测试模型、测试按钮、候选顺序和最近路由命中;点击 ` 编辑策略 ` 后不再渲染第二套账号清单,而是在既有请求顺序账号行内直接显示默认/允许/排除与策略上移/下移控件;账号列表行同步显示 ` 路由 NN ` 、` 跳过 ` 和策略模式,避免重复账号列表打断配置路径。
103+ 17 . 请求顺序 section 去掉外层重卡阴影,改为 ` bg-surface ` 承载、` bg-main ` 标题/消息带和内层账号卡的层级组合,减少“卡中卡”观感,但不改账号行本身的卡片交互与排序逻辑。
103104
104105## 验证记录
1051061 . ` npm run typecheck `
Original file line number Diff line number Diff line change @@ -581,6 +581,27 @@ test('Codex account order cards reuse the account attribution card and keep cust
581581 assert . match ( source , / C o d e x A c c o u n t S p e c i a l A c t i o n B a r / ) ;
582582} ) ;
583583
584+ test ( 'Codex account order section uses a lighter shell instead of a nested card shell' , async ( ) => {
585+ const source = await readFile ( new URL ( './components/CodexAccountOrderSection.tsx' , import . meta. url ) , 'utf8' ) ;
586+
587+ assert . match (
588+ source ,
589+ / C O D E X _ A C C O U N T _ O R D E R _ S E C T I O N _ S H E L L _ C L A S S = \n ' o v e r f l o w - h i d d e n b o r d e r - 2 b o r d e r - \[ v a r \( - - b o r d e r - c o l o r \) \] b g - \[ v a r \( - - b g - s u r f a c e \) \] ' ; / ,
590+ ) ;
591+ assert . match (
592+ source ,
593+ / C O D E X _ A C C O U N T _ O R D E R _ S E C T I O N _ H E A D E R _ C L A S S = ' b o r d e r - b - 2 b o r d e r - \[ v a r \( - - b o r d e r - c o l o r \) \] b g - \[ v a r \( - - b g - m a i n \) \] x l : f l e x x l : i t e m s - s t r e t c h ' ; / ,
594+ ) ;
595+ assert . match (
596+ source ,
597+ / C O D E X _ A C C O U N T _ O R D E R _ S E C T I O N _ M E S S A G E _ C L A S S = \n ' b o r d e r - b - 2 b o r d e r - \[ v a r \( - - b o r d e r - c o l o r \) \] b g - \[ v a r \( - - b g - m a i n \) \] p x - 5 p y - 3 f o n t - m o n o t e x t - \[ l e n g t h : v a r \( - - f o n t - s i z e - u i - s m \) \] f o n t - b l a c k u p p e r c a s e t r a c k i n g - w i d e t e x t - \[ v a r \( - - t e x t - p r i m a r y \) \] ' ; / ,
598+ ) ;
599+ assert . doesNotMatch (
600+ source ,
601+ / < s e c t i o n c l a s s N a m e = " b o r d e r - \[ 3 p x \] b o r d e r - \[ v a r \( - - b o r d e r - c o l o r \) \] b g - \[ v a r \( - - b g - m a i n \) \] s h a d o w - \[ 8 p x _ 8 p x _ 0 _ v a r \( - - s h a d o w - c o l o r \) \] " > / ,
602+ ) ;
603+ } ) ;
604+
584605test ( 'Codex account order row exposes direct top and bottom reorder actions' , async ( ) => {
585606 const source = await readFile ( new URL ( './components/CodexAccountOrderRow.tsx' , import . meta. url ) , 'utf8' ) ;
586607
Original file line number Diff line number Diff line change @@ -30,6 +30,12 @@ function EmptyState({ children }: { children: string }) {
3030 ) ;
3131}
3232
33+ const CODEX_ACCOUNT_ORDER_SECTION_SHELL_CLASS =
34+ 'overflow-hidden border-2 border-[var(--border-color)] bg-[var(--bg-surface)]' ;
35+ const CODEX_ACCOUNT_ORDER_SECTION_HEADER_CLASS = 'border-b-2 border-[var(--border-color)] bg-[var(--bg-main)] xl:flex xl:items-stretch' ;
36+ const CODEX_ACCOUNT_ORDER_SECTION_MESSAGE_CLASS =
37+ 'border-b-2 border-[var(--border-color)] bg-[var(--bg-main)] px-5 py-3 font-mono text-[length:var(--font-size-ui-sm)] font-black uppercase tracking-wide text-[var(--text-primary)]' ;
38+
3339export function CodexAccountOrderSection ( {
3440 title,
3541 hint,
@@ -220,8 +226,8 @@ export function CodexAccountOrderSection({
220226 }
221227
222228 return (
223- < section className = "border-[3px] border-[var(--border-color)] bg-[var(--bg-main)] shadow-[8px_8px_0_var(--shadow-color)]" >
224- < header className = "border-b-[3px] border-[var(--border-color)] bg-[var(--bg-surface)] xl:flex xl:items-stretch" >
229+ < section className = { CODEX_ACCOUNT_ORDER_SECTION_SHELL_CLASS } >
230+ < header className = { CODEX_ACCOUNT_ORDER_SECTION_HEADER_CLASS } >
225231 < div className = "px-5 py-4 xl:min-w-0 xl:flex-1" >
226232 < h2 className = "text-xl font-black uppercase leading-none tracking-normal text-[var(--text-primary)]" >
227233 { title }
@@ -322,7 +328,7 @@ export function CodexAccountOrderSection({
322328 </ header >
323329
324330 { message ? (
325- < div className = "border-b-2 border-[var(--border-color)] bg-[var(--bg-main)] px-5 py-3 font-mono text-[length:var(--font-size-ui-sm)] font-black uppercase tracking-wide text-[var(--text-primary)]" >
331+ < div className = { CODEX_ACCOUNT_ORDER_SECTION_MESSAGE_CLASS } >
326332 { message }
327333 </ div >
328334 ) : null }
You can’t perform that action at this time.
0 commit comments