// ==UserScript== // @name Ophel Atlas - AI 对话结构化与导航工具, 全能AI助手 (支持 Gemini, ChatGPT, Claude, Grok, AI Studio) // @name:zh-CN Ophel Atlas - AI 对话结构化与导航工具, 全能AI助手 (支持 Gemini, ChatGPT, Claude, Grok, AI Studio) // @name:zh-TW Ophel Atlas - AI 對話結構化與導覽工具, 全能AI助手 (支持 Gemini, ChatGPT, Claude, Grok, AI Studio) // @name:en Ophel Atlas - AI Chat Organizer & Navigator (Support Gemini, ChatGPT, Claude, Grok, AI Studio) // @name:de Ophel Atlas - KI-Chat-Organizer & Navigator (Support Gemini, ChatGPT, Claude, Grok, AI Studio) // @name:es Ophel Atlas - Organizador de Chats de IA (Support Gemini, ChatGPT, Claude, Grok, AI Studio) // @name:fr Ophel Atlas - Organisateur de Chat IA (Support Gemini, ChatGPT, Claude, Grok, AI Studio) // @name:ja Ophel Atlas - AI対話の構造化とナビゲーションツール (Support Gemini, ChatGPT, Claude, Grok, AI Studio) // @name:ko Ophel Atlas - AI 채팅 정리 및 탐색 도구 (Support Gemini, ChatGPT, Claude, Grok, AI Studio) // @name:pt-BR Ophel Atlas - Organizador de Chat de IA (Support Gemini, ChatGPT, Claude, Grok, AI Studio) // @name:ru Ophel Atlas - Органайзер AI-чатов (Support Gemini, ChatGPT, Claude, Grok, AI Studio) // @namespace https://github.com/urzeye/ophel // @version 1.0.10 // @author urzeye // @description 将 AI 对话转化为可阅读、可导航、可复用的知识内容。通过实时大纲、会话文件夹与 Prompt 词库,让对话告别无限滚动,成为可组织、可沉淀的工作流,适用于高频使用 AI 的学习与工作场景。 | 功能: 实时大纲导航, 会话管理(文件夹/置顶/导出), 提示词库, 沉浸式宽屏/全屏/滚动锁定, 主题切换, Markdown渲染修复, LaTeX公式/表格复制, WebDAV同步, 隐私模式, 快捷键, 标签页重命名, 阅读历史恢复, Banana去水印 | Turn AI chats into readable, navigable knowledge. Use outlines, folders, and prompts to organize your workflow and stop scrolling. | Features: Real-time Outline, Conversation Manager (Folders/Pin/Export), Prompt Library, Immersion/Widescreen/Scroll Lock, Theme Switcher // @description:zh-CN 将 AI 对话转化为可阅读、可导航、可复用的知识内容。通过实时大纲、会话文件夹与 Prompt 词库,让对话告别无限滚动,成为可组织、可沉淀的工作流,适用于高频使用 AI 的学习与工作场景。 | 功能: 实时大纲导航, 会话管理(文件夹/置顶/导出), 提示词库, 沉浸式宽屏/全屏/滚动锁定, 主题切换, Markdown渲染修复, LaTeX公式/表格复制, WebDAV同步, 隐私模式, 快捷键, 标签页重命名, 阅读历史恢复, Banana去水印 // @description:zh-TW 將 AI 對話轉化為可閱讀、可導覽、可複用的知識內容。透過即時大綱、對話資料夾與 Prompt 詞庫,讓對話告別無限捲動,成為可組織、可沉澱的工作流,適用於高頻使用 AI 的學習與工作場景。 | Features: Real-time Outline, Conversation Manager (Folders/Pin/Export), Prompt Library, Immersion/Widescreen/Scroll Lock, Theme Switcher, Markdown Fix, LaTeX/Table Copy, WebDAV Sync, Privacy, Shortcuts, Tab Renamer, History Restore, Watermark Remover // @description:en Turn AI chats into readable, navigable knowledge. Use outlines, folders, and prompts to organize your workflow and stop scrolling. | Features: Real-time Outline, Conversation Manager (Folders/Pin/Export), Prompt Library, Immersion/Widescreen/Scroll Lock, Theme Switcher, Markdown Fix, LaTeX/Table Copy, WebDAV Sync, Privacy, Shortcuts, Tab Renamer, History Restore, Watermark Remover // @description:de Machen Sie KI-Chats zu lesbarem Wissen. Nutzen Sie Gliederungen, Ordner und Prompts für einen besseren Workflow ohne Scrollen. | Features: Real-time Outline, Conversation Manager (Folders/Pin/Export), Prompt Library, Immersion/Widescreen/Scroll Lock, Theme Switcher, Markdown Fix, LaTeX/Table Copy, WebDAV Sync, Privacy, Shortcuts, Tab Renamer, History Restore, Watermark Remover // @description:es Transforma chats de IA en conocimiento útil. Usa esquemas, carpetas y prompts para organizar tu trabajo y evitar el scroll infinito. | Features: Real-time Outline, Conversation Manager (Folders/Pin/Export), Prompt Library, Immersion/Widescreen/Scroll Lock, Theme Switcher, Markdown Fix, LaTeX/Table Copy, WebDAV Sync, Privacy, Shortcuts, Tab Renamer, History Restore, Watermark Remover // @description:fr Convertissez les chats IA en savoir lisible. Plans, dossiers et prompts pour organiser votre travail et éviter le défilement. | Features: Real-time Outline, Conversation Manager (Folders/Pin/Export), Prompt Library, Immersion/Widescreen/Scroll Lock, Theme Switcher, Markdown Fix, LaTeX/Table Copy, WebDAV Sync, Privacy, Shortcuts, Tab Renamer, History Restore, Watermark Remover // @description:ja AIチャットを読みやすく、ナビゲート可能な知識へ変換。アウトライン、会話フォルダ、プロンプト集で無限スクロールを解消。整理・蓄積可能なワークフローを実現し、AIを活用する学習や業務に最適です。 | Features: Real-time Outline, Conversation Manager (Folders/Pin/Export), Prompt Library, Immersion/Widescreen/Scroll Lock, Theme Switcher, Markdown Fix, LaTeX/Table Copy, WebDAV Sync, Privacy, Shortcuts, Tab Renamer, History Restore, Watermark Remover // @description:ko AI 채팅을 읽기 쉽고 탐색 가능한 지식으로 변환하세요. 개요, 폴더, 프롬프트로 워크플로우를 정리하여 무한 스크롤에서 해방되세요. | Features: Real-time Outline, Conversation Manager (Folders/Pin/Export), Prompt Library, Immersion/Widescreen/Scroll Lock, Theme Switcher, Markdown Fix, LaTeX/Table Copy, WebDAV Sync, Privacy, Shortcuts, Tab Renamer, History Restore, Watermark Remover // @description:pt-BR Transforme chats de IA em conhecimento legível. Use esboços, pastas e prompts para organizar seu fluxo e parar de rolar. | Features: Real-time Outline, Conversation Manager (Folders/Pin/Export), Prompt Library, Immersion/Widescreen/Scroll Lock, Theme Switcher, Markdown Fix, LaTeX/Table Copy, WebDAV Sync, Privacy, Shortcuts, Tab Renamer, History Restore, Watermark Remover // @description:ru Превратите AI-чаты в знания. Используйте структуру, папки и промпты, чтобы организовать рабочий процесс и прекратить прокрутку. | Features: Real-time Outline, Conversation Manager (Folders/Pin/Export), Prompt Library, Immersion/Widescreen/Scroll Lock, Theme Switcher, Markdown Fix, LaTeX/Table Copy, WebDAV Sync, Privacy, Shortcuts, Tab Renamer, History Restore, Watermark Remover // @license GPL-3.0-only // @icon https://raw.githubusercontent.com/urzeye/ophel/main/assets/icon.png // @homepageURL https://github.com/urzeye/ophel // @source https://github.com/urzeye/ophel.git // @supportURL https://github.com/urzeye/ophel/issues // @match https://gemini.google.com/* // @match https://business.gemini.google/* // @match https://aistudio.google.com/* // @match https://grok.com/* // @match https://chat.openai.com/* // @match https://chatgpt.com/* // @match https://claude.ai/* // @require https://cdn.jsdelivr.net/npm/fuzzysort@3.1.0/fuzzysort.min.js // @require https://cdn.jsdelivr.net/npm/systemjs@6.15.1/dist/system.min.js // @require https://cdn.jsdelivr.net/npm/systemjs@6.15.1/dist/extras/named-register.min.js // @require data:application/javascript,%3B(typeof%20System!%3D'undefined')%26%26(System%3Dnew%20System.constructor())%3B // @connect * // @grant GM_addStyle // @grant GM_addValueChangeListener // @grant GM_cookie // @grant GM_deleteValue // @grant GM_getValue // @grant GM_info // @grant GM_notification // @grant GM_removeValueChangeListener // @grant GM_setValue // @grant GM_xmlhttpRequest // @grant unsafeWindow // @grant window.focus // @run-at document-idle // @noframes // @downloadURL none // ==/UserScript== System.register("./__entry.js", ['./entry-Bchk6GL_-D6hvsIN2.js'], (function (exports, module) { 'use strict'; return { setters: [null], execute: (function () { }) }; })); System.register("./entry-Bchk6GL_-D6hvsIN2.js", [], (function (exports, module) { 'use strict'; return { execute: (function () { exports({ a: Ko, b: Jc, c: Wo, e: ka, j: Vo, l: Pa, m: lr, n: cr, o: ur, q: gr, s: Gr, t: Tn, w: dr }); const d$1=new Set;const e = async e=>{d$1.has(e)||(d$1.add(e),(t=>{typeof GM_addStyle=="function"?GM_addStyle(t):(document.head||document.documentElement).appendChild(document.createElement("style")).append(t);})(e));}; const t=function(){const e="undefined"!=typeof document&&document.createElement("link").relList;return e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}(),n={},r=exports("_", function(e,r,o){let a=Promise.resolve();if(r&&r.length>0){let e=function(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:"fulfilled",value:e}),e=>({status:"rejected",reason:e}))))};document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),i=o?.nonce||o?.getAttribute("nonce");a=e(r.map(e=>{if((e=function(e){return "/"+e}(e))in n)return;n[e]=true;const r=e.endsWith(".css"),o=r?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${o}`))return;const a=document.createElement("link");return a.rel=r?"stylesheet":t,r||(a.as="script"),a.crossOrigin="",a.href=e,i&&a.setAttribute("nonce",i),document.head.appendChild(a),r?new Promise((t,n)=>{a.addEventListener("load",t),a.addEventListener("error",()=>n(new Error(`Unable to preload CSS for ${e}`)));}):void 0}));}function i(e){const t=new Event("vite:preloadError",{cancelable:true});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return a.then(t=>{for(const e of t||[])"rejected"===e.status&&i(e.reason);return e().catch(i)})});function o(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var a,i,s={exports:{}},l={};function c(){if(a)return l;a=1;var e=Symbol.for("react.element"),t=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),s=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),u=Symbol.for("react.memo"),h=Symbol.for("react.lazy"),g=Symbol.iterator;var p={isMounted:function(){return false},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,f={};function b(e,t,n){this.props=e,this.context=t,this.refs=f,this.updater=n||p;}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=f,this.updater=n||p;}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState");},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate");},y.prototype=b.prototype;var x=v.prototype=new y;x.constructor=v,m(x,b.prototype),x.isPureReactComponent=true;var S=Array.isArray,w=Object.prototype.hasOwnProperty,k={current:null},C={key:true,ref:true,__self:true,__source:true};function T(t,n,r){var o,a={},i=null,s=null;if(null!=n)for(o in void 0!==n.ref&&(s=n.ref),void 0!==n.key&&(i=""+n.key),n)w.call(n,o)&&!C.hasOwnProperty(o)&&(a[o]=n[o]);var l=arguments.length-2;if(1===l)a.children=r;else if(1>>1,a=e[r];if(!(0>>1;ro(l,n))co(d,l)?(e[r]=d,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else {if(!(co(d,n)))break e;e[r]=d,e[c]=n,r=c;}}}return t}function o(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var a=performance;e.unstable_now=function(){return a.now()};}else {var i=Date,s=i.now();e.unstable_now=function(){return i.now()-s};}var l=[],c=[],d=1,u=null,h=3,g=false,p=false,m=false,f="function"==typeof setTimeout?setTimeout:null,b="function"==typeof clearTimeout?clearTimeout:null,y="undefined"!=typeof setImmediate?setImmediate:null;function v(e){for(var o=n(c);null!==o;){if(null===o.callback)r(c);else {if(!(o.startTime<=e))break;r(c),o.sortIndex=o.expirationTime,t(l,o);}o=n(c);}}function x(e){if(m=false,v(e),!p)if(null!==n(l))p=true,N(S);else {var t=n(c);null!==t&&M(x,t.startTime-e);}}function S(t,o){p=false,m&&(m=false,b(T),T=-1),g=true;var a=h;try{for(v(o),u=n(l);null!==u&&(!(u.expirationTime>o)||t&&!A());){var i=u.callback;if("function"==typeof i){u.callback=null,h=u.priorityLevel;var s=i(u.expirationTime<=o);o=e.unstable_now(),"function"==typeof s?u.callback=s:u===n(l)&&r(l),v(o);}else r(l);u=n(l);}if(null!==u)var d=!0;else {var f=n(c);null!==f&&M(x,f.startTime-o),d=!1;}return d}finally{u=null,h=a,g=false;}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var w,k=false,C=null,T=-1,D=5,E=-1;function A(){return !(e.unstable_now()-Ee||125i?(r.sortIndex=a,t(c,r),null===n(l)&&r===n(c)&&(m?(b(T),T=-1):m=true,M(x,a-i))):(r.sortIndex=s,t(l,r),p||g||(p=true,N(S))),r},e.unstable_shouldYield=A,e.unstable_wrapCallback=function(e){var t=h;return function(){var n=h;h=t;try{return e.apply(this,arguments)}finally{h=n;}}};}(w)),w)),S.exports}function C(){if(m)return x;m=1;var e=d(),t=k();function n(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n