// ==UserScript== // @name Illusion // @icon https://raw.githubusercontent.com/cattail-mutt/Illusion/refs/heads/main/image/icons/illusion.png // @namespace https://github.com/cattail-mutt // @version 1.5 // @description Illusion(幻觉)是一个跨平台 Prompts 管理工具,支持在以下平台使用:Google AI Studio, ChatGPT, Claude, Grok 和 DeepSeek // @author Mukai // @license MIT // @match https://aistudio.google.com/* // @match https://chatgpt.com/* // @match https://claude.ai/* // @match https://chat.deepseek.com/* // @match https://grok.com/* // @grant GM_setValue // @grant GM_getValue // @grant GM_getResourceText // @resource PROMPTS https://raw.githubusercontent.com/cattail-mutt/Illusion/refs/heads/main/prompt/prompts.json // @resource THEMES https://raw.githubusercontent.com/cattail-mutt/Illusion/refs/heads/main/style/themes.json // @resource CSS https://raw.githubusercontent.com/cattail-mutt/Illusion/refs/heads/main/style/illusion.css // @homepage https://greasyfork.org/zh-CN/scripts/527451-%E5%B9%BB%E8%A7%89-illusion // @downloadURL https://update.greasyfork.icu/scripts/527451/Illusion.user.js // @updateURL https://update.greasyfork.icu/scripts/527451/Illusion.meta.js // ==/UserScript== (function() { 'use strict'; const debug = { enabled: true, log: (...args) => debug.enabled && console.log('> Illusion 日志:', ...args), error: (...args) => console.error('> Illusion 错误:', ...args) }; let modalRef = null; let overlayRef = null; let savedPrompts = {}; const initialPrompts = JSON.parse(GM_getResourceText('PROMPTS')); const promptsObject = Object.fromEntries( (initialPrompts || []) .filter(item => item?.id && item?.value) .map(item => [item.id, item.value]) ); console.log('PROMPTS解析结果:', promptsObject); const THEMECONFIG = JSON.parse(GM_getResourceText('THEMES')); debug.log('THEMES解析结果:', THEMECONFIG); function dispatchEvents(element, events) { events.forEach(eventName => { const event = eventName === 'input' ? new InputEvent(eventName, { bubbles: true }) : new Event(eventName, { bubbles: true }); element.dispatchEvent(event); }); } function createParagraph(line) { const p = document.createElement('p'); if (line.trim()) { p.textContent = line; } else { p.innerHTML = '
'; } return p; } const updateProseMirror = (editor, prompt) => { // ChatGPT 和 Claude 均使用了 ProseMirror 库构建富文本编辑器 const paragraphs = Array.from(editor.querySelectorAll('p')); let currentContent = ''; paragraphs.forEach(p => { const text = p.textContent.trim(); if (text) { currentContent += text + '\n'; } else { currentContent += '\n'; } }); let newContent = currentContent.trim(); if (newContent) { newContent += '\n'; } editor.innerHTML = ''; if (newContent) { newContent.split('\n').forEach(line => { editor.appendChild(createParagraph(line)); }); } const lines = prompt.split('\n'); lines.forEach((line, index) => { editor.appendChild(createParagraph(line)); if (index < lines.length - 1 && !line.trim()) { const brP = document.createElement('p'); brP.innerHTML = '
'; editor.appendChild(brP); } }); dispatchEvents(editor, ['input', 'change']); }; const updateTextArea = async (textarea, prompt) => { // Gemini 和 DeepSeek 使用的均是纯文本输入框