Bakchich — extension VS Code
Miroir public du client : tu lis exactement ce qui tourne sur ta machine.
Architecture
src/adapters/claudeCli.ts — injection/restauration de spinnerVerbs (écriture atomique, backup, jamais d'autre champ touché)
src/extension.ts — cycle de vie, rotation des pubs (60 s), ticks d'impression (5 s, fenêtre active + terminal requis), kill-switch, notification first-run (une seule fois via globalState)
src/auth.ts — Google OAuth via navigateur, token dans le trousseau OS
src/api.ts — les SEULES données envoyées : événements pub + token. Jamais ton code, jamais tes prompts.
test/ — le filet de sécurité : settings.json ne peut jamais être corrompu (9 tests)
media/icon.svg — logo Bakchich (cube "B", fond noir, accent vert acide #aaff00)
Développement
npm install # dépendances
npm run build # compile → dist/extension.js (esbuild, CJS, sourcemap)
npm run watch # mode watch (rebuild automatique)
npm test # 9 tests vitest, doivent tous être verts
Packaging et publication
Étape 1 — Générer l'icône PNG (obligatoire avant vsce package)
vsce package accepte uniquement un PNG pour le champ "icon" de package.json.
Le fichier source est media/icon.svg.
Convertis-le en PNG 128x128 avec l'outil de ton choix :
# Option A — Inkscape (CLI)
inkscape media/icon.svg --export-type=png --export-filename=media/icon.png -w 128 -h 128
# Option B — ImageMagick
magick convert -background none media/icon.svg -resize 128x128 media/icon.png
# Option C — Navigateur
# Ouvre media/icon.svg dans Chrome, fais clic droit → Enregistrer l'image sous → icon.png
# Puis redimensionne à 128x128 si nécessaire.
Une fois media/icon.png présent, ajoute dans package.json :
"icon": "media/icon.png"
Étape 2 — Vérifier l'identité publisher
Le champ "publisher": "bakchich" dans package.json doit correspondre exactement
au publisher créé sur https://marketplace.visualstudio.com/manage.
Étape 3 — Packager
npm run package # génère bakchich-0.1.0.vsix dans le répertoire courant
Étape 4 — Publier (hors périmètre de l'extension elle-même)
npx vsce publish # nécessite un Personal Access Token Azure DevOps
Ou upload manuel sur https://marketplace.visualstudio.com/manage.
Garanties de sécurité
- L'extension ne touche QUE le champ
spinnerVerbs de ~/.claude/settings.json
- Écriture atomique (tmp + rename) : le fichier ne peut jamais être à moitié écrit
- Backup automatique avant la première injection, restauration exacte à la déconnexion
- Opt-in strict : rien ne s'injecte avant un sign-in explicite de l'utilisateur
- Données envoyées au serveur : eventId, type, campaignId, timestamp, token — rien d'autre