chore: release v0.8.6 — fix SSH auth in version switch, improve error diagnosis

This commit is contained in:
晴天
2026-03-13 17:17:44 +08:00
parent 4c51aa1d5a
commit f0015118d1
8 changed files with 71 additions and 24 deletions

View File

@@ -5,6 +5,20 @@
格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/)
版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
## [0.8.6] - 2026-03-13
### 修复 (Fixes)
- **切换汉化版 SSH 认证失败** — npm install 子进程现通过 `GIT_CONFIG_COUNT` 环境变量强制注入 HTTPS insteadOf 规则,确保即使全局 git config 未生效Windows PATH 问题等SSH→HTTPS 替换也能在 npm 子进程中工作
- **#58 定时任务触发错误** — 修复 `fetchJobs``id: j.name || j.id` 导致自定义名称的任务无法触发(感谢 @axdlee
- **#63 systemd 部署找不到 OpenClaw** — 文档改用 `$(which node)` 动态路径 + `Environment=PATH` 确保 systemd 服务能找到 Node.js 和 OpenClaw CLI
- **CI rustfmt/clippy 跨平台警告** — 修复 `unused_imports`BufRead/BufReader 移入 cfg block`needless_return`×3、`and_then→map`
### 改进 (Improvements)
- **错误诊断更精准** — SSH 错误诊断改用更严格的匹配(`permission denied``publickey``host key verification`),不再被 npm verbose 日志中的 `git@` 字样误触发
- **README 文档增强** — 新增「快速上手」4 步指南、Web 版部署指南(含 Nginx 配置示例、消息渠道配置指南、FAQ 扩充 6 个常见问题
## [0.8.5] - 2026-03-13
### 修复 (Fixes)

View File

@@ -34,7 +34,7 @@
"description": "OpenClaw AI Agent 可视化管理面板,基于 Tauri v2 的跨平台桌面应用。支持仪表盘监控、多模型配置、消息渠道管理、内置 QQ 机器人、实时 AI 聊天、记忆管理、Agent 管理、网关配置、内网穿透等功能。",
"url": "https://claw.qt.cool/",
"downloadUrl": "https://github.com/qingchencloud/clawpanel/releases/latest",
"softwareVersion": "0.8.5",
"softwareVersion": "0.8.6",
"author": {
"@type": "Organization",
"name": "晴辰云 QingchenCloud",
@@ -1133,7 +1133,7 @@
<div class="orb orb-2" style="top:auto;bottom:-100px"></div>
<div class="container-sm" style="position:relative;z-index:10">
<div class="section-header">
<div class="reveal download-version"><span class="pulse"></span> v0.8.5 最新版</div>
<div class="reveal download-version"><span class="pulse"></span> v0.8.6 最新版</div>
<h2 class="reveal section-title"><span class="gradient-text">下载安装</span></h2>
<p class="reveal section-desc">选择你的操作系统,一键下载安装</p>
</div>
@@ -1143,11 +1143,11 @@
<h3>macOS</h3>
<p class="dl-desc">支持 Apple Silicon 和 Intel 芯片</p>
<div class="dl-links">
<a class="dl-link" href="https://claw.qt.cool/proxy/dl/github.com/qingchencloud/clawpanel/releases/latest/download/ClawPanel_0.8.5_aarch64.dmg" target="_blank" rel="noopener">
<a class="dl-link" href="https://claw.qt.cool/proxy/dl/github.com/qingchencloud/clawpanel/releases/latest/download/ClawPanel_0.8.6_aarch64.dmg" target="_blank" rel="noopener">
Apple Silicon (M1/M2/M3/M4)
<span class="dl-format">.dmg</span>
</a>
<a class="dl-link" href="https://claw.qt.cool/proxy/dl/github.com/qingchencloud/clawpanel/releases/latest/download/ClawPanel_0.8.5_x64.dmg" target="_blank" rel="noopener">
<a class="dl-link" href="https://claw.qt.cool/proxy/dl/github.com/qingchencloud/clawpanel/releases/latest/download/ClawPanel_0.8.6_x64.dmg" target="_blank" rel="noopener">
Intel 芯片
<span class="dl-format">.dmg</span>
</a>
@@ -1165,11 +1165,11 @@
<h3>Windows</h3>
<p class="dl-desc">支持 Windows 10 及以上版本</p>
<div class="dl-links">
<a class="dl-link" href="https://claw.qt.cool/proxy/dl/github.com/qingchencloud/clawpanel/releases/latest/download/ClawPanel_0.8.5_x64-setup.exe" target="_blank" rel="noopener">
<a class="dl-link" href="https://claw.qt.cool/proxy/dl/github.com/qingchencloud/clawpanel/releases/latest/download/ClawPanel_0.8.6_x64-setup.exe" target="_blank" rel="noopener">
安装程序
<span class="dl-format">.exe</span>
</a>
<a class="dl-link" href="https://claw.qt.cool/proxy/dl/github.com/qingchencloud/clawpanel/releases/latest/download/ClawPanel_0.8.5_x64_en-US.msi" target="_blank" rel="noopener">
<a class="dl-link" href="https://claw.qt.cool/proxy/dl/github.com/qingchencloud/clawpanel/releases/latest/download/ClawPanel_0.8.6_x64_en-US.msi" target="_blank" rel="noopener">
MSI 安装包
<span class="dl-format">.msi</span>
</a>
@@ -1180,11 +1180,11 @@
<h3>Linux</h3>
<p class="dl-desc">支持主流 Linux 发行版</p>
<div class="dl-links">
<a class="dl-link" href="https://claw.qt.cool/proxy/dl/github.com/qingchencloud/clawpanel/releases/latest/download/ClawPanel_0.8.5_amd64.AppImage" target="_blank" rel="noopener">
<a class="dl-link" href="https://claw.qt.cool/proxy/dl/github.com/qingchencloud/clawpanel/releases/latest/download/ClawPanel_0.8.6_amd64.AppImage" target="_blank" rel="noopener">
通用版
<span class="dl-format">.AppImage</span>
</a>
<a class="dl-link" href="https://claw.qt.cool/proxy/dl/github.com/qingchencloud/clawpanel/releases/latest/download/ClawPanel_0.8.5_amd64.deb" target="_blank" rel="noopener">
<a class="dl-link" href="https://claw.qt.cool/proxy/dl/github.com/qingchencloud/clawpanel/releases/latest/download/ClawPanel_0.8.6_amd64.deb" target="_blank" rel="noopener">
Debian / Ubuntu
<span class="dl-format">.deb</span>
</a>

View File

@@ -1,6 +1,6 @@
{
"name": "clawpanel",
"version": "0.8.5",
"version": "0.8.6",
"private": true,
"description": "ClawPanel - OpenClaw 可视化管理面板,基于 Tauri v2 的跨平台桌面应用",
"type": "module",

View File

@@ -2704,8 +2704,21 @@ const handlers = {
const pkg = source === 'official' ? 'openclaw' : '@qingchencloud/openclaw-zh'
const ver = version || 'latest'
const npmBin = isWindows ? 'npm.cmd' : 'npm'
// Configure Git HTTPS before npm install to prevent SSH auth failures
try { execSync('git config --global --unset-all url.https://github.com/.insteadOf 2>&1', { windowsHide: true }) } catch {}
for (const from of ['ssh://git@github.com/', 'git@github.com:', 'git://github.com/', 'git+ssh://git@github.com/']) {
try { execSync(`git config --global --add url.https://github.com/.insteadOf "${from}"`, { windowsHide: true }) } catch {}
}
const gitEnv = {
GIT_TERMINAL_PROMPT: '0',
GIT_CONFIG_COUNT: '4',
GIT_CONFIG_KEY_0: 'url.https://github.com/.insteadOf', GIT_CONFIG_VALUE_0: 'ssh://git@github.com/',
GIT_CONFIG_KEY_1: 'url.https://github.com/.insteadOf', GIT_CONFIG_VALUE_1: 'git@github.com:',
GIT_CONFIG_KEY_2: 'url.https://github.com/.insteadOf', GIT_CONFIG_VALUE_2: 'git://github.com/',
GIT_CONFIG_KEY_3: 'url.https://github.com/.insteadOf', GIT_CONFIG_VALUE_3: 'git+ssh://git@github.com/',
}
try {
const out = execSync(`${npmBin} install ${pkg}@${ver} --prefix "${OPENCLAW_DIR}" 2>&1`, { timeout: 120000, windowsHide: true }).toString()
const out = execSync(`${npmBin} install -g ${pkg}@${ver} --registry https://registry.npmmirror.com 2>&1`, { timeout: 120000, windowsHide: true, env: { ...process.env, ...gitEnv } }).toString()
const action = ver === 'latest' ? '升级' : '安装'
return `${action}完成 (${pkg}@${ver})\n${out.slice(-200)}`
} catch (e) {

View File

@@ -1,6 +1,6 @@
[package]
name = "clawpanel"
version = "0.8.5"
version = "0.8.6"
edition = "2021"
description = "ClawPanel - OpenClaw 可视化管理面板"
authors = ["qingchencloud"]

View File

@@ -691,6 +691,17 @@ pub async fn upgrade_openclaw(
"GIT_SSH_COMMAND",
"ssh -o BatchMode=yes -o StrictHostKeyChecking=no",
)
// Force HTTPS insteadOf via env vars — ensures npm-spawned git subprocesses also use HTTPS
// even if global git config didn't take effect (e.g. git not in PATH, or Windows permission issues)
.env("GIT_CONFIG_COUNT", "4")
.env("GIT_CONFIG_KEY_0", "url.https://github.com/.insteadOf")
.env("GIT_CONFIG_VALUE_0", "ssh://git@github.com/")
.env("GIT_CONFIG_KEY_1", "url.https://github.com/.insteadOf")
.env("GIT_CONFIG_VALUE_1", "git@github.com:")
.env("GIT_CONFIG_KEY_2", "url.https://github.com/.insteadOf")
.env("GIT_CONFIG_VALUE_2", "git://github.com/")
.env("GIT_CONFIG_KEY_3", "url.https://github.com/.insteadOf")
.env("GIT_CONFIG_VALUE_3", "git+ssh://git@github.com/")
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.spawn()
@@ -750,6 +761,15 @@ pub async fn upgrade_openclaw(
"GIT_SSH_COMMAND",
"ssh -o BatchMode=yes -o StrictHostKeyChecking=no",
)
.env("GIT_CONFIG_COUNT", "4")
.env("GIT_CONFIG_KEY_0", "url.https://github.com/.insteadOf")
.env("GIT_CONFIG_VALUE_0", "ssh://git@github.com/")
.env("GIT_CONFIG_KEY_1", "url.https://github.com/.insteadOf")
.env("GIT_CONFIG_VALUE_1", "git@github.com:")
.env("GIT_CONFIG_KEY_2", "url.https://github.com/.insteadOf")
.env("GIT_CONFIG_VALUE_2", "git://github.com/")
.env("GIT_CONFIG_KEY_3", "url.https://github.com/.insteadOf")
.env("GIT_CONFIG_VALUE_3", "git+ssh://git@github.com/")
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.spawn()

View File

@@ -1,7 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/tauri-apps/tauri/dev/crates/tauri-config-schema/schema.json",
"productName": "ClawPanel",
"version": "0.8.5",
"version": "0.8.6",
"identifier": "ai.openclaw.clawpanel",
"build": {
"frontendDist": "../dist",

View File

@@ -14,28 +14,28 @@ export function diagnoseInstallError(errStr) {
// ===== 1. Git 相关 =====
// git SSH 权限问题(有 git 但没配 SSH Key
if (s.includes('permission denied (publickey)') || s.includes('ssh://git@github') || s.includes('git@github.com')) {
// git SSH 权限问题(有 git 但没配 SSH Key— 只匹配明确的 SSH 失败信号
if (s.includes('permission denied (publickey)') || s.includes('host key verification failed')) {
return {
title: '安装失败 — Git SSH 权限',
hint: '依赖包用了 SSH 协议拉取代码,但你没配 GitHub SSH Key。运行以下命令改用 HTTPS',
command: 'git config --global url."https://github.com/".insteadOf ssh://git@github.com/ && git config --global --add url."https://github.com/".insteadOf git@github.com: && git config --global --add url."https://github.com/".insteadOf git://github.com/',
title: '安装失败 — Git SSH 认证被拒绝',
hint: 'GitHub SSH 认证失败。ClawPanel 已尝试自动配置 HTTPS 替代,但可能未生效。请在终端手动执行',
command: 'git config --global url."https://github.com/".insteadOf ssh://git@github.com/ && git config --global --add url."https://github.com/".insteadOf git@github.com: && git config --global --add url."https://github.com/".insteadOf git://github.com/ && git config --global --add url."https://github.com/".insteadOf git+ssh://git@github.com/',
}
}
// git exit 128优先判断是 SSH 失败还是 Git 未安装
if (s.includes('code 128') || s.includes('exit 128')) {
if (s.includes('ssh') || s.includes('git@') || s.includes('publickey') || s.includes('access rights')) {
if (s.includes('permission denied') || s.includes('publickey') || s.includes('host key verification')) {
return {
title: '安装失败 — Git SSH 权限',
hint: '依赖包用了 SSH 协议拉取代码,但你没配 GitHub SSH Key。运行以下命令改用 HTTPS',
command: 'git config --global url."https://github.com/".insteadOf ssh://git@github.com/ && git config --global --add url."https://github.com/".insteadOf git@github.com: && git config --global --add url."https://github.com/".insteadOf git://github.com/',
title: '安装失败 — Git SSH 认证被拒绝',
hint: 'GitHub SSH 认证失败。ClawPanel 已尝试自动配置 HTTPS 替代,但可能未生效。请在终端手动执行后重试',
command: 'git config --global url."https://github.com/".insteadOf ssh://git@github.com/ && git config --global --add url."https://github.com/".insteadOf git@github.com: && git config --global --add url."https://github.com/".insteadOf git://github.com/ && git config --global --add url."https://github.com/".insteadOf git+ssh://git@github.com/',
}
}
return {
title: '安装失败 — Git 错误',
hint: 'Git 操作返回错误exit 128。可能是 Git 未安装,或 SSH 认证失败。请确认 Git 已安装,或手动执行以下命令切换到 HTTPS 模式',
command: 'git config --global url."https://github.com/".insteadOf ssh://git@github.com/ && git config --global --add url."https://github.com/".insteadOf git@github.com:',
title: '安装失败 — Git 拉取依赖错误',
hint: 'Git 操作失败exit 128。可能是网络问题或 SSH 认证失败。请确认网络正常,然后在终端手动执行以下命令后重试',
command: 'git config --global url."https://github.com/".insteadOf ssh://git@github.com/ && git config --global --add url."https://github.com/".insteadOf git@github.com: && git config --global --add url."https://github.com/".insteadOf git+ssh://git@github.com/',
}
}