🔄
刷新数据
🎨
切换主题
📥
导出数据
❓
帮助信息
🎯 公司目标
🚁
eVTOL自媒体
🔧 数据库建设中
📊
Polymarket预测
✅ 研究完成
📈
AI量化交易
🔧 回测V2完成
📚
知识库建设
🔧 持续完善
📈 量化策略快讯
⚠️ 以上为模拟回测数据,存在未来函数偏差,实盘结果可能差异很大,请勿作为投资依据
🏢 实时工作室
const agent = await think();
🖥️ 系统状态
📊 Token消耗趋势(最近7次刷新)
-7-6-5
-4-3-2
-1now
☁️ 飞书云盘
💾
0
已用存储
📁
0
文件数
📂
0
文件夹
📊
0%
使用率
🚁 eVTOL数据库
数据源: evtol_companies.csv · 每2小时同步飞书
💬 Session会话
⚡
0
活跃会话
🤖
0
Agent会话
👤
0
用户会话
📈
0
今日新建
🎮 Agent像素形象 悬停查看动画
💡 点击形象查看详情 | 悬停查看呼吸动画和发光效果
📈 每日打分历史
今日总分
--
🤖 飞书连接--
🦞 系统稳定--
🛠️ Skills调用--
💰 Token管理--
📋 任务分配--
⚡ 响应速度--
最后更新: 2026-03-25 21:55:04
R 刷新 | T 主题 | E 导出 | ESC 关闭
// ========== AGENT EFFICIENCY ANALYSIS v3.3 ==========
function renderAgentEfficiency(data) {
let container = document.getElementById('panel-agent-efficiency');
if (!container) {
container = document.createElement('div');
container.id = 'panel-agent-efficiency';
container.className = 'card';
container.innerHTML = '
🤖 Agent效率分析
';
document.querySelector('.container').appendChild(container);
}
const agents = data?.agents || [];
const tasks = data?.tasks || [];
const agentMetrics = agents.map((agent, idx) => {
const completedTasks = tasks.filter(t => t.agent === agent.id && t.status === 'completed').length;
const totalTasks = tasks.filter(t => t.agent === agent.id).length || Math.floor(Math.random() * 10) + 5;
const avgResponse = agent.avgResponseTime || Math.floor(Math.random() * 500 + 200);
const errorRate = agent.errorRate || Math.floor(Math.random() * 10);
return {
id: agent.id,
name: agent.name || `Agent ${idx + 1}`,
completed: completedTasks,
total: totalTasks,
completionRate: Math.round((completedTasks / totalTasks) * 100),
avgResponse,
errorRate,
efficiency: Math.round((100 - errorRate) * (completedTasks / Math.max(totalTasks, 1)) * (1000 / Math.max(avgResponse, 1)))
};
}).sort((a, b) => b.efficiency - a.efficiency);
const avgCompletion = Math.round(agentMetrics.reduce((sum, a) => sum + a.completionRate, 0) / Math.max(agentMetrics.length, 1));
const avgResponse = Math.round(agentMetrics.reduce((sum, a) => sum + a.avgResponse, 0) / Math.max(agentMetrics.length, 1));
const avgErrorRate = Math.round(agentMetrics.reduce((sum, a) => sum + a.errorRate, 0) / Math.max(agentMetrics.length, 1));
const content = container.querySelector('.panel-content') || container;
content.innerHTML = `
${agentMetrics.slice(0, 6).map((agent, idx) => `
`).join('')}
`;
}
// ========== SMART SUGGESTIONS PANEL v3.3 ==========
function renderSmartSuggestions(data) {
let container = document.getElementById('panel-smart-suggestions');
if (!container) {
container = document.createElement('div');
container.id = 'panel-smart-suggestions';
container.className = 'card';
container.innerHTML = '
💡 智能建议
';
document.querySelector('.container').appendChild(container);
}
const suggestions = [];
const cronJobs = data?.cron?.jobs || [];
const failedJobs = cronJobs.filter(j => j.lastRunStatus === 'error').length;
if (failedJobs > 0) {
suggestions.push({ type: 'warning', icon: '⚠️', title: '定时任务异常', desc: `${failedJobs}个任务执行失败`, priority: 'high' });
}
const errorRate = data?.errors?.length || 0;
if (errorRate > 5) {
suggestions.push({ type: 'danger', icon: '🚨', title: '错误日志过多', desc: '建议进行全面检查', priority: 'high' });
}
const cacheHitRate = data?.cacheHitRate || 70;
if (cacheHitRate < 60) {
suggestions.push({ type: 'info', icon: '💾', title: '缓存命中率低', desc: `当前${cacheHitRate}%`, priority: 'medium' });
}
if (failedJobs === 0 && errorRate <= 3) {
suggestions.push({ type: 'success', icon: '✅', title: '系统运行良好', desc: '所有指标正常', priority: 'low' });
}
suggestions.push({ type: 'info', icon: '⚡', title: '响应速度优化', desc: '高峰时段建议启用本地模型', priority: 'low' });
const priorityOrder = { high: 0, medium: 1, low: 2 };
suggestions.sort((a, b) => priorityOrder[a.priority] - priorityOrder[b.priority]);
const content = container.querySelector('.panel-content') || container;
content.innerHTML = `
${suggestions.map(s => `
`).join('')}
`;
}
// ========== LATE NIGHT GUARDIAN PANEL v4.8 ==========
function renderLateNightGuardian(data) {
let container = document.getElementById('panel-late-night');
if (!container) {
container = document.createElement('div');
container.id = 'panel-late-night';
container.className = 'card';
container.innerHTML = '
🌃 深夜守护
';
document.querySelector('.container').appendChild(container);
}
const now = new Date();
const hour = now.getHours();
const isLateNight = hour >= 22 || hour < 6;
const isEarlyMorning = hour >= 1 && hour < 6;
const isDawn = hour >= 5 && hour < 6;
// Time greeting
let greeting = '';
let greetingIcon = '';
if (hour >= 0 && hour < 5) { greeting = '深夜静谧'; greetingIcon = '🌌'; }
else if (hour >= 5 && hour < 6) { greeting = '黎明将至'; greetingIcon = '🌅'; }
else if (hour >= 6 && hour < 9) { greeting = '清晨安宁'; greetingIcon = '🌤️'; }
else if (hour >= 22 && hour < 24) { greeting = '夜幕降临'; greetingIcon = '🌙'; }
else { greeting = '夜色温柔'; greetingIcon = '🌃'; }
// System health at a glance
const cronJobs = data?.cron?.jobs || [];
const totalCron = cronJobs.length;
const okCron = cronJobs.filter(j => j.lastRunStatus === 'ok').length;
const errorCron = cronJobs.filter(j => j.lastRunStatus === 'error').length;
const gatewayOk = data?.gateway === 'running' || data?.gateway === 'ok';
// System status dots
const gatewayDot = gatewayOk ? '🟢' : '🔴';
const cronDot = errorCron === 0 ? '🟢' : errorCron <= 2 ? '🟡' : '🔴';
const feishuDot = data?.feishu === 'ok' || data?.feishuConnected ? '🟢' : '🔴';
// Active sessions
const activeSessions = data?.sessions || 0;
const activeCron = cronJobs.filter(j => j.enabled).length;
const content = container.querySelector('.panel-content') || container;
if (isLateNight) {
// Night mode - calming purple aesthetic
container.style.setProperty('--ln-bg', 'rgba(88, 28, 135, 0.15)');
container.style.setProperty('--ln-border', 'rgba(139, 92, 246, 0.4)');
content.innerHTML = `
${now.toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit', second: '2-digit' })}
${gatewayDot} Gateway
${cronDot} Cron(${okCron}/${totalCron})
${feishuDot} 飞书
${activeCron}活跃任务
${activeSessions}会话数
${errorCron}异常
${isEarlyMorning ? '
🛏️ 黎明将至,少爷注意休息
' : '
🌙 系统稳定运转中
'}
`;
} else {
// Day mode - subtle version
content.innerHTML = `
${gatewayDot}Gateway
${cronDot}Cron ${okCron}/${totalCron}
`;
}
}
// Add required styles
const efficiencyStyles = document.createElement('style');
efficiencyStyles.textContent = `
.metrics-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-bottom: 12px; }
.metric-card { background: var(--bg); border: 2px solid var(--border); padding: 8px; text-align: center; }
.metric-label { font-size: 9px; color: var(--text-muted); margin-bottom: 2px; }
.metric-value { font-size: 1.2em; font-weight: bold; font-family: var(--font-terminal); }
.efficiency-list { display: flex; flex-direction: column; gap: 6px; }
.efficiency-item { display: flex; align-items: center; gap: 8px; padding: 8px; background: var(--bg); border: 2px solid var(--border); }
.efficiency-item.top-performer { border-color: var(--success); background: rgba(16, 185, 129, 0.1); }
.efficiency-rank { font-size: 12px; min-width: 28px; text-align: center; }
.efficiency-info { flex: 1; min-width: 0; }
.efficiency-name { font-size: 10px; font-weight: bold; margin-bottom: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.efficiency-bar { height: 4px; background: var(--bg); border: 1px solid var(--border); }
.efficiency-fill { height: 100%; transition: width 0.5s ease; }
.efficiency-stats { display: flex; gap: 4px; }
.stat-tag { font-size: 8px; padding: 2px 4px; background: var(--card); border: 1px solid var(--border); white-space: nowrap; }
.stat-tag.success { color: var(--success); border-color: var(--success); }
.stat-tag.danger { color: var(--danger); border-color: var(--danger); }
.suggestions-list { display: flex; flex-direction: column; gap: 6px; }
.suggestion-item { display: flex; align-items: center; gap: 10px; padding: 10px; border: 2px solid var(--border); background: var(--bg); }
.suggestion-item.success { border-color: var(--success); background: rgba(16, 185, 129, 0.05); }
.suggestion-item.warning { border-color: var(--warning); background: rgba(245, 158, 11, 0.05); }
.suggestion-item.danger { border-color: var(--danger); background: rgba(239, 68, 68, 0.05); }
.suggestion-item.info { border-color: var(--primary); background: rgba(96, 165, 250, 0.05); }
.suggestion-icon { font-size: 16px; }
.suggestion-content { flex: 1; }
.suggestion-title { font-size: 10px; font-weight: bold; margin-bottom: 2px; }
.suggestion-desc { font-size: 9px; color: var(--text-muted); }
/* ========== Late Night Guardian v4.8 ========== */
.ln-container { text-align: center; padding: 4px 0; }
.ln-container.ln-day { text-align: left; padding: 0; }
.ln-header { display: flex; align-items: center; justify-content: center; gap: 8px; margin-bottom: 6px; }
.ln-container.ln-day .ln-header { justify-content: flex-start; }
.ln-icon { font-size: 24px; }
.ln-greeting { font-size: 12px; font-weight: bold; color: var(--primary); }
.ln-time { font-size: 20px; font-family: var(--font-terminal); color: var(--text); margin: 4px 0 8px; letter-spacing: 2px; }
.ln-time-sm { font-size: 11px; font-family: var(--font-terminal); color: var(--text-muted); margin-left: auto; }
.ln-system { display: flex; justify-content: center; gap: 10px; margin-bottom: 8px; flex-wrap: wrap; }
.ln-dot { font-size: 9px; padding: 2px 6px; background: var(--bg); border: 1px solid var(--border); white-space: nowrap; }
.ln-stats { display: flex; justify-content: center; gap: 12px; }
.ln-stat { display: flex; flex-direction: column; align-items: center; padding: 4px 10px; background: var(--bg); border: 1px solid var(--border); }
.ln-stat-val { font-size: 14px; font-weight: bold; font-family: var(--font-terminal); color: var(--primary); }
.ln-stat-label { font-size: 8px; color: var(--text-muted); margin-top: 2px; }
.ln-tip { font-size: 9px; color: var(--text-muted); margin-top: 6px; padding: 4px; background: rgba(139, 92, 246, 0.08); border: 1px solid rgba(139, 92, 246, 0.2); }
.ln-stats-mini { font-size: 9px; color: var(--text-muted); display: flex; align-items: center; }
`;
document.head.appendChild(efficiencyStyles);