[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CSSJW2FBP6Z2EKMN1KCWQW":3,"skill-same:01M6CSSJW2FBP6Z2EKMN1KCWQW":73},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":14,"repositoryHtmlUrl":44,"repositoryHomepageUrl":45,"ownerHtmlUrl":46,"ownerBlogUrl":6,"ownerDescription":47,"updatedAt":48,"install":49,"resources":62},"01M6CSSJW2FBP6Z2EKMN1KCWQW","bump",null,"Automatise les mises à jour de version des plugins avec détection automatique du type de version","atournayre\u002Fclaude-personas","atournayre","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F4262077?v=4","01M6CSSGYW0E0D0M3E2T6J9X2Z","Aurélien Tournayre","01M6CSSH3DENJF2XWZ41H0F43K",0,"MIT","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fbump\u002FSKILL.md",[],[5,19,20,21,22,23,24,25],"plugins","Bash","haiku","grep","read","edit","version","2026-11-10 10:12:30",false,"---\nname: bump\ndescription: Automatise les mises à jour de version des plugins avec détection automatique du type de version\nmodel: haiku\nallowed-tools: [Read, Edit, Bash, Glob, Grep, TaskCreate, TaskUpdate, TaskList, AskUserQuestion]\nversion: 2.0.0\nlicense: MIT\n---\n\n# Bump Version Plugin\n\nMettre à jour automatiquement la version d'un ou plusieurs plugins avec détection automatique du type de version.\n\n## IMPORTANT : Task Management System obligatoire\n\n**RÈGLE CRITIQUE** : Chaque étape DOIT être trackée via TaskCreate\u002FTaskUpdate.\n- Créer la tâche AVANT de commencer l'étape\n- Marquer `in_progress` au début\n- Marquer `completed` UNIQUEMENT quand l'étape est 100% terminée\n- NE JAMAIS sauter une étape\n\n## RÈGLE ANTI-OUBLI : Vérification avant completed\n\n**INTERDICTION** de marquer une tâche `completed` sans avoir :\n1. Exécuté CHAQUE sous-étape listée (4.1, 4.2, 4.3... pas juste certaines)\n2. Vérifié la sous-checklist `? AVANT DE MARQUER COMPLETED` de l'étape\n3. Lu les fichiers cibles pour confirmer que la modification est bien faite\n\n**Si une sous-étape semble \"non applicable\"** : tu DOIS quand même lire le fichier cible pour le vérifier. Ne JAMAIS supposer qu'une étape est inapplicable sans preuve.\n\n## Instructions à Exécuter\n\n### Étape 1 : Créer TOUTES les tâches du workflow\n\n**OBLIGATOIRE** : Utilise TaskCreate pour créer ces 6 tâches dans cet ordre exact :\n\n```\nTaskCreate #1: \"Détecter les plugins modifiés\"\n  - activeForm: \"Detecting modified plugins\"\n  - description: \"git diff pour identifier plugins avec modifications\"\n\nTaskCreate #2: \"Sélectionner les plugins à bumper\"\n  - activeForm: \"Selecting plugins to bump\"\n  - description: \"AskUserQuestion pour sélection utilisateur\"\n\nTaskCreate #3: \"Mettre à jour fichiers du plugin\"\n  - activeForm: \"Updating plugin files\"\n  - description: \"plugin.json + CHANGELOG.md + README.md du plugin\"\n\nTaskCreate #4: \"Mettre à jour fichiers du marketplace\"\n  - activeForm: \"Updating marketplace files\"\n  - description: \"README.md global + CHANGELOG.md global + marketplace.json + PR template\"\n\nTaskCreate #5: \"Mettre à jour dépendances et documentation\"\n  - activeForm: \"Updating dependencies and docs\"\n  - description: \"DEPENDENCIES.json + rebuild VitePress (npm run build)\"\n\nTaskCreate #6: \"Vérifier et afficher résumé\"\n  - activeForm: \"Verifying final result\"\n  - description: \"Lister tous les fichiers modifiés + prochaine étape\"\n```\n\n**Après création** : Affiche `TaskList` pour confirmer que les 6 tâches existent.\n\n---\n\n### Étape 2 : Détecter les plugins modifiés\n\n**TaskUpdate : Tâche #1 → `in_progress`**\n\nExécute en parallèle :\n```bash\ngit diff --name-only HEAD\ngit diff --staged --name-only\n```\n\n**Traitement** :\n1. Combine les deux listes\n2. Filtre pour extraire les noms de plugins (premier répertoire)\n3. Ignore : `.claude\u002F`, fichiers à la racine\n4. Compte les fichiers par plugin\n\n**TaskUpdate : Tâche #1 → `completed`**\n\n---\n\n### Étape 3 : Sélection interactive\n\n**TaskUpdate : Tâche #2 → `in_progress`**\n\nUtilise `AskUserQuestion` :\n```json\n{\n  \"questions\": [{\n    \"question\": \"Quels plugins veux-tu bumper ?\",\n    \"header\": \"Plugins\",\n    \"multiSelect\": true,\n    \"options\": [\n      {\"label\": \"Tous les plugins modifiés (N plugins) (Recommended)\", \"description\": \"Bumper automatiquement tous\"},\n      {\"label\": \"{plugin} (N fichiers)\", \"description\": \"Version actuelle : X.Y.Z\"}\n    ]\n  }]\n}\n```\n\n**Vérification dépréciation** : Pour chaque plugin sélectionné, lis `{plugin}\u002F.claude-plugin\u002Fplugin.json` et vérifie si `\"deprecated\": true` est présent. Si oui, afficher un avertissement :\n```\n⚠️  {plugin} est déprécié (remplacé par : {replaced_by}). Continuer quand même ? (bump patch uniquement recommandé)\n```\n\n**TaskUpdate : Tâche #2 → `completed`**\n\n---\n\n### Étape 4 : Mettre à jour fichiers du plugin\n\n**TaskUpdate : Tâche #3 → `in_progress`**\n\n**Pour CHAQUE plugin sélectionné, dans cet ordre :**\n\n#### 4.1 Détecter le type de version\n\n```bash\ngit diff --staged --name-only --diff-filter=A | grep \"^{plugin}\u002F\"\n```\n\n**Règles** :\n- Nouveaux agents (`agents\u002F*.md`) → MINOR\n- Nouveaux skills (`skills\u002F*\u002F`) → MINOR\n- Nouveau plugin (pas dans marketplace.json) → MINOR\n- Sinon → PATCH\n\n#### 4.2 Calculer la nouvelle version\n\nLis `{plugin}\u002F.claude-plugin\u002Fplugin.json` et calcule :\n- PATCH : `1.2.3` → `1.2.4`\n- MINOR : `1.2.3` → `1.3.0`\n\n#### 4.3 Analyser les changements\n\n```bash\ngit diff {plugin}\u002F\ngit diff --staged {plugin}\u002F\n```\n\nCatégorise en : Added, Changed, Fixed, Removed\n\n#### 4.4 Mettre à jour plugin.json\n\n```json\n\"version\": \"NOUVELLE_VERSION\"\n```\n\n#### 4.5 Mettre à jour CHANGELOG du plugin\n\nAjoute en haut (après le titre) :\n```markdown\n## [NOUVELLE_VERSION] - YYYY-MM-DD\n\n### Added\n- ...\n\n### Changed\n- ...\n```\n\n#### 4.6 Mettre à jour README du plugin (si nouveaux agents\u002Fskills)\n\n**OBLIGATOIRE si MINOR** : Lis `{plugin}\u002FREADME.md` avec Read et mets à jour :\n- Ajouter la nouvelle commande\u002Fskill dans le tableau \"Slash Commands\" ou équivalent\n- Ajouter les nouveaux agents dans la section agents si elle existe\n- Mettre à jour la structure du plugin (arborescence `tree`)\n- Ajouter une section usage\u002Fexemples pour les nouvelles fonctionnalités\n\nSi le README ne contient pas de section pertinente, en ajouter une.\n\n**? AVANT DE MARQUER COMPLETED - Vérifie ces points :**\n- [ ] `{plugin}\u002F.claude-plugin\u002Fplugin.json` → version mise à jour (Read pour vérifier)\n- [ ] `{plugin}\u002FCHANGELOG.md` → nouvelle entrée en haut du fichier (Read pour vérifier)\n- [ ] `{plugin}\u002FREADME.md` → nouvelles commandes\u002Fagents\u002Fstructure documentés (Read pour vérifier)\n- [ ] Si MINOR et aucune modif README → ERREUR, tu as oublié quelque chose\n\n**TaskUpdate : Tâche #3 → `completed`**\n\n---\n\n### Étape 5 : Mettre à jour fichiers du marketplace\n\n**TaskUpdate : Tâche #4 → `in_progress`**\n\n#### 5.1 Mettre à jour README.md global\n\n**OBLIGATOIRE** : Lis `README.md` avec Read. Trouve le tableau des plugins et mets à jour la ligne du plugin :\n```markdown\n| ? **{Plugin}** | NOUVELLE_VERSION | Description mise à jour | [README](...) |\n```\n\n#### 5.2 Mettre à jour CHANGELOG.md global\n\n**OBLIGATOIRE** : Lis `CHANGELOG.md` avec Read. Vérifie si section du jour existe :\n```markdown\n## [YYYY.MM.DD] - YYYY-MM-DD\n```\n\nSi non, crée-la après `## [Unreleased]`.\n\nAjoute :\n```markdown\n### Plugins Updated\n- **{plugin} vNOUVELLE_VERSION** - Résumé des changements\n  - Détail changement 1\n  - Détail changement 2\n  - Dépôt : [{plugin}\u002FCHANGELOG.md]({plugin}\u002FCHANGELOG.md)\n```\n\n#### 5.3 Mettre à jour marketplace.json (si nouveau plugin)\n\n**OBLIGATOIRE** : Lis `.claude-plugin\u002Fmarketplace.json` avec Read. Si le plugin n'existe pas :\n```json\n{\n  \"name\": \"{plugin}\",\n  \"source\": \".\u002F{plugin}\",\n  \"description\": \"...\"\n}\n```\n\nSi le plugin existe déjà, vérifier que sa description est à jour.\n\n#### 5.4 Synchroniser README.md et marketplace.json\n\nVérifie la cohérence :\n- Plugins dans README mais pas marketplace → ajouter\n- Plugins dans marketplace mais pas README → ajouter\n- Ordre alphabétique dans les deux fichiers\n\n#### 5.5 Mettre à jour la documentation `.env.claude` (si applicable)\n\n**Condition** : Vérifie si les fichiers modifiés du plugin contiennent des références à `.env.claude` :\n```bash\ngit diff {plugin}\u002F | grep -i \"env\\.claude\\|MAIN_BRANCH\\|WORKTREE_DIR\\|REPO\\|PROJECT\"\n```\n\n**Si des variables `.env.claude` sont ajoutées ou modifiées dans les skills** :\n1. Lis `docs\u002Fguide\u002Fenv-claude.md` avec Read\n2. Vérifie que chaque variable utilisée dans les skills modifiés est documentée dans la page\n3. Pour chaque variable manquante ou obsolète :\n   - Ajouter la variable dans la section \"Variables disponibles\" avec le même format que les existantes\n   - Ajouter le skill dans le tableau \"Skills qui l'utilisent\" de la variable\n4. Vérifier que les exemples sont cohérents avec les changements\n\n**Si aucune référence `.env.claude` détectée** : passer cette sous-étape.\n\n#### 5.6 Mettre à jour les badges de dépréciation dans VitePress\n\n**Condition** : Exécuter si `{plugin}\u002F.claude-plugin\u002Fplugin.json` contient `\"deprecated\": true`.\n\n**5.6.1 Sidebar (`docs\u002F.vitepress\u002Fconfig.ts`)** :\nLis le fichier. La sidebar est définie dans la constante `pluginsSidebar` en haut du fichier. Trouve l'item correspondant au plugin (cherche `link: '\u002Fplugins\u002F{plugin}'` dans la constante). Ajoute le champ `badge` si absent :\n```ts\n{ text: '{Plugin}', link: '\u002Fplugins\u002F{plugin}', badge: { text: 'Déprécié', type: 'danger' } }\n```\n\n**5.6.2 Page doc (`docs\u002Fplugins\u002F{plugin}.md`)** :\n⚠️ Ne pas modifier manuellement ce fichier. Il est **généré automatiquement** par `scripts\u002Fgenerate-docs.ts` lors du rebuild VitePress (étape 6.2). Le badge `\u003CBadge type=\"danger\" text=\"Déprécié\" \u002F>` et le callout `:::warning` sont ajoutés automatiquement si `deprecated: true` est présent dans `plugin.json`.\n\n**Si aucun `deprecated: true` détecté** : passer cette sous-étape.\n\n#### 5.7 Mettre à jour le template PR\n\nMet à jour `.github\u002FPULL_REQUEST_TEMPLATE\u002Fdefault.md` avec la liste des plugins :\n\n1. Liste tous les dossiers contenant un `plugin.json` :\n```bash\nfind . -name \"plugin.json\" -path \"*\u002F.claude-plugin\u002F*\" | sed 's|^\\.\u002F||' | sed 's|\u002F.claude-plugin\u002Fplugin.json||' | grep -v \"^templates\u002F\" | sort\n```\n\n2. Génère la section \"Plugin(s) concerné(s)\" avec checkboxes :\n```markdown\n## Plugin(s) concerné(s)\n\n\u003C!-- Coche les plugins impactés -->\n\n- [ ] {plugin1}\n- [ ] {plugin2}\n...\n```\n\n3. Remplace la section existante dans le template (entre `## Plugin(s) concerné(s)` et `## Checklist`)\n\n**? AVANT DE MARQUER COMPLETED - Vérifie ces points :**\n- [ ] `README.md` global → ligne du plugin mise à jour avec nouvelle version (Read pour vérifier)\n- [ ] `CHANGELOG.md` global → entrée du jour avec résumé du plugin (Read pour vérifier)\n- [ ] `.claude-plugin\u002Fmarketplace.json` → plugin présent avec description à jour (Read pour vérifier)\n- [ ] `docs\u002Fguide\u002Fenv-claude.md` → variables `.env.claude` à jour si applicable (Read pour vérifier)\n- [ ] Si `deprecated: true` → `docs\u002F.vitepress\u002Fconfig.ts` badge ajouté + `docs\u002Fplugins\u002F{plugin}.md` callout ajouté (Read pour vérifier)\n- [ ] `.github\u002FPULL_REQUEST_TEMPLATE\u002Fdefault.md` → liste plugins synchronisée (Read pour vérifier)\n\n**TaskUpdate : Tâche #4 → `completed`**\n\n---\n\n### Étape 6 : Mettre à jour dépendances et documentation\n\n**TaskUpdate : Tâche #5 → `in_progress`**\n\n#### 6.1 DEPENDENCIES.json\n\nSi `{plugin}\u002FDEPENDENCIES.json` n'existe pas, scanner et créer :\n```json\n{\n  \"version\": \"1.0\",\n  \"critical\": {},\n  \"optional\": {},\n  \"packages\": {\"npm\": {}}\n}\n```\n\n#### 6.2 Rebuild VitePress\n\n**OBLIGATOIRE - TOUJOURS EXÉCUTER, SANS EXCEPTION** :\n```bash\ncd docs && npm run build\n```\n\nVérifie que la commande s'exécute sans erreur. Si erreur, corriger avant de continuer.\n\n#### 6.3 Vérifier les fichiers générés\n\n```bash\ngit status --short docs\u002F\n```\n\nLes fichiers `docs\u002Fplugins\u002F{plugin}.md` et `docs\u002Fcommands\u002Findex.md` doivent être modifiés.\nSi nouveaux agents ajoutés, `docs\u002Fagents\u002Findex.md` doit aussi être modifié.\nSi nouveaux hooks ajoutés, `docs\u002Fhooks\u002Findex.md` doit aussi être modifié.\n\n**? AVANT DE MARQUER COMPLETED - Vérifie ces points :**\n- [ ] `{plugin}\u002FDEPENDENCIES.json` → existe (Read pour vérifier)\n- [ ] `cd docs && npm run build` → exécuté avec succès (0 erreurs)\n- [ ] `git status --short docs\u002F` → au moins `docs\u002Fplugins\u002F{plugin}.md` et `docs\u002Fcommands\u002Findex.md` modifiés\n- [ ] Si nouveaux agents → `docs\u002Fagents\u002Findex.md` aussi modifié\n- [ ] Si nouveaux hooks → `docs\u002Fhooks\u002Findex.md` aussi modifié\n\n**TaskUpdate : Tâche #5 → `completed`**\n\n---\n\n### Étape 7 : Vérification et résumé final\n\n**TaskUpdate : Tâche #6 → `in_progress`**\n\nAffiche le résumé complet :\n\n```\n✅ Plugin {plugin} : v{OLD} → v{NEW} ({TYPE})\n\nType : {PATCH|MINOR}\nRaison : {description}\n\nFichiers modifiés :\n✓ {plugin}\u002F.claude-plugin\u002Fplugin.json\n✓ {plugin}\u002FCHANGELOG.md\n✓ {plugin}\u002FREADME.md (si applicable)\n✓ README.md\n✓ CHANGELOG.md\n✓ .claude-plugin\u002Fmarketplace.json (si nouveau)\n✓ .github\u002FPULL_REQUEST_TEMPLATE\u002Fdefault.md\n✓ docs\u002Fplugins\u002F{plugin}.md\n✓ docs\u002Fcommands\u002Findex.md\n✓ docs\u002Fagents\u002Findex.md (si nouveaux agents)\n✓ docs\u002Fhooks\u002Findex.md (si nouveaux hooks)\n\nProchaine étape : \u002Fgit:commit\n```\n\n**TaskUpdate : Tâche #6 → `completed`**\n\n---\n\n## Checklist de validation finale\n\n**OBLIGATOIRE** : Avant de terminer, vérifie chaque fichier individuellement avec `git diff --name-only` et confirme que TOUS ces fichiers apparaissent dans la liste des modifiés :\n\n### Fichiers du plugin (par plugin bumpé)\n- [ ] `{plugin}\u002F.claude-plugin\u002Fplugin.json` → version incrémentée\n- [ ] `{plugin}\u002FCHANGELOG.md` → nouvelle entrée datée du jour\n- [ ] `{plugin}\u002FREADME.md` → à jour si MINOR (nouveaux skills\u002Fagents documentés)\n\n### Fichiers du marketplace (toujours)\n- [ ] `README.md` → tableau des plugins avec nouvelle version\n- [ ] `CHANGELOG.md` → entrée du jour avec résumé plugin\n- [ ] `.claude-plugin\u002Fmarketplace.json` → description à jour (si nouveau plugin)\n- [ ] `docs\u002Fguide\u002Fenv-claude.md` → variables `.env.claude` à jour (si nouvelles variables détectées)\n- [ ] `.github\u002FPULL_REQUEST_TEMPLATE\u002Fdefault.md` → liste plugins synchronisée\n\n### Documentation générée (toujours)\n- [ ] `docs\u002Fplugins\u002F{plugin}.md` → régénéré via VitePress (badge + callout dépréciation auto si `deprecated: true`)\n- [ ] `docs\u002Fcommands\u002Findex.md` → régénéré via VitePress\n- [ ] `docs\u002Fagents\u002Findex.md` → régénéré si nouveaux agents\n- [ ] `docs\u002Fhooks\u002Findex.md` → régénéré si nouveaux hooks\n\n### Tâches\n- [ ] Tâche #1 completed : Plugins détectés\n- [ ] Tâche #2 completed : Sélection faite\n- [ ] Tâche #3 completed : Fichiers plugin mis à jour\n- [ ] Tâche #4 completed : Fichiers marketplace mis à jour\n- [ ] Tâche #5 completed : Dépendances + VitePress rebuild\n- [ ] Tâche #6 completed : Résumé affiché\n\n**Si un fichier manque dans `git diff --name-only`, STOP : tu as oublié une étape.**\n\n---\n\n## Règles de versioning\n\n- **MINOR** (X.Y.0 → X.Y+1.0) : Nouveaux agents, skills, ou nouveau plugin\n- **PATCH** (X.Y.Z → X.Y.Z+1) : Modifications, corrections, refactoring, documentation\n\n## Relevant Files\n\n- `{plugin}\u002F.claude-plugin\u002Fplugin.json`\n- `{plugin}\u002FCHANGELOG.md`\n- `{plugin}\u002FREADME.md`\n- `README.md`\n- `CHANGELOG.md`\n- `.claude-plugin\u002Fmarketplace.json`\n- `{plugin}\u002FDEPENDENCIES.json`\n- `docs\u002Fplugins\u002F{plugin}.md`\n- `docs\u002Fcommands\u002Findex.md`\n- `docs\u002Fguide\u002Fenv-claude.md`\n- `.github\u002FPULL_REQUEST_TEMPLATE\u002Fdefault.md`\n","# Bump Version Plugin\n\nMettre à jour automatiquement la version d'un ou plusieurs plugins avec détection automatique du type de version.\n\n## IMPORTANT : Task Management System obligatoire\n\n**RÈGLE CRITIQUE** : Chaque étape DOIT être trackée via TaskCreate\u002FTaskUpdate.\n- Créer la tâche AVANT de commencer l'étape\n- Marquer `in_progress` au début\n- Marquer `completed` UNIQUEMENT quand l'étape est 100% terminée\n- NE JAMAIS sauter une étape\n\n## RÈGLE ANTI-OUBLI : Vérification avant completed\n\n**INTERDICTION** de marquer une tâche `completed` sans avoir :\n1. Exécuté CHAQUE sous-étape listée (4.1, 4.2, 4.3... pas juste certaines)\n2. Vérifié la sous-checklist `? AVANT DE MARQUER COMPLETED` de l'étape\n3. Lu les fichiers cibles pour confirmer que la modification est bien faite\n\n**Si une sous-étape semble \"non applicable\"** : tu DOIS quand même lire le fichier cible pour le vérifier. Ne JAMAIS supposer qu'une étape est inapplicable sans preuve.\n\n## Instructions à Exécuter\n\n### Étape 1 : Créer TOUTES les tâches du workflow\n\n**OBLIGATOIRE** : Utilise TaskCreate pour créer ces 6 tâches dans cet ordre exact :\n\n```\nTaskCreate #1: \"Détecter les plugins modifiés\"\n  - activeForm: \"Detecting modified plugins\"\n  - description: \"git diff pour identifier plugins avec modifications\"\n\nTaskCreate #2: \"Sélectionner les plugins à bumper\"\n  - activeForm: \"Selecting plugins to bump\"\n  - description: \"AskUserQuestion pour sélection utilisateur\"\n\nTaskCreate #3: \"Mettre à jour fichiers du plugin\"\n  - activeForm: \"Updating plugin files\"\n  - description: \"plugin.json + CHANGELOG.md + README.md du plugin\"\n\nTaskCreate #4: \"Mettre à jour fichiers du marketplace\"\n  - activeForm: \"Updating marketplace files\"\n  - description: \"README.md global + CHANGELOG.md global + marketplace.json + PR template\"\n\nTaskCreate #5: \"Mettre à jour dépendances et documentation\"\n  - activeForm: \"Updating dependencies and docs\"\n  - description: \"DEPENDENCIES.json + rebuild VitePress (npm run build)\"\n\nTaskCreate #6: \"Vérifier et afficher résumé\"\n  - activeForm: \"Verifying final result\"\n  - description: \"Lister tous les fichiers modifiés + prochaine étape\"\n```\n\n**Après création** : Affiche `TaskList` pour confirmer que les 6 tâches existent.\n\n---\n\n### Étape 2 : Détecter les plugins modifiés\n\n**TaskUpdate : Tâche #1 → `in_progress`**\n\nExécute en parallèle :\n```bash\ngit diff --name-only HEAD\ngit diff --staged --name-only\n```\n\n**Traitement** :\n1. Combine les deux listes\n2. Filtre pour extraire les noms de plugins (premier répertoire)\n3. Ignore : `.claude\u002F`, fichiers à la racine\n4. Compte les fichiers par plugin\n\n**TaskUpdate : Tâche #1 → `completed`**\n\n---\n\n### Étape 3 : Sélection interactive\n\n**TaskUpdate : Tâche #2 → `in_progress`**\n\nUtilise `AskUserQuestion` :\n```json\n{\n  \"questions\": [{\n    \"question\": \"Quels plugins veux-tu bumper ?\",\n    \"header\": \"Plugins\",\n    \"multiSelect\": true,\n    \"options\": [\n      {\"label\": \"Tous les plugins modifiés (N plugins) (Recommended)\", \"description\": \"Bumper automatiquement tous\"},\n      {\"label\": \"{plugin} (N fichiers)\", \"description\": \"Version actuelle : X.Y.Z\"}\n    ]\n  }]\n}\n```\n\n**Vérification dépréciation** : Pour chaque plugin sélectionné, lis `{plugin}\u002F.claude-plugin\u002Fplugin.json` et vérifie si `\"deprecated\": true` est présent. Si oui, afficher un avertissement :\n```\n⚠️  {plugin} est déprécié (remplacé par : {replaced_by}). Continuer quand même ? (bump patch uniquement recommandé)\n```\n\n**TaskUpdate : Tâche #2 → `completed`**\n\n---\n\n### Étape 4 : Mettre à jour fichiers du plugin\n\n**TaskUpdate : Tâche #3 → `in_progress`**\n\n**Pour CHAQUE plugin sélectionné, dans cet ordre :**\n\n#### 4.1 Détecter le type de version\n\n```bash\ngit diff --staged --name-only --diff-filter=A | grep \"^{plugin}\u002F\"\n```\n\n**Règles** :\n- Nouveaux agents (`agents\u002F*.md`) → MINOR\n- Nouveaux skills (`skills\u002F*\u002F`) → MINOR\n- Nouveau plugin (pas dans marketplace.json) → MINOR\n- Sinon → PATCH\n\n#### 4.2 Calculer la nouvelle version\n\nLis `{plugin}\u002F.claude-plugin\u002Fplugin.json` et calcule :\n- PATCH : `1.2.3` → `1.2.4`\n- MINOR : `1.2.3` → `1.3.0`\n\n#### 4.3 Analyser les changements\n\n```bash\ngit diff {plugin}\u002F\ngit diff --staged {plugin}\u002F\n```\n\nCatégorise en : Added, Changed, Fixed, Removed\n\n#### 4.4 Mettre à jour plugin.json\n\n```json\n\"version\": \"NOUVELLE_VERSION\"\n```\n\n#### 4.5 Mettre à jour CHANGELOG du plugin\n\nAjoute en haut (après le titre) :\n```markdown\n## [NOUVELLE_VERSION] - YYYY-MM-DD\n\n### Added\n- ...\n\n### Changed\n- ...\n```\n\n#### 4.6 Mettre à jour README du plugin (si nouveaux agents\u002Fskills)\n\n**OBLIGATOIRE si MINOR** : Lis `{plugin}\u002FREADME.md` avec Read et mets à jour :\n- Ajouter la nouvelle commande\u002Fskill dans le tableau \"Slash Commands\" ou équivalent\n- Ajouter les nouveaux agents dans la section agents si elle existe\n- Mettre à jour la structure du plugin (arborescence `tree`)\n- Ajouter une section usage\u002Fexemples pour les nouvelles fonctionnalités\n\nSi le README ne contient pas de section pertinente, en ajouter une.\n\n**? AVANT DE MARQUER COMPLETED - Vérifie ces points :**\n- [ ] `{plugin}\u002F.claude-plugin\u002Fplugin.json` → version mise à jour (Read pour vérifier)\n- [ ] `{plugin}\u002FCHANGELOG.md` → nouvelle entrée en haut du fichier (Read pour vérifier)\n- [ ] `{plugin}\u002FREADME.md` → nouvelles commandes\u002Fagents\u002Fstructure documentés (Read pour vérifier)\n- [ ] Si MINOR et aucune modif README → ERREUR, tu as oublié quelque chose\n\n**TaskUpdate : Tâche #3 → `completed`**\n\n---\n\n### Étape 5 : Mettre à jour fichiers du marketplace\n\n**TaskUpdate : Tâche #4 → `in_progress`**\n\n#### 5.1 Mettre à jour README.md global\n\n**OBLIGATOIRE** : Lis `README.md` avec Read. Trouve le tableau des plugins et mets à jour la ligne du plugin :\n```markdown\n| ? **{Plugin}** | NOUVELLE_VERSION | Description mise à jour | [README](...) |\n```\n\n#### 5.2 Mettre à jour CHANGELOG.md global\n\n**OBLIGATOIRE** : Lis `CHANGELOG.md` avec Read. Vérifie si section du jour existe :\n```markdown\n## [YYYY.MM.DD] - YYYY-MM-DD\n```\n\nSi non, crée-la après `## [Unreleased]`.\n\nAjoute :\n```markdown\n### Plugins Updated\n- **{plugin} vNOUVELLE_VERSION** - Résumé des changements\n  - Détail changement 1\n  - Détail changement 2\n  - Dépôt : [{plugin}\u002FCHANGELOG.md]({plugin}\u002FCHANGELOG.md)\n```\n\n#### 5.3 Mettre à jour marketplace.json (si nouveau plugin)\n\n**OBLIGATOIRE** : Lis `.claude-plugin\u002Fmarketplace.json` avec Read. Si le plugin n'existe pas :\n```json\n{\n  \"name\": \"{plugin}\",\n  \"source\": \".\u002F{plugin}\",\n  \"description\": \"...\"\n}\n```\n\nSi le plugin existe déjà, vérifier que sa description est à jour.\n\n#### 5.4 Synchroniser README.md et marketplace.json\n\nVérifie la cohérence :\n- Plugins dans README mais pas marketplace → ajouter\n- Plugins dans marketplace mais pas README → ajouter\n- Ordre alphabétique dans les deux fichiers\n\n#### 5.5 Mettre à jour la documentation `.env.claude` (si applicable)\n\n**Condition** : Vérifie si les fichiers modifiés du plugin contiennent des références à `.env.claude` :\n```bash\ngit diff {plugin}\u002F | grep -i \"env\\.claude\\|MAIN_BRANCH\\|WORKTREE_DIR\\|REPO\\|PROJECT\"\n```\n\n**Si des variables `.env.claude` sont ajoutées ou modifiées dans les skills** :\n1. Lis `docs\u002Fguide\u002Fenv-claude.md` avec Read\n2. Vérifie que chaque variable utilisée dans les skills modifiés est documentée dans la page\n3. Pour chaque variable manquante ou obsolète :\n   - Ajouter la variable dans la section \"Variables disponibles\" avec le même format que les existantes\n   - Ajouter le skill dans le tableau \"Skills qui l'utilisent\" de la variable\n4. Vérifier que les exemples sont cohérents avec les changements\n\n**Si aucune référence `.env.claude` détectée** : passer cette sous-étape.\n\n#### 5.6 Mettre à jour les badges de dépréciation dans VitePress\n\n**Condition** : Exécuter si `{plugin}\u002F.claude-plugin\u002Fplugin.json` contient `\"deprecated\": true`.\n\n**5.6.1 Sidebar (`docs\u002F.vitepress\u002Fconfig.ts`)** :\nLis le fichier. La sidebar est définie dans la constante `pluginsSidebar` en haut du fichier. Trouve l'item correspondant au plugin (cherche `link: '\u002Fplugins\u002F{plugin}'` dans la constante). Ajoute le champ `badge` si absent :\n```ts\n{ text: '{Plugin}', link: '\u002Fplugins\u002F{plugin}', badge: { text: 'Déprécié', type: 'danger' } }\n```\n\n**5.6.2 Page doc (`docs\u002Fplugins\u002F{plugin}.md`)** :\n⚠️ Ne pas modifier manuellement ce fichier. Il est **généré automatiquement** par `scripts\u002Fgenerate-docs.ts` lors du rebuild VitePress (étape 6.2). Le badge `\u003CBadge type=\"danger\" text=\"Déprécié\" \u002F>` et le callout `:::warning` sont ajoutés automatiquement si `deprecated: true` est présent dans `plugin.json`.\n\n**Si aucun `deprecated: true` détecté** : passer cette sous-étape.\n\n#### 5.7 Mettre à jour le template PR\n\nMet à jour `.github\u002FPULL_REQUEST_TEMPLATE\u002Fdefault.md` avec la liste des plugins :\n\n1. Liste tous les dossiers contenant un `plugin.json` :\n```bash\nfind . -name \"plugin.json\" -path \"*\u002F.claude-plugin\u002F*\" | sed 's|^\\.\u002F||' | sed 's|\u002F.claude-plugin\u002Fplugin.json||' | grep -v \"^templates\u002F\" | sort\n```\n\n2. Génère la section \"Plugin(s) concerné(s)\" avec checkboxes :\n```markdown\n## Plugin(s) concerné(s)\n\n\u003C!-- Coche les plugins impactés -->\n\n- [ ] {plugin1}\n- [ ] {plugin2}\n...\n```\n\n3. Remplace la section existante dans le template (entre `## Plugin(s) concerné(s)` et `## Checklist`)\n\n**? AVANT DE MARQUER COMPLETED - Vérifie ces points :**\n- [ ] `README.md` global → ligne du plugin mise à jour avec nouvelle version (Read pour vérifier)\n- [ ] `CHANGELOG.md` global → entrée du jour avec résumé du plugin (Read pour vérifier)\n- [ ] `.claude-plugin\u002Fmarketplace.json` → plugin présent avec description à jour (Read pour vérifier)\n- [ ] `docs\u002Fguide\u002Fenv-claude.md` → variables `.env.claude` à jour si applicable (Read pour vérifier)\n- [ ] Si `deprecated: true` → `docs\u002F.vitepress\u002Fconfig.ts` badge ajouté + `docs\u002Fplugins\u002F{plugin}.md` callout ajouté (Read pour vérifier)\n- [ ] `.github\u002FPULL_REQUEST_TEMPLATE\u002Fdefault.md` → liste plugins synchronisée (Read pour vérifier)\n\n**TaskUpdate : Tâche #4 → `completed`**\n\n---\n\n### Étape 6 : Mettre à jour dépendances et documentation\n\n**TaskUpdate : Tâche #5 → `in_progress`**\n\n#### 6.1 DEPENDENCIES.json\n\nSi `{plugin}\u002FDEPENDENCIES.json` n'existe pas, scanner et créer :\n```json\n{\n  \"version\": \"1.0\",\n  \"critical\": {},\n  \"optional\": {},\n  \"packages\": {\"npm\": {}}\n}\n```\n\n#### 6.2 Rebuild VitePress\n\n**OBLIGATOIRE - TOUJOURS EXÉCUTER, SANS EXCEPTION** :\n```bash\ncd docs && npm run build\n```\n\nVérifie que la commande s'exécute sans erreur. Si erreur, corriger avant de continuer.\n\n#### 6.3 Vérifier les fichiers générés\n\n```bash\ngit status --short docs\u002F\n```\n\nLes fichiers `docs\u002Fplugins\u002F{plugin}.md` et `docs\u002Fcommands\u002Findex.md` doivent être modifiés.\nSi nouveaux agents ajoutés, `docs\u002Fagents\u002Findex.md` doit aussi être modifié.\nSi nouveaux hooks ajoutés, `docs\u002Fhooks\u002Findex.md` doit aussi être modifié.\n\n**? AVANT DE MARQUER COMPLETED - Vérifie ces points :**\n- [ ] `{plugin}\u002FDEPENDENCIES.json` → existe (Read pour vérifier)\n- [ ] `cd docs && npm run build` → exécuté avec succès (0 erreurs)\n- [ ] `git status --short docs\u002F` → au moins `docs\u002Fplugins\u002F{plugin}.md` et `docs\u002Fcommands\u002Findex.md` modifiés\n- [ ] Si nouveaux agents → `docs\u002Fagents\u002Findex.md` aussi modifié\n- [ ] Si nouveaux hooks → `docs\u002Fhooks\u002Findex.md` aussi modifié\n\n**TaskUpdate : Tâche #5 → `completed`**\n\n---\n\n### Étape 7 : Vérification et résumé final\n\n**TaskUpdate : Tâche #6 → `in_progress`**\n\nAffiche le résumé complet :\n\n```\n✅ Plugin {plugin} : v{OLD} → v{NEW} ({TYPE})\n\nType : {PATCH|MINOR}\nRaison : {description}\n\nFichiers modifiés :\n✓ {plugin}\u002F.claude-plugin\u002Fplugin.json\n✓ {plugin}\u002FCHANGELOG.md\n✓ {plugin}\u002FREADME.md (si applicable)\n✓ README.md\n✓ CHANGELOG.md\n✓ .claude-plugin\u002Fmarketplace.json (si nouveau)\n✓ .github\u002FPULL_REQUEST_TEMPLATE\u002Fdefault.md\n✓ docs\u002Fplugins\u002F{plugin}.md\n✓ docs\u002Fcommands\u002Findex.md\n✓ docs\u002Fagents\u002Findex.md (si nouveaux agents)\n✓ docs\u002Fhooks\u002Findex.md (si nouveaux hooks)\n\nProchaine étape : \u002Fgit:commit\n```\n\n**TaskUpdate : Tâche #6 → `completed`**\n\n---\n\n## Checklist de validation finale\n\n**OBLIGATOIRE** : Avant de terminer, vérifie chaque fichier individuellement avec `git diff --name-only` et confirme que TOUS ces fichiers apparaissent dans la liste des modifiés :\n\n### Fichiers du plugin (par plugin bumpé)\n- [ ] `{plugin}\u002F.claude-plugin\u002Fplugin.json` → version incrémentée\n- [ ] `{plugin}\u002FCHANGELOG.md` → nouvelle entrée datée du jour\n- [ ] `{plugin}\u002FREADME.md` → à jour si MINOR (nouveaux skills\u002Fagents documentés)\n\n### Fichiers du marketplace (toujours)\n- [ ] `README.md` → tableau des plugins avec nouvelle version\n- [ ] `CHANGELOG.md` → entrée du jour avec résumé plugin\n- [ ] `.claude-plugin\u002Fmarketplace.json` → description à jour (si nouveau plugin)\n- [ ] `docs\u002Fguide\u002Fenv-claude.md` → variables `.env.claude` à jour (si nouvelles variables détectées)\n- [ ] `.github\u002FPULL_REQUEST_TEMPLATE\u002Fdefault.md` → liste plugins synchronisée\n\n### Documentation générée (toujours)\n- [ ] `docs\u002Fplugins\u002F{plugin}.md` → régénéré via VitePress (badge + callout dépréciation auto si `deprecated: true`)\n- [ ] `docs\u002Fcommands\u002Findex.md` → régénéré via VitePress\n- [ ] `docs\u002Fagents\u002Findex.md` → régénéré si nouveaux agents\n- [ ] `docs\u002Fhooks\u002Findex.md` → régénéré si nouveaux hooks\n\n### Tâches\n- [ ] Tâche #1 completed : Plugins détectés\n- [ ] Tâche #2 completed : Sélection faite\n- [ ] Tâche #3 completed : Fichiers plugin mis à jour\n- [ ] Tâche #4 completed : Fichiers marketplace mis à jour\n- [ ] Tâche #5 completed : Dépendances + VitePress rebuild\n- [ ] Tâche #6 completed : Résumé affiché\n\n**Si un fichier manque dans `git diff --name-only`, STOP : tu as oublié une étape.**\n\n---\n\n## Règles de versioning\n\n- **MINOR** (X.Y.0 → X.Y+1.0) : Nouveaux agents, skills, ou nouveau plugin\n- **PATCH** (X.Y.Z → X.Y.Z+1) : Modifications, corrections, refactoring, documentation\n\n## Relevant Files\n\n- `{plugin}\u002F.claude-plugin\u002Fplugin.json`\n- `{plugin}\u002FCHANGELOG.md`\n- `{plugin}\u002FREADME.md`\n- `README.md`\n- `CHANGELOG.md`\n- `.claude-plugin\u002Fmarketplace.json`\n- `{plugin}\u002FDEPENDENCIES.json`\n- `docs\u002Fplugins\u002F{plugin}.md`\n- `docs\u002Fcommands\u002Findex.md`\n- `docs\u002Fguide\u002Fenv-claude.md`\n- `.github\u002FPULL_REQUEST_TEMPLATE\u002Fdefault.md`\n",{"name":5,"model":21,"license":15,"version":31,"description":7,"allowed-tools":32},"2.0.0",[33,34,20,35,36,37,38,39,40],"Read","Edit","Glob","Grep","TaskCreate","TaskUpdate","TaskList","AskUserQuestion","main","bb0335112ea0991dc1dc6a29fa5a861397a5a6f6",".claude\u002Fskills\u002Fbump","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas","https:\u002F\u002Fatournayre.github.io\u002Fclaude-personas\u002F","https:\u002F\u002Fgithub.com\u002Fatournayre","🔵, Back End Developer, @symfony  :heart:, @rectorphp :heart:,  \r\n:bug: fixer (creator sometimes 🤫), member of @afup","2026-03-02 23:42:20",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add atournayre\u002Fclaude-personas --skill bump",{"tool":55,"command":56},"bunx","bunx skills add atournayre\u002Fclaude-personas --skill bump",{"tool":58,"command":59},"pnpm","pnpm dlx skills add atournayre\u002Fclaude-personas --skill bump","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fbump\u002FSKILL.md",true,[63,69],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"Workflows\u002FCrawl.md","REFERENCE","参考文档",7690,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FPacks\u002FBrightData\u002Fsrc\u002FWorkflows\u002FCrawl.md",{"path":70,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":71,"sourceHtmlUrl":72},"Workflows\u002FFourTierScrape.md",10778,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FPacks\u002FBrightData\u002Fsrc\u002FWorkflows\u002FFourTierScrape.md",[74,87,127,134,142,153],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":26},"01M6CSZPR0W1K1S9BX3247CZJ1","twig:make-component","Génère un Twig Component Symfony UX (classe PHP + template Twig)","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Ftwig\u002Fskills\u002Fmake-component\u002FSKILL.md",[],[81,82,23,24,83,84,22,85,86,20],"twig:make component","component","write","ux","template","php",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":109,"publishedAt":26},"01M6CSZKCYYT4EAW4CDSTS3TSH","tester:ui-test","Teste automatiquement une interface utilisateur dans Chrome : navigation, clics, validation visuelle, tests fonctionnels, responsive, comportement et debug. Génère un rapport détaillé avec screenshots et optionnellement un GIF du parcours.","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Ftester\u002Fskills\u002Fui-test\u002FSKILL.md",[93,98,101,104],{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":99,"categoryName":100,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":102,"categoryName":103,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":105,"categoryName":106,"taxonomyType":107,"taxonomyTypeDesc":108},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[110,111,112,113,114,115,116,117,118,119,120,20,121,122,123,124,23,83,125,126],"test","ui","tester","ui test","tester:ui test","MCP","debug","create","update","validation","messages","plan","tool","page","find","javascript","chrome",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":26},"01M6CSZGQ8X9XNXRBYX0AA3CYE","symfony:voter","Genere un Voter de securite Symfony pour le controle d'acces granulaire","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fsymfony\u002Fskills\u002Fvoter\u002FSKILL.md",[],[129,20,22,23,83,24],{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":140,"publishedAt":26},"01M6CSZEJ3BNHCNZT18SYFGDME","symfony:message","Genere un Message Symfony Messenger avec son Handler pour traitement asynchrone","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fsymfony\u002Fskills\u002Fmessage\u002FSKILL.md",[],[136,141,20,22,23,83,24],"message",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":151,"publishedAt":26},"01M6CSZBWSK9M6YMJX886BVWYF","symfony:mailer","Genere un email Symfony (TemplatedEmail ou Notification) avec template Twig","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fsymfony\u002Fskills\u002Fmailer\u002FSKILL.md",[148],{"categoryNo":149,"categoryName":150,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000005","邮件与沟通",[144,24,152,20,85,22,23,83],"email",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":26},"01M6CSZ9DXMYZ9HTRE8A324AWG","symfony:form","Genere un FormType Symfony avec contraintes de validation et options","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fsymfony\u002Fskills\u002Fform\u002FSKILL.md",[],[155,20,22,23,83,24,160,119],"options"]