Files
u-claw/portable/U-Claw.html
hfshfg 690d1b7060 fix: 修复 QQ Bot 配置后 Gateway 无法启动的问题
1. 清除旧版 "agent" 废弃键 — 保存 channel 配置时自动删除旧的 agent 键,
   防止 OpenClaw 报 "agent.* was moved" 错误(前端 + 服务端双重防御)
2. Dashboard URL 动态端口探测 — 将硬编码 18789 改为扫描 18789-18799,
   解决端口被占用时打不开 Dashboard 的问题
3. 安装脚本配置格式升级 — install.sh / install.ps1 / install-silent.ps1
   生成的 openclaw.json 从旧的 "agent" 格式迁移到 "agents.defaults.model.primary"
4. 文档示例同步更新 — CLAUDE.md / cloud.html / guide.html 中的配置示例

影响文件: 14 个(portable/, install/, website/, u-claw-app/, usb-release/)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 22:05:09 +08:00

213 lines
9.8 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>U-Claw 虾盘 - 启动导航</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: -apple-system, "Microsoft YaHei", sans-serif; background: #0a0a0a; color: #e0e0e0; min-height: 100vh; }
.container { max-width: 800px; margin: 0 auto; padding: 40px 20px; }
.header { text-align: center; margin-bottom: 40px; }
.header h1 { font-size: 2.5em; margin-bottom: 8px; }
.header h1 span { color: #ff6b35; }
.header p { color: #888; font-size: 1.1em; }
.version { display: inline-block; background: #ff6b35; color: #fff; padding: 2px 10px; border-radius: 12px; font-size: 0.8em; margin-left: 8px; }
.os-tabs { display: flex; justify-content: center; gap: 12px; margin-bottom: 30px; }
.os-tab { padding: 12px 32px; border: 2px solid #333; border-radius: 8px; cursor: pointer; font-size: 1.1em; background: transparent; color: #aaa; transition: all 0.2s; }
.os-tab:hover { border-color: #666; color: #fff; }
.os-tab.active { border-color: #ff6b35; color: #ff6b35; background: rgba(255,107,53,0.1); }
.panel { display: none; }
.panel.active { display: block; }
.card { background: #1a1a1a; border: 1px solid #333; border-radius: 12px; padding: 24px; margin-bottom: 16px; }
.card h3 { color: #ff6b35; margin-bottom: 12px; font-size: 1.2em; }
.card p { color: #bbb; line-height: 1.6; }
.step { display: flex; align-items: flex-start; gap: 16px; margin: 12px 0; }
.step-num { background: #ff6b35; color: #fff; width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; flex-shrink: 0; }
.step-text { flex: 1; }
.step-text strong { color: #fff; }
.step-text code { background: #2a2a2a; padding: 2px 8px; border-radius: 4px; color: #ff6b35; font-size: 0.95em; }
.grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 16px; }
.grid-item { background: #222; border: 1px solid #333; border-radius: 8px; padding: 16px; }
.grid-item h4 { color: #fff; margin-bottom: 6px; }
.grid-item p { color: #999; font-size: 0.9em; }
.status-bar { background: #1a1a1a; border: 1px solid #333; border-radius: 8px; padding: 16px; margin-bottom: 24px; display: flex; align-items: center; gap: 12px; }
.status-dot { width: 12px; height: 12px; border-radius: 50%; }
.status-dot.off { background: #666; }
.status-dot.on { background: #4caf50; animation: pulse 2s infinite; }
@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.5; } }
.status-link { color: #ff6b35; text-decoration: none; margin-left: auto; }
.status-link:hover { text-decoration: underline; }
.section-title { color: #888; font-size: 0.9em; text-transform: uppercase; letter-spacing: 2px; margin: 30px 0 12px; }
.footer { text-align: center; margin-top: 40px; padding-top: 20px; border-top: 1px solid #222; color: #666; }
.footer a { color: #ff6b35; text-decoration: none; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>🦞 <span>U-Claw</span> 虾盘 <span class="version">v1.1</span></h1>
<p>Portable AI Agent — 插上就能用的 AI 助手</p>
</div>
<!-- Status Bar -->
<div class="status-bar">
<div class="status-dot off" id="statusDot"></div>
<span id="statusText">OpenClaw 未运行</span>
<a href="#" id="statusLink" class="status-link" style="display:none" target="_blank">打开控制台 →</a>
</div>
<!-- OS Tabs -->
<div class="os-tabs">
<div class="os-tab active" onclick="switchOS('mac')">🍎 Mac</div>
<div class="os-tab" onclick="switchOS('win')">🪟 Windows</div>
</div>
<!-- Mac Panel -->
<div class="panel active" id="panel-mac">
<div class="card">
<h3>🚀 快速启动</h3>
<div class="step">
<div class="step-num">1</div>
<div class="step-text">双击 <code>Mac-Start.command</code></div>
</div>
<div class="step">
<div class="step-num">2</div>
<div class="step-text">首次运行自动打开<b>配置页面</b>,选模型、填 API Key 即可</div>
</div>
<p style="margin-top:12px; color:#999;">⚠️ 首次运行如果提示"无法验证开发者":右键点击 → 打开</p>
<p style="margin-top:8px;">📝 也可以直接双击 <code>Config.html</code> 打开中文配置页面</p>
</div>
<div class="card">
<h3>⚙️ 全部功能(配置/诊断/备份)</h3>
<p>双击 <code>Mac-Menu.command</code> 打开全功能菜单:</p>
<div class="grid">
<div class="grid-item"><h4>中文配置页面</h4><p>Config.html — 选模型、填 Key、接 QQ</p></div>
<div class="grid-item"><h4>QQ Bot 接入</h4><p>已预装,只需 AppID + Secret</p></div>
<div class="grid-item"><h4>诊断修复</h4><p>openclaw doctor 一键检测</p></div>
<div class="grid-item"><h4>备份恢复</h4><p>配置和记忆一键备份</p></div>
<div class="grid-item"><h4>技能浏览</h4><p>52 个预装技能</p></div>
<div class="grid-item"><h4>系统信息</h4><p>版本、端口、运行状态</p></div>
</div>
</div>
</div>
<!-- Windows Panel -->
<div class="panel" id="panel-win">
<div class="card">
<h3>🚀 快速启动</h3>
<div class="step">
<div class="step-num">1</div>
<div class="step-text">双击 <code>Windows-Start.bat</code></div>
</div>
<div class="step">
<div class="step-num">2</div>
<div class="step-text">首次运行自动打开<b>配置页面</b>,选模型、填 API Key 即可</div>
</div>
<p style="margin-top:12px; color:#999;">⚠️ 如果弹出安全警告:点击"更多信息" → "仍要运行"</p>
</div>
<div class="card">
<h3>⚙️ 全部功能(配置/诊断/备份)</h3>
<p>双击 <code>Windows-Menu.bat</code> 打开全功能菜单:</p>
<div class="grid">
<div class="grid-item"><h4>配置向导</h4><p>选模型、填 API Key、选平台</p></div>
<div class="grid-item"><h4>QQ Bot 接入</h4><p>腾讯官方3条命令搞定</p></div>
<div class="grid-item"><h4>诊断修复</h4><p>openclaw doctor 一键检测</p></div>
<div class="grid-item"><h4>备份恢复</h4><p>配置和记忆一键备份</p></div>
<div class="grid-item"><h4>技能浏览</h4><p>52 个预装技能</p></div>
<div class="grid-item"><h4>镜像配置</h4><p>npm 淘宝镜像</p></div>
</div>
</div>
</div>
<!-- Common sections -->
<div class="section-title">🤖 支持的 AI 模型(国内免翻墙)</div>
<div class="card">
<div class="grid">
<div class="grid-item"><h4>DeepSeek</h4><p>编程首选,性价比最高</p></div>
<div class="grid-item"><h4>Kimi K2.5</h4><p>256K 上下文,长文档</p></div>
<div class="grid-item"><h4>通义千问 Qwen</h4><p>免费额度大</p></div>
<div class="grid-item"><h4>智谱 GLM</h4><p>学术、中文 NLP</p></div>
<div class="grid-item"><h4>MiniMax</h4><p>语音、多模态</p></div>
<div class="grid-item"><h4>豆包 Doubao</h4><p>字节跳动,火山引擎</p></div>
</div>
</div>
<div class="section-title">📖 更多资料</div>
<div class="card">
<div class="grid">
<div class="grid-item" onclick="window.open('帮助文档.html')" style="cursor:pointer"><h4>📖 帮助文档</h4><p>完整使用指南</p></div>
<div class="grid-item" onclick="window.open('技能市场.html')" style="cursor:pointer"><h4>🎯 技能市场</h4><p>39 个精选技能</p></div>
<div class="grid-item"><h4>💬 联系我们</h4><p>微信: hecare888</p></div>
<div class="grid-item"><h4>🌐 官网</h4><p><a href="https://u-claw.org" target="_blank" style="color:#ff6b35">u-claw.org</a></p></div>
</div>
</div>
<div class="footer">
<p>Made with 🦞 by <a href="https://github.com/dongsheng123132">dongsheng</a> · <a href="https://u-claw.org">u-claw.org</a></p>
</div>
</div>
<script>
// Auto-detect OS
const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;
if (!isMac) switchOS('win');
function switchOS(os) {
document.querySelectorAll('.os-tab').forEach(t => t.classList.remove('active'));
document.querySelectorAll('.panel').forEach(p => p.classList.remove('active'));
document.querySelector('#panel-' + os).classList.add('active');
document.querySelectorAll('.os-tab')[os === 'mac' ? 0 : 1].classList.add('active');
}
// Check if gateway is running (scan 18789-18799)
var _gwPort = null;
async function checkStatus() {
var found = null;
if (_gwPort) {
// Fast path: check last known port first
try {
await fetch('http://127.0.0.1:' + _gwPort + '/', { mode: 'no-cors', cache: 'no-cache' });
found = _gwPort;
} catch(e) { _gwPort = null; }
}
if (!found) {
for (var p = 18789; p <= 18799; p++) {
try {
await fetch('http://127.0.0.1:' + p + '/', { mode: 'no-cors', cache: 'no-cache' });
found = p;
_gwPort = p;
break;
} catch(e) {}
}
}
if (found) {
document.getElementById('statusDot').className = 'status-dot on';
document.getElementById('statusText').textContent = 'OpenClaw 运行中 (端口 ' + found + ')';
var link = document.getElementById('statusLink');
link.style.display = 'inline';
link.href = 'http://127.0.0.1:' + found + '/#token=uclaw';
} else {
document.getElementById('statusDot').className = 'status-dot off';
document.getElementById('statusText').textContent = 'OpenClaw 未运行 — 请先双击启动脚本';
document.getElementById('statusLink').style.display = 'none';
}
}
checkStatus();
setInterval(checkStatus, 5000);
</script>
</body>
</html>