Ir al contenido
LUNES, OCTUBRE 19, 2026NOTICIAS TECNOLÓGICAS INDEPENDIENTES, Reseñas y guías prácticas
ACERCA DE
ÚLTIMAS NOTICIAS /

OpenCode v2 vs Hermes Agent vs OpenClaw: The 2026 Open-Source Agent Showdown (and Why OpenCode 2.0 Is the Update of the Year)

LEE LA GUÍA
GRAHAM MIRANDA / TECNOLOGÍA

Cuadro de mandos de límites de perplejidad

Cargue sus límites de perplejidad

Sigue estos pasos rápidos para copiar tus datos de Perplexity en directo y visualizar tus límites personales en este panel.

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.

  1. Asegúrese de haber iniciado sesión en su cuenta de Perplexity en su navegador.
  2. 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.

  1. 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.

  1. Vuelva a esta página.
  2. Pegue el límite de velocidad JSON en el primer campo de entrada.
  3. Pegue el configuración JSON en el segundo campo de entrada.
  4. 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); }

Cuadro de mandos de límites de perplejidad

Visualice los límites y el uso de su API Perplexity en tiempo real

Pegue sus datos JSON

⚡

Límites de consulta

📄

Límites de contenido

📁

Límites de archivos y conectores

🔌

Fuente Límites

Fuente Límite mensual Resto Estado
🔗

Servicios conectados

👤

Información sobre la cuenta

📊

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 = `
${progress.current} / ${progress.max === null ? ‘∞’ : progress.max} ${percentage.toFixed(0)}%
`; } return `
${título} ${badgeHtml}
${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 += `
${icono}
${displayName}
${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); });
es_ESEspañol