Skip to content

Données et modèles : fichiers de compte, base de statistiques SQLite et définitions des champs clés

Ce que vous pourrez faire après ce chapitre

  • Localiser rapidement les emplacements de stockage des données de compte, de la base de statistiques, des fichiers de configuration et des journaux
  • Comprendre la structure JSON des fichiers de compte et la signification des champs clés
  • Interroger directement via SQLite les journaux des requêtes proxy et les statistiques de consommation de tokens
  • Savoir quels fichiers consulter lors de la sauvegarde, de la migration ou du dépannage

Votre situation actuelle

Lorsque vous avez besoin de :

  • Migrer les comptes vers une nouvelle machine : vous ne savez pas quels fichiers copier
  • Investiguer des anomalies de compte : quels champs dans les fichiers de compte peuvent indiquer l'état du compte
  • Exporter la consommation de tokens : vous souhaitez interroger directement la base de données mais ne connaissez pas la structure des tables
  • Nettoyer les données historiques : vous craignez de supprimer les mauvais fichiers et de perdre des données

Cette annexe vous aidera à établir une compréhension complète du modèle de données.


Structure du répertoire de données

Les données principales d'Antigravity Tools sont stockées par défaut dans le répertoire .antigravity_tools sous le « répertoire personnel de l'utilisateur » (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/account.rs:16-33).

Clarifier d'abord les limites de sécurité

Ce répertoire contiendra des informations sensibles comme refresh_token/access_token (source : source/lbjlaq/Antigravity-Manager/src/types/account.ts:20-27). Avant de sauvegarder/copier/partager, assurez-vous que votre environnement cible est digne de confiance.

Où dois-je trouver ce répertoire ?

bash
## Entrer dans le répertoire de données
cd ~/.antigravity_tools

## Ou ouvrir dans Finder (macOS)
open ~/.antigravity_tools
powershell
## Entrer dans le répertoire de données
Set-Location "$env:USERPROFILE\.antigravity_tools"

## Ou ouvrir dans l'Explorateur de fichiers
explorer "$env:USERPROFILE\.antigravity_tools"

Aperçu de l'arborescence

~/.antigravity_tools/
├── accounts.json          # Index des comptes (version 2.0)
├── accounts/              # Répertoire des comptes
│   └── <account_id>.json  # Un fichier par compte
├── gui_config.json        # Configuration de l'application (écrit par le GUI)
├── token_stats.db         # Base de statistiques de tokens (SQLite)
├── proxy_logs.db          # Base de journaux de surveillance Proxy (SQLite)
├── logs/                  # Répertoire des journaux de l'application
│   └── app.log*           # Rotation quotidienne (le nom du fichier change avec la date)
├── bin/                   # Outils externes (comme cloudflared)
│   └── cloudflared(.exe)
└── device_original.json   # Ligne de base de l'empreinte d'appareil (optionnel)

Règle de chemin du répertoire de données : prendre dirs::home_dir(), concaténer .antigravity_tools (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/account.rs:16-33).

Recommandation de sauvegarde

Sauvegardez régulièrement le répertoire accounts/, accounts.json, token_stats.db et proxy_logs.db pour conserver toutes les données principales.


Modèle de données des comptes

accounts.json (index des comptes)

Le fichier d'index des comptes enregistre les informations résumées de tous les comptes et le compte actuellement sélectionné.

Emplacement : ~/.antigravity_tools/accounts.json

Schéma (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/models/account.rs:76-92) :

json
{
  "version": "2.0",                  // Version de l'index
  "accounts": [                       // Liste résumée des comptes
    {
      "id": "uuid-v4",              // ID unique du compte
      "email": "user@gmail.com",     // Email du compte
      "name": "Display Name",        // Nom d'affichage (optionnel)
      "created_at": 1704067200,      // Heure de création (horodatage Unix)
      "last_used": 1704067200       // Dernière utilisation (horodatage Unix)
    }
  ],
  "current_account_id": "uuid-v4"    // ID du compte actuellement sélectionné
}

Fichier de compte ({account_id}.json)

Les données complètes de chaque compte sont stockées indépendamment au format JSON dans le répertoire accounts/.

Emplacement : ~/.antigravity_tools/accounts/{account_id}.json

Schéma (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/models/account.rs:6-42 ; type frontend : source/lbjlaq/Antigravity-Manager/src/types/account.ts:1-55) :

json
{
  "id": "uuid-v4",
  "email": "user@gmail.com",
  "name": "Display Name",

  "token": {                        // Données du token OAuth
    "access_token": "ya29...",      // Jeton d'accès actuel
    "refresh_token": "1//...",      // Jeton d'actualisation (le plus important)
    "expires_in": 3600,            // Temps d'expiration (secondes)
    "expiry_timestamp": 1704070800, // Horodatage d'expiration
    "token_type": "Bearer",
    "email": "user@gmail.com",
    "project_id": "my-gcp-project", // Optionnel : ID de projet Google Cloud
    "session_id": "..."            // Optionnel : Antigravity sessionId
  },

  "device_profile": {               // Empreinte d'appareil (optionnel)
    "machine_id": "...",
    "mac_machine_id": "...",
    "dev_device_id": "...",
    "sqm_id": "..."
  },

  "device_history": [               // Versions historiques de l'empreinte d'appareil
    {
      "id": "version-id",
      "created_at": 1704067200,
      "label": "Saved from device X",
      "profile": { ... },
      "is_current": false
    }
  ],

  "quota": {                        // Données de quota (optionnel)
    "models": [
      {
        "name": "gemini-2.0-flash-exp",
        "percentage": 85,           // Pourcentage de quota restant
        "reset_time": "2024-01-02T00:00:00Z"
      }
    ],
    "last_updated": 1704067200,
    "is_forbidden": false,
    "subscription_tier": "PRO"      // Type d'abonnement : FREE/PRO/ULTRA
  },

  "disabled": false,                // Le compte est-il complètement désactivé
  "disabled_reason": null,          // Raison de la désactivation (ex: invalid_grant)
  "disabled_at": null,             // Horodatage de désactivation

  "proxy_disabled": false,         // Est-ce que la fonction proxy est désactivée
  "proxy_disabled_reason": null,   // Raison de la désactivation du proxy
  "proxy_disabled_at": null,       // Horodatage de désactivation du proxy

  "protected_models": [             // Liste des modèles protégés par quota
    "gemini-2.5-pro-exp"
  ],

  "created_at": 1704067200,
  "last_used": 1704067200
}

Explication des champs clés

ChampTypeSignification métierCondition de déclenchement
disabledboolLe compte est complètement désactivé (ex: refresh_token invalide)Défini automatiquement sur true lors de invalid_grant
proxy_disabledboolDésactive uniquement la fonction proxy, n'affecte pas l'utilisation du GUIDésactivation manuelle ou déclenché par la protection de quota
protected_modelsstring[]« Liste de modèles restreints » pour la protection de quota au niveau du modèleMis à jour par la logique de protection de quota
quota.models[].percentagenumberPourcentage de quota restant (0-100)Mis à jour à chaque actualisation de quota
token.refresh_tokenstringInformations d'identification pour obtenir access_tokenObtenu lors de l'autorisation OAuth, valide à long terme

Règle importante 1 : invalid_grunt déclenche la désactivation (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/proxy/token_manager.rs:869-889 ; écriture : source/lbjlaq/Antigravity-Manager/src-tauri/src/proxy/token_manager.rs:942-969) :

  • Lorsque l'actualisation du token échoue et que l'erreur contient invalid_grant, TokenManager écrira disabled=true / disabled_at / disabled_reason dans le fichier de compte et retirera le compte du pool de tokens.

Règle importante 2 : sémantique de protected_models (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/proxy/token_manager.rs:227-250 ; écriture de protection de quota : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/account.rs:607-666) :

  • protected_models contient les « ID de modèle normalisés », utilisés pour la protection de quota au niveau du modèle et pour sauter l'ordonnancement.

Base de données de statistiques de tokens

La base de statistiques de tokens enregistre la consommation de tokens de chaque demande de proxy, utilisée pour la surveillance des coûts et l'analyse des tendances.

Emplacement : ~/.antigravity_tools/token_stats.db

Moteur de base de données : SQLite + mode WAL (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/token_stats.rs:63-76)

Structure des tables

token_usage (enregistrements d'utilisation bruts)

ChampTypeDescription
idINTEGER PRIMARY KEY AUTOINCREMENTClé primaire auto-incrémentée
timestampINTEGERHorodatage de la demande
account_emailTEXTEmail du compte
modelTEXTNom du modèle
input_tokensINTEGERNombre de tokens d'entrée
output_tokensINTEGERNombre de tokens de sortie
total_tokensINTEGERNombre total de tokens

Instruction de création de table (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/token_stats.rs:83-94) :

sql
CREATE TABLE IF NOT EXISTS token_usage (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    timestamp INTEGER NOT NULL,
    account_email TEXT NOT NULL,
    model TEXT NOT NULL,
    input_tokens INTEGER NOT NULL DEFAULT 0,
    output_tokens INTEGER NOT NULL DEFAULT 0,
    total_tokens INTEGER NOT NULL DEFAULT 0
);

token_stats_hourly (table d'agrégation horaire)

Agrège l'utilisation des tokens toutes les heures, pour une interrogation rapide des données de tendance.

Instruction de création de table (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/token_stats.rs:111-123) :

sql
CREATE TABLE IF NOT EXISTS token_stats_hourly (
    hour_bucket TEXT NOT NULL,           -- Seau de temps (format : YYYY-MM-DD HH:00)
    account_email TEXT NOT NULL,
    total_input_tokens INTEGER NOT NULL DEFAULT 0,
    total_output_tokens INTEGER NOT NULL DEFAULT 0,
    total_tokens INTEGER NOT NULL DEFAULT 0,
    request_count INTEGER NOT NULL DEFAULT 0,
    PRIMARY KEY (hour_bucket, account_email)
);

Indexes

Pour améliorer les performances d'interrogation, la base de données a établi les index suivants (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/token_stats.rs:97-108) :

sql
-- Index par temps décroissant
CREATE INDEX IF NOT EXISTS idx_token_timestamp
ON token_usage (timestamp DESC);

-- Index par compte
CREATE INDEX IF NOT EXISTS idx_token_account
ON token_usage (account_email);

Exemples d'interrogations courantes

Interroger la consommation de tokens des 24 dernières heures

bash
sqlite3 ~/.antigravity_tools/token_stats.db \
  "SELECT account_email, SUM(total_tokens) as tokens
   FROM token_stats_hourly
   WHERE hour_bucket >= strftime('%Y-%m-%d %H:00', 'now', '-24 hours')
   GROUP BY account_email
   ORDER BY tokens DESC;"

Statistiques de consommation par modèle

bash
sqlite3 ~/.antigravity_tools/token_stats.db \
  "SELECT model,
          SUM(input_tokens) as input_tokens,
          SUM(output_tokens) as output_tokens,
          SUM(total_tokens) as total_tokens,
          COUNT(*) as request_count
   FROM token_usage
   WHERE timestamp >= strftime('%s', 'now', '-7 days')
   GROUP BY model
   ORDER BY total_tokens DESC;"

Définition des champs de temps

token_usage.timestamp est un horodatage Unix écrit par chrono::Utc::now().timestamp() (précision en secondes), et token_stats_hourly.hour_bucket est également une chaîne générée en UTC (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/token_stats.rs:136-156).


Base de données de journaux de surveillance Proxy

La base de journaux Proxy enregistre les détails de chaque demande de proxy, utilisée pour le dépannage et l'audit des demandes.

Emplacement : ~/.antigravity_tools/proxy_logs.db

Moteur de base de données : SQLite + mode WAL (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/proxy_db.rs:10-24)

Structure de la table : request_logs

ChampTypeDescription
idTEXT PRIMARY KEYID unique de la demande (UUID)
timestampINTEGERHorodatage de la demande
methodTEXTMéthode HTTP (GET/POST)
urlTEXTURL de la demande
statusINTEGERCode d'état HTTP
durationINTEGERDurée de la demande (millisecondes)
modelTEXTNom du modèle demandé par le client
mapped_modelTEXTNom du modèle réellement utilisé après le routage
account_emailTEXTEmail du compte utilisé
errorTEXTMessage d'erreur (le cas échéant)
request_bodyTEXTCorps de la demande (optionnel, occupe beaucoup d'espace)
response_bodyTEXTCorps de la réponse (optionnel, occupe beaucoup d'espace)
input_tokensINTEGERNombre de tokens d'entrée
output_tokensINTEGERNombre de tokens de sortie
protocolTEXTType de protocole (openai/anthropic/gemini)

Instruction de création de table (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/proxy_db.rs:30-51) :

sql
CREATE TABLE IF NOT EXISTS request_logs (
    id TEXT PRIMARY KEY,
    timestamp INTEGER,
    method TEXT,
    url TEXT,
    status INTEGER,
    duration INTEGER,
    model TEXT,
    error TEXT
);

-- Compatibilité : ajouter progressivement de nouveaux champs via ALTER TABLE
ALTER TABLE request_logs ADD COLUMN request_body TEXT;
ALTER TABLE request_logs ADD COLUMN response_body TEXT;
ALTER TABLE request_logs ADD COLUMN input_tokens INTEGER;
ALTER TABLE request_logs ADD COLUMN output_tokens INTEGER;
ALTER TABLE request_logs ADD COLUMN account_email TEXT;
ALTER TABLE request_logs ADD COLUMN mapped_model TEXT;
ALTER TABLE request_logs ADD COLUMN protocol TEXT;

Indexes

sql
-- Index par temps décroissant
CREATE INDEX IF NOT EXISTS idx_timestamp
ON request_logs (timestamp DESC);

-- Index par code d'état
CREATE INDEX IF NOT EXISTS idx_status
ON request_logs (status);

Nettoyage automatique

Lorsque le système démarre ProxyMonitor, il nettoie automatiquement les journaux de plus de 30 jours et exécute VACUUM sur la base de données (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/proxy/monitor.rs:41-60 ; implémentation : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/proxy_db.rs:194-209).

Exemples d'interrogations courantes

Interroger les demandes échouées récentes

bash
sqlite3 ~/.antigravity_tools/proxy_logs.db \
  "SELECT timestamp, method, url, status, error
   FROM request_logs
   WHERE status >= 400 OR status < 200
   ORDER BY timestamp DESC
   LIMIT 10;"

Statistiques du taux de réussite par compte

bash
sqlite3 ~/.antigravity_tools/proxy_logs.db \
  "SELECT account_email,
          COUNT(*) as total,
          SUM(CASE WHEN status >= 200 AND status < 400 THEN 1 ELSE 0 END) as success,
          ROUND(100.0 * SUM(CASE WHEN status >= 200 AND status < 400 THEN 1 ELSE 0 END) / COUNT(*), 2) as success_rate
   FROM request_logs
   WHERE timestamp >= strftime('%s', 'now', '-7 days')
   GROUP BY account_email
   ORDER BY total DESC;"

Fichiers de configuration

gui_config.json

Stocke les informations de configuration de l'application, y compris les paramètres de proxy, le mappage des modèles, le mode d'authentification, etc.

Emplacement : ~/.antigravity_tools/gui_config.json (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/config.rs:7-13)

La structure de ce fichier suit AppConfig (source : source/lbjlaq/Antigravity-Manager/src/types/config.ts:76-95).

Si vous avez besoin de « sauvegarder/migrer uniquement »

La méthode la plus simple consiste à : fermer l'application puis à compresser l'ensemble du répertoire ~/.antigravity_tools/. La sémantique de mise à jour à chaud/redémarrage de la configuration relève du « comportement d'exécution » ; voir le cours avancé Configuration complète.


Fichiers journaux

Journaux de l'application

Emplacement : ~/.antigravity_tools/logs/ (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/logger.rs:17-25)

Les journaux utilisent une rotation de fichier quotidienne, le nom de fichier de base étant app.log (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/logger.rs:41-45).

Niveau de journalisation : INFO/WARN/ERROR

Usage : Enregistre les événements clés, les messages d'erreur et les informations de débogage pendant l'exécution de l'application, utilisés pour le dépannage.


Migration et sauvegarde des données

Sauvegarder les données principales

bash
## Sauvegarder l'ensemble du répertoire de données (le plus stable)
tar -czf antigravity-backup-$(date +%Y%m%d).tar.gz ~/.antigravity_tools
powershell
## Sauvegarder l'ensemble du répertoire de données (le plus stable)
$backupDate = Get-Date -Format "yyyyMMdd"
$dataDir = "$env:USERPROFILE\.antigravity_tools"
Compress-Archive -Path $dataDir -DestinationPath "antigravity-backup-$backupDate.zip"

Migrer vers une nouvelle machine

  1. Fermez Antigravity Tools (éviter que la copie interrompe l'écriture)
  2. Copiez .antigravity_tools de la machine source vers le répertoire personnel de la machine cible
  3. Démarrez Antigravity Tools

Migration multi-plateforme

Si vous migrez de Windows vers macOS/Linux (ou vice versa), il suffit de copier l'ensemble du répertoire .antigravity_tools. Le format des données est compatible multi-plateforme.

Nettoyer les données historiques

D'abord la conclusion

  • proxy_logs.db : nettoyage automatique de 30 jours (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/proxy/monitor.rs:41-60).
  • token_stats.db : la structure de table est initialisée au démarrage (source : source/lbjlaq/Antigravity-Manager/src-tauri/src/lib.rs:53-56), mais le code source ne montre pas de logique de « nettoyage automatique des enregistrements historiques par jour ».

À faire uniquement si vous êtes certain de ne plus avoir besoin des données historiques

Vider les statistiques/journaux vous fera perdre les données historiques de dépannage et d'analyse des coûts. Sauvegardez d'abord l'ensemble de .antigravity_tools avant d'agir.

Si vous souhaitez simplement « vider l'historique et recommencer », la méthode la plus stable consiste à supprimer les fichiers de base de données après avoir fermé l'application (la structure de table sera reconstruite au prochain démarrage).

bash
## Vider les statistiques de tokens (perdra l'historique)
rm -f ~/.antigravity_tools/token_stats.db

## Vider les journaux de surveillance Proxy (perdra l'historique)
rm -f ~/.antigravity_tools/proxy_logs.db
powershell
## Vider les statistiques de tokens (perdra l'historique)
Remove-Item -Force "$env:USERPROFILE\.antigravity_tools\token_stats.db" -ErrorAction SilentlyContinue

## Vider les journaux de surveillance Proxy (perdra l'historique)
Remove-Item -Force "$env:USERPROFILE\.antigravity_tools\proxy_logs.db" -ErrorAction SilentlyContinue

Explication des définitions de champs courants

Horodatage Unix

Tous les champs liés au temps (comme created_at, last_used, timestamp) utilisent l'horodatage Unix (précision en secondes).

Conversion en temps lisible :

bash
## macOS/Linux
date -r 1704067200
date -d @1704067200  # GNU date

## Interrogation SQLite (exemple : convertir request_logs.timestamp en temps lisible)
sqlite3 ~/.antigravity_tools/proxy_logs.db \
  "SELECT datetime(timestamp, 'unixepoch', 'localtime') FROM request_logs LIMIT 1;"

Pourcentage de quota

quota.models[].percentage indique le pourcentage de quota restant (0-100) (source : source/lbjlaq/Antigravity-Manager/src/types/account.ts:36-40 ; modèle backend : source/lbjlaq/Antigravity-Manager/src-tauri/src/models/quota.rs:3-9).

Si la « protection de quota » est déclenchée dépend de quota_protection.enabled/threshold_percentage/monitored_models (source : source/lbjlaq/Antigravity-Manager/src/types/config.ts:59-63 ; écriture protected_models : source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/account.rs:607-666).


Résumé de ce chapitre

  • Le répertoire de données d'Antigravity Tools se trouve dans .antigravity_tools sous le répertoire personnel de l'utilisateur
  • Données de compte : accounts.json (index) + accounts/<account_id>.json (données complètes d'un compte)
  • Données de statistiques : token_stats.db (statistiques de tokens) + proxy_logs.db (journaux de surveillance Proxy)
  • Configuration et exploitation : gui_config.json, logs/, bin/cloudflared*, device_original.json
  • La méthode la plus stable pour sauvegarder/migrer est de « compresser l'ensemble de .antigravity_tools après avoir fermé l'application »

Aperçu du prochain chapitre

Dans le prochain chapitre, nous étudierons Limites des capacités d'intégration z.ai.

Vous apprendrez :

  • La liste des fonctionnalités implémentées pour l'intégration z.ai
  • Les fonctionnalités explicitement non implémentées et les limitations d'utilisation
  • Explication de l'implémentation expérimentale de Vision MCP

Annexe : référence du code source

Cliquez pour voir les emplacements du code source

Dernière mise à jour : 2026-01-23

FonctionnalitéChemin du fichierNuméros de ligne
Répertoire de données (.antigravity_tools)src-tauri/src/modules/account.rs16-33
Répertoire des comptes (accounts/)src-tauri/src/modules/account.rs35-46
Structure accounts.jsonsrc-tauri/src/models/account.rs76-92
Structure Account (backend)src-tauri/src/models/account.rs6-42
Structure Account (frontend)src/types/account.ts1-55
Structure TokenData/QuotaDatasrc-tauri/src/models/token.rs3-16
Structure TokenData/QuotaDatasrc-tauri/src/models/quota.rs3-21
Initialisation de la base de statistiques de tokens (schéma)src-tauri/src/modules/token_stats.rs58-159
Initialisation de la base de journaux Proxy (schéma)src-tauri/src/modules/proxy_db.rs5-65
Nettoyage automatique des journaux Proxy (30 jours)src-tauri/src/proxy/monitor.rs41-60
Implémentation du nettoyage automatique des journaux Proxysrc-tauri/src/modules/proxy_db.rs194-209
Lecture/écriture gui_config.jsonsrc-tauri/src/modules/config.rs7-88
Répertoire logs/ et app.logsrc-tauri/src/modules/logger.rs17-45
Chemin bin/cloudflaredsrc-tauri/src/modules/cloudflared.rs92-101
device_original.jsonsrc-tauri/src/modules/device.rs11-13
---------

Constantes clés :

  • DATA_DIR = ".antigravity_tools" : nom du répertoire de données (src-tauri/src/modules/account.rs:16-18)
  • ACCOUNTS_INDEX = "accounts.json" : nom du fichier d'index des comptes (src-tauri/src/modules/account.rs:16-18)
  • CONFIG_FILE = "gui_config.json" : nom du fichier de configuration (src-tauri/src/modules/config.rs:7)

Fonctions clés :

  • get_data_dir() : obtenir le chemin du répertoire de données (src-tauri/src/modules/account.rs)
  • record_usage() : écrire dans token_usage/token_stats_hourly (src-tauri/src/modules/token_stats.rs)
  • save_log() : écrire dans request_logs (src-tauri/src/modules/proxy_db.rs)
  • cleanup_old_logs(days) : supprimer les anciens request_logs et VACUUM (src-tauri/src/modules/proxy_db.rs)