Skip to content
Mathilde-TeamPublic

About

IAO — Gestionnaire multi-comptes IA (Electron, Windows/Linux). 9 services d'IA web avec sessions isolées, cooldowns, éditeur Monaco et ordonnanceur IA.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

IAO

Un poste de travail de bureau (Windows et Linux) pour utiliser plusieurs services d'IA web avec plusieurs comptes, sans jongler entre navigateurs. Chaque compte dispose de sessions isolées (cookies séparés), chaque IA s'ouvre dans son propre onglet intégré, et un suivi de « cooldown » 24 h par service aide à gérer les quotas gratuits.

Publié ici pour quiconque en a l'usage.

Avertissement de non-affiliation — Ce projet n'est affilié à, ni approuvé par, aucun des fournisseurs d'IA mentionnés (Anthropic/Claude, OpenAI/ChatGPT, Google/Gemini, Perplexity, Z.ai, xAI/Grok, Leonardo AI, Suno, Meshy AI). Les noms et marques citées appartiennent à leurs propriétaires respectifs et ne sont utilisés qu'à des fins d'identification.

Responsabilité d'usage — Cet outil n'utilise aucune API : il affiche les interfaces web officielles des services dans des onglets intégrés (webviews), où vous vous connectez et interagissez vous-même, comme dans un navigateur. Vous restez seul responsable du respect des conditions d'utilisation de chaque service, notamment de leurs règles sur l'usage de plusieurs comptes.

Aperçu

Vue principale — grille de comptes et onglets IA Barre d'onglets — plusieurs services et comptes ouverts simultanément

(Captures à ajouter dans docs/ — emplacements prévus ci-dessus.)

Fonctionnalités

  • Multi-comptes isolés : chaque compte utilise une partition Electron dédiée (persist:<profil>) — cookies et sessions strictement séparés. L'unicité du profil est imposée par l'app.
  • 9 services IA intégrés : Claude, ChatGPT, Gemini, Perplexity, Z.ai, Grok, Leonardo AI (images), Suno (musique), Meshy AI (3D). En ajouter un est un pattern simple et documenté (voir Contribuer).
  • Onglets : chaque couple (compte + service) ouvert vit dans son propre onglet, avec sa webview et sa session. On bascule d'un onglet à l'autre sans rien recharger ; rouvrir un service déjà ouvert réactive simplement son onglet. Le × de l'onglet détruit la webview et libère la mémoire du process Chromium correspondant.
  • Actions rapides sur un onglet ouvert : recharger la page, revenir à l'accueil du service, ou se déconnecter du profil (purge des cookies/session du compte, avec confirmation — action destructive).
  • Suivi de quota (« cooldown ») par service et par compte : un service en cooldown apparaît estompé et se réactive automatiquement à l'expiration (le bouton manuel « Épuiser (24h) » a été retiré, issue #136).
  • Comptes en série (bouton « personnes », issue #201) : crée N comptes d'un coup, nommés par numéro à la suite du plus grand existant (239, 240…), profil profil_<numéro>, e-mail <préfixe><numéro>@<domaine> (préfixe et domaine dans les réglages). Chaque compte reçoit un mot de passe de messagerie aléatoire, chiffré par le trousseau du système (safeStorage, jamais en clair ; refusé si aucun trousseau n'est disponible), masqué dans la fenêtre du compte avec un bouton pour l'afficher. Si l'adresse du webmail (Roundcube) est réglée, un bouton enveloppe sur chaque carte l'ouvre dans une fenêtre IAO, dans la session du compte, et s'y connecte avec l'adresse et le mot de passe du compte (formulaire Roundcube rempli et validé, une seule tentative ; issue #310) ; l'adresse est aussi copiée. Tant que cette fenêtre est ouverte, les mails reçus d'un service d'IA sont relevés toutes les 10 s : le code à 6 chiffres s'affiche dans un bandeau sous l'onglet du service (bouton Copier) et le lien de connexion y est ouvert automatiquement après 3 s (bouton Annuler). La création des boîtes sur le serveur de messagerie n'est pas encore branchée.
  • Premier onglet fixe (réglages, issue #338) : une adresse https et une case à cocher ouvrent en tête de la barre un onglet qu'on ne peut ni fermer ni déplacer. On navigue sur ce site (même hôte ou sous-domaine) ; les liens et popups vers un autre site sont bloqués. Un clic sur l'onglet ramène à l'adresse définie. Session propre (persist:onglet-fixe), où les identifiants partagés des réglages sont proposés comme ailleurs.
  • Palette rapide (Ctrl+K) : ouvrir n'importe quel service avec n'importe quel compte au clavier.
  • Raccourcis d'onglets : Ctrl+Tab / Ctrl+Maj+Tab pour circuler entre les onglets, Alt+1 à Alt+9 pour aller directement au Nᵉ. (Quand le focus est à l'intérieur d'une page IA, cliquez d'abord hors de celle-ci — Electron ne fait pas remonter les touches depuis une webview.)
  • Page d'aide intégrée (bouton ?) : description et cas d'usage de chaque IA, pour les utilisateurs qui ne les connaissent pas toutes.
  • Éditeur de code intégré (Monaco, celui de VS Code) avec explorateur de fichiers local — chargé paresseusement au premier clic, avec éditeur de secours si Monaco échoue.
  • Interface 100 % locale : polices et icônes embarquées, aucun CDN, aucune télémétrie — l'app n'envoie rien à aucun serveur ; seuls les sites des IA sont contactés, dans leurs onglets.
  • Stockage résilient : sauvegarde automatique d'une génération des données de comptes, récupération proposée en cas de corruption.
  • Ordonnanceur IA (bouton robot) : ancien flux désactivé depuis #199, remplacé par des tâches programmables en cours de développement ; IAO_ORDONNANCEUR_ANCIEN=1 le réactive. Ancien flux : détecte automatiquement les fichiers .zip livrés par les IA dans les onglets, tient un registre de jobs, et propose de reprendre un projet inachevé sur le profil disponible le plus ancien plutôt que de toujours solliciter le même compte. La partie « upload + envoi du prompt » dans le service IA n'est pas encore automatisée — la reprise se fait aujourd'hui en un clic depuis le panneau.

Installation — Linux (Ubuntu et dérivées)

Trois voies, de la plus simple à la plus manuelle. Toutes intègrent l'application au menu des applications (recherche GNOME, épinglage au Dock, icône, Alt+Tab).

A. Paquet .deb (recommandé)

npm install
npm run dist:linux:deb     # produit dist/IAO-1.0.0.deb
sudo apt install ./dist/IAO-1.0.0.deb

L'intégration au bureau est faite par le paquet lui-même (entrée .desktop, icônes hicolor, commande iao). Le sandbox Chromium est correctement configuré. Pour désinstaller :

sudo apt remove iao

B. Script d'installation fourni

Utile si vous partez d'un build electron-packager (npm run dist:linux) ou si vous ne voulez pas de paquet système.

npm install
./install.sh              # installation utilisateur, sans sudo

Le script construit l'app si nécessaire, puis installe. Le build de dist/ est reconstruit automatiquement s'il est absent ou plus ancien que les sources (après un git pull, par exemple) ; npm install est relancé si package-lock.json a changé. --rebuild force la construction, --no-build installe dist/ tel quel. Sous sudo, la construction se fait sous votre compte (sudo -u), pour que node_modules/ et dist/ ne passent pas à root.

Élément Installation utilisateur Installation système (sudo ./install.sh --system)
Application ~/.local/opt/iao/ /opt/iao/
Entrée de menu ~/.local/share/applications/ /usr/share/applications/
Icônes (16→512 px) ~/.local/share/icons/hicolor/ /usr/share/icons/hicolor/
Commande ~/.local/bin/iao /usr/local/bin/iao
Sandbox Chromium désactivé (--no-sandbox) activé (chrome-sandbox setuid root)

Désinstallation : ./install.sh --uninstall (ajoutez --system et sudo si l'installation était système).

Sandbox : le bac à sable de Chromium exige que chrome-sandbox appartienne à root avec le bit setuid — impossible sans droits root. En installation utilisateur, le lanceur détecte le cas et ajoute automatiquement --no-sandbox. Pour bénéficier du sandbox, préférez le .deb ou --system.

C. AppImage (sans installation)

npm run dist:linux:appimage
chmod +x dist/IAO-1.0.0.AppImage
./dist/IAO-1.0.0.AppImage

Un AppImage ne s'intègre pas au menu tout seul. Installez Gear Lever ou AppImageLauncher pour l'ajouter au menu en un clic.

Prérequis Linux

  • Ubuntu 22.04 ou 24.04 (testé), Node.js 18+ et npm pour construire.

  • Les dépendances système habituelles d'Electron sont déclarées par le .deb : libgtk-3-0, libnss3, libxss1, libxtst6, libnotify4, libatspi2.0-0, libsecret-1-0, xdg-utils. En cas d'erreur au lancement d'un build non packagé :

    sudo apt install libgtk-3-0 libnss3 libxss1 libxtst6 libnotify4 libatspi2.0-0 libsecret-1-0
  • Sur Ubuntu 24.04+, les restrictions AppArmor sur les espaces de noms utilisateur peuvent empêcher le démarrage d'un Electron non installé en système. Symptôme : The SUID sandbox helper binary was found, but is not configured correctly. Correctif : utiliser le .deb, ou lancer avec --no-sandbox (ce que fait déjà le lanceur du script B).

Lancer en développement (Linux)

git clone https://github.com/MathildeDec/IAO.git
cd IAO
npm install
npm run start:linux-dev    # electron . --no-sandbox

Installation — Windows

Utilisateur (binaire)

Récupérez le zip de la dernière release, décompressez le dossier en entier, lancez IAO.exe. Au premier lancement, Windows SmartScreen affiche un avertissement (exécutable non signé) : « Informations complémentaires » → « Exécuter quand même ». Voir docs/DISTRIBUTION-LISEZ-MOI.txt pour le détail.

Depuis les sources

npm install
npm run dist        :: produit dist\IAO-win32-x64\
install.bat         :: installe dans %LOCALAPPDATA%\Programs et crée le raccourci du menu Démarrer
Option Effet
install.bat Installation utilisateur, sans droits administrateur
install.bat /desktop Ajoute un raccourci sur le Bureau
install.bat /system Installation pour tous les comptes dans %ProgramFiles% — invite administrateur requise
install.bat /uninstall Désinstallation (ajoutez /system si l'installation l'était)

Le script construit l'application avec npm run dist si aucun build n'est présent. Les comptes et les sessions restent dans %APPDATA%\ai-manager et ne sont jamais supprimés.

Développement et build

Prérequis : Windows 10/11, Node.js 18+ et npm.

npm install
npm start          # lance l'app en dev (electron .)
npm test           # lance les tests unitaires (node --test, sans Electron)
npm run dist       # produit dist/IAO-win32-x64/

L'exe a besoin du dossier complet — pour distribuer, zippez tout le dossier. Le script purge automatiquement les locales Chromium inutilisées et les traductions Monaco (−46 Mo).

Limitation connue (Windows) : electron-builder ne fonctionne pas sans droits administrateur ou Mode développeur Windows (création de liens symboliques) — c'est pourquoi le packaging Windows passe par @electron/packager et qu'il n'y a ni installateur ni exe portable mono-fichier côté Windows. Sous Linux, electron-builder fonctionne normalement, d'où le .deb.

Langue de l'interface

IAO est en français. Les autres langues (29 locales gettext dans lang/) se choisissent avec IAO_LANG=en npm start ou iao --iao-lang=en. Traductions, ajout d'une langue et CI : docs/i18n.md (issue #51).

Emplacement des données

Plateforme Comptes, cooldowns et sessions IA
Linux ~/.config/ai-manager
Windows %APPDATA%\ai-manager

Les comptes (nom, adresse, profil, couleur, services, cooldowns, automatisation) sont dans profils.json de ce dossier (issue #311), au format exact du bouton « Exporter ». Créer, modifier, supprimer ou importer un compte écrit ce fichier ; la version précédente est gardée dans profils.json.bak, proposée à la restauration si profils.json devient illisible (un fichier illisible est mis de côté dans profils.json.illisible, jamais écrasé sans copie). Le stockage interne de l'interface (localStorage) ne garde plus que les onglets ouverts et l'affichage : le vider, ou réinstaller IAO, ne fait plus perdre de compte. Au premier lancement de cette version, les comptes qui y étaient encore sont recopiés une fois dans profils.json.

L'ordonnanceur tient aussi une copie dans scheduler/comptes-sauvegarde.json : si profils.json a disparu et qu'aucun compte n'est lu au démarrage, IAO propose de la restaurer, ce qui revient à l'importer.

Les préférences de l'interface (issue #331 : IA à portée de main, ordre des comptes, onglets étoilés, cartes repliées, largeur des panneaux) sont dans preferences.json de ce dossier, et les réglages de la fenêtre « Réglages » dans settings.json. Seuls les onglets ouverts restent dans le localStorage de l'interface.

Les mots de passe de messagerie (issue #201) sont dans secrets.json de ce dossier, chiffrés par le trousseau du système (DPAPI sous Windows, libsecret/KWallet sous Linux) : ils ne sont pas lisibles sur une autre machine ni par un autre utilisateur.

La sauvegarde complète (issue #329, boutons « Sauvegarde complète » de la page Réglages) copie tout ce dossier utile dans un fichier iao-sauvegarde-<date>.zip : profils, secrets transportables, sessions Chromium, statistiques, capture HAR, historique — sauf les journaux. Les mots de passe de messagerie y sont déchiffrés du trousseau puis rechiffrés avec le mot de passe de la sauvegarde (AES-256-GCM) : le fichier se restaure sur une autre machine ou pour un autre utilisateur, y compris après une réinstallation. Ce mot de passe n'est jamais écrit en clair et n'est pas dans iao.log ; sans lui, la sauvegarde ne contient que des données de comptes sans mots de passe. La restauration remplace le contenu actuel du dossier puis propose de redémarrer IAO ; un mot de passe incorrect est refusé avant qu'aucun fichier ne soit écrasé.

Les statistiques d'utilisation (issue #206, bouton « graphique » de la barre du haut) sont dans stats/ de ce dossier : sessions.jsonl (une ligne par session d'onglet : profil, service, début, fin, temps actif ; 90 jours conservés) et en-cours.json (onglets ouverts, récupérés au lancement suivant si IAO a été fermé brutalement). Elles ne quittent jamais l'ordinateur ; le bouton « Remettre à zéro » de la page (ou la suppression de stats/) les efface, et « Exporter CSV / JSON » les enregistre dans un fichier de votre choix.

Ce dossier n'est pas supprimé par la désinstallation — effacez-le manuellement pour repartir de zéro.

Capture HAR des 15 premières minutes (issue #305)

Le réglage « Enregistrer en HAR les 15 premières minutes de chaque connexion » (Réglages, désactivé par défaut) enregistre le trafic réseau de chaque onglet IA pendant les 15 premières minutes après son ouverture : requêtes, en-têtes, corps des requêtes POST et corps des réponses. But : rejouer la configuration des skills et connecteurs d'un compte (importer le fichier .har dans un outil comme Playwright ou Chrome DevTools).

  • Les fichiers sont écrits dans <dossier de données>/har/<hôte>-<horodatage>.har (HAR 1.2, 2 000 entrées maximum, un corps de réponse conservé jusqu'à 512 Ko).
  • La capture s'arrête d'elle-même : 15 minutes écoulées, quota d'entrées atteint, onglet fermé.
  • Confidentialité : un HAR contient cookies et jetons de session en clair — n'activez le réglage que pour capturer, désactivez-le ensuite, et ne partagez un .har qu'avec une personne de confiance. La capture s'arrête aussi si le débogueur ne peut pas être attaché (outils de développement ouverts sur cet onglet, par exemple) : un avertissement est alors journalisé dans iao.log.

Capture HAR manuelle (issue #315)

Pour enregistrer un HAR à la main, au moment choisi et sans limite de 15 minutes :

  1. Lancer IAO en mode debug (voir plus bas) et ouvrir l'onglet IA voulu.
  2. Cliquer sur Outils de développement de l'onglet (icône insecte de la barre de l'onglet). Les outils de la fenêtre principale (Ctrl+Maj+I) ne voient pas le trafic des onglets IA.
  3. Onglet Network (Réseau) : cocher Preserve log (Conserver le journal), puis faire les manipulations à enregistrer dans la page.
  4. Icône de téléchargement (flèche vers le bas) de la barre Network, ou clic droit dans la liste des requêtes : Export HAR (sanitized) enregistre sans cookies ni en-têtes d'authentification ; Export HAR (with sensitive data) les garde (option à autoriser dans les réglages des outils, Preferences > Network). Choisir l'emplacement du fichier .har.

Tant que ces outils sont ouverts sur un onglet, la capture automatique ci-dessus ne peut pas s'attacher à cet onglet. Les mêmes règles de confidentialité s'appliquent.

Dépannage au démarrage

  • Si un problème empêche l'interface de fonctionner, un bandeau rouge avec une icône d'alerte s'affiche en haut de la fenêtre, avec le détail de l'erreur et une piste.
  • Chaque lancement écrit un journal dans <dossier de données>/logs/iao.log (Linux : ~/.config/ai-manager/logs/iao.log, Windows : %APPDATA%\ai-manager\logs\iao.log), y compris quand IAO est lancé depuis l'icône du Dock ou du menu Démarrer.
  • Mode debug (journal détaillé de toute l'application) : option --iao-debug ou variable IAO_DEBUG=1.
    • Lancement : npm run start:debug en développement, iao --iao-debug après install.sh, clic droit sur l'icône puis « IAO (mode debug) » (menu GNOME, installé par install.sh), ou raccourci « IAO (mode debug) » du menu Démarrer (Windows, install.bat).
    • Depuis l'application : bouton Redémarrer en mode debug (flèche circulaire) de la barre du workspace, ou bouton Relancer en mode debug du bandeau rouge, qui affiche aussi le chemin du journal.
    • Un badge DEBUG s'affiche alors à côté du nom de l'application.
    • Chaque onglet IA gagne un bouton Outils de développement de l'onglet (insecte, barre de l'onglet) : inspecteur de la page de l'IA elle-même (champ qui a le focus, sélecteurs), que les outils de la fenêtre principale n'atteignent pas (issue #320).
    • Sont ajoutés au journal : versions (Electron, Chrome, Node) et options de lancement ; chaque appel IPC (canal, durée, succès ou erreur) ; tous les messages de l'interface (ouverture, activation et fermeture d'onglets, enregistrement des comptes) ; pour chaque onglet IA, navigations, échecs de chargement et avertissements/erreurs de la page ; décisions détaillées de l'ordonnanceur (téléchargements ignorés, lancements refusés).
    • Confidentialité : les arguments des appels IPC (contenus de fichiers, export de comptes, prompts) ne sont jamais écrits, et les adresses des onglets sont réduites à leur nom d'hôte (une URL de connexion peut contenir des jetons).
  • Le journal d'activité de l'ordonnanceur et ses erreurs sont aussi écrits dans iao.log, avec ou sans mode debug.
  • À chaque démarrage, avec ou sans mode debug (issue #203) : l'état du dossier de données (Local Storage : nombre de fichiers et taille ; nombre de partitions et de partitions ayant un dossier Service Worker). À joindre à tout signalement de comptes perdus ou d'erreurs Database IO error.
  • IAO ne s'ouvre qu'une fois : relancer l'application ramène la fenêtre existante au premier plan. Deux instances sur le même dossier de données provoquaient des erreurs Chromium en rafale (Failed to delete the database: Database IO error).
  • Si iao.log signale des fichiers du dossier de données qui n'appartiennent pas au compte courant (souvent après un lancement avec sudo), Chromium ne peut plus les modifier : erreurs Database IO error / Could not open the quota database, comptes ou sessions qui disparaissent. Quitter IAO puis lancer sudo chown -R "$USER": ~/.config/ai-manager.
  • Que joindre à une issue : la version (git log -1 --oneline ou numéro de release), le mode de lancement (npm start, iao installé, icône), une capture du bandeau rouge s'il y en a un, et le journal iao.log d'un lancement en mode debug (relancer, reproduire, puis joindre le fichier). Le journal ne contient ni mots de passe ni contenus de conversation ; vérifiez quand même les noms de profils avant de le publier.
  • Les messages Chromium du type vaInitialize failed (accélération vidéo matérielle) sont sans incidence sur IAO.

Structure du projet

iao/
├── install.sh              # Installeur Linux (menu applications, icônes, lanceur, --uninstall)
├── install.bat             # Installeur Windows (menu Démarrer, raccourcis, /uninstall) — créé lot 9
├── index.html              # HTML pur (CSS extrait vers assets/app.css, JS vers assets/app.js + pre-monaco.js). ~356 lignes.
├── main.js                 # Process principal Electron : fenêtre, IPC fichiers, durcissement navigation/popups, ordonnanceur
├── lib/                    # Fonctions pures extraites (escapeHtml, politique popups decidePopup, statuts d'activité, actions d'onglet, recherche, cooldown, claude-adapter, settings, logos des IA service-icons) — testées par node --test
├── scheduler/               # Ordonnanceur IA : registre de jobs, détection des ZIP livrés, reprise par profil, automatisation Claude
├── test/                   # Tests unitaires (node --test, 332 tests)
├── test-electron/          # Tests d'intégration Electron réels (popups, Continuer, Monaco sous CSP, fumée binaire) — 14 + 3 tests
├── package.json            # Scripts npm, dépendances, configuration de packaging
├── CLAUDE.md               # Règles de travail sur le dépôt (conventions, invariants, checklist)
├── FEATURES.md             # Travaux à faire, par lot et par priorité
├── README.md               # Cette page
├── LICENSE                 # MIT
├── assets/
│   ├── app.css             # Feuille de style (extrait d'index.html, lot 8) : @font-face, :root, composants UI
│   ├── app.js              # Application complète (extrait d'index.html, lot 6)
│   ├── pre-monaco.js       # Sauvegarde du require d'Electron avant le loader AMD de Monaco (lot 6)
│   ├── icons.js            # 25 icônes SVG inline (sous-ensemble Font Awesome) + hydrateIcons()
│   └── fonts/              # Polices WOFF2 locales (Space Grotesk, Inter, JetBrains Mono)
├── build/                  # Icônes de l'application (PNG 16 → 1024 px)
├── scripts/
│   └── prune-locales.js    # Post-build : purge des locales Chromium inutilisées
└── docs/
    ├── PROJECT_CONTEXT.md          # Architecture détaillée + historique des chantiers
    ├── THIRD-PARTY-NOTICES.md      # Attributions des composants tiers
    └── DISTRIBUTION-LISEZ-MOI.txt  # Notice utilisateur jointe au zip distribué

Pas de framework, pas de bundler, pas de TypeScript : JS vanilla, CSS et JS extraits dans assets/. docs/PROJECT_CONTEXT.md contient la documentation d'architecture complète pour qui veut contribuer.

Sécurité et limites connues

Transparence complète — ce qui est fait, et ce qui ne l'est pas :

Limites assumées (à connaître avant d'utiliser) :

  • Le renderer tourne avec nodeIntegration: true et contextIsolation: false : la page hôte a un accès complet à Node/OS. C'est la principale dette de sécurité du projet ; la migration vers contextIsolation + preload est un chantier identifié mais non réalisé. Les webviews des services, elles, tournent sans privilèges Node.
  • Les sessions IA (cookies) et les métadonnées de comptes sont stockées en clair dans le dossier de données (voir tableau ci-dessus) (profils.json). Aucun chiffrement au repos. Règle simple : une session utilisateur = une personne — n'utilisez pas l'app dans un compte partagé.
  • Les binaires distribués ne sont pas signés (avertissement SmartScreen sous Windows ; aucun dépôt APT signé côté Linux).
  • Une installation utilisateur sous Linux tourne sans le sandbox Chromium (voir la note ci-dessus) : c'est une protection en moins pour les pages web affichées dans les onglets. Le .deb et l'installation --system n'ont pas cette limite.
  • Pas de CSP sur index.html (prérequis faits — zéro ressource distante — mais l'en-tête n'est pas encore posé).

Mesures en place :

  • Échappement HTML systématique de toute donnée utilisateur injectée dans le DOM ; aucun onclick généré dynamiquement (délégation d'événements par data-*, y compris sur la barre d'onglets).
  • La fenêtre hôte ne peut pas naviguer vers une URL distante ni ouvrir de fenêtre ; les popups des webviews sont filtrées par liste blanche d'origines (les 9 services + fournisseurs OAuth courants), tout le reste part dans le navigateur système.
  • Garde-fous divers : unicité des profils (pas de partage de session accidentel), limite de taille des fichiers ouverts dans l'éditeur, stockage tolérant à la corruption avec backup.

Les issues de sécurité sont bienvenues — merci de les signaler de façon responsable.

Contribuer

Projet maintenu en solo, contributions bienvenues — en particulier :

  • Ajouter un service IA (le pattern est entièrement data-driven) : une entrée dans SERVICES, des variables de couleur --<id>/--<id>-dim + une classe .svc-<id>, une fiche SERVICE_INFO pour la page d'aide, (depuis l'issue #277, toute popup web https: est acceptée : plus rien à déclarer pour l'auth). La migration attache automatiquement le nouveau service aux comptes existants.
  • Corrections de bugs, améliorations de performance mesurées, durcissement sécurité (la migration contextIsolation est le gros morceau ouvert).

Règles du projet : JS vanilla sans dépendance nouvelle, toute donnée utilisateur passe par escapeHtml(), les écritures de comptes passent par saveAccounts(), les listes cliquables utilisent la délégation d'événements. Lisez CLAUDE.md (règles de contribution) et docs/PROJECT_CONTEXT.md avant une contribution non triviale. Fork → branche → pull request.

Licence

MIT. Composants tiers (polices OFL, icônes Font Awesome CC BY 4.0, logos des IA Lobe Icons MIT et Simple Icons CC0, Monaco MIT) : voir docs/THIRD-PARTY-NOTICES.md.

Crédits

Le thème violet/rose est l'héritage des premières versions. Merci aux bêta-testeurs de la première heure.

About

IAO — Gestionnaire multi-comptes IA (Electron, Windows/Linux). 9 services d'IA web avec sessions isolées, cooldowns, éditeur Monaco et ordonnanceur IA.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages