Об этом проекте

Prompt Save Reuse — это расширение для браузера Manifest V3 для Chrome и Edge, которое сохраняет текст, введённый вами в AI-композер, и возвращает его, когда нужно. Оно предназначено для тех, кто повторно вводит или вставляет одни и те же инструкции в разных чат-сессиях и хочет сохранять их одним жестом. Поддерживаемые платформы (семь): ChatGPT, Gemini, Claude, Perplexity, Grok, Mistral и DeepSeek. Модель взаимодействия - Одиночный клик по композеру или значку на панели инструментов: сохраняет текущий текст композера для этого URL разговора. Если композер пуст, вместо этого восстанавливает сохранённый для этого URL текст. - Двойной клик по композеру или значку на панели инструментов: добавляет сохранённый текст ниже текущего содержимого композера, разделяя пустой строкой. - Правый клик по значку на панели инструментов: контекстное меню с очисткой всех сохранённых данных, открытием руководства пользователя, открытием профиля разработчика. - Сочетания клавиш: Ctrl+Shift+1 для сохранения, Ctrl+Shift+2 для добавления. Нет всплывающего окна и боковой панели; весь интерфейс — это композер плюс кнопка на панели инструментов. Сохранённый текст хранится в chrome.storage.sync, поэтому он следует за профилем браузера на разных устройствах. Установка - Ссылки на Chrome Web Store и Microsoft Edge Add-ons указаны в README. - Из исходников: клонируйте репозиторий, откройте chrome://extensions, включите режим разработчика, нажмите «Загрузить распакованное» и выберите папку репозитория. Нет этапа сборки и зависимостей; стек — обычный JavaScript. Разрешения и конфиденциальность - storage: сохранение подсказок по URL разговора в chrome.storage.sync. - activeTab: действие на текущей вкладке чата. - scripting: выполнение функций сохранения и добавления на этой вкладке для сочетаний клавиш и значка на панели инструментов. - contextMenus: предоставление контекстного меню при правом клике по значку на панели инструментов. В README указано, что нет разрешения на хост, кроме семи соответствующих доменов чата, нет собственных сетевых запросов расширения и нет аналитики. Заметные технические детали, описанные автором - Два жеста на одной цели без всплывающего окна: поскольку браузеры не имеют нативного события двойного клика для действия на панели инструментов, background.js и content.js содержат таймер на 300 мс. Первый клик планирует обработчик одиночного клика; второй клик в этом окне отменяет его и запускает обработчик двойного клика. Указанное следствие — каждое действие одиночного клика намеренно задерживается на 300 мс. - Один путь вставки для семи чат-интерфейсов: findInputField() — это упорядоченный каскад селекторов, а не ветвления по сайтам, охватывающий contenteditable ProseMirror, #prompt-textarea ChatGPT, .ql-editor Quill, #ask-input Perplexity и textarea DeepSeek с совпадением по placeholder. insertText() разветвляется тремя способами, потому что управляемые фреймворком поля перезаписывают прямое присваивание .value: нативный сеттер значения прототипа плюс отправленное событие input для textarea и input, document.execCommand("insertText") для редакторов Lexical, и innerHTML плюс событие input для других contenteditable-композеров. - Композер не существует при запуске content script: все семь сайтов — одностраничные приложения, и поле ввода монтируется позже и перемонтируется при навигации, поэтому MutationObserver следит за ним и повторно прикрепляет слушатели. - Хранение по URL: одна сохранённая подсказка на разговор, в chrome.storage.sync, а не local, чтобы следовать за профилем браузера; компромисс — квота синхронизации, из-за которой достаточно длинная подсказка не сохранится. Известные ограничения, указанные в README - Селекторы — хрупкая часть: когда платформа выпускает новый композер, findInputField() перестаёт совпадать, и расширение замолкает на этом сайте, пока список селекторов не обновят. - Неудачное сохранение молчаливо; если поле ввода не найдено, пользователю ничего не сообщается (отслеживается в issue #13). - У chrome.storage.sync есть квоты; достаточно длинная подсказка превышает лимит размера элемента и не сохраняется. - Действия одиночного клика несут задержку 300 мс по замыслу. - Нет автоматических тестов (отслеживается в issues #8 и #9). - Одна подсказка на URL: нет библиотеки именованных подсказок, повторное сохранение перезаписывает. Статус проекта и вклад - Листинг Chrome Web Store активен на версии 3.0; листинг Edge Add-ons активен. - Вклад открыт, есть issues с метками good first issue и hacktoberfest; упоминаются CONTRIBUTING.md и CODE_OF_CONDUCT.md. Рекомендации по тестированию — загрузить распакованное расширение и проверить изменение хотя бы на одном из семи поддерживаемых сайтов. - Контакт через GitHub issues или LinkedIn (linkedin.com/in/atj393). Лицензия Пользовательская лицензия, не MIT. README резюмирует её как предоставляющую право использовать, изменять и публиковать изменения с целью вклада в этот проект, требующую от производных работ сохранения тех же условий и явно запрещающую частное использование, коммерческое использование, сублицензирование и распространение программного обеспечения как есть без изменений. Полный текст в файле лицензии.