Skip to content

Datos y modelos: archivos de cuenta, base de datos SQLite y definición de campos clave ​

Lo que aprenderás ​

  • Localizar rápidamente la ubicación de almacenamiento de datos de cuenta, bases de datos estadísticas, archivos de configuración y directorios de registro
  • Comprender la estructura JSON de los archivos de cuenta y el significado de los campos clave
  • Consultar directamente los registros de solicitudes de proxy y las estadísticas de consumo de tokens a través de SQLite
  • Saber qué archivos revisar durante la copia de seguridad, migración o solución de problemas

Tu situación actual ​

Cuando necesitas:

  • Migrar cuentas a una nueva máquina: No sabes qué archivos copiar
  • Investigar anomalías en cuentas: No sabes qué campos en el archivo de cuenta pueden indicar el estado de la cuenta
  • Exportar el consumo de tokens: Quieres consultar directamente desde la base de datos pero no conoces la estructura de las tablas
  • Limpiar datos históricos: Te preocupa eliminar los archivos incorrectos y perder datos

Este apéndice te ayudará a establecer una comprensión completa del modelo de datos.


Estructura del directorio de datos ​

Los datos principales de Antigravity Tools se almacenan por defecto en el directorio .antigravity_tools en el "directorio principal del usuario" (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/account.rs:16-33).

Primero, aclaremos los límites de seguridad

Este directorio contendrá información sensible como refresh_token/access_token (fuente: source/lbjlaq/Antigravity-Manager/src/types/account.ts:20-27). Antes de hacer copias de seguridad/copiar/compartir, confirma que tu entorno de destino sea confiable.

¿Dónde debería buscar este directorio? ​

bash
## Ingresar al directorio de datos
cd ~/.antigravity_tools

## O abrir en Finder (macOS)
open ~/.antigravity_tools
powershell
## Ingresar al directorio de datos
Set-Location "$env:USERPROFILE\.antigravity_tools"

## O abrir en Explorador de archivos
explorer "$env:USERPROFILE\.antigravity_tools"

Vista general del árbol de directorios ​

~/.antigravity_tools/
├── accounts.json          # Índice de cuentas (versión 2.0)
├── accounts/              # Directorio de cuentas
│   └── <account_id>.json  # Un archivo por cuenta
├── gui_config.json        # Configuración de la aplicación (escrita por GUI)
├── token_stats.db         # Base de datos de estadísticas de tokens (SQLite)
├── proxy_logs.db          # Base de datos de registros de monitoreo de proxy (SQLite)
├── logs/                  # Directorio de registros de la aplicación
│   └── app.log*           # Rotación diaria (el nombre del archivo cambia con la fecha)
├── bin/                   # Herramientas externas (como cloudflared)
│   └── cloudflared(.exe)
└── device_original.json   # Línea base de huella digital del dispositivo (opcional)

Regla de ruta del directorio de datos: Se obtiene dirs::home_dir() y se concatena con .antigravity_tools (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/account.rs:16-33).

Sugerencia de copia de seguridad

Realiza copias de seguridad periódicas del directorio accounts/, accounts.json, token_stats.db y proxy_logs.db para preservar todos los datos principales.


Modelo de datos de cuenta ​

accounts.json (índice de cuentas) ​

El archivo de índice de cuentas registra la información resumida de todas las cuentas y la cuenta actualmente seleccionada.

Ubicación: ~/.antigravity_tools/accounts.json

Esquema (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/models/account.rs:76-92):

json
{
  "version": "2.0",                  // Versión del índice
  "accounts": [                       // Lista de resumen de cuentas
    {
      "id": "uuid-v4",              // ID único de la cuenta
      "email": "user@gmail.com",     // Correo electrónico de la cuenta
      "name": "Display Name",        // Nombre para mostrar (opcional)
      "created_at": 1704067200,      // Fecha de creación (marca de tiempo Unix)
      "last_used": 1704067200       // Última fecha de uso (marca de tiempo Unix)
    }
  ],
  "current_account_id": "uuid-v4"    // ID de la cuenta actualmente seleccionada
}

Archivo de cuenta ({account_id}.json) ​

Los datos completos de cada cuenta se almacenan individualmente en formato JSON en el directorio accounts/.

Ubicación: ~/.antigravity_tools/accounts/{account_id}.json

Esquema (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/models/account.rs:6-42; tipo de frontend: source/lbjlaq/Antigravity-Manager/src/types/account.ts:1-55):

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

  "token": {                        // Datos del token OAuth
    "access_token": "ya29...",      // Token de acceso actual
    "refresh_token": "1//...",      // Token de actualización (el más importante)
    "expires_in": 3600,            // Tiempo de expiración (segundos)
    "expiry_timestamp": 1704070800, // Marca de tiempo de expiración
    "token_type": "Bearer",
    "email": "user@gmail.com",
    "project_id": "my-gcp-project", // Opcional: ID de proyecto de Google Cloud
    "session_id": "..."            // Opcional: sessionId de Antigravity
  },

  "device_profile": {               // Huella digital del dispositivo (opcional)
    "machine_id": "...",
    "mac_machine_id": "...",
    "dev_device_id": "...",
    "sqm_id": "..."
  },

  "device_history": [               // Versiones históricas de huella digital del dispositivo
    {
      "id": "version-id",
      "created_at": 1704067200,
      "label": "Guardado desde dispositivo X",
      "profile": { ... },
      "is_current": false
    }
  ],

  "quota": {                        // Datos de cuota (opcional)
    "models": [
      {
        "name": "gemini-2.0-flash-exp",
        "percentage": 85,           // Porcentaje de cuota restante
        "reset_time": "2024-01-02T00:00:00Z"
      }
    ],
    "last_updated": 1704067200,
    "is_forbidden": false,
    "subscription_tier": "PRO"      // Tipo de suscripción: FREE/PRO/ULTRA
  },

  "disabled": false,                // Si la cuenta está completamente deshabilitada
  "disabled_reason": null,          // Motivo de deshabilitación (como invalid_grant)
  "disabled_at": null,             // Marca de tiempo de deshabilitación

  "proxy_disabled": false,         // Si la función de proxy está deshabilitada
  "proxy_disabled_reason": null,   // Motivo de deshabilitación del proxy
  "proxy_disabled_at": null,       // Marca de tiempo de deshabilitación del proxy

  "protected_models": [             // Lista de modelos protegidos por cuota
    "gemini-2.5-pro-exp"
  ],

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

Explicación de campos clave ​

CampoTipoSignificado del negocioCondición de activación
disabledboolLa cuenta está completamente deshabilitada (como cuando el refresh_token es inválido)Se establece automáticamente en true cuando ocurre invalid_grant
proxy_disabledboolSolo deshabilita la función de proxy, no afecta el uso de GUIDeshabilitación manual o activación por protección de cuota
protected_modelsstring[]Lista de "modelos restringidos" para la protección de cuota a nivel de modeloActualizada por la lógica de protección de cuota
quota.models[].percentagenumberPorcentaje de cuota restante (0-100)Actualizado al actualizar la cuota
token.refresh_tokenstringCredencial para obtener access_tokenObtenido durante la autorización OAuth, válido a largo plazo

Regla importante 1: invalid_grant activa la deshabilitación (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/proxy/token_manager.rs:869-889; escritura en disco: source/lbjlaq/Antigravity-Manager/src-tauri/src/proxy/token_manager.rs:942-969):

  • Cuando falla la actualización del token y el error contiene invalid_grant, TokenManager escribirá disabled=true / disabled_at / disabled_reason en el archivo de cuenta y eliminará la cuenta del grupo de tokens.

Regla importante 2: Semántica de protected_models (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/proxy/token_manager.rs:227-250; escritura de protección de cuota: source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/account.rs:607-666):

  • protected_models almacena "ID de modelo estandarizado", utilizado para la protección de cuota a nivel de modelo y para saltar el programador.

Base de datos de estadísticas de tokens ​

La base de datos de estadísticas de tokens registra el consumo de tokens de cada solicitud de proxy, utilizada para el monitoreo de costos y el análisis de tendencias.

Ubicación: ~/.antigravity_tools/token_stats.db

Motor de base de datos: SQLite + modo WAL (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/token_stats.rs:63-76)

Estructura de tablas ​

token_usage (registros de uso originales) ​

CampoTipoDescripción
idINTEGER PRIMARY KEY AUTOINCREMENTClave primaria autoincremental
timestampINTEGERMarca de tiempo de la solicitud
account_emailTEXTCorreo electrónico de la cuenta
modelTEXTNombre del modelo
input_tokensINTEGERNúmero de tokens de entrada
output_tokensINTEGERNúmero de tokens de salida
total_tokensINTEGERNúmero total de tokens

Sentencia de creación de tabla (fuente: 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 (tabla de agregación por hora) ​

Agrega el uso de tokens cada hora para consultar rápidamente datos de tendencias.

Sentencia de creación de tabla (fuente: 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,           -- Depósito de tiempo (formato: 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)
);

Índices ​

Para mejorar el rendimiento de consultas, la base de datos establece los siguientes índices (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/token_stats.rs:97-108):

sql
-- Índice por tiempo descendente
CREATE INDEX IF NOT EXISTS idx_token_timestamp
ON token_usage (timestamp DESC);

-- Índice por cuenta
CREATE INDEX IF NOT EXISTS idx_token_account
ON token_usage (account_email);

Ejemplos de consultas comunes ​

Consultar el consumo de tokens de las últimas 24 horas ​

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;"

Estadísticas de consumo por modelo ​

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;"

Alcance de los campos de tiempo

token_usage.timestamp es una marca de tiempo Unix (en segundos) escrita por chrono::Utc::now().timestamp(), y token_stats_hourly.hour_bucket también es una cadena generada según UTC (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/token_stats.rs:136-156).


Base de datos de registros de monitoreo de proxy ​

La base de datos de registros de proxy registra información detallada de cada solicitud de proxy, utilizada para la solución de problemas y la auditoría de solicitudes.

Ubicación: ~/.antigravity_tools/proxy_logs.db

Motor de base de datos: SQLite + modo WAL (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/proxy_db.rs:10-24)

Estructura de tabla: request_logs ​

CampoTipoDescripción
idTEXT PRIMARY KEYID único de solicitud (UUID)
timestampINTEGERMarca de tiempo de solicitud
methodTEXTMétodo HTTP (GET/POST)
urlTEXTURL de solicitud
statusINTEGERCódigo de estado HTTP
durationINTEGERDuración de solicitud (milisegundos)
modelTEXTNombre del modelo solicitado por el cliente
mapped_modelTEXTNombre del modelo realmente utilizado después del enrutamiento
account_emailTEXTCorreo electrónico de la cuenta utilizada
errorTEXTInformación de error (si corresponde)
request_bodyTEXTCuerpo de solicitud (opcional, ocupa mucho espacio)
response_bodyTEXTCuerpo de respuesta (opcional, ocupa mucho espacio)
input_tokensINTEGERNúmero de tokens de entrada
output_tokensINTEGERNúmero de tokens de salida
protocolTEXTTipo de protocolo (openai/anthropic/gemini)

Sentencia de creación de tabla (fuente: 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
);

-- Compatibilidad: agregar nuevos campos gradualmente mediante 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;

Índices ​

sql
-- Índice por tiempo descendente
CREATE INDEX IF NOT EXISTS idx_timestamp
ON request_logs (timestamp DESC);

-- Índice por código de estado
CREATE INDEX IF NOT EXISTS idx_status
ON request_logs (status);

Limpieza automática ​

Cuando el sistema inicia ProxyMonitor, limpia automáticamente los registros de hace 30 días y realiza VACUUM en la base de datos (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/proxy/monitor.rs:41-60; implementación: source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/proxy_db.rs:194-209).

Ejemplos de consultas comunes ​

Consultar solicitudes fallidas recientes ​

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;"

Estadísticas de tasa de éxito por cuenta ​

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;"

Archivos de configuración ​

gui_config.json ​

Almacena la información de configuración de la aplicación, incluyendo la configuración de proxy, el mapeo de modelos, el modo de autenticación, etc.

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

La estructura de este archivo se basa en AppConfig (fuente: source/lbjlaq/Antigravity-Manager/src/types/config.ts:76-95).

Cuando solo necesitas "copia de seguridad/migración"

La forma más segura es: cierra la aplicación y luego comprime todo ~/.antigravity_tools/. La semántica de actualización en caliente/reinicio de la configuración pertenece al "comportamiento en tiempo de ejecución", se recomienda ver el curso avanzado Explicación completa de configuración.


Archivos de registro ​

Registros de la aplicación ​

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

Los registros utilizan rotación de archivos diaria, el nombre base del archivo es app.log (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/logger.rs:41-45).

Nivel de registro: INFO/WARN/ERROR

Propósito: Registra eventos clave, información de errores y información de depuración durante la ejecución de la aplicación, utilizado para la solución de problemas.


Migración y copia de seguridad de datos ​

Copia de seguridad de datos principales ​

bash
## Copia de seguridad de todo el directorio de datos (lo más seguro)
tar -czf antigravity-backup-$(date +%Y%m%d).tar.gz ~/.antigravity_tools
powershell
## Copia de seguridad de todo el directorio de datos (lo más seguro)
$backupDate = Get-Date -Format "yyyyMMdd"
$dataDir = "$env:USERPROFILE\.antigravity_tools"
Compress-Archive -Path $dataDir -DestinationPath "antigravity-backup-$backupDate.zip"

Migrar a una nueva máquina ​

  1. Cierra Antigravity Tools (para evitar que los archivos en escritura se copien a mitad)
  2. Copia .antigravity_tools de la máquina de origen al directorio principal del usuario de la máquina de destino
  3. Inicia Antigravity Tools

Migración entre plataformas

Si migras desde Windows a macOS/Linux (o viceversa), simplemente copia todo el directorio .antigravity_tools, el formato de datos es compatible entre plataformas.

Limpieza de datos históricos ​

Primero, la conclusión

  • proxy_logs.db: Limpieza automática de 30 días (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/proxy/monitor.rs:41-60).
  • token_stats.db: Inicializa la estructura de tablas al inicio (fuente: source/lbjlaq/Antigravity-Manager/src-tauri/src/lib.rs:53-56), pero el código fuente no muestra lógica de "limpieza automática de registros históricos por día".

Solo haz esto cuando confirmes que no necesitas datos históricos

Limpiar estadísticas/registros te hará perder datos históricos de solución de problemas y análisis de costos. Antes de proceder, haz una copia de seguridad de todo .antigravity_tools.

Si solo quieres "limpiar el historial y comenzar de nuevo", la forma más segura es cerrar la aplicación y eliminar directamente los archivos de base de datos (al próximo inicio se reconstruirá la estructura de tablas).

bash
## Limpiar estadísticas de tokens (perderás el historial)
rm -f ~/.antigravity_tools/token_stats.db

## Limpiar registros de monitoreo de proxy (perderás el historial)
rm -f ~/.antigravity_tools/proxy_logs.db
powershell
## Limpiar estadísticas de tokens (perderás el historial)
Remove-Item -Force "$env:USERPROFILE\.antigravity_tools\token_stats.db" -ErrorAction SilentlyContinue

## Limpiar registros de monitoreo de proxy (perderás el historial)
Remove-Item -Force "$env:USERPROFILE\.antigravity_tools\proxy_logs.db" -ErrorAction SilentlyContinue

Explicación de campos comunes ​

Marca de tiempo Unix ​

Todos los campos relacionados con tiempo (como created_at, last_used, timestamp) utilizan marcas de tiempo Unix (precisión de segundos).

Convertir a tiempo legible:

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

## Consulta SQLite (ejemplo: convertir request_logs.timestamp a tiempo legible)
sqlite3 ~/.antigravity_tools/proxy_logs.db \
  "SELECT datetime(timestamp, 'unixepoch', 'localtime') FROM request_logs LIMIT 1;"

Porcentaje de cuota ​

quota.models[].percentage representa el porcentaje de cuota restante (0-100) (fuente: source/lbjlaq/Antigravity-Manager/src/types/account.ts:36-40; modelo de backend: source/lbjlaq/Antigravity-Manager/src-tauri/src/models/quota.rs:3-9).

Si se activa la "protección de cuota" está determinado por quota_protection.enabled/threshold_percentage/monitored_models (fuente: source/lbjlaq/Antigravity-Manager/src/types/config.ts:59-63; escritura en protected_models: source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/account.rs:607-666).


Resumen de la lección ​

  • El directorio de datos de Antigravity Tools está en .antigravity_tools en el directorio principal del usuario
  • Datos de cuenta: accounts.json (índice) + accounts/<account_id>.json (datos completos de una sola cuenta)
  • Datos estadísticos: token_stats.db (estadísticas de tokens) + proxy_logs.db (registros de monitoreo de proxy)
  • Configuración y operación: gui_config.json, logs/, bin/cloudflared*, device_original.json
  • La forma más segura de copia de seguridad/migración es "cerrar la aplicación y luego comprimir todo .antigravity_tools"

Próxima lección ​

En la próxima lección aprenderemos Límites de integración de z.ai.

Aprenderás:

  • Lista de funciones implementadas de la integración de z.ai
  • Funciones no implementadas y limitaciones de uso
  • Explicación de la implementación experimental de Vision MCP

Apéndice: Referencias de código fuente ​

Haz clic para expandir y ver las ubicaciones del código fuente

Fecha de actualización: 2026-01-23

FunciónRuta del archivoLínea
Directorio de datos (.antigravity_tools)src-tauri/src/modules/account.rs16-33
Directorio de cuentas (accounts/)src-tauri/src/modules/account.rs35-46
Estructura de accounts.jsonsrc-tauri/src/models/account.rs76-92
Estructura de Account (backend)src-tauri/src/models/account.rs6-42
Estructura de Account (frontend)src/types/account.ts1-55
Estructura de TokenData/QuotaDatasrc-tauri/src/models/token.rs3-16
Estructura de TokenData/QuotaDatasrc-tauri/src/models/quota.rs3-21
Inicialización de base de datos de estadísticas de tokens (esquema)src-tauri/src/modules/token_stats.rs58-159
Inicialización de base de datos de registros de proxy (esquema)src-tauri/src/modules/proxy_db.rs5-65
Limpieza automática de registros de proxy (30 días)src-tauri/src/proxy/monitor.rs41-60
Implementación de limpieza automática de registros de proxysrc-tauri/src/modules/proxy_db.rs194-209
Lectura/escritura de gui_config.jsonsrc-tauri/src/modules/config.rs7-88
Directorio logs/ y app.logsrc-tauri/src/modules/logger.rs17-45
Ruta de bin/cloudflaredsrc-tauri/src/modules/cloudflared.rs92-101
device_original.jsonsrc-tauri/src/modules/device.rs11-13
---------

Constantes clave:

  • DATA_DIR = ".antigravity_tools": Nombre del directorio de datos (src-tauri/src/modules/account.rs:16-18)
  • ACCOUNTS_INDEX = "accounts.json": Nombre del archivo de índice de cuentas (src-tauri/src/modules/account.rs:16-18)
  • CONFIG_FILE = "gui_config.json": Nombre del archivo de configuración (src-tauri/src/modules/config.rs:7)

Funciones clave:

  • get_data_dir(): Obtener la ruta del directorio de datos (src-tauri/src/modules/account.rs)
  • record_usage(): Escribir en token_usage/token_stats_hourly (src-tauri/src/modules/token_stats.rs)
  • save_log(): Escribir en request_logs (src-tauri/src/modules/proxy_db.rs)
  • cleanup_old_logs(days): Eliminar registros request_logs antiguos y VACUUM (src-tauri/src/modules/proxy_db.rs)