프로젝트 소개
Prompt Save Reuse는 Chrome과 Edge용 Manifest V3 브라우저 확장 프로그램으로, AI 채팅 입력란에 입력한 텍스트를 저장하고 필요할 때 다시 불러옵니다. 채팅 세션 간에 동일한 지시문을 반복 입력하거나 붙여넣는 사용자를 위해 한 번의 동작으로 이를 유지할 수 있게 설계되었습니다. 지원 플랫폼(7개): ChatGPT, Gemini, Claude, Perplexity, Grok, Mistral, DeepSeek.
상호작용 방식
- 입력란 또는 툴바 아이콘을 한 번 클릭: 현재 대화 URL에 대해 입력란의 현재 텍스트를 저장합니다. 입력란이 비어 있으면 해당 URL에 저장된 텍스트를 복원합니다.
- 입력란 또는 툴바 아이콘을 두 번 클릭: 저장된 텍스트를 현재 입력란 내용 아래에 빈 줄로 구분하여 추가합니다.
- 툴바 아이콘을 오른쪽 클릭: 저장된 데이터 전체 삭제, 사용자 가이드 열기, 개발자 프로필 열기 항목이 있는 컨텍스트 메뉴가 표시됩니다.
- 키보드 단축키: Ctrl+Shift+1로 저장, Ctrl+Shift+2로 추가.
팝업이나 사이드 패널이 없으며, 인터페이스는 입력란과 툴바 버튼으로 구성됩니다. 저장된 텍스트는 chrome.storage.sync에 보관되어 브라우저 프로필을 통해 여러 기기에서 동기화됩니다.
설치 방법
- README에 Chrome 웹 스토어와 Microsoft Edge 추가 기능 목록 링크가 있습니다.
- 소스에서 설치: 저장소를 클론하고, chrome://extensions를 열고, 개발자 모드를 활성화한 뒤, '압축 해제된 확장 프로그램 로드'를 클릭하고 저장소 폴더를 선택합니다. 빌드 단계나 종속성이 없으며, 순수 JavaScript로 구성됩니다.
권한 및 개인정보 보호
- storage: 대화 URL을 키로 하여 프롬프트를 chrome.storage.sync에 저장합니다.
- activeTab: 현재 사용 중인 채팅 탭에서 작동합니다.
- scripting: 단축키와 툴바 아이콘을 위해 해당 탭에서 저장 및 추가 기능을 실행합니다.
- contextMenus: 툴바 아이콘에 오른쪽 클릭 메뉴를 제공합니다.
README에는 일곱 개의 매칭된 채팅 도메인 외에는 호스트 권한이 없고, 확장 프로그램 자체의 네트워크 요청이나 분석 기능이 없다고 명시되어 있습니다.
저자가 설명한 주요 기술적 세부 사항
- 팝업 없이 하나의 대상에 두 가지 동작: 브라우저는 툴바 동작에 대한 기본 더블클릭 이벤트가 없으므로, background.js와 content.js는 각각 300ms 타이머를 유지합니다. 첫 번째 클릭은 단일 클릭 핸들러를 예약하고, 창 내에서 두 번째 클릭이 발생하면 이를 취소하고 더블클릭 핸들러를 실행합니다. 그 결과 모든 단일 클릭 동작은 의도적으로 300ms 지연됩니다.
- 7개 채팅 UI에 대한 단일 삽입 경로: findInputField()는 사이트별 분기가 아닌 순서가 있는 선택자 계단식으로, ProseMirror contenteditable, ChatGPT의 #prompt-textarea, Quill .ql-editor, Perplexity의 #ask-input, DeepSeek의 placeholder 매칭 textarea를 포함합니다. insertText()는 프레임워크 제어 입력이 직접 .value 할당을 덮어쓰기 때문에 세 가지 방식으로 분기합니다: textarea와 input용 프로토타입 네이티브 값 설정자와 input 이벤트 디스패치, Lexical 편집기용 document.execCommand("insertText"), 기타 contenteditable 입력란용 innerHTML과 input 이벤트입니다.
- 콘텐츠 스크립트 실행 시 입력란이 없음: 7개 사이트 모두 단일 페이지 앱이며 입력 요소는 나중에 마운트되고 탐색 시 다시 마운트되므로, MutationObserver가 이를 감시하고 리스너를 다시 연결합니다.
- URL 키 기반 저장: 대화당 하나의 프롬프트가 chrome.storage.local이 아닌 chrome.storage.sync에 저장되어 브라우저 프로필을 따라 이동합니다. 단점은 동기화 할당량으로, 충분히 긴 프롬프트는 저장되지 않습니다.
README에 명시된 알려진 제한 사항
- 선택자가 취약한 부분: 플랫폼이 새 입력란을 출시하면 findInputField()가 매칭을 중단하고 선택자 목록이 업데이트될 때까지 해당 사이트에서 확장 프로그램이 조용히 작동하지 않습니다.
- 실패한 저장은 조용히 지나감: 입력 필드가 없으면 사용자에게 알림이 없습니다(이슈 #13에서 추적).
- chrome.storage.sync에는 할당량이 있어 충분히 긴 프롬프트는 항목별 크기 제한을 초과하여 저장되지 않습니다.
- 단일 클릭 동작은 설계상 300ms 지연됩니다.
- 자동화된 테스트가 없습니다(이슈 #8, #9에서 추적).
- URL당 프롬프트 하나: 이름 있는 프롬프트 라이브러리가 없으며, 다시 저장하면 덮어씁니다.
프로젝트 상태 및 기여
- Chrome 웹 스토어 목록이 버전 3.0으로 게시되어 있으며, Edge 추가 기능 목록도 게시되어 있습니다.
- 기여가 열려 있으며, 'good first issue' 및 'hacktoberfest' 라벨이 지정된 이슈가 있고, CONTRIBUTING.md와 CODE_OF_CONDUCT.md가 참조됩니다. 테스트 지침은 압축 해제된 확장 프로그램을 로드하고 지원되는 7개 사이트 중 하나 이상에서 변경 사항을 테스트하는 것입니다.
- 연락은 GitHub 이슈 또는 LinkedIn(linkedin.com/in/atj393)을 통해 가능합니다.
라이선스
MIT가 아닌 사용자 지정 라이선스입니다. README는 이 프로젝트에 기여하기 위한 목적으로 사용, 수정, 변경 게시 권한을 부여하고, 파생 저작물이 동일한 조건을 유지해야 하며, 개인 사용, 상업적 사용, 서브라이선싱 및 수정 없이 소프트웨어 재배포를 명시적으로 금지한다고 요약합니다. 전체 텍스트는 라이선스 파일에 있습니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.