00 �%6  ��% h�6(0` $U��Vw؋Wv؊Yz�XxنWw��Ww��WwعWx��Ww��Ww��Vw��UU�Xv�NUu�WwٻWw��Ww��Ww���Im�Xu�=Ux�3WwٟWw��Wv��Uw�Xw؃Ww��Ww��Ww��Qy�WvٛWw��Ww��Xv�nVvڈWw��Ww��Ww��Yz�Vw�MWw��Ww��Ww��Yw�+Vx�SWw��Ww��Ww��Vw�|[��Ww��Ww��Ww��Ww��Pp�\z�Ww��Ww��Ww��Xv�C[v�Ww��Ww��Ww��Ww��Xv�]Wu�2Ww��Ww��Ww��Wx��ff�Ww��Ww��Ww��Wv�[�WwپWw��Ww��Ww��Ww��`��Vx�hVx�sXx�`Ww��Ww��Ww��WwهVxڱWw��Ww��Vx�sWw�iWw��Ww��Ww��Ww��Wv�8Uw�VwګWw��Ww��WwږWw��Ww��Ww��Vw�GXv�}Ww��Ww��Vw؋Uw�Ww��Ww��Ww��Ww��Wv؊Wu�2Ww��Ww��Ww��Vw�|Xv�cVwٮWwٍWu�2U��Xv��Ww��Ww��Vw��\z�Vy�JWw��Ww��Wx٢VvٷWw��Ww��Ww��Ww��`��Wx�dWw��Ww��Ww��Xx�qUU�Ww��Ww��Ww��Ww��Vvڈ`��U{�Ww��Ww��Ww��Wwټ���]t�Ww��Ww��VwٺWw�^Ww��Ww��Ww��Ww��Wv�8�WwهWw��Ww��Ww��Wv�aWw��Ww��Ww��Ww��Ww��Ww��Uw�<Vw�>Ww��Ww��Ww��Vw�|Ww��Ww��Ww��Uw�Ww��Ww��Ww��Ww��Vw؋Uq� WwڪWw��Ww��Ww��Wv�RUq�Ww٧Ww��Ww��Ww��Ww��Ww��WxٓU�� Xx�wWw��Ww��Ww��Uw�<Xw��Ww��Ww��WwٍWw��Ww��Ww��Ww��Ut�!Xw��Ww��Ww��Ww��Vx�DXx�WWw��Ww��Ww��Ww��Ww��Ww��Wx�F�WwزWw��Ww��Ww��Zx�XwڝWw��Ww��Uw�-Ww��Ww��Ww��Ww��Vx�hWw��Ww��Ww��Ww��Ux�3Xv�VwګWw��Ww��Ww��Ww��Ww��Ww؞Zx�Zx�Ww��Ww��Ww��Ww٭Vx�sWw��Ww��Ww��Ww��Ww��Ww��Ww��Ww��Ww��Ww��Ww��Wu�#Uw�Ww��Ww��Ww��ff�Uw�Ww��Ww��Ww��Ww��Ww��Ww��Ww��Ww�/Ww؞Ww��Ww��Ww��Ww��Ww��Ww��WwږIm�Ww�OWw��Ww��Ww��Ww��Ww��U�� Zx�"Ww��Ww��Ww��Uw�-Uw�-Ww��Ww��Ww��Ww��Ww��Ww��Ww��Uw�]t�Ww��Ww��Ww��Ww��Ww��Ww��Xv�]ff�Ww��Ww��Ww��Ww��Ww��Vx�sIm�Ww��Ww��Ww��Ww�^Vw�VWw��Ww��Ww��Ww��Ww��Ww��Vxڱ�Uw�<�~88��8a���0C��� �����!���a���0?���~���������������� ���������x��?���?��� ����A������������������?���~������������������������?�����?�������������������������( @ Ys�WvٌWw��Xv�]Ww��Ww��WvٛYx�HWw��Uy�9WwٶWw��WxٳWvٌWx��Xx�1Xv�CWw��Ww��Ww�/XxـWw��Ww��Vw�VWw��Ww��Xv�NVxؑWw��Ww��Ut�!Wu�LWw��Vw��X{�Ww��Ww��Ww��]t�Nv� Xv�Tff�Xw��Ww��Xw��U��Uu�Ww��Ww���VvٷWw��Ww��Vw�\Ww�/Ww��Ww��Xv�TWx�dYz�\z�Vw��Ww��WvٌVw��Ww��Ys�Ww�^Ww��Ww��VxڱWx�dWw��Xw��Uv�6�Ww��Ww��Xw��Xv�]Vy�;Ww��Ww��Xw�KWwٰWw��Yw�+Uy�Ww��Ww��Ww��U{�Wv؊Ww��Ww��Yw�+Vx�hWw��Ww��Ww��WvٵX{�Wv�pWw��Ww��U{�VvڈWw��Xv�CXwٚWw��Ww��Ww�gVwٮWw��Ww��Ut�!Uv�'Xw��Ww��Ww��Ww��Vx�h���WwجWw��WwپWx�dWw��WxٓWw��Ww��Ww��Ww��Ww��Xw��Yz�UU�Vw�eWw��Ww��Ww��WwڿWu�2Ww��Ww��VwٮWw��Ww��Ww��Ww��Ww��Ww��VwٺNv� Im�Uw� (() => { // ========================= // 通用:DOM 就绪 & 观察器 // ========================= function onReady(fn) { if (document.readyState === "complete" || document.readyState === "interactive") { requestAnimationFrame(fn); } else { document.addEventListener("DOMContentLoaded", () => requestAnimationFrame(fn), { once: true }); } } let raf = 0; function schedule(fn) { if (raf) cancelAnimationFrame(raf); raf = requestAnimationFrame(() => { raf = 0; fn(); }); } // ========================= // 配置:侧栏 & 菜单 // ========================= const NAV_CFG = { keep: [ { href: "/recents", aria: "Chats", newText: "历史对话" }, { href: "/new", aria: "New chat", newText: "新建对话" }, ], hide: [ { href: "/projects", aria: "Projects" }, { href: "/artifacts", aria: "Artifacts" }, { href: "/code", aria: "Code" }, ], }; const MENU_CFG = { emailText: "Claude Nexus 共享账号", logoutTooltip: "登出账号", logoutMatch: /(log\s*out|logout|退出|登出)/i }; const MODEL_MENU_CFG = { hideLabels: ["more models", "more model", "更多模型"] }; // ========================= // 工具函数 // ========================= function qAByHref(href) { return Array.from(document.querySelectorAll('a[href="' + href + '"]')); } function replaceVisibleText(el, from, to) { if (!el) return; const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, { acceptNode(node) { const t = node.nodeValue?.trim(); if (!t) return NodeFilter.FILTER_REJECT; return t === from ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; } }); const nodes = []; while (walker.nextNode()) nodes.push(walker.currentNode); nodes.forEach(n => { n.nodeValue = n.nodeValue.replace(from, to); }); } function hideContainerOf(anchor) { const container = anchor.closest('.relative.group,[data-state],[role="menuitem"]') || anchor.parentElement || anchor; container.style.display = "none"; return container; } function hideSeparatorBefore(node) { if (!node) return; const prev = node.previousElementSibling; if (prev && prev.getAttribute('role') === 'separator') { prev.remove(); } } function keepOnlySpecified(keptAnchors) { const sidebar = document.querySelector('nav, [role="navigation"], .flex.flex-col') || document.body; const allAnchors = Array.from(sidebar.querySelectorAll('a[href]')); const keepSet = new Set(keptAnchors); allAnchors.forEach(a => { if (!keepSet.has(a)) { const href = a.getAttribute('href') || ''; const aria = a.getAttribute('aria-label') || ''; const isTarget = href === '/recents' || href === '/new' || href === '/projects' || href === '/artifacts' || href === '/code' || aria === 'Chats' || aria === 'New chat' || aria === 'Projects' || aria === 'Artifacts' || aria === 'Code'; if (isTarget) hideContainerOf(a); } }); } function renameAndAria(anchor, oldLabel, newLabel) { try { replaceVisibleText(anchor, oldLabel, newLabel); const prev = anchor.getAttribute('aria-label'); if (prev && prev.trim() === oldLabel) anchor.setAttribute('aria-label', newLabel); anchor.querySelectorAll('[aria-label]').forEach(n => { const v = n.getAttribute('aria-label'); if (v && v.trim() === oldLabel) n.setAttribute('aria-label', newLabel); }); // 兜底:直接改常见文本块 anchor.querySelectorAll('span,div').forEach(b => { if (b.childElementCount === 0 && (b.textContent || '').trim() === oldLabel) { b.textContent = newLabel; } }); } catch (e) { console.warn('rename failed', e); } } function getDeepText(el) { return (el?.textContent || "").trim(); } function waitFor(selector, { root = document, timeout = 15000 } = {}) { return new Promise((resolve, reject) => { const found = root.querySelector(selector); if (found) return resolve(found); const obs = new MutationObserver(() => { const el = root.querySelector(selector); if (el) { obs.disconnect(); resolve(el); } }); obs.observe(root, { childList: true, subtree: true }); if (timeout) { setTimeout(() => { obs.disconnect(); reject(new Error('Timeout waiting for: ' + selector)); }, timeout); } }); } // ========================= // 侧栏:保留/改名/隐藏 // ========================= function patchSidebar() { // 处理保留项 const keepAnchors = []; NAV_CFG.keep.forEach(({ href, aria, newText }) => { const list = qAByHref(href); list.forEach(a => { renameAndAria(a, aria, newText); keepAnchors.push(a); const container = a.closest('.relative.group,[data-state],[role="menuitem"]') || a; container.style.removeProperty('display'); }); }); // 隐藏不需要的项 NAV_CFG.hide.forEach(({ href }) => { qAByHref(href).forEach(hideContainerOf); }); // 再次全局只保留 if (keepAnchors.length) { keepOnlySpecified(keepAnchors); } } // ========================= // 菜单:邮箱文本/只留登出/提示 // ========================= function findEmailDisplay(menuEl) { const blocks = menuEl.querySelectorAll('*:not(script):not(style)'); for (const node of blocks) { const t = getDeepText(node); if (t.includes("@") && t.length < 80) { const rectMenu = menuEl.getBoundingClientRect(); const rectNode = node.getBoundingClientRect(); if (rectNode.top - rectMenu.top < 100) return node; } } return menuEl.querySelector('[class*="truncate"],[class*="text-"][class*="500"]'); } function findLogoutItem(menuEl) { let a = menuEl.querySelector('a[href$="/logout"], a[href*="/logout"]'); if (a) return a; const items = menuEl.querySelectorAll('[role="menuitem"], a[role="menuitem"], a'); for (const it of items) { if (MENU_CFG.logoutMatch.test(getDeepText(it))) { return it.closest('a') || it; } } return null; } function setEmailText(emailNode) { if (!emailNode) return; if (emailNode.firstChild && emailNode.childNodes.length === 1 && emailNode.firstChild.nodeType === Node.TEXT_NODE) { emailNode.firstChild.nodeValue = MENU_CFG.emailText; } else { emailNode.textContent = MENU_CFG.emailText; } } function keepOnlyLogout(menuEl, logoutEl) { const allItems = menuEl.querySelectorAll('[role="menuitem"], a[role="menuitem"], a[href], [role="separator"]'); allItems.forEach(it => { if (it === logoutEl || it.contains(logoutEl)) return; it.remove(); }); menuEl.querySelectorAll('[role="separator"]').forEach(n => n.remove()); } function setLogoutTooltip(logoutEl) { logoutEl.setAttribute('title', MENU_CFG.logoutTooltip); logoutEl.setAttribute('aria-label', MENU_CFG.logoutTooltip); } function hideModelMenuExtras() { const nodes = document.querySelectorAll('[role="menuitem"], [data-radix-collection-item]'); nodes.forEach(node => { if (node.__soruxHiddenMoreModels__) return; const rawText = getDeepText(node); if (!rawText) return; const normalized = rawText.toLowerCase(); if (MODEL_MENU_CFG.hideLabels.some(label => normalized === label || rawText === label)) { const container = hideContainerOf(node); hideSeparatorBefore(container); node.__soruxHiddenMoreModels__ = true; } }); } async function patchMenuOnce() { try { const menu = await waitFor('[role="menu"][aria-orientation="vertical"]'); if (menu.__patched_menu__) return; // 避免重复 const logoutItem = findLogoutItem(menu); if (!logoutItem) return; // 非账号菜单,避免误改其它列表 menu.__patched_menu__ = true; const emailNode = findEmailDisplay(menu); if (emailNode) { setEmailText(emailNode); } keepOnlyLogout(menu, logoutItem); setLogoutTooltip(logoutItem); } catch (e) { // 等不到菜单就算了,稍后 MutationObserver 会再次尝试 } } function observeMenuRebuild() { const bodyObs = new MutationObserver(() => { hideModelMenuExtras(); const menu = document.querySelector('[role="menu"][aria-orientation="vertical"]'); if (menu && !menu.__patched_menu__) { schedule(patchMenuOnce); } }); hideModelMenuExtras(); bodyObs.observe(document.body, { childList: true, subtree: true }); } // ========================= // 入口 // ========================= onReady(() => { // 侧栏:初次执行 + 监听后续变化 schedule(patchSidebar); const navObs = new MutationObserver(() => schedule(patchSidebar)); navObs.observe(document.body, { childList: true, subtree: true }); // 菜单:初次尝试 + 监听重建 schedule(patchMenuOnce); observeMenuRebuild(); }); })();