À propos du projet

Prompt Save Reuse est une extension de navigateur Manifest V3 pour Chrome et Edge qui stocke le texte saisi dans un compositeur de chat IA et le réinsère quand vous le souhaitez. Elle s'adresse aux personnes qui retapent ou recollent les mêmes instructions d'une session à l'autre et souhaitent un moyen simple de les conserver. Plateformes prises en charge (sept) : ChatGPT, Gemini, Claude, Perplexity, Grok, Mistral et DeepSeek. Modèle d'interaction - Un clic sur le compositeur ou l'icône de la barre d'outils : enregistre le texte actuel du compositeur pour cette URL de conversation. Si le compositeur est vide, restaure le texte enregistré pour cette URL à la place. - Double clic sur le compositeur ou l'icône de la barre d'outils : ajoute le texte enregistré sous le contenu actuel du compositeur, séparé par une ligne vide. - Clic droit sur l'icône de la barre d'outils : menu contextuel avec effacer toutes les données enregistrées, ouvrir le guide utilisateur, ouvrir le profil développeur. - Raccourcis clavier : Ctrl+Maj+1 pour enregistrer, Ctrl+Maj+2 pour ajouter. Pas de popup ni de panneau latéral ; toute l'interface se résume au compositeur et au bouton de la barre d'outils. Le texte enregistré est conservé dans chrome.storage.sync, donc il suit le profil du navigateur sur plusieurs appareils. Installation - Les listes du Chrome Web Store et des modules complémentaires Microsoft Edge sont liées dans le README. - Depuis la source : clonez le dépôt, ouvrez chrome://extensions, activez le mode développeur, cliquez sur Charger l'extension non empaquetée et sélectionnez le dossier du dépôt. Aucune étape de compilation ni dépendance ; la pile est en JavaScript pur. Autorisations et confidentialité - stockage : enregistre les invites associées à l'URL de conversation dans chrome.storage.sync. - activeTab : agit sur l'onglet de chat actuellement utilisé. - scripting : exécute les fonctions d'enregistrement et d'ajout dans cet onglet pour les raccourcis et l'icône de la barre d'outils. - contextMenus : fournit le menu contextuel sur l'icône de la barre d'outils. Le README indique qu'il n'y a pas d'autorisation d'hôte au-delà des sept domaines de chat correspondants, aucune requête réseau propre à l'extension et aucune analytique. Détails techniques notables décrits par l'auteur - Deux gestes sur une seule cible sans popup : comme les navigateurs n'ont pas d'événement natif de double clic pour une action de barre d'outils, background.js et content.js contiennent chacun un minuteur de 300 ms. Le premier clic planifie le gestionnaire de clic simple ; un deuxième clic dans la fenêtre l'annule et exécute le gestionnaire de double clic. La conséquence indiquée est que chaque action de clic simple est délibérément retardée de 300 ms. - Un chemin d'insertion unique sur sept interfaces de chat : findInputField() est une cascade de sélecteurs ordonnée plutôt que des branches par site, couvrant ProseMirror contenteditable, #prompt-textarea de ChatGPT, un .ql-editor de Quill, #ask-input de Perplexity et le textarea de DeepSeek correspondant au placeholder. insertText() se divise en trois voies car les entrées contrôlées par le framework écrasent l'affectation directe de .value : le setter de valeur natif du prototype plus un événement d'entrée distribué pour textarea et input, document.execCommand("insertText") pour les éditeurs Lexical, et innerHTML plus un événement d'entrée pour les autres compositeurs contenteditable. - Le compositeur n'existe pas lorsque le script de contenu s'exécute : les sept sites sont des applications à page unique et l'entrée est montée plus tard et remontée lors de la navigation, donc un MutationObserver la surveille et réattache les écouteurs. - Stockage clé par URL : une invite enregistrée par conversation, dans chrome.storage.sync plutôt que local, donc elle suit le profil du navigateur ; le compromis est le quota de synchronisation, où une invite assez longue ne sera pas enregistrée. Limitations connues indiquées dans le README - Les sélecteurs sont la partie fragile : quand une plateforme publie un nouveau compositeur, findInputField() cesse de correspondre et l'extension devient silencieuse sur ce site jusqu'à ce que la liste des sélecteurs soit mise à jour. - Un échec d'enregistrement est silencieux ; si aucun champ de saisie n'est trouvé, rien n'informe l'utilisateur (suivi dans le problème n°13). - chrome.storage.sync a des quotas ; une invite assez longue dépasse la limite de taille par élément et ne s'enregistre pas. - Les actions de clic simple portent un délai de 300 ms par conception. - Aucun test automatisé (suivi dans les problèmes n°8 et n°9). - Une invite par URL : il n'y a pas de bibliothèque d'invites nommées, et enregistrer à nouveau écrase. État du projet et contribution - La liste du Chrome Web Store est en ligne à la version 3.0 ; la liste Edge Add-ons est en ligne. - Les contributions sont ouvertes, avec des problèmes étiquetés good first issue et hacktoberfest ; CONTRIBUTING.md et CODE_OF_CONDUCT.md sont référencés. Les conseils de test consistent à charger l'extension non empaquetée et à exercer le changement sur au moins un des sept sites pris en charge. - Contact via les problèmes GitHub ou LinkedIn (linkedin.com/in/atj393). Licence Une licence personnalisée, pas MIT. Le README la résume comme accordant le droit d'utiliser, modifier et publier des changements dans le but de contribuer à ce projet, exigeant que les œuvres dérivées conservent les mêmes conditions, et interdisant expressément l'utilisation privée, commerciale, la sous-licence et la redistribution du logiciel tel quel sans modification. Le texte complet est dans le fichier de licence.