Об этом проекте
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 резюмирует её как предоставляющую право использовать, изменять и публиковать изменения с целью вклада в этот проект, требующую от производных работ сохранения тех же условий и явно запрещающую частное использование, коммерческое использование, сублицензирование и распространение программного обеспечения как есть без изменений. Полный текст в файле лицензии.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.