From fde8f06280ef90402fa5a2ef204b639190b81a49 Mon Sep 17 00:00:00 2001 From: luSkyl <49743010+luSkyl@users.noreply.github.com> Date: Wed, 20 May 2026 20:52:00 +0800 Subject: [PATCH] fix: detect plugin entry in new Codex navigation --- assets/inject/renderer-inject.js | 6 ++++-- crates/codex-plus-core/tests/cdp_bridge.rs | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/assets/inject/renderer-inject.js b/assets/inject/renderer-inject.js index fb3db2d..45f44d4 100644 --- a/assets/inject/renderer-inject.js +++ b/assets/inject/renderer-inject.js @@ -91,7 +91,7 @@ nativeMenuBar: "[class*=\"ms-auto\"][class*=\"flex\"][class*=\"items-center\"]", archiveNav: 'button[aria-label="已归档对话"], button[aria-label="Archived conversations"]', disabledInstallButton: 'button:disabled, button[aria-disabled="true"], [role="button"][aria-disabled="true"], button[data-disabled], [role="button"][data-disabled], button.cursor-not-allowed, [role="button"].cursor-not-allowed, button.pointer-events-none, [role="button"].pointer-events-none', - pluginNavButton: 'nav[role="navigation"] button.h-token-nav-row.w-full', + pluginNavButton: 'button, [role="button"]', pluginSvgPath: 'svg path[d^="M7.94562 14.0277"]', }; @@ -1377,7 +1377,9 @@ } function pluginEntryButton() { - const byIcon = document.querySelector(`${selectors.pluginNavButton} ${selectors.pluginSvgPath}`)?.closest("button"); + const byIcon = Array.from(document.querySelectorAll(selectors.pluginSvgPath)) + .map((path) => path.closest(selectors.pluginNavButton)) + .find((button) => button && /^(插件|Plugins)(\s+-\s+.*)?$/i.test((button.textContent || "").trim())); if (byIcon) return byIcon; return Array.from(document.querySelectorAll(selectors.pluginNavButton)) .find((button) => /^(插件|Plugins)(\s+-\s+.*)?$/i.test((button.textContent || "").trim())) || null; diff --git a/crates/codex-plus-core/tests/cdp_bridge.rs b/crates/codex-plus-core/tests/cdp_bridge.rs index 396853f..8c1853a 100644 --- a/crates/codex-plus-core/tests/cdp_bridge.rs +++ b/crates/codex-plus-core/tests/cdp_bridge.rs @@ -98,6 +98,15 @@ fn injection_script_skips_plugin_patch_work_in_relay_mode() { assert!(script.contains("clearPluginPatchArtifacts()")); } +#[test] +fn injection_script_detects_plugin_entry_without_legacy_nav_class() { + let script = assets::injection_script(57321); + + assert!(script.contains("pluginNavButton: 'button, [role=\"button\"]'")); + assert!(script.contains("path.closest(selectors.pluginNavButton)")); + assert!(!script.contains("button.h-token-nav-row.w-full")); +} + #[test] fn injection_script_unlocks_nested_disabled_plugin_install_buttons() { let script = assets::injection_script(57321);