Paso 1 - Abra sus datos de límite de tarifa
En primer lugar, obtén tu información actual de uso y cuota directamente de Perplexity.
- Asegúrese de haber iniciado sesión en su cuenta de Perplexity en su navegador.
- Abrir este enlace en una nueva pestaña:
Su navegador mostrará un bloque de texto JSON - estos son sus datos de límite de velocidad en vivo (cuántos mensajes, ejecuciones de investigación, etc. puede utilizar).
Seleccione todo lo que aparece en esa página (Ctrl/⌘ + A, entonces Ctrl/⌘ + C) para copiarlo.
Paso 2 - Abra los datos de configuración
A continuación, obtén los detalles de tu plan, límites de archivos, conectores y preferencias.
- Abrir este enlace en una nueva pestaña:
Esta página muestra otro bloque JSON que contiene los detalles de su suscripción, los límites de archivos y páginas y la configuración del conector.
De nuevo, seleccione todo el texto de la página y cópielo (Ctrl/⌘ + A, entonces Ctrl/⌘ + C).
Paso 3 - Pegue sus datos en el cuadro de mandos
Ahora tiene dos bloques JSON: uno para sus límites de tarifa y otro para la configuración de su cuenta.
- Vuelva a esta página.
- Pegue el límite de velocidad JSON en el primer campo de entrada.
- Pegue el configuración JSON en el segundo campo de entrada.
- Haga clic en “Visualizar mis límites” para convertir tus datos brutos en una visión limpia e interactiva de tu uso, cuotas y conectores.
Tus datos sólo se utilizan en tu navegador para su visualización. Tú mantienes el control absoluto de lo que pegas y compartes.
:root {
–bg-primary: #0a0a0f;
–bg-secondary: #12121a;
–bg-card: #1a1a24;
–bg-card-hover: #222230;
–text-primary: #ffffff;
–text-secondary: #a0a0b0;
–text-muted: #6b6b7b;
–acento-primario: #6366f1;
–acento-secundario: #8b5cf6;
–acento-éxito: #10b981;
–accent-warning: #f59e0b;
–accent-danger: #ef4444;
–accent-info: #3b82f6;
–color-del-borde: #2a2a3a;
–sombra: 0 4px 6px -1px rgba(0, 0, 0, 0,3), 0 2px 4px -1px rgba(0, 0, 0, 0,2);
–shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.4), 0 10px 10px -5px rgba(0, 0, 0, 0.3);
–radius: 12px;
–radius-sm: 8px;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: ‘Inter’, -apple-system, BlinkMacSystemFont, sans-serif;
background: var(–bg-primary);
color: var(–text-primary);
min-height: 100vh;
line-height: 1.6;
}
.container {
max-width: 1400px;
margin: 0 auto;
padding: 2rem;
}
/* Encabezado */
.header {
text-align: center;
margin-bottom: 3rem;
padding: 2rem 0;
}
.header h1 {
font-size: 2.5rem;
font-weight: 700;
background: linear-gradient(135deg, var(–accent-primary), var(–accent-secondary));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 0.5rem;
}
.header p {
color: var(–text-secondary);
font-size: 1.1rem;
}
/* Sección de entrada */
.input-section {
background: var(–bg-card);
border-radius: var(–radius);
padding: 2rem;
margin-bottom: 2rem;
border: 1px solid var(–border-color);
}
.input-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 1rem;
}
.input-header h2 {
font-size: 1.25rem;
font-weight: 600;
display: flex;
align-items: center;
gap: 0.5rem;
}
.input-header h2::before {
content: “📋”;
}
.btn-group {
display: flex;
gap: 0.5rem;
}
.btn {
padding: 0.5rem 1rem;
border-radius: var(–radius-sm);
border: none;
font-size: 0.875rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
}
.btn-primary {
background: linear-gradient(135deg, var(–accent-primary), var(–accent-secondary));
color: blanco;
}
.btn-primary:hover {
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(99, 102, 241, 0,4);
}
.btn-secondary {
fondo: var(–bg-secondary);
color: var(–text-primary);
borde: 1px sólido var(–border-color);
}
.btn-secondary:hover {
background: var(–bg-card-hover);
}
.json-input {
width: 100%;
min-height: 200px;
background: var(–bg-secondary);
border: 1px solid var(–border-color);
border-radius: var(–radius-sm);
padding: 1rem;
color: var(–text-primary);
font-family: ‘JetBrains Mono’, ‘Fira Code’, monospace;
font-size: 0.875rem;
resize: vertical;
transition: border-color 0.2s ease;
}
.json-input:focus {
outline: none;
border-color: var(–accent-primary);
}
.json-input::placeholder {
color: var(–text-muted);
}
/* Cuadrícula del panel de control */
.dashboard {
display: none;
animation: fadeIn 0.5s ease;
}
.dashboard.active {
display: block;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
/* Encabezados de sección */
.section-header {
display: flex;
align-items: center;
gap: 0.75rem;
margin: 2rem 0 1rem 0;
padding-bottom: 0.75rem;
border-bottom: 1px solid var(–border-color);
}
.section-header h2 {
font-size: 1.5rem;
font-weight: 600;
}
.section-icon {
width: 40px;
height: 40px;
border-radius: var(–radius-sm);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.25rem;
}
.icon-purple { background: rgba(99, 102, 241, 0.2); }
.icon-green { fondo: rgba(16, 185, 129, 0.2); }
.icon-blue { fondo: rgba(59, 130, 246, 0.2); }
.icon-orange { fondo: rgba(245, 158, 11, 0.2); }
.icon-red { fondo: rgba(239, 68, 68, 0,2); }
/* Cuadrícula de tarjetas */
.cards-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 1,5rem;
margin-bottom: 2rem;
}
.card {
background: var(–bg-card);
border-radius: var(–radius);
padding: 1.5rem;
border: 1px solid var(–border-color);
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.card::before {
content: ”;
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, var(–accent-primary), var(–accent-secondary));
opacity: 0;
transition: opacity 0.3s ease;
}
.card:hover {
transform: translateY(-4px);
box-shadow: var(–shadow-lg);
border-color: var(–accent-primary);
}
.card:hover::before {
opacity: 1;
}
.card-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 1rem;
}
.card-title {
font-size: 0.875rem;
font-weight: 500;
color: var(–text-secondary);
text-transform: uppercase;
letter-spacing: 0,05em;
}
.card-badge {
padding: 0,25rem 0,75rem;
border-radius: 9999px;
font-size: 0,75rem;
peso de fuente: 600;
}
.badge-success {
fondo: rgba(16, 185, 129, 0,2);
color: var(–accent-success);
}
.badge-warning {
fondo: rgba(245, 158, 11, 0,2);
color: var(–accent-warning);
}
.badge-danger {
fondo: rgba(239, 68, 68, 0.2);
color: var(–accent-danger);
}
.badge-info {
background: rgba(59, 130, 246, 0.2);
color: var(–accent-info);
}
.card-value {
tamaño de fuente: 2rem;
grosor de fuente: 700;
margen inferior: 0,5rem;
}
.card-description {
tamaño de fuente: 0,875rem;
color: var(–text-muted);
}
/* Barra de progreso */
.progress-container {
margen superior: 1rem;
}
.progress-header {
display: flex;
justify-content: space-between;
font-size: 0.75rem;
color: var(–text-muted);
margin-bottom: 0.5rem;
}
.progress-bar {
height: 8px;
background: var(–bg-secondary);
border-radius: 9999px;
overflow: hidden;
}
.progress-fill {
height: 100%;
border-radius: 9999px;
transition: width 0.5s ease;
}
.progress-success { background: linear-gradient(90deg, var(–accent-success), #34d399); }
.progress-warning { fondo: degradado lineal(90deg, var(–accent-warning), #fbbf24); }
.progress-danger { fondo: degradado lineal(90deg, var(–accent-danger), #f87171); }
.progress-info { fondo: degradado lineal(90deg, var(–accent-info), #60a5fa); }
/* Tabla de fuentes */
.sources-table {
width: 100%;
border-collapse: collapse;
background: var(–bg-card);
border-radius: var(–radius);
overflow: hidden;
border: 1px solid var(–border-color);
}
.sources-table th,
.sources-table td {
padding: 1rem 1.5rem;
text-align: left;
}
.sources-table th {
background: var(–bg-secondary);
font-weight: 600;
font-size: 0.875rem;
color: var(–text-secondary);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.sources-table tr {
border-bottom: 1px solid var(–border-color);
}
.sources-table tr:last-child {
border-bottom: none;
}
.sources-table td {
font-size: 0.875rem;
}
.source-name {
display: flex;
align-items: center;
gap: 0.75rem;
}
.source-icon {
width: 32px;
height: 32px;
border-radius: var(–radius-sm);
fondo: var(–bg-secondary);
display: flex;
alinear-elementos: center;
justificar-contenido: center;
tamaño de fuente: 1rem;
}
.valor-límite {
grosor de fuente: 600;
}
.limit-unlimited {
color: var(–accent-success);
}
.limit-zero {
color: var(–accent-danger);
}
.limit-normal {
color: var(–text-primary);
}
/* Cuadrícula de conectores */
.connectors-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 1rem;
}
.connector-card {
background: var(–bg-card);
border-radius: var(–radius-sm);
padding: 1rem;
border: 1px solid var(–border-color);
display: flex;
align-items: center;
gap: 1rem;
}
.connector-status {
width: 12px;
height: 12px;
border-radius: 50%;
flex-shrink: 0;
}
.status-connected {
background: var(–accent-success);
box-shadow: 0 0 8px var(–accent-success);
}
.status-disconnected {
fondo: var(–text-muted);
}
.connector-info {
flex: 1;
}
.connector-name {
grosor de fuente: 500;
font-size: 0.875rem;
}
.connector-type {
font-size: 0.75rem;
color: var(–text-muted);
}
/* Mensaje de error */
.error-message {
background: rgba(239, 68, 68, 0.1);
border: 1px solid var(–accent-danger);
border-radius: var(–radius-sm);
padding: 1rem;
margin-top: 1rem;
color: var(–accent-danger);
display: none;
}
.error-message.active {
display: block;
}
/* Estado vacío */
.empty-state {
text-align: center;
padding: 4rem 2rem;
color: var(–text-muted);
}
.empty-state-icon {
font-size: 4rem;
margin-bottom: 1rem;
opacity: 0.5;
}
/* Adaptativo */
@media (max-width: 768px) {
.container {
padding: 1rem;
}
.header h1 {
tamaño de fuente: 1,75 rem;
}
.cards-grid {
grid-template-columns: 1fr;
}
.sources-table {
tamaño de fuente: 0,75 rem;
}
.sources-table th,
.sources-table td {
padding: 0,75 rem;
}
.input-header {
flex-direction: column;
gap: 1 rem;
align-items: flex-start;
}
}
/* Animaciones */
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
.pulse {
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
/* Barra de desplazamiento */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(–bg-secondary);
}
::-webkit-scrollbar-thumb {
fondo: var(–border-color);
radio del borde: 4px;
}
::-webkit-scrollbar-thumb:hover {
fondo: var(–text-muted);
}
| Fuente |
Límite mensual |
Resto |
Estado |
📊
No hay datos que mostrar
Pegue sus datos JSON y haga clic en “Parse Data” para visualizar sus límites.
// Example data
const example1 = `{“model_specific_limits”:{},”remaining_agentic_research”:0,”remaining_labs”:24,”remaining_pro”:600,”remaining_research”:20,”sources”:{“source_to_limit”:{“asana_mcp_merge”:{“monthly_limit”:null,”remaining”:null},”box”:{“monthly_limit”:0,”remaining”:0},”cbinsights_mcp_cashmere”:{“monthly_limit”:5,”remaining”:5},”confluence_mcp_merge”:{“monthly_limit”:null,”remaining”:null},”crunchbase”:{“monthly_limit”:0,”remaining”:0},”dropbox”:{“monthly_limit”:null,”remaining”:null},”factset”:{“monthly_limit”:0,”remaining”:0},”gcal”:{“monthly_limit”:null,”remaining”:null},”github_mcp_direct”:{“monthly_limit”:null,”remaining”:null},”google_drive”:{“monthly_limit”:null,”remaining”:null},”jira_mcp_merge”:{“monthly_limit”:null,”remaining”:null},”linear_alt”:{“monthly_limit”:null,”remaining”:null},”microsoft_teams_mcp_merge”:{“monthly_limit”:null,”remaining”:null},”notion_mcp”:{“monthly_limit”:null,”remaining”:null},”onedrive”:{“monthly_limit”:0,”remaining”:0},”org”:{“monthly_limit”:0,”remaining”:0},”outlook”:{“monthly_limit”:null,”remaining”:null},”pitchbook_mcp_cashmere”:{“monthly_limit”:5,”remaining”:5},”scholar”:{“monthly_limit”:null,”remaining”:null},”sharepoint”:{“monthly_limit”:0,”remaining”:0},”slack_direct”:{“monthly_limit”:null,”remaining”:null},”social”:{“monthly_limit”:null,”remaining”:null},”statista_mcp_cashmere”:{“monthly_limit”:5,”remaining”:5},”web”:{“monthly_limit”:null,”remaining”:null},”wiley_mcp_cashmere”:{“monthly_limit”:5,”remaining”:5}}}}`;
const example2 = `{“pages_limit”:100,”upload_limit”:50,”create_limit”:99,”article_image_upload_limit”:500,”max_files_per_user”:500,”max_files_per_repository”:50,”connector_limits”:{“repo_type_limits”:{“COLLECTION”:{“max_files”:50,”max_folders”:50},”HEALTH”:{“max_files”:200,”max_folders”:200}},”global_file_count”:500,”max_file_size_mb”:50,”max_attachment_file_size_mb”:50,”daily_attachment_limit”:500,”weekly_attachment_limit”:null,”daily_attachment_limit_non_priority_country”:null},”sources”:{“source_to_limit”:{“web”:{“monthly_limit”:null,”remaining”:null},”scholar”:{“monthly_limit”:null,”remaining”:null},”social”:{“monthly_limit”:null,”remaining”:null},”google_drive”:{“monthly_limit”:null,”remaining”:null},”gcal”:{“monthly_limit”:null,”remaining”:null},”dropbox”:{“monthly_limit”:null,”remaining”:null},”notion_mcp”:{“monthly_limit”:null,”remaining”:null},”outlook”:{“monthly_limit”:null,”remaining”:null},”linear_alt”:{“monthly_limit”:null,”remaining”:null},”github_mcp_direct”:{“monthly_limit”:null,”remaining”:null},”asana_mcp_merge”:{“monthly_limit”:null,”remaining”:null},”slack_direct”:{“monthly_limit”:null,”remaining”:null},”jira_mcp_merge”:{“monthly_limit”:null,”remaining”:null},”confluence_mcp_merge”:{“monthly_limit”:null,”remaining”:null},”microsoft_teams_mcp_merge”:{“monthly_limit”:null,”remaining”:null},”wiley_mcp_cashmere”:{“monthly_limit”:5,”remaining”:5},”cbinsights_mcp_cashmere”:{“monthly_limit”:5,”remaining”:5},”pitchbook_mcp_cashmere”:{“monthly_limit”:5,”remaining”:5},”statista_mcp_cashmere”:{“monthly_limit”:5,”remaining”:5}}},”has_ai_profile”:false,”referral_code”:”Q7N0LPC8″,”referral_num_success”:0,”referral_num_coupons”:0,”stripe_status”:”active”,”revenuecat_status”:”none”,”revenuecat_source”:”none”,”subscription_status”:”active”,”subscription_source”:”stripe”,”subscription_tier”:”yearly”,”coupon_metadata”:{“name”:”Deutsche Telekom HR”,”logo_image_url”:null,”logo_dark_image_url”:null,”accent_color”:null,”expires_at”:”2026-01-15T00:00:00″,”coupon_duration”:null,”coupon_duration_days”:null,”coupon_amount”:null,”coupon_percent”:null,”coupon_id”:”yglW31iG”,”promo_code_id”:”promo_1R1CDbGZwjqPfxkZrmz5rHc3″,”default_locale”:null,”has_custom_notifications”:false},”default_model”:”turbo”,”default_image_generation_model”:”gemini-flash”,”default_video_generation_model”:”default”,”query_count”:59,”query_count_copilot”:54,”query_count_mobile”:0,”disable_training”:false,”is_sidebar_collapsed”:null,”default_copilot”:null,”notif_status”:”daily”,”email_status”:”daily”,”time_zone”:”Europe/Berlin”,”device_language”:”en-US”,”discover_homepage_enabled”:false,”always_allow_browser_agent”:false,”has_accepted_api_terms”:false,”has_data_retention_warning”:false,”is_verified”:false,”allow_article_creation”:true,”connectors”:{“connectors”:[{“name”:”google_drive”,”auth_type”:”oauth”,”connected”:false,”error”:null,”picker_credentials”:null,”connection_display_name”:null,”connection_uuid”:null,”has_required_scopes”:null,”source_id”:”google_drive”,”connection_type”:”GOOGLE_DRIVE”,”capabilities”:{“direct_api_search”:true,”high_precision_search”:true,”file_upload”:true},”disabled_capabilities”:[]},{“name”:”gcal”,”auth_type”:”oauth”,”connected”:false,”error”:null,”picker_credentials”:null,”connection_display_name”:null,”connection_uuid”:null,”has_required_scopes”:null,”source_id”:”gcal”,”connection_type”:”GCAL”,”capabilities”:{},”disabled_capabilities”:[]},{“name”:”dropbox”,”auth_type”:”oauth”,”connected”:false,”error”:null,”picker_credentials”:null,”connection_display_name”:null,”connection_uuid”:null,”has_required_scopes”:null,”source_id”:”dropbox”,”connection_type”:”DROPBOX”,”capabilities”:{“direct_api_search”:true,”high_precision_search”:true,”file_upload”:true},”disabled_capabilities”:[]},{“name”:”edgar”,”auth_type”:”none”,”connected”:false,”error”:null,”picker_credentials”:null,”connection_display_name”:null,”connection_uuid”:null,”has_required_scopes”:null,”source_id”:”edgar”,”connection_type”:null,”capabilities”:{},”disabled_capabilities”:[]},{“name”:”outlook”,”auth_type”:”oauth”,”connected”:false,”error”:null,”picker_credentials”:null,”connection_display_name”:null,”connection_uuid”:null,”has_required_scopes”:null,”source_id”:”outlook”,”connection_type”:”OUTLOOK”,”capabilities”:{},”disabled_capabilities”:[]},{“name”:”linear_alt”,”auth_type”:”oauth”,”connected”:false,”error”:null,”picker_credentials”:null,”connection_display_name”:null,”connection_uuid”:null,”has_required_scopes”:null,”source_id”:”linear_alt”,”connection_type”:”LINEAR_ALT”,”capabilities”:{},”disabled_capabilities”:[]},{“name”:”notion_mcp”,”auth_type”:”oauth”,”connected”:false,”error”:null,”picker_credentials”:null,”connection_display_name”:null,”connection_uuid”:null,”has_required_scopes”:null,”source_id”:”notion_mcp”,”connection_type”:”NOTION_MCP”,”capabilities”:{},”disabled_capabilities”:[]},{“name”:”github_mcp_direct”,”auth_type”:”oauth”,”connected”:false,”error”:null,”picker_credentials”:null,”connection_display_name”:null,”connection_uuid”:null,”has_required_scopes”:null,”source_id”:”github_mcp_direct”,”connection_type”:”GITHUB_MCP_DIRECT”,”capabilities”:{},”disabled_capabilities”:[]},{“name”:”asana_mcp_merge”,”auth_type”:”oauth”,”connected”:false,”error”:null,”picker_credentials”:null,”connection_display_name”:null,”connection_uuid”:null,”has_required_scopes”:null,”source_id”:”asana_mcp_merge”,”connection_type”:”ASANA_MCP_MERGE”,”capabilities”:{},”disabled_capabilities”:[]},{“name”:”slack_direct”,”auth_type”:”oauth”,”connected”:false,”error”:null,”picker_credentials”:null,”connection_display_name”:null,”connection_uuid”:null,”has_required_scopes”:null,”source_id”:”slack_direct”,”connection_type”:”SLACK_DIRECT”,”capabilities”:{},”disabled_capabilities”:[]},{“name”:”jira_mcp_merge”,”auth_type”:”oauth”,”connected”:false,”error”:null,”picker_credentials”:null,”connection_display_name”:null,”connection_uuid”:null,”has_required_scopes”:null,”source_id”:”jira_mcp_merge”,”connection_type”:”JIRA_MCP_MERGE”,”capabilities”:{},”disabled_capabilities”:[]},{“name”:”confluence_mcp_merge”,”auth_type”:”oauth”,”connected”:false,”error”:null,”picker_credentials”:null,”connection_display_name”:null,”connection_uuid”:null,”has_required_scopes”:null,”source_id”:”confluence_mcp_merge”,”connection_type”:”CONFLUENCE_MCP_MERGE”,”capabilities”:{},”disabled_capabilities”:[]},{“name”:”microsoft_teams_mcp_merge”,”auth_type”:”oauth”,”connected”:false,”error”:null,”picker_credentials”:null,”connection_display_name”:null,”connection_uuid”:null,”has_required_scopes”:null,”source_id”:”microsoft_teams_mcp_merge”,”connection_type”:”MICROSOFT_TEAMS_MCP_MERGE”,”capabilities”:{},”disabled_capabilities”:[]}]}}`;
// Source icons mapping
const sourceIcons = {
web: ‘🌐’,
scholar: ‘🎓’,
social: ‘💬’,
google_drive: ‘📁’,
gcal: ‘📅’,
dropbox: ‘📦’,
notion_mcp: ‘📝’,
outlook: ‘📧’,
linear_alt: ‘📊’,
github_mcp_direct: ‘💻’,
asana_mcp_merge: ‘✅’,
slack_direct: ‘💬’,
jira_mcp_merge: ‘📋’,
confluence_mcp_merge: ‘📚’,
microsoft_teams_mcp_merge: ‘👥’,
wiley_mcp_cashmere: ‘📖’,
cbinsights_mcp_cashmere: ‘💡’,
pitchbook_mcp_cashmere: ‘💰’,
statista_mcp_cashmere: ‘📈’,
box: ‘📦’,
crunchbase: ‘🏢’,
factset: ‘📊’,
onedrive: ‘☁️’,
org: ‘🏛️’,
sharepoint: ‘📑’,
edgar: ‘⚖️’
};
// Connector icons
const connectorIcons = {
google_drive: ‘📁’,
gcal: ‘📅’,
dropbox: ‘📦’,
edgar: ‘⚖️’,
outlook: ‘📧’,
linear_alt: ‘📊’,
notion_mcp: ‘📝’,
github_mcp_direct: ‘💻’,
asana_mcp_merge: ‘✅’,
slack_direct: ‘💬’,
jira_mcp_merge: ‘📋’,
confluence_mcp_merge: ‘📚’,
microsoft_teams_mcp_merge: ‘👥’
};
function loadExample(num) {
document.getElementById(‘jsonInput’).value = num === 1 ? example1 : example2;
parseJSON();
}
function clearData() {
document.getElementById(‘jsonInput’).value = ”;
document.getElementById(‘dashboard’).classList.remove(‘active’);
document.getElementById(’emptyState’).style.display = ‘block’;
hideError();
}
function showError(message) {
const errorEl = document.getElementById(‘errorMessage’);
errorEl.textContent = message;
errorEl.classList.add(‘active’);
}
function hideError() {
document.getElementById(‘errorMessage’).classList.remove(‘active’);
}
function parseJSON() {
const input = document.getElementById(‘jsonInput’).value.trim();
if (!input) {
showError(‘Please enter JSON data’);
return;
}
try {
const data = JSON.parse(input);
hideError();
renderDashboard(data);
} catch (e) {
showError(‘Invalid JSON: ‘ + e.message);
}
}
function renderDashboard(data) {
document.getElementById(’emptyState’).style.display = ‘none’;
document.getElementById(‘dashboard’).classList.add(‘active’);
renderQueryLimits(data);
renderContentLimits(data);
renderConnectorLimits(data);
renderSources(data);
renderConnectors(data);
renderAccountInfo(data);
}
function createCard(title, value, description, badge = null, progress = null) {
let badgeHtml = ”;
if (badge) {
badgeHtml = `
${badge.text}`;
}
let progressHtml = ”;
if (progress) {
const porcentaje = Math.min(100, (progress.current / progress.max) * 100);
const progressClass = percentage > 90 ? ‘peligro’ : percentage > 70 ? ‘advertencia’ : ‘éxito’;
progressHtml = `
`;
}
return `
${valor}
${descripción}
${progressHtml}
`;
}
function renderQueryLimits(data) {
const container = document.getElementById(‘queryLimits’);
let html = ”‘;
if (data.remaining_pro !== undefined) {
html += createCard(
’Consultas Pro‘,
data.remaining_pro,
’Consultas profesionales restantes‘,
data.remaining_pro > 100 ? { type: ’success‘, text: ’Bien‘ } :
data.remaining_pro > 50 ? { type: ’warning‘, text: ’Bajo‘ } : { type: ’danger‘, text: ’Crítico‘ }
);
}
if (data.remaining_research !== undefined) {
html += createCard(
’Consultas de investigación‘,
data.remaining_research,
’Consultas de investigación restantes‘,
data.remaining_research > 10 ? { tipo: ’éxito‘, texto: ’Bien‘ } :
data.remaining_research > 5 ? { tipo: ’advertencia‘, texto: ’Bajo‘ } : { tipo: ’peligro‘, texto: ’Crítico‘ }
);
}
if (data.remaining_agentic_research !== undefined) {
html += createCard(
’Investigación agéntica‘,
data.remaining_agentic_research,
’Consultas de investigación agéntica restantes‘,
data.remaining_agentic_research > 0 ? { type: ’success‘, text: ’Disponible‘ } : { tipo: ’peligro‘, texto: ’Agotado‘ }
);
}
si (data.remaining_labs !== undefined) {
html += createCard(
’Consultas de laboratorios‘,
data.remaining_labs,
’Consultas de laboratorios/experimentos restantes‘,
data.remaining_labs > 10 ? { type: ’success‘, text: ’Bien‘ } :
data.remaining_labs > 5 ? { tipo: ’advertencia‘, texto: ’Bajo‘ } : { tipo: ’peligro‘, texto: ’Crítico‘ }
);
}
if (data.query_count !== undefined) {
html += createCard(
’Total de consultas‘,
data.query_count,
’Total de consultas realizadas en este periodo‘
);
}
if (data.query_count_copilot !== undefined) {
html += createCard(
’Consultas de Copilot‘,
data.query_count_copilot,
’Consultas realizadas a través de Copilot‘
);
}
container.innerHTML = html || ‘
No hay datos disponibles sobre el límite de consultas
‘;
}
function renderContentLimits(data) {
const container = document.getElementById(‘contentLimits’);
let html = ”;
if (data.pages_limit !== undefined) {
html += createCard(
‘Límite de páginas’,
data.pages_limit,
‘Número máximo de páginas permitidas’
);
}
if (data.upload_limit !== undefined) {
html += createCard(
‘Límite de creaciones’,
data.create_limit,
‘Número máximo de creaciones permitidas’
);
}
if (data.create_limit !== undefined) {
html += createCard(
‘Límite de creación’,
data.create_limit,
‘Número máximo de creaciones permitidas’
);
}
if (data.article_image_upload_limit !== undefined) {
html += createCard(
‘Límite de subida de imágenes’,
data.article_image_upload_limit,
‘Número máximo de imágenes de artículo que se pueden subir’
);
}
container.innerHTML = html || ‘
No hay datos disponibles sobre el límite de contenido
‘;
}
function renderConnectorLimits(data) {
const container = document.getElementById(‘connectorLimits’);
let html = ”;
if (data.max_files_per_user !== undefined) {
html += createCard(
‘Archivos por usuario’,
data.max_files_per_user,
‘Número máximo de archivos por usuario’
);
}
if (data.max_files_per_repository !== undefined) {
html += createCard(
‘Archivos por repositorio’,
data.max_files_per_repository,
‘Número máximo de archivos por repositorio’
);
}
if (data.connector_limits) {
const cl = data.connector_limits;
if (cl.max_file_size_mb !== undefined) {
html += createCard(
‘Tamaño máximo de archivo’,
cl.max_file_size_mb + ‘ MB’,
‘Tamaño máximo de subida de archivos’
);
}
if (cl.max_attachment_file_size_mb !== undefined) {
html += createCard(
‘Tamaño máximo de los archivos adjuntos’,
cl.max_attachment_file_size_mb + ‘ MB’,
‘Tamaño máximo de los archivos adjuntos’
);
}
if (cl.daily_attachment_limit !== undefined) {
html += createCard(
‘Adjuntos diarios’,
cl.daily_attachment_limit,
‘Límite diario de adjuntos’
);
}
if (cl.global_file_count !== undefined) {
html += createCard(
‘Recuento global de archivos’,
cl.global_file_count,
‘Límite total global de archivos’
);
}
}
container.innerHTML = html || ‘
No hay datos disponibles sobre el límite de conectores
‘;
}
function renderSources(data) {
const tbody = document.getElementById(‘sourcesTableBody’);
let html = ”;
const sources = data.sources?.source_to_limit || {};
Object.entries(sources).forEach(([name, limits]) => {
const icon = sourceIcons[name] || ‘🔌’;
const displayName = name.replace(/_/g, ‘ ‘).replace(/bw/g, l => l.toUpperCase());
let limitClass = ‘limit-normal’;
let limitText = limits.monthly_limit === null ? ‘Ilimitado’ : limits.monthly_limit;
if (limits.monthly_limit === null) limitClass = ‘limit-unlimited’;
if (limits.monthly_limit === 0) limitClass = ‘limit-zero’;
let remainingClass = ‘limit-normal’;
let remainingText = limits.remaining === null ? ‘Ilimitado’ : limits.remaining;
if (limits.remaining === null) remainingClass = ‘limit-unlimited’;
if (limits.remaining === 0) remainingClass = ‘limit-zero’;
let statusBadge = ”;
if (limits.remaining === null && limits.monthly_limit === null) {
statusBadge = ‘
Sin límites‘;
} else if (limits.remaining === 0) {
statusBadge = ‘
Agotado‘;
} else if (limits.remaining !== null && limits.monthly_limit !== null) {
const pct = (limits.remaining / limits.monthly_limit) * 100;
if (pct > 50) {
statusBadge = ‘
Bien‘;
} else if (pct > 25) {
statusBadge = ‘
Bajo‘;
} else {
statusBadge = ‘
Crítico‘;
}
} else {
statusBadge = ‘
N/A‘;
}
html += `
|
|
${limitText} |
${texto restante} |
${statusBadge} |
`;
});
tbody.innerHTML = html || ‘
| No hay datos de origen disponibles |
‘;
}
function renderConnectors(data) {
const container = document.getElementById(‘connectorsGrid’);
let html = ”;
const conectores = data.conectores?.conectores || [];
conectores.forEach(conector => {
const icono = iconosDeConectores[conector.nombre] || ‘🔌’;
const displayName = connector.name.replace(/_/g, ‘ ‘).replace(/bw/g, l => l.toUpperCase());
const statusClass = connector.connected ? ‘status-connected’ : ‘status-disconnected’;
const statusText = connector.connected ? ‘Conectado’ : ‘Desconectado’;
html += `
${icono}
${displayName}
${statusText}
`;
});
container.innerHTML = html || ‘
No hay datos disponibles sobre el conector
‘;
}
function renderAccountInfo(data) {
const container = document.getElementById(‘accountInfo’);
let html = ”;
if (data.subscription_tier) {
html += createCard(
‘Nivel de suscripción’,
data.subscription_tier.charAt(0).toUpperCase() + data.subscription_tier.slice(1),
‘Tu plan de suscripción actual’,
{ type: ‘success’, text: data.subscription_status === ‘active’ ? ‘Activo’ : ‘Inactivo’ }
);
}
if (data.subscription_source) {
html += createCard(
‘Fuente de pago’,
data.subscription_source.charAt(0).toUpperCase() + data.subscription_source.slice(1),
‘Tu proveedor de pago’
);
}
if (data.referral_code) {
html += createCard(
‘Código de recomendación’,
data.referral_code,
‘Compartir con amigos’
);
}
if (data.default_model) {
html += createCard(
‘Modelo predeterminado’,
data.default_model.charAt(0).toUpperCase() + data.default_model.slice(1),
‘Tu modelo de IA preferido’
);
}
if (data.time_zone) {
html += createCard(
‘Zona horaria’,
data.time_zone,
‘Tu zona horaria local’
);
}
if (data.coupon_metadata?.name) {
html += createCard(
‘Cupón’,
data.coupon_metadata.name,
‘Cupón aplicado’,
data.coupon_metadata.expires_at ? {
type: new Date(data.coupon_metadata.expires_at) > new Date() ? ‘éxito’ : ‘peligro’,
text: new Date(data.coupon_metadata.expires_at) > new Date() ? ‘Válido’ : ‘Caducado’
} : null
);
}
container.innerHTML = html || ‘
No hay información disponible sobre la cuenta
‘;
}
// Análisis automático al pegar
document.getElementById(‘jsonInput’).addEventListener(‘paste’, function(e) {
setTimeout(() => parseJSON(), 100);
});