Sobre el proyecto
Prompt Save Reuse es una extensión de navegador Manifest V3 para Chrome y Edge que almacena el texto que has escrito en el compositor de chat de IA y lo devuelve cuando lo deseas. Está dirigida a personas que reescriben o vuelven a pegar las mismas instrucciones entre sesiones de chat y quieren una forma de un solo gesto para mantenerlas.
Plataformas compatibles (siete): ChatGPT, Gemini, Claude, Perplexity, Grok, Mistral y DeepSeek.
Modelo de interacción
- Un solo clic en el compositor o en el icono de la barra de herramientas: guarda el texto actual del compositor para esta URL de conversación. Si el compositor está vacío, restaura el texto guardado para esa URL en su lugar.
- Doble clic en el compositor o en el icono de la barra de herramientas: añade el texto guardado debajo del contenido actual del compositor, separado por una línea en blanco.
- Clic derecho en el icono de la barra de herramientas: menú contextual con limpiar todos los datos guardados, abrir la guía de usuario, abrir el perfil de desarrollador.
- Atajos de teclado: Ctrl+Shift+1 para guardar, Ctrl+Shift+2 para añadir.
No hay ventana emergente ni panel lateral; toda la interfaz es el compositor más el botón de la barra de herramientas. El texto guardado se mantiene en chrome.storage.sync, por lo que sigue al perfil del navegador entre dispositivos.
Instalación
- Los listados de Chrome Web Store y Microsoft Edge Add-ons están enlazados en el README.
- Desde el código fuente: clona el repositorio, abre chrome://extensions, activa el modo de desarrollador, haz clic en Cargar desempaquetado y selecciona la carpeta del repositorio. No hay paso de compilación ni dependencias; la pila es JavaScript puro.
Permisos y privacidad
- storage: guardar prompts vinculados a la URL de conversación en chrome.storage.sync.
- activeTab: actuar sobre la pestaña de chat actualmente en uso.
- scripting: ejecutar funciones de guardar y añadir en esa pestaña para los atajos y el icono de la barra de herramientas.
- contextMenus: proporcionar el menú de clic derecho en el icono de la barra de herramientas.
El README indica que no hay permiso de host más allá de los siete dominios de chat coincidentes, ninguna solicitud de red propia de la extensión y ninguna analítica.
Detalles de ingeniería notables descritos por el autor
- Dos gestos en un solo objetivo sin ventana emergente: como los navegadores no tienen un evento de doble clic nativo para una acción de la barra de herramientas, background.js y content.js mantienen cada uno un temporizador de 300 ms. El primer clic programa el controlador de clic único; un segundo clic dentro de la ventana lo cancela y ejecuta el controlador de doble clic. La consecuencia declarada es que cada acción de clic único se retrasa deliberadamente 300 ms.
- Una ruta de inserción entre siete interfaces de chat: findInputField() es una cascada de selectores ordenada en lugar de ramas por sitio, cubriendo contenteditable de ProseMirror, #prompt-textarea de ChatGPT, .ql-editor de Quill, #ask-input de Perplexity y textarea coincidente por marcador de posición de DeepSeek. insertText() se ramifica de tres maneras porque las entradas controladas por frameworks sobrescriben la asignación directa de .value: el setter nativo de valor del prototipo más un evento de entrada despachado para textarea e input, document.execCommand("insertText") para editores Lexical, e innerHTML más un evento de entrada para otros compositores contenteditable.
- El compositor no existe cuando se ejecuta el script de contenido: los siete sitios son aplicaciones de página única y la entrada se monta más tarde y se remonta en la navegación, por lo que un MutationObserver la vigila y vuelve a adjuntar los oyentes.
- Almacenamiento vinculado a la URL: un prompt guardado por conversación, en chrome.storage.sync en lugar de local, por lo que sigue al perfil del navegador; la compensación es la cuota de sincronización, donde un prompt lo suficientemente largo no se guardará.
Limitaciones conocidas declaradas en el README
- Los selectores son la parte frágil: cuando una plataforma lanza un nuevo compositor, findInputField() deja de coincidir y la extensión se queda en silencio en ese sitio hasta que se actualiza la lista de selectores.
- Un guardado fallido es silencioso; si no se encuentra ningún campo de entrada, nada le indica al usuario (rastreado en el issue #13).
- chrome.storage.sync tiene cuotas; un prompt lo suficientemente largo excede el límite de tamaño por elemento y no se guarda.
- Las acciones de clic único llevan un retraso de 300 ms por diseño.
- Sin pruebas automatizadas (rastreado en los issues #8 y #9).
- Un prompt por URL: no hay biblioteca de prompts con nombre, y guardar de nuevo sobrescribe.
Estado del proyecto y contribución
- El listado de Chrome Web Store está activo en la versión 3.0; el listado de Edge Add-ons está activo.
- Las contribuciones están abiertas, con issues etiquetados como good first issue y hacktoberfest; se hace referencia a CONTRIBUTING.md y CODE_OF_CONDUCT.md. La guía de pruebas es cargar la extensión desempaquetada y ejercitar el cambio en al menos uno de los siete sitios compatibles.
- El contacto es a través de issues de GitHub o LinkedIn (linkedin.com/in/atj393).
Licencia
Una licencia personalizada, no MIT. El README la resume como otorgar el derecho a usar, modificar y publicar cambios con el propósito de contribuir a este proyecto, requerir que las obras derivadas mantengan los mismos términos, y prohibir expresamente el uso privado, el uso comercial, el sublicenciamiento y la redistribución del software tal cual sin modificación. El texto completo está en el archivo de licencia.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.