// ==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.6 // @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 CC-BY-NC-SA-4.0 // @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/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-D_64r4i7-B2vsOpeB.js'], (function (exports, module) { 'use strict'; return { setters: [null], execute: (function () { }) }; })); System.register("./entry-D_64r4i7-B2vsOpeB.js", [], (function (exports, module) { 'use strict'; return { execute: (function () { exports({ a: No, b: yc, c: Lo, e: lr, j: Po, k: Cr, l: fr, n: jn, o: Rn, q: Fn, s: oo, t: Jt, v: zn, x: In }); 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={},o=exports("_", function(e,o,r){let a=Promise.resolve();if(o&&o.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 r=document.querySelector("meta[property=csp-nonce]"),s=r?.nonce||r?.getAttribute("nonce");a=e(o.map(e=>{if((e=function(e){return "/"+e}(e))in n)return;n[e]=true;const o=e.endsWith(".css"),r=o?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${r}`))return;const a=document.createElement("link");return a.rel=o?"stylesheet":t,o||(a.as="script"),a.crossOrigin="",a.href=e,s&&a.setAttribute("nonce",s),document.head.appendChild(a),o?new Promise((t,n)=>{a.addEventListener("load",t),a.addEventListener("error",()=>n(new Error(`Unable to preload CSS for ${e}`)));}):void 0}));}function s(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&&s(e.reason);return e().catch(s)})});function r(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var a,s,i={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"),o=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),i=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),u=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),p=Symbol.iterator;var h={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||h;}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=f,this.updater=n||h;}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 k=Array.isArray,w=Object.prototype.hasOwnProperty,S={current:null},C={key:true,ref:true,__self:true,__source:true};function T(t,n,o){var r,a={},s=null,i=null;if(null!=n)for(r in void 0!==n.ref&&(i=n.ref),void 0!==n.key&&(s=""+n.key),n)w.call(n,r)&&!C.hasOwnProperty(r)&&(a[r]=n[r]);var l=arguments.length-2;if(1===l)a.children=o;else if(1>>1,a=e[o];if(!(0>>1;or(l,n))cr(d,l)?(e[o]=d,e[c]=n,o=c):(e[o]=l,e[i]=n,o=i);else {if(!(cr(d,n)))break e;e[o]=d,e[c]=n,o=c;}}}return t}function r(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 s=Date,i=s.now();e.unstable_now=function(){return s.now()-i};}var l=[],c=[],d=1,u=null,g=3,p=false,h=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 r=n(c);null!==r;){if(null===r.callback)o(c);else {if(!(r.startTime<=e))break;o(c),r.sortIndex=r.expirationTime,t(l,r);}r=n(c);}}function x(e){if(m=false,v(e),!h)if(null!==n(l))h=true,P(k);else {var t=n(c);null!==t&&M(x,t.startTime-e);}}function k(t,r){h=false,m&&(m=false,b(T),T=-1),p=true;var a=g;try{for(v(r),u=n(l);null!==u&&(!(u.expirationTime>r)||t&&!_());){var s=u.callback;if("function"==typeof s){u.callback=null,g=u.priorityLevel;var i=s(u.expirationTime<=r);r=e.unstable_now(),"function"==typeof i?u.callback=i:u===n(l)&&o(l),v(r);}else o(l);u=n(l);}if(null!==u)var d=!0;else {var f=n(c);null!==f&&M(x,f.startTime-r),d=!1;}return d}finally{u=null,g=a,p=false;}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var w,S=false,C=null,T=-1,D=5,E=-1;function _(){return !(e.unstable_now()-Ee||125s?(o.sortIndex=a,t(c,o),null===n(l)&&o===n(c)&&(m?(b(T),T=-1):m=true,M(x,a-s))):(o.sortIndex=i,t(l,o),h||p||(h=true,P(k))),o},e.unstable_shouldYield=_,e.unstable_wrapCallback=function(e){var t=g;return function(){var n=g;g=t;try{return e.apply(this,arguments)}finally{g=n;}}};}(w)),w)),k.exports}function C(){if(m)return x;m=1;var e=d(),t=S();function n(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n