Sobre o projeto

Prompt Save Reuse é uma extensão de navegador Manifest V3 para Chrome e Edge que armazena o texto digitado no compositor de chat de IA e o coloca de volta quando necessário. Destina-se a pessoas que redigitam ou colam novamente as mesmas instruções em várias sessões de chat e querem uma forma de um gesto para mantê-las. Plataformas suportadas (sete): ChatGPT, Gemini, Claude, Perplexity, Grok, Mistral e DeepSeek. Modelo de interação - Clique único no compositor ou no ícone da barra de ferramentas: salva o texto atual do compositor para esta URL de conversa. Se o compositor estiver vazio, restaura o texto salvo para essa URL. - Clique duplo no compositor ou no ícone da barra de ferramentas: anexa o texto salvo abaixo do conteúdo atual do compositor, separado por uma linha em branco. - Clique direito no ícone da barra de ferramentas: menu de contexto com limpar todos os dados salvos, abrir o guia do usuário, abrir o perfil do desenvolvedor. - Atalhos de teclado: Ctrl+Shift+1 para salvar, Ctrl+Shift+2 para anexar. Não há popup nem painel lateral; toda a interface é o compositor mais o botão da barra de ferramentas. O texto salvo é mantido em chrome.storage.sync, então segue o perfil do navegador entre dispositivos. Instalação - As listagens da Chrome Web Store e do Microsoft Edge Add-ons estão vinculadas no README. - A partir do código-fonte: clone o repositório, abra chrome://extensions, ative o modo de desenvolvedor, clique em Carregar sem compactação e selecione a pasta do repositório. Não há etapa de build nem dependências; a pilha é JavaScript puro. Permissões e privacidade - storage: salvar prompts chaveados por URL de conversa em chrome.storage.sync. - activeTab: agir na aba de chat atualmente em uso. - scripting: executar funções de salvar e anexar nessa aba para atalhos e o ícone da barra de ferramentas. - contextMenus: fornecer o menu de clique direito no ícone da barra de ferramentas. O README afirma que não há permissão de host além dos sete domínios de chat correspondentes, nenhuma solicitação de rede própria da extensão e nenhuma análise. Detalhes de engenharia notáveis descritos pelo autor - Dois gestos em um alvo sem popup: como os navegadores não têm evento nativo de clique duplo para uma ação da barra de ferramentas, background.js e content.js cada um mantêm um temporizador de 300 ms. O primeiro clique agenda o manipulador de clique único; um segundo clique dentro da janela o cancela e executa o manipulador de clique duplo. A consequência declarada é que toda ação de clique único é deliberadamente atrasada em 300 ms. - Um caminho de inserção em sete UIs de chat: findInputField() é uma cascata de seletores ordenada em vez de ramificações por site, cobrindo ProseMirror contenteditable, #prompt-textarea do ChatGPT, um .ql-editor do Quill, #ask-input do Perplexity e textarea correspondente a espaço reservado do DeepSeek. insertText() ramifica de três maneiras porque entradas controladas por framework sobrescrevem a atribuição direta de .value: o setter nativo de valor do protótipo mais um evento de entrada despachado para textarea e input, document.execCommand("insertText") para editores Lexical, e innerHTML mais um evento de entrada para outros compositores contenteditable. - O compositor não existe quando o script de conteúdo é executado: todos os sete sites são aplicativos de página única e a entrada é montada depois e remontada na navegação, então um MutationObserver observa e reanexa os ouvintes. - Armazenamento chaveado por URL: um prompt salvo por conversa, em chrome.storage.sync em vez de local, para seguir o perfil do navegador; a compensação é a cota de sincronização, onde um prompt longo o suficiente não será salvo. Limitações conhecidas declaradas no README - Seletores são a parte frágil: quando uma plataforma lança um novo compositor, findInputField() para de corresponder e a extensão fica silenciosa nesse site até que a lista de seletores seja atualizada. - Uma falha de salvamento é silenciosa; se nenhum campo de entrada for encontrado, nada informa o usuário (rastreado no problema #13). - chrome.storage.sync tem cotas; um prompt longo o suficiente excede o limite de tamanho por item e não salva. - Ações de clique único carregam um atraso de 300 ms por design. - Sem testes automatizados (rastreados nos problemas #8 e #9). - Um prompt por URL: não há biblioteca de prompts nomeada, e salvar novamente sobrescreve. Status do projeto e contribuição - A listagem da Chrome Web Store está ativa na versão 3.0; a listagem do Edge Add-ons está ativa. - Contribuições são abertas, com problemas rotulados como good first issue e hacktoberfest; CONTRIBUTING.md e CODE_OF_CONDUCT.md são referenciados. A orientação de teste é carregar a extensão sem compactação e exercitar a mudança em pelo menos um dos sete sites suportados. - Contato é via problemas do GitHub ou LinkedIn (linkedin.com/in/atj393). Licença Uma licença personalizada, não MIT. O README a resume como concedendo o direito de usar, modificar e publicar alterações para contribuir com este projeto, exigindo que trabalhos derivados mantenham os mesmos termos, e proibindo expressamente uso privado, uso comercial, sublicenciamento e redistribuição do software como está sem modificação. O texto completo está no arquivo de licença.