🔄 刷新数据
🎨 切换主题
📥 导出数据
帮助信息

OpenClaw 看板

--:--:--
v5.5

🎯 公司目标

🚁 eVTOL自媒体 🔧 数据库建设中
📊 Polymarket预测 ✅ 研究完成
📈 AI量化交易 🔧 回测V2完成
📚 知识库建设 🔧 持续完善

📈 量化策略快讯

3951%
年化收益率(回测)
78.07
夏普比率
50.6%
年化波动率
v2
策略版本
⚠️ 以上为模拟回测数据,存在未来函数偏差,实盘结果可能差异很大,请勿作为投资依据

🏢 实时工作室

const agent = await think();
🛠️
🌅 晨曦
工作中 😊
🔧
💬
🤖 Agent 对话
正在协调任务分配...
工作中
🖥️ 0 任务
⏱️ 运行 0h
🏢 小小办公室 · 实时动画

💕 晨曦状态 😊

好感度85/100
心情92/100
工作状态75/100
😊 开心工作中

🖥️ 系统状态

0.0
CPU负载%
0MB
空闲内存
0
运行min
0
Agent数
📊 Token消耗趋势(最近7次刷新)
-7-6-5 -4-3-2 -1now

⚡ 实时活动

加载中...

🦞 Gateway 专精监控

🆔
- 进程 PID
⏱️
- 运行时长
🔄
- 重启记录
💬
- 活跃会话
📋
- 版本号
📊
- Cron成功率

🔔 系统通知 0

系统运行正常
所有服务状态良好
刚刚

📊 KPI 统计

0
今日Token
0
Skills
0
今日任务
0
响应ms

📱 飞书连接

检查中...
0
知识空间
0
文档数
0
今日新增
0
本周浏览
--°C 加载中...
🌤️
📍 获取位置...

☁️ 飞书云盘

💾 0 已用存储
📁 0 文件数
📂 0 文件夹
📊 0% 使用率
存储空间0 GB / 100 GB
📄 加载中... -

🚁 eVTOL数据库

-
公司数量
-
同步状态
-
飞书文档
建设中
当前阶段
数据源: evtol_companies.csv · 每2小时同步飞书

💬 Session会话

0 活跃会话
🤖 0 Agent会话
👤 0 用户会话
📈 0 今日新建
会话类型分布
加载中...
⏱️
平均会话时长
--
最长会话
--

✅ 飞书任务 待办

0
总任务
0
待处理
0
进行中
0
已完成
任务完成率0%

📅 今日日程

0
今日日程
0
即将到来
0
会议数
0
空闲时段
暂无日程安排

📚 学习研究

0
顶尖人物
0
研究领域
0
今日文档
0
总文档
当前研究加载中...

🏥 系统健康

--
健康评分
0%
缓存命中
0
错误数
0%
上下文
✅ 系统运行正常

🧰 工具体验柜

🛠️
加载中...

🏆 Agent性能排行

🥇
加载中...
Token消耗
-
🥈
-
Token消耗
-
🥉
-
Token消耗
-

🚨 错误日志 最近5条

系统运行正常,无错误
-
-

📊 任务热力图 24小时分布

💎 Token使用分析

-
峰值Token
-
平均Token
-
最低Token
-
趋势

💰 成本分析 Token消耗统计

💵
¥0.00
今日成本
📅
¥0.00
本月预估
📊
¥0.00
日均成本
🎯
¥0.00
预算剩余
📈 成本构成 (近7天)
输入Token
60%
输出Token
35%
缓存节省
5%
🤖 模型使用分布
MiniMax-M2.5 85%
GPT-4o 10%
Claude-3 5%

🧠 任务分布

--

🏆 今日成就

看板优化任务执行中... 刚刚

🤖 Agent 团队

加载中...

🎮 Agent像素形象 悬停查看动画

💡 点击形象查看详情 | 悬停查看呼吸动画和发光效果

📜 最近活动

⏰ Cron 任务

加载中...

📊 Cron 执行详情

-- 成功率
📅 即将执行的任务

⏱️ Cron健康度仪表盘

-- 总任务数
-- 正常任务
-- 错误任务
--%
🚨 错误任务列表 (前5)
加载中...
🔄 当前运行中的任务 (0)
暂无任务运行
⏰ 下次执行 (Top 8)
加载中...

📈 每日打分历史

今日总分 --
🤖 飞书连接--
🦞 系统稳定--
🛠️ Skills调用--
💰 Token管理--
📋 任务分配--
⚡ 响应速度--
最后更新: -
🛠️ 工具名称 工具类别
工具描述
🏷️ 标签
✨ 功能特性
    📝 使用场景
    点击工具卡片查看详情
    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 = `
    平均完成率
    ${avgCompletion}%
    平均响应
    ${avgResponse}ms
    平均错误率
    ${avgErrorRate}%
    ${agentMetrics.slice(0, 6).map((agent, idx) => `
    ${idx === 0 ? '🥇' : idx === 1 ? '🥈' : idx === 2 ? '🥉' : `#${idx + 1}`}
    ${agent.name}
    ${agent.completionRate}% ${agent.avgResponse}ms ${agent.errorRate}%错
    `).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 => `
    ${s.icon}
    ${s.title}
    ${s.desc}
    `).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 = `
    ${greetingIcon} ${greeting}
    ${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 = `
    ${greetingIcon} ${greeting} ${now.toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' })}
    ${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);