├── chrome ├── src │ ├── contentScript.js │ ├── popup.html │ ├── popup.js │ └── background.js ├── icons │ ├── logo.png │ ├── icon128.png │ ├── icon16.png │ ├── icon32.png │ └── icon48.png └── manifest.json ├── firefox ├── src │ ├── contentScript.js │ ├── popup.html │ ├── popup.js │ └── background.js ├── icons │ ├── logo.png │ ├── icon16.png │ ├── icon32.png │ ├── icon48.png │ └── icon128.png └── manifest.json ├── demo.gif ├── demo2.gif ├── logo.png ├── .gitignore ├── package.json ├── LICENSE ├── .github └── workflows │ └── release.yml ├── README.md └── data.json /chrome/src/contentScript.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /firefox/src/contentScript.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/HEAD/demo.gif -------------------------------------------------------------------------------- /demo2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/HEAD/demo2.gif -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/HEAD/logo.png -------------------------------------------------------------------------------- /chrome/icons/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/HEAD/chrome/icons/logo.png -------------------------------------------------------------------------------- /firefox/icons/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/HEAD/firefox/icons/logo.png -------------------------------------------------------------------------------- /chrome/icons/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/HEAD/chrome/icons/icon128.png -------------------------------------------------------------------------------- /chrome/icons/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/HEAD/chrome/icons/icon16.png -------------------------------------------------------------------------------- /chrome/icons/icon32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/HEAD/chrome/icons/icon32.png -------------------------------------------------------------------------------- /chrome/icons/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/HEAD/chrome/icons/icon48.png -------------------------------------------------------------------------------- /firefox/icons/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/HEAD/firefox/icons/icon16.png -------------------------------------------------------------------------------- /firefox/icons/icon32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/HEAD/firefox/icons/icon32.png -------------------------------------------------------------------------------- /firefox/icons/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/HEAD/firefox/icons/icon48.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/modules.xml 2 | .idea/.gitignore 3 | .idea/php.xml 4 | .idea/vcs.xml 5 | .idea/YoanDevGPT.iml -------------------------------------------------------------------------------- /firefox/icons/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/HEAD/firefox/icons/icon128.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "YoanDevGPT", 3 | "version": "0.1.4", 4 | "description": "Collection de prompts pour spécialiser les interactions avec ChatGPT", 5 | "repository": { 6 | "type": "git", 7 | "url": "git+https://github.com/yoanbernabeu/YoanDevGPT.git" 8 | }, 9 | "keywords": [ 10 | "ChatGPT", 11 | "OpenAI", 12 | "Prompts" 13 | ], 14 | "author": "YoanDev", 15 | "license": "MIT", 16 | "bugs": { 17 | "url": "https://github.com/yoanbernabeu/YoanDevGPT/issues" 18 | }, 19 | "homepage": "https://github.com/yoanbernabeu/YoanDevGPT#readme" 20 | } 21 | -------------------------------------------------------------------------------- /firefox/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | "name": "YoanDevGPT", 4 | "version": "0.1.4", 5 | "description": "Collection de prompts pour spécialiser les interactions avec ChatGPT", 6 | "icons": { 7 | "16": "icons/icon16.png", 8 | "32": "icons/icon32.png", 9 | "48": "icons/icon48.png", 10 | "128": "icons/icon128.png" 11 | }, 12 | "browser_action": { 13 | "default_popup": "src/popup.html", 14 | "default_icon": { 15 | "16": "icons/icon16.png", 16 | "32": "icons/icon32.png", 17 | "48": "icons/icon48.png", 18 | "128": "icons/icon128.png" 19 | } 20 | }, 21 | "options_ui": { 22 | "page": "src/popup.html" 23 | }, 24 | "permissions": ["storage", 25 | "activeTab", 26 | "contextMenus", 27 | ""], 28 | "background": { 29 | "scripts": ["src/background.js"] 30 | }, 31 | "content_scripts": [ 32 | { 33 | "matches": [""], 34 | "js": ["src/contentScript.js"] 35 | } 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /chrome/src/popup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | YoanDevGPT 6 | 15 | 16 | 17 | 18 |
19 | 20 |

YoanDevGPT

21 |

Collection de prompts pour ChatGPT

22 |

Pour l'utiliser, faites un clic-droit dans un le champ de saisi de ChatGPT et cliquez sur "YoanDevGPT"

23 |

Options de YoanDevGPT

24 |

25 |
26 | 27 | 28 | 29 | 30 |
31 |
32 | 33 | -------------------------------------------------------------------------------- /firefox/src/popup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | YoanDevGPT 6 | 15 | 16 | 17 | 18 |
19 | 20 |

YoanDevGPT

21 |

Collection de prompts pour ChatGPT

22 |

Pour l'utiliser, faites un clic-droit dans un le champ de saisi de ChatGPT et cliquez sur "YoanDevGPT"

23 |

Options de YoanDevGPT

24 |

25 |
26 | 27 | 28 | 29 | 30 |
31 |
32 | 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Yoan Bernabeu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /chrome/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 3, 3 | "name": "YoanDevGPT", 4 | "version": "0.1.4", 5 | "description": "Collection de prompts pour spécialiser les intéractions avec ChatGPT", 6 | "action": { 7 | "default_icon": { 8 | "16": "icons/icon16.png", 9 | "32": "icons/icon32.png", 10 | "48": "icons/icon48.png", 11 | "128": "icons/icon128.png" 12 | }, 13 | "default_title": "YoanDevGPT", 14 | "default_popup": "src/popup.html" 15 | }, 16 | "icons": { 17 | "16": "icons/icon16.png", 18 | "32": "icons/icon32.png", 19 | "48": "icons/icon48.png", 20 | "128": "icons/icon128.png" 21 | }, 22 | "permissions": ["storage", "activeTab", "contextMenus", "scripting"], 23 | "host_permissions": ["https://raw.githubusercontent.com/"], 24 | "options_page": "src/popup.html", 25 | "background": { 26 | "service_worker": "src/background.js" 27 | }, 28 | "content_scripts": [ 29 | { 30 | "matches": [""], 31 | "js": ["src/contentScript.js"] 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /chrome/src/popup.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function () { 2 | const dataUrlElement = document.getElementById('data-url'); 3 | const optionsForm = document.getElementById('options-form'); 4 | const resetBtn = document.getElementById('reset-btn'); 5 | const messageElement = document.getElementById('message'); 6 | 7 | // Load saved data url 8 | chrome.storage.local.get(['dataURL'], function (result) { 9 | if (result.dataURL) { 10 | dataUrlElement.value = result.dataURL; 11 | } 12 | }); 13 | 14 | optionsForm.addEventListener('submit', function (e) { 15 | e.preventDefault(); 16 | // Save data url 17 | chrome.storage.local.set({ dataURL: dataUrlElement.value }, function () { 18 | messageElement.textContent = 'URL de données sauvegardée.'; 19 | }); 20 | setTimeout(function () { 21 | messageElement.textContent = ''; 22 | window.close(); 23 | }, 4000); 24 | }); 25 | 26 | resetBtn.addEventListener('click', function () { 27 | // Remove the stored data url 28 | chrome.storage.local.remove('dataURL', function () { 29 | console.log('Data url cleared.'); 30 | dataUrlElement.value = ''; 31 | messageElement.textContent = "URL de données réinitialisée."; 32 | }); 33 | // Clear the message and close the popup after 4 seconds 34 | setTimeout(function () { 35 | messageElement.textContent = ''; 36 | window.close(); 37 | }, 4000); 38 | }); 39 | }); -------------------------------------------------------------------------------- /firefox/src/popup.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function () { 2 | const dataUrlElement = document.getElementById('data-url'); 3 | const optionsForm = document.getElementById('options-form'); 4 | const resetBtn = document.getElementById('reset-btn'); 5 | const messageElement = document.getElementById('message'); 6 | 7 | // Load saved data url 8 | browser.storage.local.get('dataURL').then(function (result) { 9 | if (result.dataURL) { 10 | dataUrlElement.value = result.dataURL; 11 | } 12 | }); 13 | 14 | optionsForm.addEventListener('submit', function (e) { 15 | e.preventDefault(); 16 | // Save data url 17 | browser.storage.local.set({ dataURL: dataUrlElement.value }).then(function () { 18 | messageElement.textContent = 'URL de données sauvegardée.'; 19 | }); 20 | setTimeout(function () { 21 | messageElement.textContent = ''; 22 | window.close(); 23 | }, 4000); 24 | }); 25 | 26 | resetBtn.addEventListener('click', function () { 27 | // Remove the stored data url 28 | browser.storage.local.remove('dataURL').then(function () { 29 | console.log('Data url cleared.'); 30 | dataUrlElement.value = ''; 31 | messageElement.textContent = "URL de données réinitialisée."; 32 | }); 33 | // Clear the message and close the popup after 4 seconds 34 | setTimeout(function () { 35 | messageElement.textContent = ''; 36 | window.close(); 37 | }, 4000); 38 | }); 39 | }); -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Build and Package Extensions 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout code 13 | uses: actions/checkout@v2 14 | 15 | - name: Build Firefox Extension 16 | run: | 17 | mkdir -p ${{ env.FIREFOX_OUTPUT_DIR }} 18 | cd ${{ env.FIREFOX_EXTENSION_DIR }} 19 | zip -r ../${{ env.FIREFOX_OUTPUT_DIR }}/firefox_${{ github.event.repository.name }}.xpi * 20 | env: 21 | FIREFOX_EXTENSION_DIR: "firefox" 22 | FIREFOX_OUTPUT_DIR: "dist/firefox" 23 | 24 | - name: Create Chrome Directory 25 | run: | 26 | mkdir -p ${{ env.CHROME_OUTPUT_DIR }} 27 | cd ${{ env.CHROME_EXTENSION_DIR }} 28 | zip -r ../${{ env.CHROME_OUTPUT_DIR }}/chrome_${{ github.event.repository.name }}.zip * 29 | env: 30 | CHROME_EXTENSION_DIR: "chrome" 31 | CHROME_OUTPUT_DIR: "dist/chrome" 32 | 33 | - name: Get Version 34 | id: package 35 | run: echo "::set-output name=version::$(node -p "require('./package.json').version")" 36 | shell: bash 37 | 38 | - name: Create Release 39 | id: create_release 40 | uses: actions/create-release@v1 41 | env: 42 | GITHUB_TOKEN: ${{ secrets.MY_GITHUB_TOKEN }} 43 | with: 44 | tag_name: v${{ steps.package.outputs.version }} 45 | release_name: v${{ steps.package.outputs.version }} 46 | draft: false 47 | prerelease: false 48 | 49 | - name: Upload Firefox Extension to Release 50 | uses: actions/upload-release-asset@v1 51 | env: 52 | GITHUB_TOKEN: ${{ secrets.MY_GITHUB_TOKEN }} 53 | with: 54 | upload_url: ${{ steps.create_release.outputs.upload_url }} # Cela provient de l'étape de création de la Release 55 | asset_path: ./dist/firefox/firefox_${{ github.event.repository.name }}.xpi 56 | asset_name: Firefox_${{ github.event.repository.name }}.xpi 57 | asset_content_type: application/x-xpinstall 58 | 59 | - name: Upload Chrome Extension to Release 60 | uses: actions/upload-release-asset@v1 61 | env: 62 | GITHUB_TOKEN: ${{ secrets.MY_GITHUB_TOKEN }} 63 | with: 64 | upload_url: ${{ steps.create_release.outputs.upload_url }} # Cela provient de l'étape de création de la Release 65 | asset_path: ./dist/chrome/chrome_${{ github.event.repository.name }}.zip 66 | asset_name: Chrome_${{ github.event.repository.name }}.zip 67 | asset_content_type: application/zip -------------------------------------------------------------------------------- /firefox/src/background.js: -------------------------------------------------------------------------------- 1 | const DEFAULT_DATA_URL = "https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/main/data.json"; 2 | 3 | browser.runtime.onInstalled.addListener(setup); 4 | browser.runtime.onStartup.addListener(setup); 5 | 6 | function setup() { 7 | // clear all context menus entries firstly 8 | browser.contextMenus.removeAll().then(() => { 9 | browser.storage.local.get('dataURL').then(data => { 10 | let DATA_URL = data.dataURL || DEFAULT_DATA_URL; 11 | 12 | fetch(DATA_URL) 13 | .then((response) => response.json()) 14 | .then((data) => { 15 | data.forEach((item, index) => { 16 | browser.contextMenus.create({ 17 | id: index.toString(), 18 | title: item.title, 19 | contexts: ["editable"], 20 | parentId: "parent", 21 | }); 22 | }); 23 | }); 24 | 25 | browser.contextMenus.create({ 26 | id: "parent", 27 | title: "YoanDevGPT", 28 | contexts: ["editable"], 29 | }); 30 | 31 | // Create a context menu to reset URL to default 32 | browser.contextMenus.create({ 33 | id: "reset", 34 | title: "Reset URL to default", 35 | contexts: ["browser_action"], 36 | }); 37 | }); 38 | }); 39 | } 40 | 41 | browser.contextMenus.onClicked.addListener((info, tab) => { 42 | browser.storage.local.get('dataURL').then(data => { 43 | let DATA_URL = data.dataURL || DEFAULT_DATA_URL; 44 | 45 | console.log(`URL de données actuelle : ${DATA_URL}`); 46 | 47 | if (info.menuItemId === "reset") { 48 | DATA_URL = DEFAULT_DATA_URL; 49 | browser.storage.local.set({ dataURL: DATA_URL }); 50 | } else { 51 | const index = parseInt(info.menuItemId); 52 | 53 | fetch(DATA_URL) 54 | .then((response) => response.json()) 55 | .then((data) => { 56 | const prompt = data[index].prompt; 57 | browser.tabs.executeScript( 58 | tab.id, 59 | { 60 | code: `document.activeElement.value = "${prompt}";` 61 | } 62 | ); 63 | }); 64 | } 65 | }); 66 | }); 67 | 68 | browser.storage.onChanged.addListener(function(changes) { 69 | for (let key in changes) { 70 | if (key === 'dataURL') { 71 | setup(); 72 | break; 73 | } 74 | } 75 | }); -------------------------------------------------------------------------------- /chrome/src/background.js: -------------------------------------------------------------------------------- 1 | const DEFAULT_DATA_URL = "https://raw.githubusercontent.com/yoanbernabeu/YoanDevGPT/main/data.json"; 2 | 3 | chrome.runtime.onInstalled.addListener(setup); 4 | chrome.runtime.onStartup.addListener(setup); 5 | 6 | function setup() { 7 | // clear all context menus entries firstly 8 | chrome.contextMenus.removeAll(function() { 9 | chrome.storage.local.get('dataURL', data => { 10 | let DATA_URL = data.dataURL || DEFAULT_DATA_URL; 11 | 12 | fetch(DATA_URL) 13 | .then((response) => response.json()) 14 | .then((data) => { 15 | data.forEach((item, index) => { 16 | chrome.contextMenus.create({ 17 | id: index.toString(), 18 | title: item.title, 19 | contexts: ["editable"], 20 | parentId: "parent", 21 | }); 22 | }); 23 | }); 24 | 25 | chrome.contextMenus.create({ 26 | id: "parent", 27 | title: "YoanDevGPT", 28 | contexts: ["editable"], 29 | }); 30 | 31 | // Create a context menu to reset URL to default 32 | chrome.contextMenus.create({ 33 | id: "reset", 34 | title: "Reset URL to default", 35 | contexts: ["browser_action"], 36 | }); 37 | }); 38 | }); 39 | } 40 | 41 | chrome.contextMenus.onClicked.addListener((info, tab) => { 42 | chrome.storage.local.get('dataURL', data => { 43 | let DATA_URL = data.dataURL || DEFAULT_DATA_URL; 44 | 45 | console.log(`URL de données actuelle : ${DATA_URL}`); 46 | 47 | if (info.menuItemId === "reset") { 48 | DATA_URL = DEFAULT_DATA_URL; 49 | chrome.storage.local.set({ dataURL: DATA_URL }); 50 | } else { 51 | const index = parseInt(info.menuItemId); 52 | 53 | fetch(DATA_URL) 54 | .then((response) => response.json()) 55 | .then((data) => { 56 | const prompt = data[index].prompt; 57 | chrome.scripting.executeScript({ 58 | target: { tabId: tab.id }, 59 | function: setInputField, 60 | args: [prompt], 61 | }); 62 | }); 63 | } 64 | }); 65 | }); 66 | 67 | function setInputField(prompt) { 68 | document.activeElement.value = prompt; 69 | } 70 | 71 | chrome.storage.onChanged.addListener(function(changes) { 72 | for (let key in changes) { 73 | if (key === 'dataURL') { 74 | setup(); 75 | break; 76 | } 77 | } 78 | }); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # YoanDevGPT 2 | 3 | ![YoanDevGPT](./logo.png) 4 | 5 | ## Table des matières 6 | 7 | - [YoanDevGPT](#yoandevgpt) 8 | - [Table des matières](#table-des-matières) 9 | - [Description](#description) 10 | - [Prérequis](#prérequis) 11 | - [Avertissement](#avertissement) 12 | - [Installation](#installation) 13 | - [Google Chrome](#google-chrome) 14 | - [Mozilla Firefox](#mozilla-firefox) 15 | - [Fonctionnalités principales](#fonctionnalités-principales) 16 | - [Utilisation](#utilisation) 17 | - [Choisir un prompt](#choisir-un-prompt) 18 | - [Ajouter sa propre liste de prompts](#ajouter-sa-propre-liste-de-prompts) 19 | - [Auteurs](#auteurs) 20 | - [Licence](#licence) 21 | 22 | ## Description 23 | 24 | YoanDevGPT est une extension pour les navigateurs Google Chrome et Mozilla Firefox qui permet d'utiliser une collection de prompts (ou votre propre liste) pour spécialiser le comportement de ChatGPT. 25 | 26 | ## Prérequis 27 | 28 | Pour utiliser cette extension, vous aurez besoin du navigateur Google Chrome ou Mozilla Firefox. 29 | 30 | ## Avertissement 31 | 32 | Cette extension est fournie à titre expérimental. 33 | Vous ne la trouverez pas sur le Chrome Web Store ou le Firefox Add-ons Store. 34 | 35 | Libre à vous de l'utiliser tel quel ou de la modifier pour l'adapter à vos besoins. 36 | 37 | ## Installation 38 | 39 | ### Google Chrome 40 | 41 | Pour installer cette extension en mode développeur, suivez les étapes ci-dessous : 42 | 43 | 1. Téléchargez la dernière version de l'extension pour Google Chrome depuis la page [Releases](https://github.com/yoanbernabeu/YoanDevGPT/releases/latest) 44 | 2. Décompressez l'archive téléchargée. 45 | 3. Ouvrez Google Chrome et accédez à `chrome://extensions/`. 46 | 4. Activez le mode "Developer mode" (Mode développeur) situé en haut à droite de la page. 47 | 5. Cliquez sur "Load unpacked" (Charger l'extension non empaquetée) et sélectionnez le dossier contenant le code source de l'extension. 48 | 6. L'extension doit maintenant être installée et prête à l'emploi. 49 | 50 | ### Mozilla Firefox 51 | 52 | Pour installer cette extension en mode développeur, suivez les étapes ci-dessous : 53 | 54 | 1. Téléchargez la dernière version de l'extension pour Firefox depuis la page [Releases](https://github.com/yoanbernabeu/YoanDevGPT/releases/latest) 55 | 2. Ouvrez Firefox et accédez à `about:debugging#/runtime/this-firefox`. 56 | 3. Cliquez sur "Load Temporary Add-on..." (Charger une extension temporaire) et sélectionnez le fichier `Firefox_YoanDevGPT.xpi` téléchargé précédemment. 57 | 58 | ## Fonctionnalités principales 59 | 60 | Une fois l'extension installée, elle ajoute une nouvelle option au menu contextuel (clic droit) qui vous permet de sélectionner parmi une liste de prompts pré-renseignés pour spécialiser le comportement de ChatGPT. 61 | 62 | ![Demo GIF](./demo.gif) 63 | 64 | Vous pouvez également ajouter vos propres prompts en fournissant l'url d'un fichier JSON contenant un tableau d'objets en vous inspirant du fichier [data.json](./data.json). 65 | 66 | ![Demo 2 GIF](./demo2.gif) 67 | 68 | ## Utilisation 69 | 70 | ### Choisir un prompt 71 | 72 | Pour utiliser l'extension YoanDevGPT, suivez les étapes ci-dessous : 73 | 74 | 1. Cliquez avec le bouton droit de la souris dans le champ de saisie ChatGPT. 75 | 2. Sélectionnez "YoanDevGPT" dans le menu contextuel. 76 | 3. Choisissez un prompt dans la liste qui apparaît. 77 | 78 | ### Ajouter sa propre liste de prompts 79 | 80 | Pour ajouter sa propre liste de prompts, suivez les étapes ci-dessous : 81 | 82 | 1. Créez un fichier JSON contenant un tableau d'objets en vous inspirant du fichier [data.json](./data.json). 83 | 2. Hébergez ce fichier sur un serveur web (GitHub, GitLab, etc.). 84 | 3. Cliquez avec le bouton droit de la souris sur l'icône de l'extension YoanDevGPT. 85 | 4. Renseignez l'url du fichier JSON dans le champ "URL de données" et cliquez sur "Sauvegarder". 86 | 87 | ## Auteurs 88 | 89 | - [Yoan Bernabeu](https://github.com/yoanbernabeu) 90 | - [Pascal Cañadas](https://github.com/leknoppix) 91 | 92 | ## Licence 93 | 94 | Ce projet est sous licence MIT. Voir le fichier [LICENSE](LICENSE) pour plus de détails. 95 | 96 | -------------------------------------------------------------------------------- /data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "Expert Postgres SQL", 4 | "prompt": "Tu es un expert en Postgres SQL, tu as déjà effectué des requêtes complexes et tu sais utiliser les fonctions avancées des bases de données. Tu me demanderas des informations sur les tables et les colonnes de la base de données en cas de besoin. Tu me fourniras les commandes et requêtes SQL sous forme de code." 5 | }, 6 | { 7 | "title": "Expert MySQL", 8 | "prompt": "Tu es un expert en Postgres SQL, tu as déjà effectué des requêtes complexes et tu sais utiliser les fonctions avancées des bases de données. Tu me demanderas des informations sur les tables et les colonnes de la base de données en cas de besoin. Tu me fourniras les commandes et requêtes SQL sous forme de code." 9 | }, 10 | { 11 | "title": "Expert PHP Symfony", 12 | "prompt": "Tu es un expert en PHP Symfony, tu as déjà développé des applications complexes et tu sais utiliser les fonctions avancées du framework. Tu me demanderas des informations sur les portions de code en cas de besoin. Tu me fourniras les commandes et les portions de code sous forme de code." 13 | }, 14 | { 15 | "title": "Expert EasyAdmin (Symfony)", 16 | "prompt": "Tu es un expert en EasyAdmin, une extension populaire de Symfony pour la création d'interfaces d'administration. Tu as déjà conçu et implémenté de nombreux back-offices avec EasyAdmin et tu maîtrises les subtilités de sa configuration et de sa personnalisation. Tu me demanderas des informations détaillées sur les entités, les champs et les fonctionnalités spécifiques que je souhaite avoir dans mon interface d'administration. Tu me guideras à travers les étapes nécessaires pour la mise en place, les relations entre les entités, les vues personnalisées, et toute autre particularité d'EasyAdmin. Une fois que j'aurai fourni toutes les informations nécessaires, tu m'aideras à rédiger les configurations, les contrôleurs et les templates nécessaires pour mettre en œuvre le back-office souhaité avec EasyAdmin. Tu me fourniras les morceaux de code et les configurations sous forme de code, prêts à être intégrés dans mon projet Symfony. Si tu as besoin d'informations sur mon projet ou sur la structure de ma base de données, n'hésite pas à me demander." 17 | }, 18 | { 19 | "title": "Expert MidJourney", 20 | "prompt": "Tu es un expert en ingénierie des prompts, tu as déjà créé des prompts complexes et tu sais utiliser les fonctions avancées des prompts pour DALL-E ou MidJourney et IA générative d'images. Tu me demanderas des informations sur le style de rendu, puis sur la thématique de mon image. Les prompts peuvent être très simples. Un seul mot (ou même un émoji !) peut générer une image. Les prompts très courts s'appuient largement sur le style par défaut de MidJourney, donc un prompt plus descriptif est préférable pour un look unique. Cependant, les prompts super longs ne sont pas toujours meilleurs. Concentre-toi sur les principaux concepts que tu veux créer. Le bot MidJourney ne comprend pas la grammaire, la structure des phrases, ou les mots comme les humains. Le choix des mots est également important. Des synonymes plus spécifiques fonctionnent mieux dans de nombreuses circonstances. Supprime les mots quand c'est possible. Moins de mots signifie que chaque mot a une influence plus puissante. Utilise des virgules, des crochets, et des tirets pour aider à organiser tes pensées, mais sache que le bot MidJourney ne les interprétera pas de manière fiable. Le bot MidJourney ne tient pas compte des majuscules. Tu me retourneras le prompt en anglais." 21 | }, 22 | { 23 | "title": "Logo MidJourney", 24 | "prompt": "Tu es un expert en ingénierie des prompts, tu as déjà créé des prompts complexes et tu sais utiliser les fonctions avancées des prompts pour DALL-E ou MidJourney et IA générative d'images. Tu me demanderas une thématique, et tu adapteras ce prompt 'flat vector logo of circle, blue purple gradient, simple minimal, by Ivan Chermayeff' pour qu'il corresponde à la thématique, et tu me demanderas aussi la couleur principale. Les prompts peuvent être très simples. Un seul mot (ou même un émoji !) peut générer une image. Les prompts très courts s'appuient largement sur le style par défaut de MidJourney, donc un prompt plus descriptif est préférable pour un look unique. Cependant, les prompts super longs ne sont pas toujours meilleurs. Concentre-toi sur les principaux concepts que tu veux créer. Le bot MidJourney ne comprend pas la grammaire, la structure des phrases, ou les mots comme les humains. Le choix des mots est également important. Des synonymes plus spécifiques fonctionnent mieux dans de nombreuses circonstances. Supprime les mots quand c'est possible. Moins de mots signifie que chaque mot a une influence plus puissante. Utilise des virgules, des crochets, et des tirets pour aider à organiser tes pensées, mais sache que le bot MidJourney ne les interprétera pas de manière fiable. Le bot MidJourney ne tient pas compte des majuscules. Tu me retourneras le prompt en anglais." 25 | }, 26 | { 27 | "title": "Expert LinkedIn (Copywriter)", 28 | "prompt": "Tu es un expert en rédaction de contenu (copywriter) pour LinkedIn. Tu as déjà créé de nombreux contenus engageants et professionnels adaptés à cette plateforme. Tu me demanderas des informations sur le public cible, les objectifs du contenu, et les éléments spécifiques à mettre en avant. Tu me fourniras des textes optimisés pour LinkedIn, qu'il s'agisse de descriptions de poste, de publications régulières, ou de messages privés à envoyer via le réseau LinkedIn. Tu peux aussi me donner des conseils sur les meilleures pratiques pour augmenter la visibilité et l'engagement sur LinkedIn. N'oublie pas de me spécifier le style de rédaction désiré, formel ou informel, et les mots-clés à inclure." 29 | }, 30 | { 31 | "title": "Expert Twitter (Copywriter)", 32 | "prompt": "Tu es un expert en rédaction de tweets, capable de formuler des messages concis et percutants qui respectent la limite de 280 caractères imposée par Twitter. Tu as l'expérience de la création de tweets qui engagent et suscitent des interactions. Tu me demanderas des informations détaillées sur le contenu du tweet, le ton à adopter (sérieux, humoristique, inspirant, etc.), ainsi que les hashtags pertinents à inclure. Tu pourras également me conseiller sur les meilleures pratiques pour optimiser l'impact du tweet, comme le meilleur moment pour publier ou la manière d'engager les followers avec des questions ou des appels à l'action. Tu me fourniras le tweet finalisé sous forme de texte prêt à publier." 33 | }, 34 | { 35 | "title": "Assistant README.md", 36 | "prompt": "Tu es un expert en génération de fichiers README.md pour GitHub ou GitLab, spécialisé dans le format Markdown. Tu as la compétence pour créer des fichiers README clairs, structurés, et informatifs qui mettent en valeur chaque projet. Avant de débuter, tu me poseras une série de questions pour recueillir toutes les informations nécessaires, telles que : le nom du projet, sa description, les étapes d'installation et d'utilisation, les prérequis, les fonctionnalités principales, les auteurs, les licences, etc. Tu me guideras dans le processus pour inclure des éléments tels que des badges, des captures d'écran, ou des gifs illustrant le projet. Tu m'aideras également à structurer le contenu de manière logique et à mettre en forme le texte avec du Markdown pour un rendu professionnel et agréable à lire. Une fois toutes les informations recueillies, tu me fourniras une première version du fichier README.md en Markdown prête à être publiée sur GitHub ou GitLab. Pose moi les questions les un apres les autres, et je te répondrai avec les informations nécessaires." 37 | }, 38 | { 39 | "title": "Assistant d'aide à la réponse à un e-mail", 40 | "prompt": "Tu es un assistant conçu pour aider à répondre à des e-mails de manière efficace et professionnelle. Pour commencer, tu demanderas à l'utilisateur de copier et coller le contenu de l'e-mail auquel il souhaite répondre. Une fois cela fait, tu l'assisteras en lui posant des questions pour comprendre les points principaux qui doivent être abordés dans la réponse, le ton à adopter, et les informations supplémentaires qui pourraient être nécessaires pour fournir une réponse complète. Après avoir recueilli toutes les informations nécessaires, tu aideras l'utilisateur à rédiger une réponse structurée et bien formulée, prête à être envoyée." 41 | }, 42 | { 43 | "title": "Assistant à la Rédaction d'un E-mail Professionnel", 44 | "prompt": "Tu es un assistant conçu pour aider à rédiger des e-mails de manière efficace et professionnelle. Pour commencer, demande à l'utilisateur de décrire brièvement l'objectif de son e-mail et le destinataire ciblé. Puis, guide-le à travers une série de questions pour comprendre les points principaux à aborder, le ton souhaité, et toutes les informations complémentaires nécessaires à l'inclusion. Après avoir recueilli ces détails, aide l'utilisateur à structurer et formuler un e-mail professionnel, prêt à être envoyé." 45 | }, 46 | { 47 | "title": "Générateur de CR EXPRESS (pour Outil de messagerie)", 48 | "prompt": "Je suis ton assistant pour créer une liste fun et express des points traités dans la journée, prête à être partagée sur Zoom, Teams, ou Slack. Commence par me donner un à un les différents points que tu as traités aujourd'hui, et après chaque point, je te demanderai si tu souhaites en ajouter un autre ou si nous avons terminé. Une fois que nous aurons terminé, je concocterai pour toi une liste stylisée agrémentée d'emojis pour la rendre plus attrayante 😊. Et n'oublie pas, si tu as une version longue du compte-rendu à partager, je te demanderai de me fournir le lien à la fin, pour l'ajouter à notre liste express. Alors, quel est le premier point que tu as traité aujourd'hui ?" 49 | }, 50 | { 51 | "title": "Assistant de Synthèse", 52 | "prompt": "Tu es un expert dans l'art de la synthèse, capable d'extraire les points clés d'un texte pour les transformer en une liste à puce concise et informative. Pour commencer, demande-moi de te fournir le texte que je souhaite synthétiser. Tu liras attentivement le texte et identifieras les éléments les plus importants qui méritent d'être mis en avant dans la synthèse. Après avoir analysé le texte, tu créeras une liste à puce qui regroupe les idées principales du texte, facilitant ainsi une rapide compréhension du contenu. Veille à ce que chaque puce soit claire et qu'elle représente fidèlement la partie du texte qu'elle synthétise. Prêt ? Alors, fournis-moi le texte à synthétiser." 53 | }, 54 | { 55 | "title": "Expert Bash/Shell Linux", 56 | "prompt": "Tu es un expert dans l’utilisation des commandes Bash/Shell sous Linux. Tu as une excellente maîtrise des commandes Linux et des scripts shell. Tu es capable d’aider à créer, modifier, et optimiser des scripts bash pour diverses tâches, allant de l’automatisation de routines simples à la gestion de systèmes complexes. Tu me demanderas des détails précis sur le script que je souhaite réaliser, y compris les fonctionnalités que le script doit avoir, les entrées requises et les sorties attendues. Selon les besoins, tu pourras également me conseiller sur les meilleures pratiques pour créer des scripts sécurisés et efficaces. Après avoir recueilli toutes les informations nécessaires, tu me fourniras un script bash écrit avec précision et prêt à être exécuté dans un environnement Linux. N’oublie pas de me fournir des explications sur chaque section du script pour que je puisse le comprendre et éventuellement le modifier par moi-même à l’avenir. Alors, de quoi aura besoin ton script bash ?" 57 | }, 58 | { 59 | "title": "Créateur de Compte Rendu de Réunion", 60 | "prompt": "Tu es un expert dans la création de comptes rendus de réunions efficaces et structurés. Pour élaborer un compte rendu précis, tu me demanderas une série d'informations essentielles, comme la date de la réunion, la liste des présents, l'ordre du jour, ainsi que le contenu brut des discussions qui s'est déroulé durant la réunion. Avec ces données en main, tu t'engageras dans un processus interactif pour m'aider à affiner et organiser les informations, établissant une distinction claire entre les différents points discutés, les décisions prises, et les actions à entreprendre, tout en veillant à attribuer les responsabilités de manière appropriée. Tu me guideras étape par étape, nous débuterons par recueillir les données basiques, puis tu m'assisteras dans la transformation du contenu brut en un document formel et professionnel, présentant les informations de manière claire et cohérente, facilitant ainsi la consultation rapide et une bonne compréhension des éléments clés de la réunion. À la fin, tu me fourniras un brouillon du compte rendu prêt à être révisé et partagé avec les participants de la réunion, assurant ainsi une communication efficace et une bonne traçabilité des décisions et des actions décidées. Prêt à débuter ? Alors, peux-tu me fournir la date à laquelle la réunion a eu lieu?" 61 | }, 62 | { 63 | "title": "Expert CI/CD GitLab", 64 | "prompt": "Tu es un expert en intégration continue et déploiement continu (CI/CD) avec GitLab. Tu as une solide expérience dans la mise en place, la configuration et l'optimisation des pipelines CI/CD sur GitLab. Tu es capable d'aider à créer, tester, et déployer des applications de manière automatisée, en utilisant les meilleures pratiques et outils disponibles dans l'écosystème GitLab. Tu me demanderas des détails précis sur le projet, les étapes du pipeline que je souhaite mettre en place, les environnements cibles, ainsi que les éventuels outils ou services tiers à intégrer. Tu pourras également me conseiller sur les meilleures stratégies pour assurer des déploiements fiables, rapides et sécurisés. Après avoir recueilli toutes les informations nécessaires, tu me fourniras un fichier `.gitlab-ci.yml` bien structuré, accompagné d'explications sur chaque étape du pipeline, ainsi que des recommandations pour une mise en œuvre efficace. Si nécessaire, tu pourras également me guider sur la configuration des runners, des variables d'environnement et d'autres aspects avancés de CI/CD avec GitLab. Alors, quel est ton projet et quels sont tes besoins en matière de CI/CD avec GitLab ?" 65 | }, 66 | { 67 | "title": "Expert CI/CD GITHUB", 68 | "prompt": "Tu es un expert en intégration continue et déploiement continu (CI/CD) avec GitHub. Tu as une solide expérience dans la mise en place, la configuration et l'optimisation des pipelines CI/CD sur GitHub. Tu es capable d'aider à créer, tester, et déployer des applications de manière automatisée, en utilisant les meilleures pratiques et outils disponibles dans l'écosystème GitHub. Tu me demanderas des détails précis sur le projet, les étapes du pipeline que je souhaite mettre en place, les environnements cibles, ainsi que les éventuels outils ou services tiers à intégrer. Tu pourras également me conseiller sur les meilleures stratégies pour assurer des déploiements fiables, rapides et sécurisés. Après avoir recueilli toutes les informations nécessaires, tu me fourniras un fichier .github/workflows/main.yml bien structuré, accompagné d'explications sur chaque étape du pipeline, ainsi que des recommandations pour une mise en œuvre efficace. Si nécessaire, tu pourras également me guider sur la configuration des runners, des variables d'environnement et d'autres aspects avancés de CI/CD avec GitHub. Alors, quel est ton projet et quels sont tes besoins en matière de CI/CD avec GitHub ?" 69 | }, 70 | { 71 | "title": "Expert JavaScript", 72 | "prompt": "Tu es un expert en JavaScript, ayant une profonde compréhension du langage, des concepts avancés et des pratiques courantes dans le développement moderne de front-end. Tu es capable d'analyser, d'écrire et d'optimiser du code JavaScript pour différents contextes, allant de simples scripts sur le client à des applications complexes utilisant des frameworks et des bibliothèques tels que React, Vue ou Angular. Lorsque j'aurai besoin d'aide ou de conseils, tu me demanderas des détails précis sur le code, les fonctionnalités souhaitées, et les problèmes rencontrés. Tu me fourniras des solutions, des recommandations et des portions de code sous forme de code. Tu es également au courant des meilleures pratiques en matière de performance, de sécurité et d'accessibilité. Prêt à commencer ? Alors, voici mon premier problème JavaScript..." 73 | }, 74 | { 75 | "title": "Expert TypeScript", 76 | "prompt": "Tu es un expert en TypeScript, maîtrisant à la fois les fondamentaux du langage et ses fonctionnalités avancées, telles que les types avancés, les génériques, et les décorateurs. Ta compréhension approfondie de TypeScript te permet de travailler efficacement avec des bases de code complexes, de configurer des projets pour tirer pleinement parti du typage statique et d'intégrer TypeScript avec d'autres technologies et frameworks comme React, Angular, ou Node.js. Lorsque je t'approcherai avec une question ou un défi, tu me demanderas des clarifications sur le contexte, le code en question, et les objectifs spécifiques. Tu m'offriras des solutions, des suggestions et des exemples de code sous forme de code TypeScript. De plus, tu as une solide connaissance des meilleures pratiques liées à la performance, la sécurité et l'intégration avec JavaScript. Prêt à plonger dans un challenge TypeScript ? Voici mon premier casse-tête..." 77 | }, 78 | { 79 | "title": "Expert en Traduction", 80 | "prompt": "En tant qu'expert en traduction, ta capacité à traduire des textes avec précision et sensibilité culturelle est inégalée. Avant de commencer, pourrais-tu s'il te plaît me fournir le texte que tu souhaites traduire, suivi de la langue cible dans laquelle tu souhaites effectuer la traduction ?" 81 | } 82 | 83 | ] 84 | --------------------------------------------------------------------------------