Skip to content

fix(inject): 适配新版 Codex 输入框额度耗尽横幅并修复切换闪烁 - #2229

Draft
Rat0323 wants to merge 7 commits into
BigPizzaV3:mainfrom
Rat0323:fix/composer-usage-alert
Draft

Rat0323 wants to merge 7 commits into
BigPizzaV3:mainfrom
Rat0323:fix/composer-usage-alert

Conversation

@Rat0323

@Rat0323 Rat0323 commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

变更背景

最新版 OpenAI Codex 桌面应用将额度耗尽提示卡片从侧边栏迁移到了输入框上方([data-codex-composer-root] aside)。
原有的 officialUsageAlertCards() 仅定位侧边栏元素,导致“关闭官方低额度提示”在新版中失效。同时,在切换会话时,由于组件挂载与 DOM 扫描的时序差,容易出现横幅瞬时闪烁。

修复内容

  1. 输入框横幅特征识别renderer-inject.js):
    • 新增 composerUsageAlertBanners(),定位 [data-codex-composer-root] aside
    • 提取标题并基于官方多语言文案进行精准正则匹配(支持直引号/弯引号、换行空格归一化、中英文常见用量/额度耗尽提示),并补充带升级链接的特征兜底识别;
    • 优化 officialUsageAlertContainer(),严格限定父容器提取条件(排除 composer 根容器与核心表单结构),消除隐藏后的外层内边距留白。
  2. 安全防闪烁样式增强renderer-inject.js):
    • 采用特征增强型 CSS 预隐藏规则,精确限定在包含账单/升级链接的横幅:
      body.codex-plus-hide-usage-alert [data-codex-composer-root] aside:has(a[href*="billing" i], a[href*="upgrade" i], [data-testid*="upgrade" i], [data-testid*="billing" i]) { display: none !important; }
      确保网络错误、文件上传报错等普通 composer 通知绝不会被误伤;
    • refreshOfficialUsageAlertVisibility() 重构为增量更新模式,避免每轮高频扫描重复增删 dataset 导致的无谓 DOM 属性扰动。
  3. 测试覆盖与安全断言renderer-inject.test.ts):
    • 修复原有断言中的 querySelector 期望调用序列,使已有测试保持绿灯;
    • 新增针对中文横幅、多行排版英文横幅、升级链接兜底横幅的匹配测试;
    • 增加断网提示、文件上传失败提示不被误伤的隔离测试;
    • 增加负向断言,防止回归到泛化标题匹配的危险选择器。

测试验证

  • apps/codex-plus-manager: npm test 通过(235 passed, 0 failed);
  • crates/codex-plus-core: cargo test --test cdp_bridge 通过(159 passed, 0 failed)。

- 适配新版将额度耗尽提示移至 [data-codex-composer-root] aside 的 DOM 结构
- 增加 composerUsageAlertBanners,支持常见中英、繁体额度文案精准匹配
- 优化 officialUsageAlertContainer 提取单一子元素父容器,避免留白
- 在 installStyle 中增加局部 :has 预隐藏规则,解决切换会话瞬间闪烁
- 更新与补充 renderer-inject.test.ts 单元测试,确保回归测试通过
- 精确限制 CSS 防闪烁选择器至 billing/upgrade 特征,避免误伤 composer 其他普通通知
- 增强正则对多行排版、空白符规范化与常见限额提示的覆盖能力,并补充升级操作兜底
- 加固 officialUsageAlertContainer 容器判定,防止意外隐藏根级或表单容器
- 将 refreshOfficialUsageAlertVisibility 改为增量更新,减少高频 scan 下的 DOM 扰动
- 扩展 renderer-inject.test.ts,增加防误伤负向断言与多语言用例
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant