diff --git a/.gitignore b/.gitignore index a8bd817..cd4f7b9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,9 @@ U-Claw/ U-Claw-v2/ +# Toolkit (engineer DIY package, local only) +Toolkit/ + # Marketing assets marketing/ marketing.zip diff --git a/README.md b/README.md index d06ae1b..ec4cb19 100644 --- a/README.md +++ b/README.md @@ -1,291 +1,167 @@ -# 🦞 U-Claw +# 🦞 U-Claw 虾盘 -**OpenClaw Offline Installer USB — Built for China, Works Everywhere** +**Portable AI Agent — 插上就能用的 AI 助手** -**OpenClaw 离线安装 U 盘 — 专为中国用户打造,全球可用** - -> Like the legendary [YuLinMuFeng](https://en.wikipedia.org/wiki/Ylmf) Windows discs, but for AI. -> 就像当年的雨林木风,把 AI 助手的安装简化到"插 U 盘,双击运行"。 +> 像当年的雨林木风,把 AI 助手简化到"双击运行"。 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) --- -## Why U-Claw? / 为什么需要 U-Claw? +## 为什么需要 U-Claw? -[OpenClaw](https://github.com/openclaw/openclaw) is the most powerful open-source AI assistant framework — 20+ chat platforms, 50+ AI models. But in China, installing it is a nightmare: +[OpenClaw](https://github.com/openclaw/openclaw) 是最强的开源 AI 助手框架,但在中国安装它是个噩梦:GitHub 访问不了、npm 超时、Node.js 下载慢。 -[OpenClaw](https://github.com/openclaw/openclaw) 是最强的开源 AI 助手框架,但在中国安装它是个噩梦: +**U-Claw 解决所有问题。** Node.js + OpenClaw + 所有依赖 + QQ 插件,全部打包好。双击即用。 -- ❌ GitHub blocked / GitHub 访问不了 -- ❌ npm install timeout / npm install 超时 -- ❌ Node.js download slow / Node.js 下载慢 -- ❌ Dependencies fail / 依赖装不上 +## 快速开始 -**U-Claw solves all of this.** Node.js runtime, OpenClaw source, all npm dependencies, 52 pre-installed skills — everything bundled on a USB drive. Plug in, double-click, done. For teams and schools, it is often lower-cost than cloud deployment for onboarding and day-to-day use. +### 方法 1:从 Releases 下载(推荐) -**U-Claw 解决所有这些问题。** Node.js + OpenClaw + 所有依赖 + 52个技能,全部打包。插上 U 盘,双击即用。对团队和学校场景,部署和培训成本通常也比云端部署更低。 +1. 下载 [U-Claw-v1.1.tar.gz](https://github.com/dongsheng123132/u-claw/releases) +2. 解压到任意位置(U 盘、桌面、文档都行) +3. Mac: 双击 `Mac-Start.command` / Windows: 双击 `Windows-Start.bat` -## Features / 特性 +### 方法 2:用 U 盘安装脚本 -- 🚀 **Easy startup / 快速启动** — macOS + Windows, ready to run from USB -- 📦 **Fully offline / 完全离线** — No internet needed for installation -- 💸 **Lower TCO / 总成本更低** — For repeated deployments, often cheaper than cloud-only rollout -- 🇨🇳 **China-optimized / 中国优化** — 8 Chinese AI models (DeepSeek, Kimi, Qwen, GLM, MiniMax, Doubao, Qianfan, Mimo) -- 💬 **Multi-platform / 多平台** — QQ (official) / Feishu / WeChat / Telegram / Discord / WhatsApp / Slack -- 🔧 **Maintenance tools / 维护工具** — Diagnose, backup, restore, reset -- 🎯 **52 skills / 52个技能** — Pre-installed productivity skills -- 📖 **Bilingual docs / 双语文档** — Chinese + English +U 盘上有安装脚本,双击自动解压 + 启动: +- Mac: `Mac-Install.command` +- Windows: `Windows-Install.bat` -## Quick Start / 快速开始 - -### Option 1: Download Release / 下载发布版(推荐) - -```bash -# Download from Releases / 从 Releases 下载 -# https://github.com/dongsheng123132/u-claw/releases - -# After extracting / 解压后: -# Mac: double-click "Mac-从U盘启动.command" -# Win: double-click "Windows-从U盘启动.bat" -``` - -### Option 2: Build Your Own / 自己构建 - -```bash -# Clone this repo / 克隆仓库 -git clone https://github.com/dongsheng123132/u-claw.git -cd u-claw - -# Download OpenClaw source / 下载 OpenClaw 源码 -git clone https://github.com/openclaw/openclaw.git openclaw-2026.3.7 - -# Build (downloads Node.js + installs deps + builds) -# 构建(自动下载 Node.js + 安装依赖 + 构建) -chmod +x build-uclaw.sh -./build-uclaw.sh - -# Copy U-Claw/ folder to USB drive -# 把 U-Claw/ 文件夹复制到 U 盘 -``` - -Note: `U-Claw/` is a generated release bundle. Keep the scripts/docs in git, and publish the built `U-Claw/` directory through GitHub Releases instead of committing it to the repository history. - -说明:`U-Claw/` 是构建产物。建议把脚本和文档提交到 git,把生成好的 `U-Claw/` 目录通过 GitHub Releases 发布,而不是直接提交到仓库历史。 - -### Option 3: Copy from a Friend / 复制别人的 - -Just copy the `U-Claw/` folder. That's it. +### 方法 3:复制别人的 直接把 `U-Claw/` 文件夹复制一份就行。 -## USB Contents / U 盘内容 +## 目录结构 ``` -U-Claw/ (~1.3GB, 8GB USB minimum) -│ -├── Mac-从U盘启动.command ← macOS: run from USB -├── Windows-从U盘启动.bat ← Windows: run from USB -├── Mac-全部功能.command ← macOS: full feature menu -├── Windows-全部功能.bat ← Windows: full feature menu -├── Mac-安装到电脑.command ← Install to Mac permanently -├── Windows-安装到电脑.bat ← Install to Windows permanently -├── 使用说明.txt ← Basic instructions -├── 中国用户指南.txt ← China quick-start guide -├── 教程-OpenClaw中国区完全指南.md ← Full tutorial (12 chapters) -│ -├── runtime/ ← Node.js 22 runtimes -│ ├── node-mac-arm64/ ← Mac Apple Silicon (M1-M4) -│ ├── node-mac-x64/ ← Mac Intel -│ └── node-win-x64/ ← Windows 64-bit -│ -├── openclaw/ ← OpenClaw + node_modules + dist -│ ├── skills/ ← 52 pre-installed skills -│ └── extensions/ ← 42 channel extensions -│ -├── memory/ ← AI memory (user data) -├── persona/ ← AI personality config -└── backups/ ← Auto-created backups +U-Claw/ (~2.3GB) +├── Mac-Start.command ← Mac 双击启动 +├── Windows-Start.bat ← Windows 双击启动 +├── Mac-Menu.command ← Mac 配置/维护菜单 +├── Windows-Menu.bat ← Windows 配置/维护菜单 +├── U-Claw.html ← 导航页面 +├── app/ +│ ├── core/ ← OpenClaw + 依赖 + QQ 插件 +│ └── runtime/ +│ ├── node-mac-arm64/ ← Mac Apple Silicon +│ └── node-win-x64/ ← Windows 64-bit +├── data/ ← 用户数据(配置、记忆、备份) +│ ├── .openclaw/ +│ ├── memory/ +│ └── backups/ +└── system/ + └── migrate.js ← 配置迁移脚本 ``` -## Launcher Menu / 启动菜单 +## 菜单功能 -17 functions, inspired by YuLinMuFeng (雨林木风) installer UI: +精简到 8 个选项: ``` -╔════════════════════════════════════════════════════════╗ -║ 🦞 U-Claw 虾盘 v1.1 ║ -║ Optimized for China · Offline · One-click ║ -╠════════════════════════════════════════════════════════╣ - - ━━ Install ━━ - [1] Run from USB [2] Install to computer - [3] System info [4] OpenClaw status - - ━━ China Optimization ━━ - [5] Setup wizard (model/platform/API Key) - [6] Chat platforms (QQ/Feishu/WeChat) - [7] Manage channels - - ━━ Maintenance ━━ - [8] Diagnose & repair [9] Update OpenClaw - [10] Skills [11] Tools (MCP) [12] Plugins - - ━━ Skills & Usage ━━ - [13] Browse skills market [14] China user guide - [15] Instructions [16] About - [17] Open web dashboard +[1] 配置向导(选模型、API Key) +[2] 打开网页控制台 +[3] QQ 机器人(已预装,只需输入 ID) +[4] 其他平台(飞书/Telegram/微信) +[5] 诊断修复 +[6] 备份配置 +[7] 恢复备份 +[8] 系统信息 ``` -## Supported AI Models / 支持的 AI 模型 +## 支持的 AI 模型 -### Chinese Models (no VPN needed) / 国产模型(无需翻墙) +### 国产模型(无需翻墙) -| Model 模型 | Provider 提供商 | Best for 推荐场景 | -|------------|----------------|-------------------| -| DeepSeek | 深度求索 | Coding, best value / 编程,性价比首选 | -| Kimi K2.5 | 月之暗面 Moonshot | Long docs, 256K context / 长文档 | -| Qwen | 阿里通义千问 | Large free tier / 免费额度大 | -| GLM 4.7 | 智谱AI Zhipu | Academic, Chinese NLP / 学术 | -| MiniMax | MiniMax | Voice, multimodal / 语音 | -| Doubao | 字节豆包 ByteDance | Volcano Engine / 火山引擎 | -| Qianfan | 百度千帆 Baidu | Baidu Cloud / 百度云 | -| Mimo | 小米 Xiaomi | Xiaomi ecosystem / 小米生态 | +| 模型 | 推荐场景 | +|------|----------| +| DeepSeek | 编程,性价比首选 | +| Kimi K2.5 | 长文档,256K 上下文 | +| 通义千问 Qwen | 免费额度大 | +| 智谱 GLM | 学术 | +| MiniMax | 语音、多模态 | +| 豆包 Doubao | 火山引擎 | -### International Models / 国际模型 +### 国际模型 -| Model | Provider | Best for | -|-------|----------|----------| -| Claude | Anthropic | Best overall + coding | -| GPT | OpenAI | Wide compatibility | -| Gemini | Google | Free tier | +Claude (Anthropic) · GPT (OpenAI) · Gemini (Google) -## Supported Chat Platforms / 支持的聊天平台 +## 聊天平台 -| Platform 平台 | Status 状态 | Notes 说明 | -|---------------|------------|------------| -| QQ | ✅ **Official** 腾讯官方 | 3 commands, 1 min, free / 3条命令搞定 | -| Feishu 飞书 | ✅ Built-in 已内置 | Enterprise best / 企业首选 | -| WeChat 微信 | ✅ Community plugin | iPad protocol | -| Telegram | ✅ Built-in | Recommended for intl users | -| Discord | ✅ Built-in | Gaming / community | -| WhatsApp | ✅ Built-in | International users | -| Slack | ✅ Built-in | Enterprise (intl) | -| WeCom 企业微信 | 🔜 Coming | — | -| DingTalk 钉钉 | 🔜 Coming | — | +| 平台 | 状态 | 说明 | +|------|------|------| +| QQ | ✅ **已预装** | 只需输入 AppID + AppSecret | +| 飞书 | ✅ 内置 | 企业首选 | +| Telegram | ✅ 内置 | 海外推荐 | +| 微信 | ✅ 社区插件 | iPad 协议 | +| Discord | ✅ 内置 | — | +| WhatsApp | ✅ 内置 | — | -### QQ Setup (1 minute) / QQ 接入(1 分钟) +### QQ 接入(1 分钟) -Tencent officially supports OpenClaw QQ bots. 腾讯官方支持: +QQ 插件已预装!只需: +1. 访问 q.qq.com 创建机器人,获取 AppID 和 AppSecret +2. 双击 `Mac-Menu.command`,选 [3] QQ 机器人 +3. 输入 AppID 和 AppSecret,完成 -```bash -# 1. Register / 注册: http://q.qq.com/qqbot/openclaw/login.html -# 2. Create bot, get AppID:AppSecret / 创建机器人 +## 系统要求 -# 3. Run 3 commands / 运行3条命令: -openclaw plugins install @sliverp/qqbot@latest -openclaw channels add --channel qqbot --token "AppID:AppSecret" -openclaw gateway restart +- **macOS**: Apple Silicon (M1-M4), macOS 12+ +- **Windows**: 10/11, 64-bit +- **内存**: 2GB+(推荐 4GB+) +- **存储**: 3GB+ -# 4. Set allowlist! / 设置白名单! -openclaw config set channels.qqbot.allowFrom "your_qq_number" +## 升级 + +下载新版 `app/` 目录替换旧的,`data/` 不动(用户配置和记忆保留)。 + +## U 盘结构 + +``` +UCLAW (U盘) +├── Mac-Install.command ← 首次双击(解压+启动) +├── Windows-Install.bat +├── U-Claw.tar.gz ← 压缩包 +├── README.txt ← 使用说明 +└── Toolkit/ ← 工程师 DIY 素材包 + ├── node-v22-mac-arm64.pkg + ├── node-v22-win-x64.msi + ├── openclaw-source.tar.gz + └── npm-cache.tar.gz ``` -## System Requirements / 系统要求 +## 仓库结构 -- **macOS**: 12+ (Intel or Apple Silicon) -- **Windows**: 10/11 (64-bit) -- **RAM**: 2GB+ (4GB+ recommended) -- **USB**: 8GB+ (16GB recommended) - -## Build Guide / 构建指南 - -### Prerequisites / 前提 - -- macOS or Linux (build environment) -- Internet access (only needed for building, not for end users) -- ~2GB disk space - -### What the build script does / 构建脚本做了什么 - -1. Downloads Node.js 22 for 3 platforms (Mac ARM64 + Mac x64 + Win x64), prefers China mirror -2. Copies OpenClaw source to `U-Claw/openclaw/` -3. Installs `pnpm` and runs `pnpm install` with China mirror (registry.npmmirror.com) -4. Runs `pnpm build` to build OpenClaw -5. Copies launcher scripts and docs -6. Output: ~1.3GB ready to copy to USB - -### Updating / 更新 - -```bash -# Download new OpenClaw source, replace openclaw-2026.3.7/ -./build-uclaw.sh -# Copy new U-Claw/ to USB ``` - -## Contributing / 参与贡献 - -PRs welcome! Especially needed / 欢迎 PR,特别需要: - -- 🔧 More platform repair scripts / 更多平台修复脚本 -- 📖 Tutorials and guides / 教程 -- 💬 More chat bridges (WeCom, DingTalk) / 企业微信、钉钉桥接 -- 🎯 Useful skills / 实用技能 -- 🌐 Translations / 翻译 - -```bash -# Fork → Branch → Commit → PR -git checkout -b feature/my-feature -git commit -m "feat: add xxx" -git push origin feature/my-feature +u-claw/ +├── portable/ ← 脚本源码(打包进 U-Claw) +├── uclaw-scripts/ ← U 盘安装脚本 +├── website/ ← 官网 +├── docs/ ← 文档 +└── README.md ``` -## Related Projects / 相关项目 - -| Project 项目 | Stars | Description 说明 | -|-------------|-------|-----------------| -| [OpenClaw](https://github.com/openclaw/openclaw) | — | The AI assistant framework / AI 助手框架 | -| [hello-claw](https://github.com/datawhalechina/hello-claw) | 90+ | Systematic Chinese tutorial / 体系化中文教程 | -| [openclaw-docs](https://github.com/yeuxuan/openclaw-docs) | 500+ | 276 source-level docs / 源码级文档 | -| [awesome-openclaw-skills-zh](https://github.com/clawdbot-ai/awesome-openclaw-skills-zh) | 2500+ | Chinese skill library / 中文技能库 | -| [NapCatQQ](https://github.com/NapNeko/NapCatQQ) | — | QQ bot framework (OneBot v11) | - ## FAQ -**Q: Do end users need a VPN? / 用户需要翻墙吗?** -A: No for installation. Runtime needs internet for AI APIs — Chinese models (DeepSeek etc.) work without VPN. -安装不需要。运行需要联网调 API,国产模型无需翻墙。 +**Q: 需要翻墙吗?** +安装不需要。运行需要联网调 AI API,国产模型无需翻墙。 -**Q: USB drive size? / U 盘要多大?** -A: 8GB minimum, 16GB recommended. +**Q: 能分发吗?** +可以,MIT 协议,随便复制。 -**Q: Can I share it? / 能分发吗?** -A: Yes, unlimited. MIT license, copy freely. -可以,无限制,MIT 协议。 - -**Q: Windows needs WSL? / Windows 需要 WSL 吗?** -A: No. U-Claw bundles Windows Node.js, runs natively via `.bat`. -不需要。自带 Windows 版 Node.js。 +**Q: Windows 需要 WSL 吗?** +不需要,自带 Windows 版 Node.js。 ## License -[MIT](LICENSE) — Free to use, modify, distribute. +[MIT](LICENSE) -自由使用、修改、分发。 +## 联系 -## Contact / 联系方式 - -- **WeChat 微信**: Scan QR below / 扫码添加 - - WeChat QR - -- **Xiaohongshu 小红书**: [关注主页 / Follow](https://xhslink.com/m/6mf7Mq2M5wP) -- **Email 邮箱**: hefangsheng@gmail.com -- **GitHub**: [@dongsheng123132](https://github.com/dongsheng123132) -- **Website 官网**: [u-claw.org](https://u-claw.org) +- 微信: hecare888 +- GitHub: [@dongsheng123132](https://github.com/dongsheng123132) +- 官网: [u-claw.org](https://u-claw.org) --- -**Made with 🦞 by [dongsheng](https://github.com/dongsheng123132) & OpenClaw Community** - -**Website: [u-claw.org](https://u-claw.org)** · **Email: hefangsheng@gmail.com** +**Made with 🦞 by [dongsheng](https://github.com/dongsheng123132)** diff --git a/build-uclaw.sh b/build-uclaw.sh deleted file mode 100755 index 493f38d..0000000 --- a/build-uclaw.sh +++ /dev/null @@ -1,177 +0,0 @@ -#!/bin/bash -# ============================================================ -# U-Claw 虾盘 构建脚本 -# 在你的 Mac 上运行,打包所有依赖到 U-Claw 目录 -# 用法: ./build-uclaw.sh -# ============================================================ - -set -eo pipefail - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -UCLAW_DIR="$SCRIPT_DIR/U-Claw" -SOURCE_DIR="$SCRIPT_DIR/openclaw-2026.3.7" -NODE_VERSION="22.16.0" - -# 颜色输出 -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -CYAN='\033[0;36m' -NC='\033[0m' - -info() { echo -e "${CYAN}[U-Claw]${NC} $1"; } -ok() { echo -e "${GREEN}[✓]${NC} $1"; } -warn() { echo -e "${YELLOW}[!]${NC} $1"; } -error() { echo -e "${RED}[✗]${NC} $1"; exit 1; } - -echo "" -echo " 🦞 U-Claw 虾盘 构建工具" -echo " ========================" -echo " OpenClaw 一键安装 U 盘制作" -echo "" - -# ---- 1. 创建 U-Claw 目录结构 ---- -info "创建 U-Claw 目录结构..." -rm -rf "$UCLAW_DIR" -mkdir -p "$UCLAW_DIR"/{runtime/{node-mac-arm64,node-mac-x64,node-linux-x64,node-win-x64},openclaw,memory,persona,skills,tools} - -# ---- 2. 下载 Node.js 各平台版本 ---- -DOWNLOAD_DIR="$SCRIPT_DIR/.download-cache" -mkdir -p "$DOWNLOAD_DIR" - -download_node() { - local PLATFORM=$1 # darwin, win - local ARCH=$2 # arm64, x64 - local EXT=$3 # tar.gz, zip - local DEST=$4 # 目标目录名 - - local FILENAME="node-v${NODE_VERSION}-${PLATFORM}-${ARCH}" - local URL="https://nodejs.org/dist/v${NODE_VERSION}/${FILENAME}.${EXT}" - local CACHED="$DOWNLOAD_DIR/${FILENAME}.${EXT}" - - if [ -f "$CACHED" ]; then - ok "Node.js ${PLATFORM}-${ARCH} 已缓存" - else - info "下载 Node.js ${PLATFORM}-${ARCH}..." - # 尝试直接下载,如果失败则使用镜像 - if ! curl -fL --connect-timeout 10 -o "$CACHED" "$URL" 2>/dev/null; then - warn "官方源下载失败,尝试淘宝镜像..." - local MIRROR_URL="https://npmmirror.com/mirrors/node/v${NODE_VERSION}/${FILENAME}.${EXT}" - curl -fL -o "$CACHED" "$MIRROR_URL" || error "下载 Node.js ${PLATFORM}-${ARCH} 失败" - fi - ok "下载完成: Node.js ${PLATFORM}-${ARCH}" - fi - - info "解压 Node.js ${PLATFORM}-${ARCH}..." - if [ "$EXT" = "tar.gz" ]; then - tar xzf "$CACHED" -C "$UCLAW_DIR/runtime/$DEST/" --strip-components=1 - elif [ "$EXT" = "zip" ]; then - # Windows zip - local TMP_UNZIP="$DOWNLOAD_DIR/tmp-unzip-$$" - mkdir -p "$TMP_UNZIP" - unzip -q "$CACHED" -d "$TMP_UNZIP" - cp -R "$TMP_UNZIP"/${FILENAME}/* "$UCLAW_DIR/runtime/$DEST/" - rm -rf "$TMP_UNZIP" - fi - ok "Node.js ${PLATFORM}-${ARCH} 就绪" -} - -# 下载四个平台的 Node.js -download_node "darwin" "arm64" "tar.gz" "node-mac-arm64" # Mac Apple Silicon -download_node "darwin" "x64" "tar.gz" "node-mac-x64" # Mac Intel -download_node "linux" "x64" "tar.gz" "node-linux-x64" # Linux x64 -download_node "win" "x64" "zip" "node-win-x64" # Windows x64 - -# ---- 3. 复制 OpenClaw 源码 ---- -info "复制 OpenClaw 源码..." -rsync -a --exclude='.git' --exclude='node_modules' --exclude='.github' \ - "$SOURCE_DIR/" "$UCLAW_DIR/openclaw/" -ok "OpenClaw 源码复制完成" - -# ---- 4. 安装依赖 (使用淘宝镜像) ---- -info "安装 npm 依赖(使用淘宝镜像)..." - -# 使用 U-Claw 自带的 Node.js 来安装 -if [ "$(uname -m)" = "arm64" ]; then - NODE_DIR="$UCLAW_DIR/runtime/node-mac-arm64" - NODE_BIN="$UCLAW_DIR/runtime/node-mac-arm64/bin/node" - NPM_BIN="$UCLAW_DIR/runtime/node-mac-arm64/bin/npm" -else - NODE_DIR="$UCLAW_DIR/runtime/node-mac-x64" - NODE_BIN="$UCLAW_DIR/runtime/node-mac-x64/bin/node" - NPM_BIN="$UCLAW_DIR/runtime/node-mac-x64/bin/npm" -fi - -cd "$UCLAW_DIR/openclaw" - -# 设置淘宝镜像 -"$NODE_BIN" "$NPM_BIN" config set registry https://registry.npmmirror.com --location=project 2>/dev/null || true - -# 安装 pnpm(OpenClaw build 脚本依赖 pnpm) -info "安装 pnpm..." -"$NODE_BIN" "$NPM_BIN" install -g pnpm --registry=https://registry.npmmirror.com 2>&1 | tail -3 -PNPM_BIN="$NODE_DIR/bin/pnpm" -[ -x "$PNPM_BIN" ] || error "pnpm 安装失败: $PNPM_BIN 不存在" - -# 安装依赖(使用 pnpm,与上游一致) -info "pnpm install 中...(可能需要几分钟)" -cd "$UCLAW_DIR/openclaw" -"$PNPM_BIN" install --registry=https://registry.npmmirror.com 2>&1 | tail -5 -ok "依赖安装完成" - -# ---- 5. 构建 OpenClaw ---- -info "构建 OpenClaw..." -cd "$UCLAW_DIR/openclaw" -"$PNPM_BIN" run build 2>&1 | tail -10 -if [ -d "$UCLAW_DIR/openclaw/dist" ]; then - ok "构建成功,dist/ 已生成" -else - error "构建失败:dist/ 目录未生成,请检查错误信息" -fi - -cd "$SCRIPT_DIR" - -# ---- 6. 复制用户脚本和说明 ---- -info "复制用户脚本..." - -# 从 scripts 模板目录复制(构建脚本同级的 uclaw-scripts/ 目录) -SCRIPTS_SRC="$SCRIPT_DIR/uclaw-scripts" -if [ -d "$SCRIPTS_SRC" ]; then - cp "$SCRIPTS_SRC/启动菜单.command" "$UCLAW_DIR/" 2>/dev/null || true - cp "$SCRIPTS_SRC/启动菜单.bat" "$UCLAW_DIR/" 2>/dev/null || true - cp "$SCRIPTS_SRC/运行.command" "$UCLAW_DIR/" 2>/dev/null || true - cp "$SCRIPTS_SRC/运行.sh" "$UCLAW_DIR/" 2>/dev/null || true - cp "$SCRIPTS_SRC/运行.bat" "$UCLAW_DIR/" 2>/dev/null || true - cp "$SCRIPTS_SRC/安装到电脑.command" "$UCLAW_DIR/" 2>/dev/null || true - cp "$SCRIPTS_SRC/安装到电脑.bat" "$UCLAW_DIR/" 2>/dev/null || true - cp "$SCRIPTS_SRC/使用说明.txt" "$UCLAW_DIR/" 2>/dev/null || true - cp "$SCRIPTS_SRC/中国用户指南.txt" "$UCLAW_DIR/" 2>/dev/null || true - # 复制教程文档 - mkdir -p "$UCLAW_DIR/docs" - cp "$SCRIPT_DIR/docs/教程-OpenClaw中国区完全指南.md" "$UCLAW_DIR/docs/" 2>/dev/null || true - # 复制二维码 - cp "$SCRIPT_DIR/微信二维码.jpg" "$UCLAW_DIR/" 2>/dev/null || true - cp "$SCRIPT_DIR/小红书二维码.jpg" "$UCLAW_DIR/" 2>/dev/null || true - chmod +x "$UCLAW_DIR/启动菜单.command" "$UCLAW_DIR/运行.command" "$UCLAW_DIR/运行.sh" "$UCLAW_DIR/安装到电脑.command" 2>/dev/null || true - ok "用户脚本已复制(含启动菜单、中国用户指南、微信二维码)" -else - warn "找不到 uclaw-scripts/ 目录,请手动复制脚本到 U-Claw/" -fi - -# ---- 7. 计算大小 ---- -echo "" -echo " ============================================" -info "U-Claw 构建完成!" -echo "" -TOTAL_SIZE=$(du -sh "$UCLAW_DIR" | cut -f1) -echo " 总大小: $TOTAL_SIZE" -echo "" -du -sh "$UCLAW_DIR"/runtime/node-mac-arm64 2>/dev/null | awk '{print " Node.js Mac ARM64: "$1}' -du -sh "$UCLAW_DIR"/runtime/node-mac-x64 2>/dev/null | awk '{print " Node.js Mac x64: "$1}' -du -sh "$UCLAW_DIR"/runtime/node-linux-x64 2>/dev/null | awk '{print " Node.js Linux x64: "$1}' -du -sh "$UCLAW_DIR"/runtime/node-win-x64 2>/dev/null | awk '{print " Node.js Win x64: "$1}' -du -sh "$UCLAW_DIR"/openclaw 2>/dev/null | awk '{print " OpenClaw + 依赖: "$1}' -echo "" -echo " 将 U-Claw 文件夹整个复制到 U 盘即可" -echo " ============================================" -echo "" diff --git a/portable/Mac-Menu.command b/portable/Mac-Menu.command index d822214..9d0999f 100755 --- a/portable/Mac-Menu.command +++ b/portable/Mac-Menu.command @@ -1,35 +1,25 @@ #!/bin/bash -# ============================================================ -# U-Claw 虾盘 - 启动菜单 (雨林木风风格) -# macOS 版本 -# ============================================================ +# U-Claw Menu - Portable AI Agent +# macOS version UCLAW_DIR="$(cd "$(dirname "$0")" && pwd)" -OPENCLAW_DIR="$UCLAW_DIR/app/core" +APP_DIR="$UCLAW_DIR/app" +CORE_DIR="$APP_DIR/core" DATA_DIR="$UCLAW_DIR/data" STATE_DIR="$DATA_DIR/.openclaw" CONFIG_PATH="$STATE_DIR/openclaw.json" -# 颜色 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' CYAN='\033[0;36m' -BLUE='\033[0;34m' -MAGENTA='\033[0;35m' WHITE='\033[1;37m' -GRAY='\033[0;37m' NC='\033[0m' BOLD='\033[1m' DIM='\033[2m' -# 检测架构并设置 Node -ARCH=$(uname -m) -if [ "$ARCH" = "arm64" ]; then - NODE_DIR="$UCLAW_DIR/app/runtime/node-mac-arm64" -else - NODE_DIR="$UCLAW_DIR/app/runtime/node-mac-x64" -fi +# Node.js (ARM64 only) +NODE_DIR="$APP_DIR/runtime/node-mac-arm64" NODE_BIN="$NODE_DIR/bin/node" NPM_BIN="$NODE_DIR/bin/npm" export PATH="$NODE_DIR/bin:$PATH" @@ -39,801 +29,246 @@ export OPENCLAW_CONFIG_PATH="$CONFIG_PATH" mkdir -p "$STATE_DIR" "$DATA_DIR/memory" "$DATA_DIR/backups" -# 移除 macOS 隔离标记(解决"无法验证开发者"弹窗) +# Remove macOS quarantine if xattr -l "$NODE_BIN" 2>/dev/null | grep -q "com.apple.quarantine"; then xattr -rd com.apple.quarantine "$UCLAW_DIR" 2>/dev/null || true fi -# 检查安装状态 -check_status() { - HAS_MODULES="no" - HAS_DIST="no" - HAS_ENV="no" - INSTALLED="no" - CONFIG_READY="no" - - [ -d "$OPENCLAW_DIR/node_modules" ] && HAS_MODULES="yes" - [ -d "$OPENCLAW_DIR/dist" ] && HAS_DIST="yes" - [ -f "$OPENCLAW_DIR/.env" ] && HAS_ENV="yes" - [ -d "$HOME/.uclaw/openclaw" ] && INSTALLED="yes" - [ -f "$CONFIG_PATH" ] && CONFIG_READY="yes" +# Run openclaw command +run_oc() { + cd "$CORE_DIR" + "$NODE_BIN" openclaw.mjs "$@" } -# 显示主菜单 +# Show menu show_menu() { - check_status clear - echo "" - echo -e "${CYAN}${BOLD}" - echo " ╔════════════════════════════════════════════════════════╗" - echo " ║ ║" - echo " ║ 🦞 U-Claw 虾盘 v1.0 ║" - echo " ║ OpenClaw AI 助手 一键安装盘 ║" - echo " ║ ║" - echo " ║ 专为中国用户优化 · 免翻墙 · 离线安装 ║" - echo " ║ ║" - echo " ╠════════════════════════════════════════════════════════╣" - echo -e " ║${NC} ${CYAN}║" + local NODE_VER=$("$NODE_BIN" --version 2>/dev/null || echo "N/A") + local CFG_STATUS="${RED}未配置${NC}" + [ -f "$CONFIG_PATH" ] && CFG_STATUS="${GREEN}已配置${NC}" - # 状态栏 - local STATUS_NODE="${GREEN}v$($NODE_BIN --version 2>/dev/null || echo '未找到')${NC}" - local STATUS_MOD="${RED}未安装${NC}" - local STATUS_BUILD="${RED}未构建${NC}" - local STATUS_INST="${RED}未安装${NC}" - - [ "$HAS_MODULES" = "yes" ] && STATUS_MOD="${GREEN}已安装${NC}" - [ "$HAS_DIST" = "yes" ] && STATUS_BUILD="${GREEN}已构建${NC}" - [ "$INSTALLED" = "yes" ] && STATUS_INST="${GREEN}已安装${NC}" - - local STATUS_PORTABLE="${RED}未配置${NC}" - [ "$CONFIG_READY" = "yes" ] && STATUS_PORTABLE="${GREEN}已配置${NC}" - echo -e " ${CYAN}║${NC} 系统: $(uname -m) ${CYAN}║${NC}" - echo -e " ${CYAN}║${NC} Node: $STATUS_NODE ${CYAN}║${NC}" - echo -e " ${CYAN}║${NC} 依赖: $STATUS_MOD 构建: $STATUS_BUILD ${CYAN}║${NC}" - echo -e " ${CYAN}║${NC} 便携配置: $STATUS_PORTABLE 电脑安装: $STATUS_INST ${CYAN}║${NC}" - echo -e " ${CYAN}║${NC} ${CYAN}║${NC}" - echo -e " ${CYAN}╠════════════════════════════════════════════════════════╣${NC}" echo "" - echo -e " ${WHITE}${BOLD} ━━━━ 安装 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" + echo -e " ${CYAN}${BOLD}╔══════════════════════════════════════╗" + echo -e " ║ U-Claw 虾盘 v1.1 ║" + echo -e " ║ Portable AI Agent ║" + echo -e " ╚══════════════════════════════════════╝${NC}" echo "" - echo -e " ${GREEN} [1]${NC} 🚀 安装 OpenClaw 到本机(仅限你自己的电脑)" - echo -e " ${GREEN} [2]${NC} 📦 仅安装依赖(npm install)" - echo -e " ${GREEN} [3]${NC} 🔨 仅构建项目(npm build)" - echo -e " ${GREEN} [4]${NC} ▶️ 直接从 U 盘运行(配置也保存在 U 盘里)" + echo -e " Node: ${GREEN}${NODE_VER}${NC} 配置: ${CFG_STATUS}" echo "" - echo -e " ${WHITE}${BOLD} ━━━━ 中国优化 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" + echo -e " ${WHITE}${BOLD}── 配置 ──────────────────────────────${NC}" + echo -e " ${GREEN}[1]${NC} 配置向导(选模型、填 API Key)" + echo -e " ${GREEN}[2]${NC} 打开网页控制台" echo "" - echo -e " ${YELLOW} [5]${NC} ⚙️ 首次配置向导(选模型、选平台、填 API Key)" - echo -e " ${YELLOW} [6]${NC} 💬 配置中国聊天平台(飞书/钉钉)" - echo -e " ${YELLOW} [7]${NC} 🪞 设置国内镜像源" + echo -e " ${WHITE}${BOLD}── 聊天平台 ──────────────────────────${NC}" + echo -e " ${GREEN}[3]${NC} 接入 QQ 机器人(推荐,1分钟搞定)" + echo -e " ${GREEN}[4]${NC} 接入其他平台(飞书/Telegram/微信)" echo "" - echo -e " ${WHITE}${BOLD} ━━━━ 维护工具 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" + echo -e " ${WHITE}${BOLD}── 维护 ──────────────────────────────${NC}" + echo -e " ${GREEN}[5]${NC} 诊断修复" + echo -e " ${GREEN}[6]${NC} 备份配置" + echo -e " ${GREEN}[7]${NC} 恢复备份" + echo -e " ${GREEN}[8]${NC} 系统信息" echo "" - echo -e " ${CYAN} [8]${NC} 🔧 诊断修复(openclaw doctor)" - echo -e " ${CYAN} [9]${NC} 💾 备份当前状态" - echo -e " ${CYAN} [10]${NC} 📂 恢复备份" - echo -e " ${CYAN} [11]${NC} 🔄 重置 OpenClaw(恢复出厂)" - echo -e " ${CYAN} [12]${NC} 🧹 清理缓存和临时文件" - echo "" - echo -e " ${WHITE}${BOLD} ━━━━ 技能 & 使用 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" - echo "" - echo -e " ${BLUE} [13]${NC} 🎯 浏览预装技能(52个,已离线可用)" - echo -e " ${BLUE} [14]${NC} 📖 中国用户快速上手指南" - echo "" - echo -e " ${WHITE}${BOLD} ━━━━ 其他 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" - echo "" - echo -e " ${MAGENTA} [15]${NC} 📋 查看使用说明" - echo -e " ${MAGENTA} [16]${NC} ℹ️ 系统信息" - echo -e " ${MAGENTA} [17]${NC} 🌐 打开本地网页控制台" - echo -e " ${DIM} [0]${NC} 退出" - echo "" - echo -e " ${CYAN}╚════════════════════════════════════════════════════════╝${NC}" + echo -e " ${DIM}[0] 退出${NC}" echo "" } -# 确保依赖已安装 -ensure_deps() { - if [ ! -d "$OPENCLAW_DIR/node_modules" ]; then - echo -e " ${YELLOW}正在安装依赖(淘宝镜像)...${NC}" - cd "$OPENCLAW_DIR" - "$NODE_BIN" "$NPM_BIN" install --registry=https://registry.npmmirror.com 2>&1 - echo -e " ${GREEN}依赖安装完成${NC}" - fi - if [ ! -d "$OPENCLAW_DIR/dist" ]; then - echo -e " ${YELLOW}正在构建...${NC}" - cd "$OPENCLAW_DIR" - "$NODE_BIN" "$NPM_BIN" run build 2>&1 || true - echo -e " ${GREEN}构建完成${NC}" - fi +# [1] Config wizard +do_config() { + echo "" + echo -e " ${CYAN}${BOLD}━━━ 配置向导 ━━━${NC}" + echo "" + echo -e " ${WHITE}国产模型选择提示:${NC}" + echo "" + echo -e " DeepSeek → 选 Custom Provider" + echo -e " URL: https://api.deepseek.com/v1" + echo -e " 模型: deepseek-chat" + echo -e " Kimi → 选 Moonshot AI" + echo -e " 通义千问 → 选 Qwen" + echo -e " 豆包 → 选 Volcano Engine" + echo "" + read -p " 按回车启动配置向导..." + run_oc onboard } -# [1] 一键安装到电脑 -do_install() { +# [2] Web dashboard +do_dashboard() { echo "" - echo -e " ${CYAN}${BOLD}━━━ 一键安装 OpenClaw 到电脑 ━━━${NC}" + echo -e " ${CYAN}启动网页控制台...${NC}" echo "" - echo -e " ${YELLOW}提醒:如果这是老电脑、临时电脑、公司电脑或别人的电脑,${NC}" - echo -e " ${YELLOW}更推荐返回主菜单选择 [4] 从 U 盘运行,不要安装到本机。${NC}" - echo "" - bash "$UCLAW_DIR/安装到电脑.command" -} + cd "$CORE_DIR" -# [2] 安装依赖 -do_npm_install() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 安装 npm 依赖 ━━━${NC}" - echo "" - cd "$OPENCLAW_DIR" - echo -e " ${YELLOW}使用淘宝镜像安装...${NC}" - "$NODE_BIN" "$NPM_BIN" install --registry=https://registry.npmmirror.com 2>&1 - echo "" - echo -e " ${GREEN}依赖安装完成!${NC}" -} - -# [3] 构建 -do_build() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 构建 OpenClaw ━━━${NC}" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" "$NPM_BIN" run build 2>&1 - echo "" - echo -e " ${GREEN}构建完成!${NC}" -} - -# [4] 直接运行 -do_run() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 从 U 盘启动 OpenClaw ━━━${NC}" - echo "" - echo -e " ${GREEN}便携模式说明:配置、状态、记忆都会写在这只 U 盘里。${NC}" - echo -e " ${GREEN}拔掉 U 盘后当前会话会结束,但换一台电脑再插上还能继续用。${NC}" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - if [ ! -f "$CONFIG_PATH" ]; then - echo -e " ${YELLOW}检测到你还没有完成首次配置。${NC}" - echo " 首次配置会保存在 U 盘中,不会默认写进这台电脑。" - echo "" - read -p " 现在开始首次配置? (y/n) " -n 1 -r - echo "" - echo "" - if [[ $REPLY =~ ^[Yy]$ ]]; then - "$NODE_BIN" openclaw.mjs onboard - echo "" - echo -e " ${GREEN}首次配置完成,已保存到 U 盘。${NC}" - echo " 接下来可以选 [17] 打开网页控制台。" + # Find free port + local PORT=18789 + while lsof -i :$PORT >/dev/null 2>&1; do + PORT=$((PORT + 1)) + if [ $PORT -gt 18799 ]; then + echo -e " ${RED}端口 18789-18799 全被占用${NC}" + return fi - else - start_gateway - fi -} + done + + local TOKEN=$(python3 -c "import json,os; p='$CONFIG_PATH'; d=json.load(open(p)) if os.path.exists(p) else {}; print(d.get('gateway',{}).get('auth',{}).get('token','uclaw'))" 2>/dev/null || echo "uclaw") + + "$NODE_BIN" openclaw.mjs gateway run --allow-unconfigured --force --port $PORT & + local PID=$! -start_gateway() { - echo -e " ${GREEN}正在启动网关服务...${NC}" - echo " 此窗口不要关闭,关闭后服务会停止。" - echo "" - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs gateway run --allow-unconfigured --force & - local GW_PID=$! for i in $(seq 1 30); do sleep 0.5 - if curl -s -o /dev/null http://127.0.0.1:18789/ 2>/dev/null; then - local TOKEN - TOKEN=$(python3 -c "import json; d=json.load(open('$CONFIG_PATH')); print(d.get('gateway',{}).get('auth',{}).get('token',''))" 2>/dev/null) - local URL="http://127.0.0.1:18789/#token=${TOKEN}" - echo "" - echo -e " ${GREEN}控制台地址: ${URL}${NC}" + if curl --noproxy '*' -s -o /dev/null "http://127.0.0.1:$PORT/" 2>/dev/null; then + local URL="http://127.0.0.1:$PORT/#token=$TOKEN" + echo -e " ${GREEN}控制台: $URL${NC}" open "$URL" 2>/dev/null break fi done - wait $GW_PID + + echo " 关闭此窗口会停止服务" + wait $PID } -do_dashboard() { +# [3] QQ Bot (pre-installed) +do_qq() { echo "" - echo -e " ${CYAN}${BOLD}━━━ 启动网关 + 打开网页控制台 ━━━${NC}" + echo -e " ${CYAN}${BOLD}━━━ 接入 QQ 机器人 ━━━${NC}" echo "" - ensure_deps - cd "$OPENCLAW_DIR" - if [ ! -f "$CONFIG_PATH" ]; then - echo -e " ${YELLOW}你还没有完成 U 盘便携配置。请先选 [4] 从 U 盘运行。${NC}" + echo -e " ${GREEN}QQ 插件已预装!只需输入 AppID 和 AppSecret。${NC}" + echo "" + echo " 获取方式: 访问 q.qq.com → 创建机器人" + echo "" + read -p " AppID: " QQ_ID + read -p " AppSecret: " QQ_SECRET + echo "" + + if [ -z "$QQ_ID" ] || [ -z "$QQ_SECRET" ]; then + echo -e " ${YELLOW}已取消${NC}" return fi - start_gateway -} -# 运行 openclaw 命令(便携模式) -run_openclaw() { - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs "$@" -} - -# [5] 配置 AI 模型(直接用 OpenClaw 自带的配置向导) -do_china_models() { + run_oc channels add --channel qqbot --token "${QQ_ID}:${QQ_SECRET}" 2>&1 || true echo "" - echo -e " ${CYAN}${BOLD}━━━ 首次配置向导 ━━━${NC}" - echo "" - echo -e " ${WHITE}${BOLD}国产模型选择提示:${NC}" - echo "" - echo -e " ${GREEN}DeepSeek${NC} → 选 ${YELLOW}Custom Provider${NC}" - echo -e " Base URL: ${CYAN}https://api.deepseek.com/v1${NC}" - echo -e " 模型名: ${CYAN}deepseek-chat${NC}" - echo -e " ${GREEN}Kimi${NC} → 选 ${YELLOW}Moonshot AI${NC}" - echo -e " ${GREEN}通义千问${NC} → 选 ${YELLOW}Qwen${NC}" - echo -e " ${GREEN}MiniMax${NC} → 选 ${YELLOW}MiniMax${NC}" - echo -e " ${GREEN}豆包${NC} → 选 ${YELLOW}Volcano Engine${NC}" - echo "" - echo -e " ${DIM}按方向键 ↑↓ 滚动列表,回车确认${NC}" - echo "" - read -p " 按回车启动配置向导..." - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - run_openclaw onboard -} - -# [6] 配置中国聊天平台 -do_china_channels() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 配置中国聊天平台 ━━━${NC}" - echo "" - echo -e " OpenClaw 支持的聊天平台:" - echo "" - echo -e " ${WHITE}${BOLD} -- 国内平台 --${NC}" - echo -e " ${GREEN}[a]${NC} 飞书 Feishu/Lark — 已内置,企业首选" - echo -e " ${GREEN}[b]${NC} QQ(腾讯官方)${RED}★推荐${NC} — 3条命令,1分钟,免费免翻墙" - echo -e " ${GREEN}[c]${NC} 微信(社区插件) — iPad协议,文字/图片/文件" - echo -e " ${GRAY}[d]${NC} 企业微信 WeCom — 后续集成" - echo -e " ${GRAY}[e]${NC} 钉钉 DingTalk — 后续集成" - echo "" - echo -e " ${WHITE}${BOLD} -- 国际平台 --${NC}" - echo -e " ${GREEN}[f]${NC} Telegram — 推荐,简单好用" - echo -e " ${GREEN}[g]${NC} Discord — 游戏/社区" - echo -e " ${GREEN}[h]${NC} WhatsApp — 海外用户" - echo -e " ${GREEN}[i]${NC} Slack — 外企用户" - echo "" - read -p " 请选择 (a-i): " -n 1 CH_CHOICE - echo "" - echo "" - - case $CH_CHOICE in - a) - echo -e " ${CYAN}配置飞书 Feishu${NC}" - echo "" - echo " 飞书机器人配置步骤:" - echo " 1. 访问 https://open.feishu.cn/app 创建应用" - echo " 2. 获取 App ID 和 App Secret" - echo " 3. 配置事件订阅和权限" - echo "" - echo " 详细文档: openclaw/docs/channels/feishu.md" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - echo -e " ${YELLOW}启动 OpenClaw 配置向导...${NC}" - "$NODE_BIN" openclaw.mjs onboard 2>&1 || true - ;; - b) - echo -e " ${CYAN}${BOLD}配置 QQ(腾讯官方接入)${NC}" - echo "" - echo -e " ${GREEN}${BOLD}这是国内最简单的 AI 助手接入方式!${NC}" - echo -e " ${GREEN}全程 1 分钟,完全免费,无需翻墙。${NC}" - echo "" - echo -e " ${WHITE}${BOLD}步骤:${NC}" - echo "" - echo " 1. 扫码注册 QQ 机器人:" - echo -e " ${CYAN}http://q.qq.com/qqbot/openclaw/login.html${NC}" - echo "" - echo " 2. 点击「创建机器人」,获取 AppID 和 AppSecret" - echo "" - echo " 3. 运行以下 3 条命令:" - echo "" - echo -e " ${GREEN}openclaw plugins install @sliverp/qqbot@latest${NC}" - echo -e " ${GREEN}openclaw channels add --channel qqbot --token \"AppID:AppSecret\"${NC}" - echo -e " ${GREEN}openclaw gateway restart${NC}" - echo "" - echo -e " ${RED}⚠️ 安全提醒:${NC}" - echo " 默认任何人都能访问你的机器人!接入后请设置白名单:" - echo -e " ${YELLOW}openclaw config set channels.qqbot.allowFrom \"你的QQ号\"${NC}" - echo "" - echo -e " ${DIM}备选方案: 也可以用 NapCatQQ (OneBot v11) 接入${NC}" - echo -e " ${DIM}https://github.com/NapNeko/NapCatQQ/releases${NC}" - echo "" - - # 如果已安装 OpenClaw,直接帮用户执行 - if [ -d "$OPENCLAW_DIR/dist" ]; then - read -p " 是否现在安装 QQ 插件? (y/n) " -n 1 DO_QQ - echo "" - if [[ "$DO_QQ" =~ ^[Yy]$ ]]; then - cd "$OPENCLAW_DIR" - echo "" - echo -e " ${YELLOW}正在安装 QQ 插件...${NC}" - "$NODE_BIN" openclaw.mjs plugins install @sliverp/qqbot@latest 2>&1 || true - echo "" - echo -e " ${WHITE}请输入 QQ 机器人信息(在 q.qq.com 后台查看):${NC}" - echo "" - read -p " AppID: " QQ_APP_ID - echo "" - read -p " AppSecret: " QQ_APP_SECRET - echo "" - if [ -n "$QQ_APP_ID" ] && [ -n "$QQ_APP_SECRET" ]; then - echo -e " ${YELLOW}正在绑定 QQ 机器人...${NC}" - "$NODE_BIN" openclaw.mjs channels add --channel qqbot --token "${QQ_APP_ID}:${QQ_APP_SECRET}" 2>&1 || true - echo "" - read -p " 请输入你自己的 QQ 号(设置白名单,留空跳过): " QQ_ALLOW - if [ -n "$QQ_ALLOW" ]; then - "$NODE_BIN" openclaw.mjs config set channels.qqbot.allowFrom "\"${QQ_ALLOW}\"" 2>&1 || true - echo -e " ${GREEN}白名单已设置: 仅 QQ ${QQ_ALLOW} 可访问${NC}" - fi - echo "" - echo -e " ${GREEN}QQ 机器人配置完成!${NC}" - echo -e " ${YELLOW}请重启网关后生效(主菜单选 [4] 或 [17])${NC}" - else - echo -e " ${YELLOW}已取消:AppID 或 AppSecret 为空。${NC}" - fi - fi - fi - ;; - c) - echo -e " ${CYAN}配置微信(社区插件)${NC}" - echo "" - echo " 安装微信插件:" - echo " openclaw plugins install @icesword760/openclaw-wechat" - echo "" - echo " 基于 iPad 协议,支持:" - echo " - 文字消息" - echo " - 图片发送" - echo " - 文件传输" - echo " - 关键词触发对话" - echo "" - echo " 仓库: https://github.com/icesword0760/openclaw-wechat" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - echo -e " ${YELLOW}正在安装微信插件...${NC}" - "$NODE_BIN" openclaw.mjs plugins install @icesword760/openclaw-wechat 2>&1 || \ - echo -e " ${YELLOW}安装失败,请手动安装${NC}" - ;; - d|e) - echo -e " ${YELLOW}该平台正在开发中,敬请期待${NC}" - echo " 可关注 u-claw.org 获取最新进展" - ;; - f) - echo -e " ${CYAN}配置 Telegram${NC}" - echo "" - echo " 步骤:" - echo " 1. 在 Telegram 中找 @BotFather" - echo " 2. 发送 /newbot 创建机器人" - echo " 3. 获取 Bot Token" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs onboard 2>&1 || true - ;; - g) - echo -e " ${CYAN}配置 Discord${NC}" - echo "" - echo " 步骤:" - echo " 1. 访问 https://discord.com/developers/applications" - echo " 2. 创建 Application -> Bot" - echo " 3. 获取 Bot Token" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs onboard 2>&1 || true - ;; - h|i) - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs onboard 2>&1 || true - ;; - *) - echo -e " ${YELLOW}无效选择${NC}" - ;; - esac -} - -# [7] 设置国内镜像 -do_mirror() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 设置国内镜像源 ━━━${NC}" - echo "" - - # npm 镜像 - echo -e " ${YELLOW}设置 npm 淘宝镜像...${NC}" - "$NODE_BIN" "$NPM_BIN" config set registry https://registry.npmmirror.com --location=project 2>/dev/null - cd "$OPENCLAW_DIR" 2>/dev/null - "$NODE_BIN" "$NPM_BIN" config set registry https://registry.npmmirror.com --location=project 2>/dev/null - echo -e " ${GREEN}npm 镜像已设置: registry.npmmirror.com${NC}" - - # 创建 .npmrc - NPMRC="$OPENCLAW_DIR/.npmrc" - if ! grep -q "npmmirror" "$NPMRC" 2>/dev/null; then - echo "" >> "$NPMRC" - echo "registry=https://registry.npmmirror.com" >> "$NPMRC" + read -p " 你的 QQ 号(设白名单,留空跳过): " QQ_ALLOW + if [ -n "$QQ_ALLOW" ]; then + run_oc config set channels.qqbot.allowFrom "\"${QQ_ALLOW}\"" 2>&1 || true + echo -e " ${GREEN}白名单已设置${NC}" fi - echo "" - echo -e " ${GREEN}国内镜像配置完成!${NC}" - echo " 后续 npm install 将自动使用淘宝镜像" + echo -e " ${GREEN}QQ 机器人配置完成!重启网关后生效。${NC}" } -# [8] 诊断修复 +# [4] Other platforms +do_platforms() { + echo "" + echo -e " ${CYAN}${BOLD}━━━ 其他聊天平台 ━━━${NC}" + echo "" + echo -e " ${GREEN}[a]${NC} 飞书 Feishu — 企业首选" + echo -e " ${GREEN}[b]${NC} Telegram — 海外推荐" + echo -e " ${GREEN}[c]${NC} 微信(社区插件) — iPad协议" + echo -e " ${GREEN}[d]${NC} Discord" + echo "" + read -p " 选择 (a-d): " -n 1 CH + echo "" + echo "" + + case $CH in + a) echo " 飞书: 访问 open.feishu.cn/app 创建应用" ;; + b) echo " Telegram: 找 @BotFather 创建机器人" ;; + c) + echo -e " ${YELLOW}安装微信插件...${NC}" + run_oc plugins install @icesword760/openclaw-wechat 2>&1 || true + ;; + d) echo " Discord: 访问 discord.com/developers/applications" ;; + *) echo " 无效选择" ;; + esac + echo "" + echo " 配置完成后运行配置向导 [1] 绑定平台" +} + +# [5] Doctor do_doctor() { echo "" - echo -e " ${CYAN}${BOLD}━━━ 诊断修复 ━━━${NC}" + echo -e " ${CYAN}━━━ 诊断修复 ━━━${NC}" echo "" - echo -e " ${GREEN}💡 提示: 选 [17] 可打开网页控制台,在浏览器中查看完整状态${NC}" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs doctor --repair 2>&1 || \ - echo -e " ${YELLOW}如果 doctor 无法运行,请先完成安装步骤${NC}" + run_oc doctor --repair 2>&1 || echo -e " ${YELLOW}诊断命令执行失败${NC}" } -# [9] 备份 +# [6] Backup do_backup() { echo "" - echo -e " ${CYAN}${BOLD}━━━ 备份当前状态 ━━━${NC}" + local TS=$(date +%Y%m%d_%H%M%S) + local BK="$DATA_DIR/backups/backup_$TS" + mkdir -p "$BK" + + [ -f "$CONFIG_PATH" ] && cp "$CONFIG_PATH" "$BK/" && echo -e " ${GREEN} + openclaw.json${NC}" + [ -d "$DATA_DIR/memory" ] && cp -R "$DATA_DIR/memory" "$BK/" 2>/dev/null && echo -e " ${GREEN} + memory/${NC}" + echo "" - - BACKUP_DIR="$UCLAW_DIR/backups" - TIMESTAMP=$(date +%Y%m%d_%H%M%S) - BACKUP_NAME="backup_${TIMESTAMP}" - BACKUP_PATH="$BACKUP_DIR/$BACKUP_NAME" - - mkdir -p "$BACKUP_PATH" - - echo -e " ${YELLOW}备份中...${NC}" - - # 备份配置 - if [ -f "$OPENCLAW_DIR/.env" ]; then - cp "$OPENCLAW_DIR/.env" "$BACKUP_PATH/.env" - echo -e " ${GREEN} ✓ .env 配置${NC}" - fi - - # 备份 OpenClaw 状态 - if [ -d "$HOME/.openclaw" ]; then - mkdir -p "$BACKUP_PATH/openclaw-state" - cp -R "$HOME/.openclaw/openclaw.json" "$BACKUP_PATH/openclaw-state/" 2>/dev/null || true - cp -R "$HOME/.openclaw/credentials" "$BACKUP_PATH/openclaw-state/" 2>/dev/null || true - echo -e " ${GREEN} ✓ OpenClaw 状态和凭据${NC}" - fi - - # 备份 U-Claw 用户数据 - if [ -d "$UCLAW_DIR/memory" ] && [ "$(ls -A "$UCLAW_DIR/memory" 2>/dev/null)" ]; then - cp -R "$UCLAW_DIR/memory" "$BACKUP_PATH/" - echo -e " ${GREEN} ✓ 记忆文件${NC}" - fi - if [ -d "$UCLAW_DIR/persona" ] && [ "$(ls -A "$UCLAW_DIR/persona" 2>/dev/null)" ]; then - cp -R "$UCLAW_DIR/persona" "$BACKUP_PATH/" - echo -e " ${GREEN} ✓ 人格配置${NC}" - fi - - # 备份已安装的版本 - if [ -d "$HOME/.uclaw/openclaw" ]; then - cp "$HOME/.uclaw/openclaw/.env" "$BACKUP_PATH/installed-env" 2>/dev/null || true - echo -e " ${GREEN} ✓ 已安装版本配置${NC}" - fi - - BACKUP_SIZE=$(du -sh "$BACKUP_PATH" | cut -f1) - echo "" - echo -e " ${GREEN}备份完成!${NC}" - echo " 位置: $BACKUP_PATH" - echo " 大小: $BACKUP_SIZE" - echo "" - - # 显示所有备份 - echo " 所有备份:" - ls -1 "$BACKUP_DIR" 2>/dev/null | while read -r b; do - echo " - $b" - done + echo -e " ${GREEN}备份完成: $BK${NC}" + echo " 大小: $(du -sh "$BK" | cut -f1)" } -# [10] 恢复备份 +# [7] Restore do_restore() { echo "" - echo -e " ${CYAN}${BOLD}━━━ 恢复备份 ━━━${NC}" - echo "" - - BACKUP_DIR="$UCLAW_DIR/backups" - if [ ! -d "$BACKUP_DIR" ] || [ -z "$(ls -A "$BACKUP_DIR" 2>/dev/null)" ]; then - echo -e " ${YELLOW}没有找到任何备份${NC}" - echo " 请先使用 [9] 创建备份" + local BK_DIR="$DATA_DIR/backups" + if [ ! -d "$BK_DIR" ] || [ -z "$(ls -A "$BK_DIR" 2>/dev/null)" ]; then + echo -e " ${YELLOW}没有备份${NC}" return fi echo " 可用备份:" - echo "" local i=1 - for b in "$BACKUP_DIR"/*/; do - local bname=$(basename "$b") - local bsize=$(du -sh "$b" | cut -f1) - echo -e " ${GREEN}[$i]${NC} $bname ($bsize)" + for b in "$BK_DIR"/*/; do + echo -e " ${GREEN}[$i]${NC} $(basename "$b") ($(du -sh "$b" | cut -f1))" i=$((i+1)) done echo "" - read -p " 选择要恢复的备份编号: " RESTORE_NUM + read -p " 选择编号: " NUM local j=1 - local RESTORE_PATH="" - for b in "$BACKUP_DIR"/*/; do - if [ "$j" = "$RESTORE_NUM" ]; then - RESTORE_PATH="$b" - break + for b in "$BK_DIR"/*/; do + if [ "$j" = "$NUM" ]; then + [ -f "$b/openclaw.json" ] && cp "$b/openclaw.json" "$CONFIG_PATH" && echo -e " ${GREEN} + 配置已恢复${NC}" + [ -d "$b/memory" ] && cp -R "$b/memory" "$DATA_DIR/" && echo -e " ${GREEN} + 记忆已恢复${NC}" + echo -e " ${GREEN}恢复完成${NC}" + return fi j=$((j+1)) done - - if [ -z "$RESTORE_PATH" ]; then - echo -e " ${RED}无效选择${NC}" - return - fi - - echo "" - echo -e " ${YELLOW}正在恢复 $(basename "$RESTORE_PATH")...${NC}" - - # 恢复 .env - if [ -f "$RESTORE_PATH/.env" ]; then - cp "$RESTORE_PATH/.env" "$OPENCLAW_DIR/.env" - echo -e " ${GREEN} ✓ .env 已恢复${NC}" - fi - - # 恢复 OpenClaw 状态 - if [ -d "$RESTORE_PATH/openclaw-state" ]; then - mkdir -p "$HOME/.openclaw" - cp -R "$RESTORE_PATH/openclaw-state/"* "$HOME/.openclaw/" 2>/dev/null || true - echo -e " ${GREEN} ✓ OpenClaw 状态已恢复${NC}" - fi - - # 恢复用户数据 - if [ -d "$RESTORE_PATH/memory" ]; then - cp -R "$RESTORE_PATH/memory" "$UCLAW_DIR/" - echo -e " ${GREEN} ✓ 记忆文件已恢复${NC}" - fi - if [ -d "$RESTORE_PATH/persona" ]; then - cp -R "$RESTORE_PATH/persona" "$UCLAW_DIR/" - echo -e " ${GREEN} ✓ 人格配置已恢复${NC}" - fi - - echo "" - echo -e " ${GREEN}恢复完成!${NC}" + echo -e " ${RED}无效选择${NC}" } -# [11] 重置 -do_reset() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 重置 OpenClaw ━━━${NC}" - echo "" - echo -e " ${RED}警告: 重置将清除配置和状态数据${NC}" - echo "" - echo -e " ${GREEN}[1]${NC} 仅重置配置(保留凭据和会话)" - echo -e " ${YELLOW}[2]${NC} 重置配置 + 凭据 + 会话(保留工作区)" - echo -e " ${RED}[3]${NC} 完全重置(恢复出厂状态)" - echo -e " ${DIM}[0]${NC} 取消" - echo "" - read -p " 选择重置级别: " -n 1 RESET_CHOICE - echo "" - - case $RESET_CHOICE in - 1) - echo "" - echo -e " ${YELLOW}建议先备份! 是否先创建备份? (y/n)${NC}" - read -n 1 DO_BACKUP - echo "" - [ "$DO_BACKUP" = "y" ] && do_backup - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs reset --scope config 2>&1 || true - ;; - 2) - echo "" - echo -e " ${YELLOW}建议先备份! 是否先创建备份? (y/n)${NC}" - read -n 1 DO_BACKUP - echo "" - [ "$DO_BACKUP" = "y" ] && do_backup - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs reset --scope config+creds+sessions 2>&1 || true - ;; - 3) - echo "" - echo -e " ${RED}确定要完全重置吗? 输入 YES 确认:${NC} " - read CONFIRM - if [ "$CONFIRM" = "YES" ]; then - do_backup - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs reset --scope full 2>&1 || true - echo -e " ${GREEN}已恢复出厂状态${NC}" - else - echo " 已取消" - fi - ;; - *) - echo " 已取消" - ;; - esac -} - -# [12] 清理 -do_cleanup() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 清理缓存和临时文件 ━━━${NC}" - echo "" - - FREED=0 - - # 清理 npm 缓存 - echo -e " ${YELLOW}清理 npm 缓存...${NC}" - CACHE_SIZE=$("$NODE_BIN" "$NPM_BIN" cache ls 2>/dev/null | wc -l || echo 0) - "$NODE_BIN" "$NPM_BIN" cache clean --force 2>/dev/null || true - echo -e " ${GREEN} ✓ npm 缓存已清理${NC}" - - # 清理 Node.js 编译缓存 - if [ -d "$HOME/.cache/node" ]; then - NSIZE=$(du -sm "$HOME/.cache/node" 2>/dev/null | cut -f1) - rm -rf "$HOME/.cache/node" - echo -e " ${GREEN} ✓ Node 编译缓存已清理 (${NSIZE}MB)${NC}" - fi - - # 清理 OpenClaw 日志 - if [ -d "$HOME/.openclaw/logs" ]; then - LSIZE=$(du -sm "$HOME/.openclaw/logs" 2>/dev/null | cut -f1) - rm -rf "$HOME/.openclaw/logs" - echo -e " ${GREEN} ✓ 日志已清理 (${LSIZE:-0}MB)${NC}" - fi - - echo "" - echo -e " ${GREEN}清理完成!${NC}" -} - -# [13] 技能浏览器 -do_skills_browser() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 预装技能浏览器(52个,已离线可用)━━━${NC}" - echo "" - echo -e " ${WHITE}${BOLD} 效率 & 编程${NC}" - echo -e " ${GREEN} github${NC} GitHub 操作(Issues/PR/代码审查/CI)" - echo -e " ${GREEN} gh-issues${NC} 获取 Issues 并分配 Agent 修复" - echo -e " ${GREEN} coding-agent${NC} 委派编程任务给 Codex/Claude/Pi" - echo -e " ${GREEN} summarize${NC} 总结文本/网页/播客/视频" - echo -e " ${GREEN} nano-pdf${NC} 自然语言编辑 PDF" - echo -e " ${GREEN} clawhub${NC} 搜索安装更多社区技能" - echo -e " ${GREEN} skill-creator${NC} 创建自定义技能" - echo "" - echo -e " ${WHITE}${BOLD} 笔记 & 任务管理${NC}" - echo -e " ${GREEN} apple-notes${NC} Apple 备忘录(创建/搜索/编辑)" - echo -e " ${GREEN} apple-reminders${NC} Apple 提醒事项" - echo -e " ${GREEN} obsidian${NC} Obsidian 笔记操作" - echo -e " ${GREEN} notion${NC} Notion 页面和数据库" - echo -e " ${GREEN} things-mac${NC} Things 3 任务管理 (macOS)" - echo -e " ${GREEN} trello${NC} Trello 看板操作" - echo -e " ${GREEN} bear-notes${NC} Bear 笔记" - echo "" - echo -e " ${WHITE}${BOLD} AI & 创作${NC}" - echo -e " ${GREEN} openai-image-gen${NC} AI 图片生成" - echo -e " ${GREEN} openai-whisper${NC} 语音转文字(本地)" - echo -e " ${GREEN} openai-whisper-api${NC} 语音转文字(API)" - echo -e " ${GREEN} gemini${NC} Gemini 一键问答" - echo -e " ${GREEN} sag${NC} ElevenLabs 文字转语音" - echo -e " ${GREEN} sherpa-onnx-tts${NC} 本地离线文字转语音" - echo -e " ${GREEN} nano-banana-pro${NC} Gemini 3 图片生成" - echo "" - echo -e " ${WHITE}${BOLD} 通讯 & 社交${NC}" - echo -e " ${GREEN} himalaya${NC} 邮件收发(IMAP/SMTP)" - echo -e " ${GREEN} discord${NC} Discord 消息操作" - echo -e " ${GREEN} slack${NC} Slack 消息操作" - echo -e " ${GREEN} wacli${NC} WhatsApp 消息和历史" - echo -e " ${GREEN} imsg${NC} iMessage/SMS" - echo -e " ${GREEN} xurl${NC} X (Twitter) API" - echo "" - echo -e " ${WHITE}${BOLD} 系统 & 工具${NC}" - echo -e " ${GREEN} weather${NC} 天气查询" - echo -e " ${GREEN} peekaboo${NC} macOS 屏幕截图和 UI 自动化" - echo -e " ${GREEN} tmux${NC} 远程终端管理" - echo -e " ${GREEN} healthcheck${NC} 系统安全检查" - echo -e " ${GREEN} 1password${NC} 1Password 密码管理" - echo -e " ${GREEN} video-frames${NC} 视频截帧 (ffmpeg)" - echo -e " ${GREEN} session-logs${NC} 会话日志搜索分析" - echo -e " ${GREEN} mcporter${NC} MCP 服务管理" - echo "" - echo -e " ${WHITE}${BOLD} 智能家居 & IoT${NC}" - echo -e " ${GREEN} openhue${NC} Philips Hue 灯光控制" - echo -e " ${GREEN} sonoscli${NC} Sonos 音箱控制" - echo -e " ${GREEN} eightctl${NC} Eight Sleep 智能床垫" - echo -e " ${GREEN} camsnap${NC} 摄像头截图/录像" - echo "" - echo -e " ${DIM} 提示: 这些技能已全部预装在 U 盘中,无需联网下载${NC}" - echo -e " ${DIM} 使用: 在 OpenClaw 中直接说 \"帮我查天气\" 或 \"帮我发邮件\" 即可${NC}" - echo -e " ${DIM} 更多: 运行 openclaw 后输入 /skills 查看详情${NC}" -} - -# [14] 中国用户指南 -do_china_guide() { - echo "" - if [ -f "$UCLAW_DIR/中国用户指南.txt" ]; then - cat "$UCLAW_DIR/中国用户指南.txt" - else - echo " 指南文件不存在" - fi -} - -# [15] 使用说明 -do_readme() { - echo "" - if [ -f "$UCLAW_DIR/使用说明.txt" ]; then - cat "$UCLAW_DIR/使用说明.txt" - else - echo " 使用说明文件不存在" - fi -} - -# [16] 系统信息 +# [8] System info do_sysinfo() { echo "" - echo -e " ${CYAN}${BOLD}━━━ 系统信息 ━━━${NC}" - echo "" - echo " 操作系统: $(sw_vers -productName 2>/dev/null || uname -s) $(sw_vers -productVersion 2>/dev/null || uname -r)" - echo " CPU架构: $(uname -m)" - echo " 内存: $(sysctl -n hw.memsize 2>/dev/null | awk '{printf "%.1f GB", $1/1024/1024/1024}' || echo '未知')" - echo " Node.js: $($NODE_BIN --version 2>/dev/null || echo '未找到')" - echo " npm: $($NODE_BIN $NPM_BIN --version 2>/dev/null || echo '未找到')" - echo "" - echo " U-Claw 路径: $UCLAW_DIR" - echo " U-Claw 大小: $(du -sh "$UCLAW_DIR" 2>/dev/null | cut -f1)" - echo "" - if [ -d "$HOME/.uclaw" ]; then - echo " 已安装路径: $HOME/.uclaw" - echo " 已安装大小: $(du -sh "$HOME/.uclaw" 2>/dev/null | cut -f1)" - else - echo " 电脑安装: 未安装" - fi - echo "" - if [ -d "$HOME/.openclaw" ]; then - echo " OpenClaw 状态: $HOME/.openclaw" - echo " 状态大小: $(du -sh "$HOME/.openclaw" 2>/dev/null | cut -f1)" - fi - echo "" - echo " 磁盘空间: $(df -h "$UCLAW_DIR" 2>/dev/null | tail -1 | awk '{print $4 " 可用 / " $2 " 总计"}')" + echo " 系统: $(sw_vers -productName 2>/dev/null) $(sw_vers -productVersion 2>/dev/null)" + echo " CPU: $(uname -m)" + echo " 内存: $(sysctl -n hw.memsize 2>/dev/null | awk '{printf "%.0f GB", $1/1024/1024/1024}')" + echo " Node: $("$NODE_BIN" --version 2>/dev/null)" + echo " 路径: $UCLAW_DIR" + echo " 大小: $(du -sh "$UCLAW_DIR" 2>/dev/null | cut -f1)" + echo " 磁盘: $(df -h "$UCLAW_DIR" | tail -1 | awk '{print $4 " 可用"}')" } -# 主循环 +# Main loop while true; do show_menu - read -p " 请选择 [0-16]: " CHOICE + read -p " 请选择 [0-8]: " CHOICE echo "" case $CHOICE in - 1) do_install ;; - 2) do_npm_install ;; - 3) do_build ;; - 4) do_run ;; - 5) do_china_models ;; - 6) do_china_channels ;; - 7) do_mirror ;; - 8) do_doctor ;; - 9) do_backup ;; - 10) do_restore ;; - 11) do_reset ;; - 12) do_cleanup ;; - 13) do_skills_browser ;; - 14) do_china_guide ;; - 15) do_readme ;; - 16) do_sysinfo ;; - 17) do_dashboard ;; - 0) - echo -e " ${CYAN}再见! 🦞${NC}" - echo "" - exit 0 - ;; - *) - echo -e " ${RED}无效选择,请输入 0-17${NC}" - ;; + 1) do_config ;; + 2) do_dashboard ;; + 3) do_qq ;; + 4) do_platforms ;; + 5) do_doctor ;; + 6) do_backup ;; + 7) do_restore ;; + 8) do_sysinfo ;; + 0) echo -e " ${CYAN}再见!${NC}"; exit 0 ;; + *) echo -e " ${RED}无效选择${NC}" ;; esac echo "" - read -p " 按回车键返回主菜单..." + read -p " 按回车返回..." done diff --git a/portable/Windows-Menu.bat b/portable/Windows-Menu.bat index cd61e5e..5381694 100644 --- a/portable/Windows-Menu.bat +++ b/portable/Windows-Menu.bat @@ -1,6 +1,6 @@ @echo off chcp 65001 >/dev/null 2>&1 -title U-Claw - Full Menu +title U-Claw Menu set "UCLAW_DIR=%~dp0" set "CORE_DIR=%UCLAW_DIR%app\core" @@ -8,12 +8,11 @@ set "DATA_DIR=%UCLAW_DIR%data" set "STATE_DIR=%DATA_DIR%\.openclaw" set "NODE_DIR=%UCLAW_DIR%app\runtime\node-win-x64" set "NODE_BIN=%NODE_DIR%\node.exe" -set "NPM_BIN=%NODE_DIR%\npm.cmd" set "OPENCLAW_HOME=%DATA_DIR%" set "OPENCLAW_STATE_DIR=%STATE_DIR%" set "OPENCLAW_CONFIG_PATH=%STATE_DIR%\openclaw.json" -set "PATH=%NODE_DIR%;%NODE_DIR%\node_modules\.bin;%PATH%" +set "PATH=%NODE_DIR%;%PATH%" if not exist "%STATE_DIR%" mkdir "%STATE_DIR%" if not exist "%DATA_DIR%\memory" mkdir "%DATA_DIR%\memory" @@ -23,184 +22,63 @@ if not exist "%DATA_DIR%\backups" mkdir "%DATA_DIR%\backups" cls echo. echo ======================================== -echo U-Claw v1.1 - Full Menu +echo U-Claw v1.1 - Menu +echo Portable AI Agent echo ======================================== echo. if exist "%NODE_BIN%" ( - for /f "tokens=*" %%v in ('"%NODE_BIN%" --version') do echo Node.js: %%v + for /f "tokens=*" %%v in ('"%%NODE_BIN%%" --version') do echo Node: %%v ) else ( echo [!] Node.js not found ) -if exist "%CORE_DIR%\node_modules" (echo Dependencies: OK) else (echo Dependencies: NOT INSTALLED) -if exist "%CORE_DIR%\dist" (echo Build: OK) else (echo Build: NOT BUILT) if exist "%STATE_DIR%\openclaw.json" (echo Config: OK) else (echo Config: NOT SET) echo. -echo -- Start -- -echo [1] Quick start (gateway + browser) -echo [2] Setup wizard (choose model, API key) +echo -- Config -- +echo [1] Setup wizard (model, API key) +echo [2] Open web dashboard echo. -echo -- China Platforms -- -echo [3] QQ Bot setup (Tencent official) -echo [4] Feishu / DingTalk / WeChat -echo. -echo -- Skills -- -echo [5] Browse pre-installed skills (52) -echo [6] Install skill from ClawHub +echo -- Chat Platforms -- +echo [3] QQ Bot (pre-installed, enter ID only) +echo [4] Other platforms (Feishu/Telegram/WeChat) echo. echo -- Maintenance -- -echo [7] Diagnostics (openclaw doctor) -echo [8] Backup config and memory -echo [9] Restore backup -echo [10] Reset (factory default) +echo [5] Diagnostics +echo [6] Backup config +echo [7] Restore backup +echo [8] System info echo. -echo -- Other -- -echo [11] Open web dashboard -echo [12] System info -echo [13] Set China mirror echo [0] Exit echo. -set /p choice=" Choose [0-13]: " +set /p choice=" Choose [0-8]: " -if "%choice%"=="1" goto :start -if "%choice%"=="2" goto :onboard +if "%choice%"=="1" goto :onboard +if "%choice%"=="2" goto :dashboard if "%choice%"=="3" goto :qqbot if "%choice%"=="4" goto :channels -if "%choice%"=="5" goto :skills -if "%choice%"=="6" goto :install_skill -if "%choice%"=="7" goto :doctor -if "%choice%"=="8" goto :backup -if "%choice%"=="9" goto :restore -if "%choice%"=="10" goto :reset -if "%choice%"=="11" goto :dashboard -if "%choice%"=="12" goto :sysinfo -if "%choice%"=="13" goto :mirror +if "%choice%"=="5" goto :doctor +if "%choice%"=="6" goto :backup +if "%choice%"=="7" goto :restore +if "%choice%"=="8" goto :sysinfo if "%choice%"=="0" exit /b 0 echo Invalid choice pause goto :menu -:start -call "%UCLAW_DIR%start.bat" -goto :end - :onboard +echo. +echo === Setup Wizard === +echo. +echo DeepSeek - Custom Provider, URL: https://api.deepseek.com/v1 +echo Kimi - Moonshot AI +echo Qwen - Qwen +echo Doubao - Volcano Engine +echo. cd /d "%CORE_DIR%" "%NODE_BIN%" openclaw.mjs onboard pause goto :menu -:qqbot -echo. -echo === QQ Bot Setup (Tencent Official) === -echo. -echo 1. Register: http://q.qq.com/qqbot/openclaw/login.html -echo 2. Create bot, get AppID and AppSecret -echo 3. Run these commands: -echo. -echo openclaw plugins install @sliverp/qqbot@latest -echo openclaw channels add --channel qqbot --token "AppID:AppSecret" -echo openclaw config set channels.qqbot.allowFrom "your_qq_number" -echo openclaw gateway restart -echo. -set /p qqinstall=" Install QQ plugin now? (y/n): " -if /i "%qqinstall%"=="y" ( - cd /d "%CORE_DIR%" - "%NODE_BIN%" openclaw.mjs plugins install @sliverp/qqbot@latest - echo. - set /p qqid=" AppID: " - set /p qqsecret=" AppSecret: " - if not "%qqid%"=="" if not "%qqsecret%"=="" ( - "%NODE_BIN%" openclaw.mjs channels add --channel qqbot --token "%qqid%:%qqsecret%" - set /p qqallow=" Your QQ number (allowlist): " - if not "%qqallow%"=="" "%NODE_BIN%" openclaw.mjs config set channels.qqbot.allowFrom "%qqallow%" - echo QQ Bot configured! - ) -) -pause -goto :menu - -:channels -echo. -echo === Chat Platforms === -echo. -echo [a] Feishu - https://open.feishu.cn/app -echo [b] WeChat - openclaw plugins install @icesword760/openclaw-wechat -echo [c] DingTalk - built-in -echo [d] Telegram / Discord / WhatsApp / Slack - built-in -echo. -echo Use [2] Setup wizard to configure these platforms. -pause -goto :menu - -:skills -echo. -echo === Pre-installed Skills (52) === -echo. -echo Productivity: github, coding-agent, summarize, nano-pdf, clawhub -echo Notes: apple-notes, obsidian, notion, trello, bear-notes -echo AI: openai-image-gen, openai-whisper, gemini, sherpa-onnx-tts -echo Social: himalaya (email), discord, slack, wacli (WhatsApp) -echo System: weather, peekaboo, tmux, healthcheck, 1password -echo IoT: openhue, sonoscli, eightctl, camsnap -echo. -echo Use "openclaw skills list" for full list. -pause -goto :menu - -:install_skill -echo. -set /p skillname=" Skill name: " -if not "%skillname%"=="" ( - cd /d "%CORE_DIR%" - "%NODE_BIN%" openclaw.mjs skills install %skillname% -) -pause -goto :menu - -:doctor -cd /d "%CORE_DIR%" -"%NODE_BIN%" openclaw.mjs doctor --repair -pause -goto :menu - -:backup -echo. -set "TIMESTAMP=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%" -set "TIMESTAMP=%TIMESTAMP: =0%" -set "BACKUP_PATH=%DATA_DIR%\backups\backup_%TIMESTAMP%" -mkdir "%BACKUP_PATH%" 2>/dev/null -if exist "%STATE_DIR%\openclaw.json" copy "%STATE_DIR%\openclaw.json" "%BACKUP_PATH%\" >/dev/null -if exist "%DATA_DIR%\memory" xcopy /s /q "%DATA_DIR%\memory" "%BACKUP_PATH%\memory\" >/dev/null 2>/dev/null -echo Backup saved to: %BACKUP_PATH% -pause -goto :menu - -:restore -echo. -echo Backups: -dir /b "%DATA_DIR%\backups\" 2>/dev/null -echo. -set /p restorename=" Backup folder name: " -if exist "%DATA_DIR%\backups\%restorename%\openclaw.json" ( - copy "%DATA_DIR%\backups\%restorename%\openclaw.json" "%STATE_DIR%\" >/dev/null - echo Config restored! -) -pause -goto :menu - -:reset -echo. -echo WARNING: This will reset your config! -set /p confirm=" Type YES to confirm: " -if "%confirm%"=="YES" ( - del "%STATE_DIR%\openclaw.json" 2>/dev/null - echo {"gateway":{"mode":"local","auth":{"token":"uclaw"}}} > "%STATE_DIR%\openclaw.json" - echo Reset complete. -) -pause -goto :menu - :dashboard echo. echo Starting gateway... @@ -221,22 +99,82 @@ start "" http://127.0.0.1:%PORT%/#token=uclaw pause goto :menu +:qqbot +echo. +echo === QQ Bot Setup === +echo. +echo QQ plugin is pre-installed! +echo You only need your AppID and AppSecret. +echo. +echo Get them at: q.qq.com (create a bot) +echo. +set /p qqid=" AppID: " +set /p qqsecret=" AppSecret: " +if "%qqid%"=="" goto :qq_cancel +if "%qqsecret%"=="" goto :qq_cancel +cd /d "%CORE_DIR%" +"%NODE_BIN%" openclaw.mjs channels add --channel qqbot --token "%qqid%:%qqsecret%" +echo. +set /p qqallow=" Your QQ number (allowlist, empty to skip): " +if not "%qqallow%"=="" "%NODE_BIN%" openclaw.mjs config set channels.qqbot.allowFrom "%qqallow%" +echo. +echo QQ Bot configured! Restart gateway to apply. +pause +goto :menu +:qq_cancel +echo Cancelled. +pause +goto :menu + +:channels +echo. +echo === Other Platforms === +echo. +echo Feishu: Built-in. Use [1] Setup wizard. +echo Telegram: Built-in. Use [1] Setup wizard. +echo Discord: Built-in. Use [1] Setup wizard. +echo WeChat: Community plugin. +echo. +echo Use Setup wizard [1] to configure these. +pause +goto :menu + +:doctor +cd /d "%CORE_DIR%" +"%NODE_BIN%" openclaw.mjs doctor --repair +pause +goto :menu + +:backup +echo. +set "TS=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%" +set "TS=%TS: =0%" +set "BK=%DATA_DIR%\backups\backup_%TS%" +mkdir "%BK%" 2>nul +if exist "%STATE_DIR%\openclaw.json" copy "%STATE_DIR%\openclaw.json" "%BK%\" >nul +if exist "%DATA_DIR%\memory" xcopy /s /q "%DATA_DIR%\memory" "%BK%\memory\" >/dev/null 2>nul +echo Backup saved: %BK% +pause +goto :menu + +:restore +echo. +echo Available backups: +dir /b "%DATA_DIR%\backups\" 2>nul +echo. +set /p rname=" Backup folder name: " +if exist "%DATA_DIR%\backups\%rname%\openclaw.json" ( + copy "%DATA_DIR%\backups\%rname%\openclaw.json" "%STATE_DIR%\" >nul + echo Config restored! +) +pause +goto :menu + :sysinfo echo. echo OS: Windows -echo Node: "%NODE_BIN%" --version -echo U-Claw: %UCLAW_DIR% +echo Path: %UCLAW_DIR% echo Data: %DATA_DIR% pause -goto :menu - -:mirror -echo. -cd /d "%CORE_DIR%" -"%NODE_BIN%" "%NPM_BIN%" config set registry https://registry.npmmirror.com --location=project -echo npm mirror set to: registry.npmmirror.com -pause -goto :menu - -:end +goto :menu \ No newline at end of file diff --git a/tests/test-scripts.sh b/tests/test-scripts.sh deleted file mode 100644 index 251d5a1..0000000 --- a/tests/test-scripts.sh +++ /dev/null @@ -1,230 +0,0 @@ -#!/bin/bash -# ============================================================ -# U-Claw 脚本测试套件 -# 验证 Windows .bat 和 macOS .command 脚本的正确性 -# ============================================================ - -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)" -UCLAW_SCRIPTS="$SCRIPT_DIR/uclaw-scripts" - -PASS=0 -FAIL=0 -TOTAL=0 - -pass() { - PASS=$((PASS + 1)) - TOTAL=$((TOTAL + 1)) - echo " ✓ $1" -} - -fail() { - FAIL=$((FAIL + 1)) - TOTAL=$((TOTAL + 1)) - echo " ✗ $1" -} - -check() { - local desc="$1" - local file="$2" - local pattern="$3" - if grep -q "$pattern" "$file" 2>/dev/null; then - pass "$desc" - else - fail "$desc" - fi -} - -check_not() { - local desc="$1" - local file="$2" - local pattern="$3" - if grep -q "$pattern" "$file" 2>/dev/null; then - fail "$desc" - else - pass "$desc" - fi -} - -echo "" -echo "==========================================" -echo " U-Claw 脚本测试套件" -echo "==========================================" - -# ── 文件存在性测试 ── -echo "" -echo "── 文件存在性 ──" - -for f in "Windows-从U盘启动.bat" "Mac-从U盘启动.command" "Windows-全部功能.bat" "Mac-全部功能.command" "Windows-安装到电脑.bat" "Mac-安装到电脑.command" "使用说明.txt" "中国用户指南.txt"; do - if [ -f "$UCLAW_SCRIPTS/$f" ]; then - pass "存在: $f" - else - fail "缺失: $f" - fi -done - -# ── macOS .command 语法检查 ── -echo "" -echo "── macOS 脚本语法检查 ──" - -for f in "Mac-从U盘启动.command" "Mac-全部功能.command" "Mac-安装到电脑.command"; do - if bash -n "$UCLAW_SCRIPTS/$f" 2>/dev/null; then - pass "语法正确: $f" - else - fail "语法错误: $f" - fi -done - -# ── 运行.bat 测试 ── -echo "" -echo "── 运行.bat ──" -BAT_RUN="$UCLAW_SCRIPTS/Windows-从U盘启动.bat" - -check "设置 UTF-8 编码" "$BAT_RUN" "chcp 65001" -check "设置便携模式 OPENCLAW_HOME" "$BAT_RUN" "OPENCLAW_HOME" -check "设置便携模式 OPENCLAW_STATE_DIR" "$BAT_RUN" "OPENCLAW_STATE_DIR" -check "设置便携模式 OPENCLAW_CONFIG_PATH" "$BAT_RUN" "OPENCLAW_CONFIG_PATH" -check "使用 gateway run" "$BAT_RUN" "gateway run" -check "使用 --allow-unconfigured" "$BAT_RUN" "\-\-allow-unconfigured" -check "使用 --force" "$BAT_RUN" "\-\-force" -check "首次用户走 onboard" "$BAT_RUN" "onboard" -check "检查 Node.js 存在" "$BAT_RUN" "NODE_BIN" -check_not "不依赖 pnpm" "$BAT_RUN" "pnpm" -check "版本号 v1.1" "$BAT_RUN" "v1.1" - -# ── 运行.command 测试 ── -echo "" -echo "── 运行.command ──" -CMD_RUN="$UCLAW_SCRIPTS/Mac-从U盘启动.command" - -check "设置便携模式 OPENCLAW_HOME" "$CMD_RUN" "OPENCLAW_HOME" -check "设置便携模式 OPENCLAW_STATE_DIR" "$CMD_RUN" "OPENCLAW_STATE_DIR" -check "设置便携模式 OPENCLAW_CONFIG_PATH" "$CMD_RUN" "OPENCLAW_CONFIG_PATH" -check "使用 gateway run" "$CMD_RUN" "gateway run" -check "使用 --allow-unconfigured" "$CMD_RUN" "\-\-allow-unconfigured" -check "使用 --force" "$CMD_RUN" "\-\-force" -check "首次用户走 onboard" "$CMD_RUN" "onboard" -check "自动打开浏览器" "$CMD_RUN" 'open "$URL"' -check "检测 CPU 架构" "$CMD_RUN" "uname -m" -check "支持 arm64" "$CMD_RUN" "arm64" -check_not "不依赖 pnpm" "$CMD_RUN" "pnpm" - -# ── 启动菜单.bat 测试 ── -echo "" -echo "── 启动菜单.bat ──" -BAT_MENU="$UCLAW_SCRIPTS/Windows-全部功能.bat" - -check "设置 UTF-8 编码" "$BAT_MENU" "chcp 65001" -check "便携模式 OPENCLAW_HOME" "$BAT_MENU" "OPENCLAW_HOME" -check "有 QQ Bot 选项" "$BAT_MENU" "QQ Bot" -check "QQ AppID 单独输入" "$BAT_MENU" "AppID" -check "QQ AppSecret 单独输入" "$BAT_MENU" "AppSecret" -check "DeepSeek 模型提示" "$BAT_MENU" "deepseek" -check "Custom Provider 提示" "$BAT_MENU" "Custom Provider" -check "有控制台入口" "$BAT_MENU" "控制台" -check "gateway run 命令" "$BAT_MENU" "gateway run" -check "版本号 v1.1" "$BAT_MENU" "v1.1" -check_not "不依赖 pnpm" "$BAT_MENU" "pnpm" - -# ── 启动菜单.command 测试 ── -echo "" -echo "── 启动菜单.command ──" -CMD_MENU="$UCLAW_SCRIPTS/Mac-全部功能.command" - -check "便携模式 OPENCLAW_HOME" "$CMD_MENU" "OPENCLAW_HOME" -check "有 QQ 选项" "$CMD_MENU" "QQ" -check "QQ AppID 单独输入" "$CMD_MENU" "AppID" -check "QQ AppSecret 单独输入" "$CMD_MENU" "AppSecret" -check "DeepSeek 模型提示" "$CMD_MENU" "deepseek" -check "Custom Provider 提示" "$CMD_MENU" "Custom Provider" -check "有 dashboard 入口" "$CMD_MENU" "dashboard" -check "gateway run 命令" "$CMD_MENU" "gateway run" -check "自动打开浏览器" "$CMD_MENU" 'open "$URL"' - -# ── 安装到电脑.bat 测试 ── -echo "" -echo "── 安装到电脑.bat ──" -BAT_INSTALL="$UCLAW_SCRIPTS/Windows-安装到电脑.bat" - -check "设置 UTF-8 编码" "$BAT_INSTALL" "chcp 65001" -check "安全提醒" "$BAT_INSTALL" "安全提醒" -check "共享电脑警告" "$BAT_INSTALL" "共享电脑" -check "安装到 .uclaw" "$BAT_INSTALL" "\.uclaw" -check "创建 uclaw.cmd" "$BAT_INSTALL" "uclaw.cmd" -check "创建 openclaw.cmd" "$BAT_INSTALL" "openclaw.cmd" -check "添加到 PATH" "$BAT_INSTALL" "setx PATH" -check "PATH 长度检查" "$BAT_INSTALL" "1024" -check "Node.js 安装检查" "$BAT_INSTALL" "node.exe" -check "版本号 v1.1" "$BAT_INSTALL" "v1.1" -check_not "不备份 .env" "$BAT_INSTALL" "env-backup" - -# ── 安装到电脑.command 测试 ── -echo "" -echo "── 安装到电脑.command ──" -CMD_INSTALL="$UCLAW_SCRIPTS/Mac-安装到电脑.command" - -check "安全提醒" "$CMD_INSTALL" "安全提醒" -check "共享电脑警告" "$CMD_INSTALL" "共享电脑" -check "安装到 .uclaw" "$CMD_INSTALL" "\.uclaw" -check "检测 CPU 架构" "$CMD_INSTALL" "uname -m" -check "支持 arm64" "$CMD_INSTALL" "arm64" -check "创建 symlink" "$CMD_INSTALL" "ln -sf" -check "添加到 shell RC" "$CMD_INSTALL" "zshrc" -check "spinner 动画" "$CMD_INSTALL" "run_with_spinner" -check "set -euo pipefail" "$CMD_INSTALL" "set -euo pipefail" - -# ── 安全检查(无敏感信息泄露)── -echo "" -echo "── 安全检查 ──" - -for f in "$UCLAW_SCRIPTS"/*.bat "$UCLAW_SCRIPTS"/*.command "$UCLAW_SCRIPTS"/*.txt; do - fname=$(basename "$f") - check_not "无 API Key: $fname" "$f" "sk-[a-zA-Z0-9]\{20,\}" - check_not "无硬编码密码: $fname" "$f" "password.*=.*['\"][^'\"]\{8,\}" -done - -# ── Windows/Mac 一致性检查 ── -echo "" -echo "── 跨平台一致性 ──" - -# 两边都有 gateway run -if grep -q "gateway run" "$BAT_RUN" && grep -q "gateway run" "$CMD_RUN"; then - pass "运行脚本:两端都用 gateway run" -else - fail "运行脚本:gateway run 不一致" -fi - -# 两边都有 onboard -if grep -q "onboard" "$BAT_RUN" && grep -q "onboard" "$CMD_RUN"; then - pass "运行脚本:两端都有 onboard 流程" -else - fail "运行脚本:onboard 流程不一致" -fi - -# 两边菜单都有 QQ -if grep -q "QQ" "$BAT_MENU" && grep -q "QQ" "$CMD_MENU"; then - pass "启动菜单:两端都有 QQ 接入" -else - fail "启动菜单:QQ 接入不一致" -fi - -# 两边安装都有安全提醒 -if grep -q "安全提醒" "$BAT_INSTALL" && grep -q "安全提醒" "$CMD_INSTALL"; then - pass "安装脚本:两端都有安全提醒" -else - fail "安装脚本:安全提醒不一致" -fi - -# ── 结果汇总 ── -echo "" -echo "==========================================" -if [ $FAIL -eq 0 ]; then - echo " 全部通过! $PASS/$TOTAL" -else - echo " 失败 $FAIL 项 / 共 $TOTAL 项" -fi -echo "==========================================" -echo "" - -exit $FAIL diff --git a/uclaw-scripts/Mac-安装并启动.command b/uclaw-scripts/Mac-Install.command similarity index 61% rename from uclaw-scripts/Mac-安装并启动.command rename to uclaw-scripts/Mac-Install.command index 9635f66..1f1ad0a 100755 --- a/uclaw-scripts/Mac-安装并启动.command +++ b/uclaw-scripts/Mac-Install.command @@ -1,8 +1,5 @@ #!/bin/bash -# ============================================================ -# U-Claw 虾盘 - macOS 一键安装并启动 -# 从 U 盘解压到电脑,然后启动 OpenClaw -# ============================================================ +# U-Claw - Extract and Launch (macOS) GREEN='\033[0;32m' CYAN='\033[0;36m' @@ -15,16 +12,16 @@ echo "" echo -e "${CYAN}" echo " ╔══════════════════════════════════════╗" echo " ║ U-Claw 虾盘 v1.1 ║" -echo " ║ 一键安装并启动 (macOS) ║" +echo " ║ 一键解压并启动 (macOS) ║" echo " ╚══════════════════════════════════════╝" echo -e "${NC}" -USB_DIR="$(cd "$(dirname "$0")" && pwd)" -ARCHIVE="$USB_DIR/U-Claw.tar.gz" -INSTALL_DIR="$HOME/U-Claw" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +ARCHIVE="$SCRIPT_DIR/U-Claw.tar.gz" +INSTALL_DIR="$SCRIPT_DIR/U-Claw" -# 移除 macOS 隔离标记(解决"无法验证开发者"弹窗) -xattr -rd com.apple.quarantine "$USB_DIR" 2>/dev/null || true +# 移除 macOS 隔离标记 +xattr -rd com.apple.quarantine "$SCRIPT_DIR" 2>/dev/null || true # 检查压缩包 if [ ! -f "$ARCHIVE" ]; then @@ -34,19 +31,19 @@ if [ ! -f "$ARCHIVE" ]; then exit 1 fi -# 检查是否已安装 +# 检查是否已解压 if [ -d "$INSTALL_DIR/app/core/node_modules" ]; then - echo -e " ${GREEN}检测到已安装的 U-Claw${NC}" + echo -e " ${GREEN}检测到已解压的 U-Claw${NC}" echo " 位置: $INSTALL_DIR" echo "" echo -e " ${YELLOW}[1] 直接启动(跳过解压)${NC}" - echo " [2] 重新安装(覆盖现有)" + echo " [2] 重新解压(覆盖现有)" echo "" read -p " 请选择 [1/2,默认1]: " choice choice="${choice:-1}" if [ "$choice" = "2" ]; then echo "" - echo -e " ${YELLOW}正在重新安装...${NC}" + echo -e " ${YELLOW}正在重新解压...${NC}" rm -rf "$INSTALL_DIR" else echo "" @@ -57,12 +54,19 @@ fi # 解压(如果需要) if [ ! -d "$INSTALL_DIR/app/core/node_modules" ]; then echo "" - echo -e " ${CYAN}正在解压 U-Claw 到 $INSTALL_DIR ...${NC}" - echo " 这可能需要 30-60 秒,请稍等..." + echo -e " ${CYAN}正在解压 U-Claw ...${NC}" + echo " 解压到: $INSTALL_DIR" echo "" - mkdir -p "$HOME" - cd "$HOME" + # 检测是否在 U 盘上(挂载点判断) + if echo "$SCRIPT_DIR" | grep -q "/Volumes/"; then + echo -e " ${YELLOW}检测到 U 盘,解压可能需要 3-5 分钟,请耐心等待...${NC}" + else + echo " 大约需要 1-2 分钟..." + fi + echo "" + + cd "$SCRIPT_DIR" tar xzf "$ARCHIVE" if [ $? -ne 0 ]; then @@ -71,14 +75,14 @@ if [ ! -d "$INSTALL_DIR/app/core/node_modules" ]; then exit 1 fi + # 解压后移除隔离标记 + xattr -rd com.apple.quarantine "$INSTALL_DIR" 2>/dev/null || true + echo -e " ${GREEN}解压完成!${NC}" echo "" fi -# 删除 Windows 相关文件(可选,不影响运行) -# rm -f "$INSTALL_DIR"/Windows-*.bat 2>/dev/null - -# 启动 OpenClaw +# 启动 echo -e " ${CYAN}正在启动 OpenClaw...${NC}" echo "" diff --git a/uclaw-scripts/Mac-从U盘启动.command b/uclaw-scripts/Mac-从U盘启动.command deleted file mode 100644 index 8207ae7..0000000 --- a/uclaw-scripts/Mac-从U盘启动.command +++ /dev/null @@ -1,172 +0,0 @@ -#!/bin/bash -# ============================================================ -# U-Claw 虾盘 - macOS 一键启动 -# 双击此文件即可启动 OpenClaw -# ============================================================ - -UCLAW_DIR="$(cd "$(dirname "$0")" && pwd)" -OPENCLAW_DIR="$UCLAW_DIR/openclaw" -PORTABLE_HOME="$UCLAW_DIR/portable-home" -PORTABLE_STATE_DIR="$PORTABLE_HOME/.openclaw" -PORTABLE_CONFIG_PATH="$PORTABLE_STATE_DIR/openclaw.json" - -GREEN='\033[0;32m' -CYAN='\033[0;36m' -RED='\033[0;31m' -YELLOW='\033[1;33m' -NC='\033[0m' - -run_with_spinner() { - local message="$1" - shift - local tmp_log - tmp_log="$(mktemp -t uclaw-run.XXXXXX)" - "$@" >"$tmp_log" 2>&1 & - local cmd_pid=$! - local frames='|/-\' - local i=0 - - while kill -0 "$cmd_pid" 2>/dev/null; do - local frame="${frames:i%4:1}" - printf "\r %b[%s]%b %s" "$CYAN" "$frame" "$NC" "$message" - i=$((i + 1)) - sleep 0.2 - done - - wait "$cmd_pid" - local status=$? - printf "\r" - - if [ $status -ne 0 ]; then - echo -e " ${RED}启动步骤失败:${message}${NC}" - sed -n '1,120p' "$tmp_log" - rm -f "$tmp_log" - read -p " 按回车键退出..." - exit $status - fi - - echo -e " ${GREEN}完成${NC} ${message}" - rm -f "$tmp_log" -} - -clear -echo "" -echo -e "${CYAN}" -echo " ╔══════════════════════════════════════╗" -echo " ║ U-Claw 虾盘 v1.0 ║" -echo " ║ OpenClaw 一键启动 ║" -echo " ╚══════════════════════════════════════╝" -echo -e "${NC}" -echo -e " ${GREEN}推荐场景:老电脑 / 临时电脑 / 不想改本机环境${NC}" -echo "" - -# 检测 CPU 架构 -ARCH=$(uname -m) -if [ "$ARCH" = "arm64" ]; then - NODE_DIR="$UCLAW_DIR/runtime/node-mac-arm64" - echo -e " ${GREEN}检测到 Apple Silicon (M系列芯片)${NC}" -else - NODE_DIR="$UCLAW_DIR/runtime/node-mac-x64" - echo -e " ${GREEN}检测到 Intel Mac${NC}" -fi - -NODE_BIN="$NODE_DIR/bin/node" -NPM_BIN="$NODE_DIR/bin/npm" - -if [ ! -f "$NODE_BIN" ]; then - echo -e " ${RED}错误: 找不到 Node.js 运行环境${NC}" - echo " 请确保 runtime/ 目录完整" - echo "" - read -p " 按回车键退出..." - exit 1 -fi - -NODE_VER=$("$NODE_BIN" --version) -echo -e " Node.js 版本: ${GREEN}${NODE_VER}${NC}" -echo "" - -export PATH="$NODE_DIR/bin:$PATH" -export OPENCLAW_HOME="$PORTABLE_HOME" -export OPENCLAW_STATE_DIR="$PORTABLE_STATE_DIR" -export OPENCLAW_CONFIG_PATH="$PORTABLE_CONFIG_PATH" - -mkdir -p "$PORTABLE_STATE_DIR" - -# 移除 macOS 隔离标记(解决"无法验证开发者"弹窗) -if xattr -l "$NODE_BIN" 2>/dev/null | grep -q "com.apple.quarantine"; then - echo -e " ${YELLOW}正在移除 macOS 安全限制...${NC}" - xattr -rd com.apple.quarantine "$UCLAW_DIR" 2>/dev/null || true - echo -e " ${GREEN}已移除${NC}" - echo "" -fi - -# 检查依赖 -if [ ! -d "$OPENCLAW_DIR/node_modules" ]; then - echo -e " ${YELLOW}首次运行,正在安装依赖...${NC}" - echo " (使用淘宝镜像,请稍等)" - echo "" - cd "$OPENCLAW_DIR" - run_with_spinner "安装 npm 依赖..." "$NODE_BIN" "$NPM_BIN" install --registry=https://registry.npmmirror.com - echo "" - echo -e " ${GREEN}依赖安装完成!${NC}" - echo "" -fi - -# 检查构建 -if [ ! -d "$OPENCLAW_DIR/dist" ]; then - echo -e " ${YELLOW}首次运行,正在构建...${NC}" - cd "$OPENCLAW_DIR" - run_with_spinner "构建 OpenClaw..." "$NODE_BIN" "$NPM_BIN" run build - echo "" -fi - -# 首次运行:自动写入最小配置(跳过 onboard) -if [ ! -f "$PORTABLE_CONFIG_PATH" ]; then - echo -e " ${YELLOW}首次运行,正在初始化配置...${NC}" - mkdir -p "$(dirname "$PORTABLE_CONFIG_PATH")" - cat > "$PORTABLE_CONFIG_PATH" << 'CFGEOF' -{ - "gateway": { - "mode": "local", - "auth": { "token": "uclaw" } - } -} -CFGEOF - echo -e " ${GREEN}配置已初始化${NC}" - echo "" -fi - -# 启动网关 -echo -e " ${CYAN}正在启动 OpenClaw...${NC}" -echo " 此窗口不要关闭,关闭后服务会停止。" -echo "" -cd "$OPENCLAW_DIR" -"$NODE_BIN" openclaw.mjs gateway run --allow-unconfigured --force & -GW_PID=$! - -# 等网关启动,最多等 15 秒 -for i in $(seq 1 30); do - sleep 0.5 - if curl -s -o /dev/null http://127.0.0.1:18789/ 2>/dev/null; then - TOKEN=$(python3 -c "import json; d=json.load(open('$PORTABLE_CONFIG_PATH')); print(d.get('gateway',{}).get('auth',{}).get('token',''))" 2>/dev/null) - URL="http://127.0.0.1:18789/#token=${TOKEN}" - echo "" - echo -e " ${GREEN}✅ 启动成功!${NC}" - echo "" - echo -e " ${CYAN}控制台地址: ${URL}${NC}" - echo "" - echo -e " ${YELLOW}▸ 首次使用请在控制台中配置:${NC}" - echo " 1. 设置 AI 模型(DeepSeek / Kimi / 通义千问 等)" - echo " 2. 接入聊天平台(QQ / 飞书 / 钉钉 等)" - echo "" - open "$URL" 2>/dev/null - break - fi -done - -# 前台等待网关进程 -wait $GW_PID - -echo "" -echo -e " ${YELLOW}OpenClaw 已退出。拔掉 U 盘后,本次便携运行就会结束。${NC}" -read -p " 按回车键关闭窗口..." diff --git a/uclaw-scripts/Mac-全部功能.command b/uclaw-scripts/Mac-全部功能.command deleted file mode 100755 index 5469418..0000000 --- a/uclaw-scripts/Mac-全部功能.command +++ /dev/null @@ -1,839 +0,0 @@ -#!/bin/bash -# ============================================================ -# U-Claw 虾盘 - 启动菜单 (雨林木风风格) -# macOS 版本 -# ============================================================ - -UCLAW_DIR="$(cd "$(dirname "$0")" && pwd)" -OPENCLAW_DIR="$UCLAW_DIR/openclaw" -PORTABLE_HOME="$UCLAW_DIR/portable-home" -PORTABLE_STATE_DIR="$PORTABLE_HOME/.openclaw" -PORTABLE_CONFIG_PATH="$PORTABLE_STATE_DIR/openclaw.json" - -# 颜色 -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -CYAN='\033[0;36m' -BLUE='\033[0;34m' -MAGENTA='\033[0;35m' -WHITE='\033[1;37m' -GRAY='\033[0;37m' -NC='\033[0m' -BOLD='\033[1m' -DIM='\033[2m' - -# 检测架构并设置 Node -ARCH=$(uname -m) -if [ "$ARCH" = "arm64" ]; then - NODE_DIR="$UCLAW_DIR/runtime/node-mac-arm64" -else - NODE_DIR="$UCLAW_DIR/runtime/node-mac-x64" -fi -NODE_BIN="$NODE_DIR/bin/node" -NPM_BIN="$NODE_DIR/bin/npm" -export PATH="$NODE_DIR/bin:$PATH" -export OPENCLAW_HOME="$PORTABLE_HOME" -export OPENCLAW_STATE_DIR="$PORTABLE_STATE_DIR" -export OPENCLAW_CONFIG_PATH="$PORTABLE_CONFIG_PATH" - -mkdir -p "$PORTABLE_STATE_DIR" - -# 移除 macOS 隔离标记(解决"无法验证开发者"弹窗) -if xattr -l "$NODE_BIN" 2>/dev/null | grep -q "com.apple.quarantine"; then - xattr -rd com.apple.quarantine "$UCLAW_DIR" 2>/dev/null || true -fi - -# 检查安装状态 -check_status() { - HAS_MODULES="no" - HAS_DIST="no" - HAS_ENV="no" - INSTALLED="no" - PORTABLE_READY="no" - - [ -d "$OPENCLAW_DIR/node_modules" ] && HAS_MODULES="yes" - [ -d "$OPENCLAW_DIR/dist" ] && HAS_DIST="yes" - [ -f "$OPENCLAW_DIR/.env" ] && HAS_ENV="yes" - [ -d "$HOME/.uclaw/openclaw" ] && INSTALLED="yes" - [ -f "$PORTABLE_CONFIG_PATH" ] && PORTABLE_READY="yes" -} - -# 显示主菜单 -show_menu() { - check_status - clear - echo "" - echo -e "${CYAN}${BOLD}" - echo " ╔════════════════════════════════════════════════════════╗" - echo " ║ ║" - echo " ║ 🦞 U-Claw 虾盘 v1.0 ║" - echo " ║ OpenClaw AI 助手 一键安装盘 ║" - echo " ║ ║" - echo " ║ 专为中国用户优化 · 免翻墙 · 离线安装 ║" - echo " ║ ║" - echo " ╠════════════════════════════════════════════════════════╣" - echo -e " ║${NC} ${CYAN}║" - - # 状态栏 - local STATUS_NODE="${GREEN}v$($NODE_BIN --version 2>/dev/null || echo '未找到')${NC}" - local STATUS_MOD="${RED}未安装${NC}" - local STATUS_BUILD="${RED}未构建${NC}" - local STATUS_INST="${RED}未安装${NC}" - - [ "$HAS_MODULES" = "yes" ] && STATUS_MOD="${GREEN}已安装${NC}" - [ "$HAS_DIST" = "yes" ] && STATUS_BUILD="${GREEN}已构建${NC}" - [ "$INSTALLED" = "yes" ] && STATUS_INST="${GREEN}已安装${NC}" - - local STATUS_PORTABLE="${RED}未配置${NC}" - [ "$PORTABLE_READY" = "yes" ] && STATUS_PORTABLE="${GREEN}已配置${NC}" - echo -e " ${CYAN}║${NC} 系统: $(uname -m) ${CYAN}║${NC}" - echo -e " ${CYAN}║${NC} Node: $STATUS_NODE ${CYAN}║${NC}" - echo -e " ${CYAN}║${NC} 依赖: $STATUS_MOD 构建: $STATUS_BUILD ${CYAN}║${NC}" - echo -e " ${CYAN}║${NC} 便携配置: $STATUS_PORTABLE 电脑安装: $STATUS_INST ${CYAN}║${NC}" - echo -e " ${CYAN}║${NC} ${CYAN}║${NC}" - echo -e " ${CYAN}╠════════════════════════════════════════════════════════╣${NC}" - echo "" - echo -e " ${WHITE}${BOLD} ━━━━ 安装 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" - echo "" - echo -e " ${GREEN} [1]${NC} 🚀 安装 OpenClaw 到本机(仅限你自己的电脑)" - echo -e " ${GREEN} [2]${NC} 📦 仅安装依赖(npm install)" - echo -e " ${GREEN} [3]${NC} 🔨 仅构建项目(npm build)" - echo -e " ${GREEN} [4]${NC} ▶️ 直接从 U 盘运行(配置也保存在 U 盘里)" - echo "" - echo -e " ${WHITE}${BOLD} ━━━━ 中国优化 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" - echo "" - echo -e " ${YELLOW} [5]${NC} ⚙️ 首次配置向导(选模型、选平台、填 API Key)" - echo -e " ${YELLOW} [6]${NC} 💬 配置中国聊天平台(飞书/钉钉)" - echo -e " ${YELLOW} [7]${NC} 🪞 设置国内镜像源" - echo "" - echo -e " ${WHITE}${BOLD} ━━━━ 维护工具 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" - echo "" - echo -e " ${CYAN} [8]${NC} 🔧 诊断修复(openclaw doctor)" - echo -e " ${CYAN} [9]${NC} 💾 备份当前状态" - echo -e " ${CYAN} [10]${NC} 📂 恢复备份" - echo -e " ${CYAN} [11]${NC} 🔄 重置 OpenClaw(恢复出厂)" - echo -e " ${CYAN} [12]${NC} 🧹 清理缓存和临时文件" - echo "" - echo -e " ${WHITE}${BOLD} ━━━━ 技能 & 使用 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" - echo "" - echo -e " ${BLUE} [13]${NC} 🎯 浏览预装技能(52个,已离线可用)" - echo -e " ${BLUE} [14]${NC} 📖 中国用户快速上手指南" - echo "" - echo -e " ${WHITE}${BOLD} ━━━━ 其他 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" - echo "" - echo -e " ${MAGENTA} [15]${NC} 📋 查看使用说明" - echo -e " ${MAGENTA} [16]${NC} ℹ️ 系统信息" - echo -e " ${MAGENTA} [17]${NC} 🌐 打开本地网页控制台" - echo -e " ${DIM} [0]${NC} 退出" - echo "" - echo -e " ${CYAN}╚════════════════════════════════════════════════════════╝${NC}" - echo "" -} - -# 确保依赖已安装 -ensure_deps() { - if [ ! -d "$OPENCLAW_DIR/node_modules" ]; then - echo -e " ${YELLOW}正在安装依赖(淘宝镜像)...${NC}" - cd "$OPENCLAW_DIR" - "$NODE_BIN" "$NPM_BIN" install --registry=https://registry.npmmirror.com 2>&1 - echo -e " ${GREEN}依赖安装完成${NC}" - fi - if [ ! -d "$OPENCLAW_DIR/dist" ]; then - echo -e " ${YELLOW}正在构建...${NC}" - cd "$OPENCLAW_DIR" - "$NODE_BIN" "$NPM_BIN" run build 2>&1 || true - echo -e " ${GREEN}构建完成${NC}" - fi -} - -# [1] 一键安装到电脑 -do_install() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 一键安装 OpenClaw 到电脑 ━━━${NC}" - echo "" - echo -e " ${YELLOW}提醒:如果这是老电脑、临时电脑、公司电脑或别人的电脑,${NC}" - echo -e " ${YELLOW}更推荐返回主菜单选择 [4] 从 U 盘运行,不要安装到本机。${NC}" - echo "" - bash "$UCLAW_DIR/安装到电脑.command" -} - -# [2] 安装依赖 -do_npm_install() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 安装 npm 依赖 ━━━${NC}" - echo "" - cd "$OPENCLAW_DIR" - echo -e " ${YELLOW}使用淘宝镜像安装...${NC}" - "$NODE_BIN" "$NPM_BIN" install --registry=https://registry.npmmirror.com 2>&1 - echo "" - echo -e " ${GREEN}依赖安装完成!${NC}" -} - -# [3] 构建 -do_build() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 构建 OpenClaw ━━━${NC}" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" "$NPM_BIN" run build 2>&1 - echo "" - echo -e " ${GREEN}构建完成!${NC}" -} - -# [4] 直接运行 -do_run() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 从 U 盘启动 OpenClaw ━━━${NC}" - echo "" - echo -e " ${GREEN}便携模式说明:配置、状态、记忆都会写在这只 U 盘里。${NC}" - echo -e " ${GREEN}拔掉 U 盘后当前会话会结束,但换一台电脑再插上还能继续用。${NC}" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - if [ ! -f "$PORTABLE_CONFIG_PATH" ]; then - echo -e " ${YELLOW}检测到你还没有完成首次配置。${NC}" - echo " 首次配置会保存在 U 盘中,不会默认写进这台电脑。" - echo "" - read -p " 现在开始首次配置? (y/n) " -n 1 -r - echo "" - echo "" - if [[ $REPLY =~ ^[Yy]$ ]]; then - "$NODE_BIN" openclaw.mjs onboard - echo "" - echo -e " ${GREEN}首次配置完成,已保存到 U 盘。${NC}" - echo " 接下来可以选 [17] 打开网页控制台。" - fi - else - start_gateway - fi -} - -start_gateway() { - echo -e " ${GREEN}正在启动网关服务...${NC}" - echo " 此窗口不要关闭,关闭后服务会停止。" - echo "" - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs gateway run --allow-unconfigured --force & - local GW_PID=$! - for i in $(seq 1 30); do - sleep 0.5 - if curl -s -o /dev/null http://127.0.0.1:18789/ 2>/dev/null; then - local TOKEN - TOKEN=$(python3 -c "import json; d=json.load(open('$PORTABLE_CONFIG_PATH')); print(d.get('gateway',{}).get('auth',{}).get('token',''))" 2>/dev/null) - local URL="http://127.0.0.1:18789/#token=${TOKEN}" - echo "" - echo -e " ${GREEN}控制台地址: ${URL}${NC}" - open "$URL" 2>/dev/null - break - fi - done - wait $GW_PID -} - -do_dashboard() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 启动网关 + 打开网页控制台 ━━━${NC}" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - if [ ! -f "$PORTABLE_CONFIG_PATH" ]; then - echo -e " ${YELLOW}你还没有完成 U 盘便携配置。请先选 [4] 从 U 盘运行。${NC}" - return - fi - start_gateway -} - -# 运行 openclaw 命令(便携模式) -run_openclaw() { - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs "$@" -} - -# [5] 配置 AI 模型(直接用 OpenClaw 自带的配置向导) -do_china_models() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 首次配置向导 ━━━${NC}" - echo "" - echo -e " ${WHITE}${BOLD}国产模型选择提示:${NC}" - echo "" - echo -e " ${GREEN}DeepSeek${NC} → 选 ${YELLOW}Custom Provider${NC}" - echo -e " Base URL: ${CYAN}https://api.deepseek.com/v1${NC}" - echo -e " 模型名: ${CYAN}deepseek-chat${NC}" - echo -e " ${GREEN}Kimi${NC} → 选 ${YELLOW}Moonshot AI${NC}" - echo -e " ${GREEN}通义千问${NC} → 选 ${YELLOW}Qwen${NC}" - echo -e " ${GREEN}MiniMax${NC} → 选 ${YELLOW}MiniMax${NC}" - echo -e " ${GREEN}豆包${NC} → 选 ${YELLOW}Volcano Engine${NC}" - echo "" - echo -e " ${DIM}按方向键 ↑↓ 滚动列表,回车确认${NC}" - echo "" - read -p " 按回车启动配置向导..." - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - run_openclaw onboard -} - -# [6] 配置中国聊天平台 -do_china_channels() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 配置中国聊天平台 ━━━${NC}" - echo "" - echo -e " OpenClaw 支持的聊天平台:" - echo "" - echo -e " ${WHITE}${BOLD} -- 国内平台 --${NC}" - echo -e " ${GREEN}[a]${NC} 飞书 Feishu/Lark — 已内置,企业首选" - echo -e " ${GREEN}[b]${NC} QQ(腾讯官方)${RED}★推荐${NC} — 3条命令,1分钟,免费免翻墙" - echo -e " ${GREEN}[c]${NC} 微信(社区插件) — iPad协议,文字/图片/文件" - echo -e " ${GRAY}[d]${NC} 企业微信 WeCom — 后续集成" - echo -e " ${GRAY}[e]${NC} 钉钉 DingTalk — 后续集成" - echo "" - echo -e " ${WHITE}${BOLD} -- 国际平台 --${NC}" - echo -e " ${GREEN}[f]${NC} Telegram — 推荐,简单好用" - echo -e " ${GREEN}[g]${NC} Discord — 游戏/社区" - echo -e " ${GREEN}[h]${NC} WhatsApp — 海外用户" - echo -e " ${GREEN}[i]${NC} Slack — 外企用户" - echo "" - read -p " 请选择 (a-i): " -n 1 CH_CHOICE - echo "" - echo "" - - case $CH_CHOICE in - a) - echo -e " ${CYAN}配置飞书 Feishu${NC}" - echo "" - echo " 飞书机器人配置步骤:" - echo " 1. 访问 https://open.feishu.cn/app 创建应用" - echo " 2. 获取 App ID 和 App Secret" - echo " 3. 配置事件订阅和权限" - echo "" - echo " 详细文档: openclaw/docs/channels/feishu.md" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - echo -e " ${YELLOW}启动 OpenClaw 配置向导...${NC}" - "$NODE_BIN" openclaw.mjs onboard 2>&1 || true - ;; - b) - echo -e " ${CYAN}${BOLD}配置 QQ(腾讯官方接入)${NC}" - echo "" - echo -e " ${GREEN}${BOLD}这是国内最简单的 AI 助手接入方式!${NC}" - echo -e " ${GREEN}全程 1 分钟,完全免费,无需翻墙。${NC}" - echo "" - echo -e " ${WHITE}${BOLD}步骤:${NC}" - echo "" - echo " 1. 扫码注册 QQ 机器人:" - echo -e " ${CYAN}http://q.qq.com/qqbot/openclaw/login.html${NC}" - echo "" - echo " 2. 点击「创建机器人」,获取 AppID 和 AppSecret" - echo "" - echo " 3. 运行以下 3 条命令:" - echo "" - echo -e " ${GREEN}openclaw plugins install @sliverp/qqbot@latest${NC}" - echo -e " ${GREEN}openclaw channels add --channel qqbot --token \"AppID:AppSecret\"${NC}" - echo -e " ${GREEN}openclaw gateway restart${NC}" - echo "" - echo -e " ${RED}⚠️ 安全提醒:${NC}" - echo " 默认任何人都能访问你的机器人!接入后请设置白名单:" - echo -e " ${YELLOW}openclaw config set channels.qqbot.allowFrom \"你的QQ号\"${NC}" - echo "" - echo -e " ${DIM}备选方案: 也可以用 NapCatQQ (OneBot v11) 接入${NC}" - echo -e " ${DIM}https://github.com/NapNeko/NapCatQQ/releases${NC}" - echo "" - - # 如果已安装 OpenClaw,直接帮用户执行 - if [ -d "$OPENCLAW_DIR/dist" ]; then - read -p " 是否现在安装 QQ 插件? (y/n) " -n 1 DO_QQ - echo "" - if [[ "$DO_QQ" =~ ^[Yy]$ ]]; then - cd "$OPENCLAW_DIR" - echo "" - echo -e " ${YELLOW}正在安装 QQ 插件...${NC}" - "$NODE_BIN" openclaw.mjs plugins install @sliverp/qqbot@latest 2>&1 || true - echo "" - echo -e " ${WHITE}请输入 QQ 机器人信息(在 q.qq.com 后台查看):${NC}" - echo "" - read -p " AppID: " QQ_APP_ID - echo "" - read -p " AppSecret: " QQ_APP_SECRET - echo "" - if [ -n "$QQ_APP_ID" ] && [ -n "$QQ_APP_SECRET" ]; then - echo -e " ${YELLOW}正在绑定 QQ 机器人...${NC}" - "$NODE_BIN" openclaw.mjs channels add --channel qqbot --token "${QQ_APP_ID}:${QQ_APP_SECRET}" 2>&1 || true - echo "" - read -p " 请输入你自己的 QQ 号(设置白名单,留空跳过): " QQ_ALLOW - if [ -n "$QQ_ALLOW" ]; then - "$NODE_BIN" openclaw.mjs config set channels.qqbot.allowFrom "\"${QQ_ALLOW}\"" 2>&1 || true - echo -e " ${GREEN}白名单已设置: 仅 QQ ${QQ_ALLOW} 可访问${NC}" - fi - echo "" - echo -e " ${GREEN}QQ 机器人配置完成!${NC}" - echo -e " ${YELLOW}请重启网关后生效(主菜单选 [4] 或 [17])${NC}" - else - echo -e " ${YELLOW}已取消:AppID 或 AppSecret 为空。${NC}" - fi - fi - fi - ;; - c) - echo -e " ${CYAN}配置微信(社区插件)${NC}" - echo "" - echo " 安装微信插件:" - echo " openclaw plugins install @icesword760/openclaw-wechat" - echo "" - echo " 基于 iPad 协议,支持:" - echo " - 文字消息" - echo " - 图片发送" - echo " - 文件传输" - echo " - 关键词触发对话" - echo "" - echo " 仓库: https://github.com/icesword0760/openclaw-wechat" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - echo -e " ${YELLOW}正在安装微信插件...${NC}" - "$NODE_BIN" openclaw.mjs plugins install @icesword760/openclaw-wechat 2>&1 || \ - echo -e " ${YELLOW}安装失败,请手动安装${NC}" - ;; - d|e) - echo -e " ${YELLOW}该平台正在开发中,敬请期待${NC}" - echo " 可关注 u-claw.org 获取最新进展" - ;; - f) - echo -e " ${CYAN}配置 Telegram${NC}" - echo "" - echo " 步骤:" - echo " 1. 在 Telegram 中找 @BotFather" - echo " 2. 发送 /newbot 创建机器人" - echo " 3. 获取 Bot Token" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs onboard 2>&1 || true - ;; - g) - echo -e " ${CYAN}配置 Discord${NC}" - echo "" - echo " 步骤:" - echo " 1. 访问 https://discord.com/developers/applications" - echo " 2. 创建 Application -> Bot" - echo " 3. 获取 Bot Token" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs onboard 2>&1 || true - ;; - h|i) - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs onboard 2>&1 || true - ;; - *) - echo -e " ${YELLOW}无效选择${NC}" - ;; - esac -} - -# [7] 设置国内镜像 -do_mirror() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 设置国内镜像源 ━━━${NC}" - echo "" - - # npm 镜像 - echo -e " ${YELLOW}设置 npm 淘宝镜像...${NC}" - "$NODE_BIN" "$NPM_BIN" config set registry https://registry.npmmirror.com --location=project 2>/dev/null - cd "$OPENCLAW_DIR" 2>/dev/null - "$NODE_BIN" "$NPM_BIN" config set registry https://registry.npmmirror.com --location=project 2>/dev/null - echo -e " ${GREEN}npm 镜像已设置: registry.npmmirror.com${NC}" - - # 创建 .npmrc - NPMRC="$OPENCLAW_DIR/.npmrc" - if ! grep -q "npmmirror" "$NPMRC" 2>/dev/null; then - echo "" >> "$NPMRC" - echo "registry=https://registry.npmmirror.com" >> "$NPMRC" - fi - - echo "" - echo -e " ${GREEN}国内镜像配置完成!${NC}" - echo " 后续 npm install 将自动使用淘宝镜像" -} - -# [8] 诊断修复 -do_doctor() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 诊断修复 ━━━${NC}" - echo "" - echo -e " ${GREEN}💡 提示: 选 [17] 可打开网页控制台,在浏览器中查看完整状态${NC}" - echo "" - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs doctor --repair 2>&1 || \ - echo -e " ${YELLOW}如果 doctor 无法运行,请先完成安装步骤${NC}" -} - -# [9] 备份 -do_backup() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 备份当前状态 ━━━${NC}" - echo "" - - BACKUP_DIR="$UCLAW_DIR/backups" - TIMESTAMP=$(date +%Y%m%d_%H%M%S) - BACKUP_NAME="backup_${TIMESTAMP}" - BACKUP_PATH="$BACKUP_DIR/$BACKUP_NAME" - - mkdir -p "$BACKUP_PATH" - - echo -e " ${YELLOW}备份中...${NC}" - - # 备份配置 - if [ -f "$OPENCLAW_DIR/.env" ]; then - cp "$OPENCLAW_DIR/.env" "$BACKUP_PATH/.env" - echo -e " ${GREEN} ✓ .env 配置${NC}" - fi - - # 备份 OpenClaw 状态 - if [ -d "$HOME/.openclaw" ]; then - mkdir -p "$BACKUP_PATH/openclaw-state" - cp -R "$HOME/.openclaw/openclaw.json" "$BACKUP_PATH/openclaw-state/" 2>/dev/null || true - cp -R "$HOME/.openclaw/credentials" "$BACKUP_PATH/openclaw-state/" 2>/dev/null || true - echo -e " ${GREEN} ✓ OpenClaw 状态和凭据${NC}" - fi - - # 备份 U-Claw 用户数据 - if [ -d "$UCLAW_DIR/memory" ] && [ "$(ls -A "$UCLAW_DIR/memory" 2>/dev/null)" ]; then - cp -R "$UCLAW_DIR/memory" "$BACKUP_PATH/" - echo -e " ${GREEN} ✓ 记忆文件${NC}" - fi - if [ -d "$UCLAW_DIR/persona" ] && [ "$(ls -A "$UCLAW_DIR/persona" 2>/dev/null)" ]; then - cp -R "$UCLAW_DIR/persona" "$BACKUP_PATH/" - echo -e " ${GREEN} ✓ 人格配置${NC}" - fi - - # 备份已安装的版本 - if [ -d "$HOME/.uclaw/openclaw" ]; then - cp "$HOME/.uclaw/openclaw/.env" "$BACKUP_PATH/installed-env" 2>/dev/null || true - echo -e " ${GREEN} ✓ 已安装版本配置${NC}" - fi - - BACKUP_SIZE=$(du -sh "$BACKUP_PATH" | cut -f1) - echo "" - echo -e " ${GREEN}备份完成!${NC}" - echo " 位置: $BACKUP_PATH" - echo " 大小: $BACKUP_SIZE" - echo "" - - # 显示所有备份 - echo " 所有备份:" - ls -1 "$BACKUP_DIR" 2>/dev/null | while read -r b; do - echo " - $b" - done -} - -# [10] 恢复备份 -do_restore() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 恢复备份 ━━━${NC}" - echo "" - - BACKUP_DIR="$UCLAW_DIR/backups" - if [ ! -d "$BACKUP_DIR" ] || [ -z "$(ls -A "$BACKUP_DIR" 2>/dev/null)" ]; then - echo -e " ${YELLOW}没有找到任何备份${NC}" - echo " 请先使用 [9] 创建备份" - return - fi - - echo " 可用备份:" - echo "" - local i=1 - for b in "$BACKUP_DIR"/*/; do - local bname=$(basename "$b") - local bsize=$(du -sh "$b" | cut -f1) - echo -e " ${GREEN}[$i]${NC} $bname ($bsize)" - i=$((i+1)) - done - echo "" - read -p " 选择要恢复的备份编号: " RESTORE_NUM - - local j=1 - local RESTORE_PATH="" - for b in "$BACKUP_DIR"/*/; do - if [ "$j" = "$RESTORE_NUM" ]; then - RESTORE_PATH="$b" - break - fi - j=$((j+1)) - done - - if [ -z "$RESTORE_PATH" ]; then - echo -e " ${RED}无效选择${NC}" - return - fi - - echo "" - echo -e " ${YELLOW}正在恢复 $(basename "$RESTORE_PATH")...${NC}" - - # 恢复 .env - if [ -f "$RESTORE_PATH/.env" ]; then - cp "$RESTORE_PATH/.env" "$OPENCLAW_DIR/.env" - echo -e " ${GREEN} ✓ .env 已恢复${NC}" - fi - - # 恢复 OpenClaw 状态 - if [ -d "$RESTORE_PATH/openclaw-state" ]; then - mkdir -p "$HOME/.openclaw" - cp -R "$RESTORE_PATH/openclaw-state/"* "$HOME/.openclaw/" 2>/dev/null || true - echo -e " ${GREEN} ✓ OpenClaw 状态已恢复${NC}" - fi - - # 恢复用户数据 - if [ -d "$RESTORE_PATH/memory" ]; then - cp -R "$RESTORE_PATH/memory" "$UCLAW_DIR/" - echo -e " ${GREEN} ✓ 记忆文件已恢复${NC}" - fi - if [ -d "$RESTORE_PATH/persona" ]; then - cp -R "$RESTORE_PATH/persona" "$UCLAW_DIR/" - echo -e " ${GREEN} ✓ 人格配置已恢复${NC}" - fi - - echo "" - echo -e " ${GREEN}恢复完成!${NC}" -} - -# [11] 重置 -do_reset() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 重置 OpenClaw ━━━${NC}" - echo "" - echo -e " ${RED}警告: 重置将清除配置和状态数据${NC}" - echo "" - echo -e " ${GREEN}[1]${NC} 仅重置配置(保留凭据和会话)" - echo -e " ${YELLOW}[2]${NC} 重置配置 + 凭据 + 会话(保留工作区)" - echo -e " ${RED}[3]${NC} 完全重置(恢复出厂状态)" - echo -e " ${DIM}[0]${NC} 取消" - echo "" - read -p " 选择重置级别: " -n 1 RESET_CHOICE - echo "" - - case $RESET_CHOICE in - 1) - echo "" - echo -e " ${YELLOW}建议先备份! 是否先创建备份? (y/n)${NC}" - read -n 1 DO_BACKUP - echo "" - [ "$DO_BACKUP" = "y" ] && do_backup - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs reset --scope config 2>&1 || true - ;; - 2) - echo "" - echo -e " ${YELLOW}建议先备份! 是否先创建备份? (y/n)${NC}" - read -n 1 DO_BACKUP - echo "" - [ "$DO_BACKUP" = "y" ] && do_backup - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs reset --scope config+creds+sessions 2>&1 || true - ;; - 3) - echo "" - echo -e " ${RED}确定要完全重置吗? 输入 YES 确认:${NC} " - read CONFIRM - if [ "$CONFIRM" = "YES" ]; then - do_backup - ensure_deps - cd "$OPENCLAW_DIR" - "$NODE_BIN" openclaw.mjs reset --scope full 2>&1 || true - echo -e " ${GREEN}已恢复出厂状态${NC}" - else - echo " 已取消" - fi - ;; - *) - echo " 已取消" - ;; - esac -} - -# [12] 清理 -do_cleanup() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 清理缓存和临时文件 ━━━${NC}" - echo "" - - FREED=0 - - # 清理 npm 缓存 - echo -e " ${YELLOW}清理 npm 缓存...${NC}" - CACHE_SIZE=$("$NODE_BIN" "$NPM_BIN" cache ls 2>/dev/null | wc -l || echo 0) - "$NODE_BIN" "$NPM_BIN" cache clean --force 2>/dev/null || true - echo -e " ${GREEN} ✓ npm 缓存已清理${NC}" - - # 清理 Node.js 编译缓存 - if [ -d "$HOME/.cache/node" ]; then - NSIZE=$(du -sm "$HOME/.cache/node" 2>/dev/null | cut -f1) - rm -rf "$HOME/.cache/node" - echo -e " ${GREEN} ✓ Node 编译缓存已清理 (${NSIZE}MB)${NC}" - fi - - # 清理 OpenClaw 日志 - if [ -d "$HOME/.openclaw/logs" ]; then - LSIZE=$(du -sm "$HOME/.openclaw/logs" 2>/dev/null | cut -f1) - rm -rf "$HOME/.openclaw/logs" - echo -e " ${GREEN} ✓ 日志已清理 (${LSIZE:-0}MB)${NC}" - fi - - echo "" - echo -e " ${GREEN}清理完成!${NC}" -} - -# [13] 技能浏览器 -do_skills_browser() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 预装技能浏览器(52个,已离线可用)━━━${NC}" - echo "" - echo -e " ${WHITE}${BOLD} 效率 & 编程${NC}" - echo -e " ${GREEN} github${NC} GitHub 操作(Issues/PR/代码审查/CI)" - echo -e " ${GREEN} gh-issues${NC} 获取 Issues 并分配 Agent 修复" - echo -e " ${GREEN} coding-agent${NC} 委派编程任务给 Codex/Claude/Pi" - echo -e " ${GREEN} summarize${NC} 总结文本/网页/播客/视频" - echo -e " ${GREEN} nano-pdf${NC} 自然语言编辑 PDF" - echo -e " ${GREEN} clawhub${NC} 搜索安装更多社区技能" - echo -e " ${GREEN} skill-creator${NC} 创建自定义技能" - echo "" - echo -e " ${WHITE}${BOLD} 笔记 & 任务管理${NC}" - echo -e " ${GREEN} apple-notes${NC} Apple 备忘录(创建/搜索/编辑)" - echo -e " ${GREEN} apple-reminders${NC} Apple 提醒事项" - echo -e " ${GREEN} obsidian${NC} Obsidian 笔记操作" - echo -e " ${GREEN} notion${NC} Notion 页面和数据库" - echo -e " ${GREEN} things-mac${NC} Things 3 任务管理 (macOS)" - echo -e " ${GREEN} trello${NC} Trello 看板操作" - echo -e " ${GREEN} bear-notes${NC} Bear 笔记" - echo "" - echo -e " ${WHITE}${BOLD} AI & 创作${NC}" - echo -e " ${GREEN} openai-image-gen${NC} AI 图片生成" - echo -e " ${GREEN} openai-whisper${NC} 语音转文字(本地)" - echo -e " ${GREEN} openai-whisper-api${NC} 语音转文字(API)" - echo -e " ${GREEN} gemini${NC} Gemini 一键问答" - echo -e " ${GREEN} sag${NC} ElevenLabs 文字转语音" - echo -e " ${GREEN} sherpa-onnx-tts${NC} 本地离线文字转语音" - echo -e " ${GREEN} nano-banana-pro${NC} Gemini 3 图片生成" - echo "" - echo -e " ${WHITE}${BOLD} 通讯 & 社交${NC}" - echo -e " ${GREEN} himalaya${NC} 邮件收发(IMAP/SMTP)" - echo -e " ${GREEN} discord${NC} Discord 消息操作" - echo -e " ${GREEN} slack${NC} Slack 消息操作" - echo -e " ${GREEN} wacli${NC} WhatsApp 消息和历史" - echo -e " ${GREEN} imsg${NC} iMessage/SMS" - echo -e " ${GREEN} xurl${NC} X (Twitter) API" - echo "" - echo -e " ${WHITE}${BOLD} 系统 & 工具${NC}" - echo -e " ${GREEN} weather${NC} 天气查询" - echo -e " ${GREEN} peekaboo${NC} macOS 屏幕截图和 UI 自动化" - echo -e " ${GREEN} tmux${NC} 远程终端管理" - echo -e " ${GREEN} healthcheck${NC} 系统安全检查" - echo -e " ${GREEN} 1password${NC} 1Password 密码管理" - echo -e " ${GREEN} video-frames${NC} 视频截帧 (ffmpeg)" - echo -e " ${GREEN} session-logs${NC} 会话日志搜索分析" - echo -e " ${GREEN} mcporter${NC} MCP 服务管理" - echo "" - echo -e " ${WHITE}${BOLD} 智能家居 & IoT${NC}" - echo -e " ${GREEN} openhue${NC} Philips Hue 灯光控制" - echo -e " ${GREEN} sonoscli${NC} Sonos 音箱控制" - echo -e " ${GREEN} eightctl${NC} Eight Sleep 智能床垫" - echo -e " ${GREEN} camsnap${NC} 摄像头截图/录像" - echo "" - echo -e " ${DIM} 提示: 这些技能已全部预装在 U 盘中,无需联网下载${NC}" - echo -e " ${DIM} 使用: 在 OpenClaw 中直接说 \"帮我查天气\" 或 \"帮我发邮件\" 即可${NC}" - echo -e " ${DIM} 更多: 运行 openclaw 后输入 /skills 查看详情${NC}" -} - -# [14] 中国用户指南 -do_china_guide() { - echo "" - if [ -f "$UCLAW_DIR/中国用户指南.txt" ]; then - cat "$UCLAW_DIR/中国用户指南.txt" - else - echo " 指南文件不存在" - fi -} - -# [15] 使用说明 -do_readme() { - echo "" - if [ -f "$UCLAW_DIR/使用说明.txt" ]; then - cat "$UCLAW_DIR/使用说明.txt" - else - echo " 使用说明文件不存在" - fi -} - -# [16] 系统信息 -do_sysinfo() { - echo "" - echo -e " ${CYAN}${BOLD}━━━ 系统信息 ━━━${NC}" - echo "" - echo " 操作系统: $(sw_vers -productName 2>/dev/null || uname -s) $(sw_vers -productVersion 2>/dev/null || uname -r)" - echo " CPU架构: $(uname -m)" - echo " 内存: $(sysctl -n hw.memsize 2>/dev/null | awk '{printf "%.1f GB", $1/1024/1024/1024}' || echo '未知')" - echo " Node.js: $($NODE_BIN --version 2>/dev/null || echo '未找到')" - echo " npm: $($NODE_BIN $NPM_BIN --version 2>/dev/null || echo '未找到')" - echo "" - echo " U-Claw 路径: $UCLAW_DIR" - echo " U-Claw 大小: $(du -sh "$UCLAW_DIR" 2>/dev/null | cut -f1)" - echo "" - if [ -d "$HOME/.uclaw" ]; then - echo " 已安装路径: $HOME/.uclaw" - echo " 已安装大小: $(du -sh "$HOME/.uclaw" 2>/dev/null | cut -f1)" - else - echo " 电脑安装: 未安装" - fi - echo "" - if [ -d "$HOME/.openclaw" ]; then - echo " OpenClaw 状态: $HOME/.openclaw" - echo " 状态大小: $(du -sh "$HOME/.openclaw" 2>/dev/null | cut -f1)" - fi - echo "" - echo " 磁盘空间: $(df -h "$UCLAW_DIR" 2>/dev/null | tail -1 | awk '{print $4 " 可用 / " $2 " 总计"}')" -} - -# 主循环 -while true; do - show_menu - read -p " 请选择 [0-16]: " CHOICE - echo "" - - case $CHOICE in - 1) do_install ;; - 2) do_npm_install ;; - 3) do_build ;; - 4) do_run ;; - 5) do_china_models ;; - 6) do_china_channels ;; - 7) do_mirror ;; - 8) do_doctor ;; - 9) do_backup ;; - 10) do_restore ;; - 11) do_reset ;; - 12) do_cleanup ;; - 13) do_skills_browser ;; - 14) do_china_guide ;; - 15) do_readme ;; - 16) do_sysinfo ;; - 17) do_dashboard ;; - 0) - echo -e " ${CYAN}再见! 🦞${NC}" - echo "" - exit 0 - ;; - *) - echo -e " ${RED}无效选择,请输入 0-17${NC}" - ;; - esac - - echo "" - read -p " 按回车键返回主菜单..." -done diff --git a/uclaw-scripts/Mac-安装到电脑.command b/uclaw-scripts/Mac-安装到电脑.command deleted file mode 100644 index 36f31f6..0000000 --- a/uclaw-scripts/Mac-安装到电脑.command +++ /dev/null @@ -1,184 +0,0 @@ -#!/bin/bash -# ============================================================ -# U-Claw 虾盘 - macOS 安装到电脑 -# 将 OpenClaw 及运行环境永久安装到电脑上 -# ============================================================ - -set -euo pipefail - -UCLAW_DIR="$(cd "$(dirname "$0")" && pwd)" -INSTALL_DIR="$HOME/.uclaw" - -GREEN='\033[0;32m' -CYAN='\033[0;36m' -RED='\033[0;31m' -YELLOW='\033[1;33m' -NC='\033[0m' - -run_with_spinner() { - local message="$1" - shift - local tmp_log - tmp_log="$(mktemp -t uclaw-install.XXXXXX)" - "$@" >"$tmp_log" 2>&1 & - local cmd_pid=$! - local frames='|/-\' - local i=0 - - while kill -0 "$cmd_pid" 2>/dev/null; do - local frame="${frames:i%4:1}" - printf "\r %b[%s]%b %s" "$CYAN" "$frame" "$NC" "$message" - i=$((i + 1)) - sleep 0.2 - done - - wait "$cmd_pid" - local status=$? - printf "\r" - - if [ $status -ne 0 ]; then - echo -e " ${RED}安装步骤失败:${message}${NC}" - sed -n '1,120p' "$tmp_log" - rm -f "$tmp_log" - exit $status - fi - - echo -e " ${GREEN}完成${NC} ${message}" - rm -f "$tmp_log" -} - -copy_tree_quiet() { - local src="$1" - local dst="$2" - mkdir -p "$dst" - ( - export COPYFILE_DISABLE=1 - cd "$src" - tar --exclude='.DS_Store' --exclude='._*' -cf - . - ) | ( - cd "$dst" - tar -xpf - - ) -} - -clear -echo "" -echo -e "${CYAN}" -echo " ╔══════════════════════════════════════╗" -echo " ║ U-Claw 安装到电脑 ║" -echo " ║ OpenClaw 永久安装 ║" -echo " ╚══════════════════════════════════════╝" -echo -e "${NC}" -echo "" -echo " 安装位置: $INSTALL_DIR" -echo " 安装内容: Node.js + OpenClaw + 所有依赖" -echo "" -echo -e " ${YELLOW}安全提醒: 这会把 OpenClaw 和配置写入当前电脑。${NC}" -echo -e " ${YELLOW}如果这是老电脑、共享电脑、公司电脑或临时机器,${NC}" -echo -e " ${YELLOW}更推荐回到主菜单选择「直接从 U 盘运行」。${NC}" -echo "" -read -p " 是否继续安装? (y/n) " -n 1 -r -echo "" -echo "" - -if [[ ! $REPLY =~ ^[Yy]$ ]]; then - echo " 已取消安装" - exit 0 -fi - -ARCH=$(uname -m) -if [ "$ARCH" = "arm64" ]; then - NODE_SRC="$UCLAW_DIR/runtime/node-mac-arm64" - echo -e " ${GREEN}Apple Silicon (M系列)${NC}" -else - NODE_SRC="$UCLAW_DIR/runtime/node-mac-x64" - echo -e " ${GREEN}Intel Mac${NC}" -fi - -echo -e " ${CYAN}[1/4] 创建安装目录...${NC}" -mkdir -p "$INSTALL_DIR" - -echo -e " ${CYAN}[2/4] 安装 Node.js 运行环境...${NC}" -rm -rf "$INSTALL_DIR/node" -mkdir -p "$INSTALL_DIR/node" -run_with_spinner "复制 Node.js 运行环境..." copy_tree_quiet "$NODE_SRC" "$INSTALL_DIR/node" -if [ ! -x "$INSTALL_DIR/node/bin/node" ]; then - echo -e " ${RED}Node.js 安装失败:$INSTALL_DIR/node/bin/node 不存在${NC}" - echo -e " ${YELLOW}请先确认 U 盘复制完成,再重新运行安装。${NC}" - exit 1 -fi -NODE_VERSION_INSTALLED="$("$INSTALL_DIR/node/bin/node" --version)" -echo -e " ${GREEN}Node.js ${NODE_VERSION_INSTALLED} 已安装${NC}" - -echo -e " ${CYAN}[3/4] 安装 OpenClaw...${NC}" -echo -e " ${YELLOW}这一步会复制约 861M 文件,首次安装通常需要 3-10 分钟,请耐心等待...${NC}" -if [ -d "$INSTALL_DIR/openclaw" ] && [ -f "$INSTALL_DIR/openclaw/.env" ]; then - cp "$INSTALL_DIR/openclaw/.env" "/tmp/.uclaw-env-backup" 2>/dev/null || true -fi -rm -rf "$INSTALL_DIR/openclaw" -mkdir -p "$INSTALL_DIR/openclaw" -run_with_spinner "复制 OpenClaw 主程序和依赖..." copy_tree_quiet "$UCLAW_DIR/openclaw" "$INSTALL_DIR/openclaw" -if [ -f "/tmp/.uclaw-env-backup" ]; then - cp "/tmp/.uclaw-env-backup" "$INSTALL_DIR/openclaw/.env" - rm -f "/tmp/.uclaw-env-backup" -fi - -# 复制用户数据 -[ -d "$UCLAW_DIR/memory" ] && [ "$(ls -A "$UCLAW_DIR/memory" 2>/dev/null)" ] && cp -R "$UCLAW_DIR/memory" "$INSTALL_DIR/" -[ -d "$UCLAW_DIR/persona" ] && [ "$(ls -A "$UCLAW_DIR/persona" 2>/dev/null)" ] && cp -R "$UCLAW_DIR/persona" "$INSTALL_DIR/" - -echo -e " ${CYAN}[4/4] 配置环境变量...${NC}" - -SHELL_RC="$HOME/.zshrc" -[ ! -f "$SHELL_RC" ] && SHELL_RC="$HOME/.bashrc" -[ ! -f "$SHELL_RC" ] && SHELL_RC="$HOME/.bash_profile" - -if ! grep -q ".uclaw/node/bin" "$SHELL_RC" 2>/dev/null; then - echo "" >> "$SHELL_RC" - echo "# U-Claw OpenClaw" >> "$SHELL_RC" - echo 'export PATH="$HOME/.uclaw/node/bin:$PATH"' >> "$SHELL_RC" - echo "alias openclaw='\$HOME/.uclaw/node/bin/node \$HOME/.uclaw/openclaw/openclaw.mjs'" >> "$SHELL_RC" - echo -e " ${GREEN}已添加到 $SHELL_RC${NC}" -else - echo -e " ${YELLOW}PATH 已配置,跳过${NC}" -fi - -# 创建全局命令 -cat > "$INSTALL_DIR/uclaw" << 'SCRIPT' -#!/bin/bash -UCLAW_HOME="$HOME/.uclaw" -exec "$UCLAW_HOME/node/bin/node" "$UCLAW_HOME/openclaw/openclaw.mjs" "$@" -SCRIPT -chmod +x "$INSTALL_DIR/uclaw" - -LOCAL_BIN="$HOME/.local/bin" -mkdir -p "$LOCAL_BIN" -ln -sf "$INSTALL_DIR/uclaw" "$LOCAL_BIN/uclaw" -ln -sf "$INSTALL_DIR/uclaw" "$LOCAL_BIN/openclaw" - -if [ -d "/usr/local/bin" ] && [ -w "/usr/local/bin" ]; then - ln -sf "$INSTALL_DIR/uclaw" /usr/local/bin/uclaw 2>/dev/null || true - ln -sf "$INSTALL_DIR/uclaw" /usr/local/bin/openclaw 2>/dev/null || true - echo -e " ${GREEN}已创建全局命令: uclaw / openclaw${NC}" -else - echo -e " ${GREEN}已创建用户命令: $LOCAL_BIN/uclaw / $LOCAL_BIN/openclaw${NC}" - echo -e " ${YELLOW}如需系统级命令,可运行 sudo ln -sf $INSTALL_DIR/uclaw /usr/local/bin/uclaw${NC}" -fi - -echo "" -echo -e " ${GREEN}╔══════════════════════════════════════╗${NC}" -echo -e " ${GREEN}║ 安装完成! ║${NC}" -echo -e " ${GREEN}╚══════════════════════════════════════╝${NC}" -echo "" -echo " 安装位置: $INSTALL_DIR" -echo " Node.js: ${NODE_VERSION_INSTALLED}" -echo "" -echo " 使用方法:" -echo " 1. 打开新的终端窗口" -echo " 2. 运行: openclaw onboard --install-daemon" -echo " 3. 配置完成后运行: openclaw dashboard" -echo "" -echo " 小白用户推荐:" -echo " 先按引导完成首次配置,再打开网页控制台" -echo "" -read -p " 按回车键关闭..." diff --git a/uclaw-scripts/README.txt b/uclaw-scripts/README.txt new file mode 100644 index 0000000..212185d --- /dev/null +++ b/uclaw-scripts/README.txt @@ -0,0 +1,51 @@ +======================================== + U-Claw 虾盘 v1.1 + 插上就能用的 AI 助手 + u-claw.org +======================================== + +【使用方法】 + + Mac 用户: 双击 Mac-Install.command + Windows 用户: 双击 Windows-Install.bat + + 就这一步!浏览器会自动打开。 + 脚本会把 U-Claw 解压到你的电脑(约2分钟),然后自动启动。 + +======================================== + +【常见问题】 + + Q: Mac 提示"无法验证开发者"怎么办? + A: 右键点击脚本 → 选择"打开" → 再点"打开" + + Q: Windows 弹出安全警告怎么办? + A: 点击"更多信息" → 点击"仍要运行" + + Q: 安装到哪里了? + A: Mac: ~/U-Claw + Windows: C:\Users\你的用户名\U-Claw + + Q: 怎么配置 AI 模型和 API Key? + A: 启动后浏览器会自动打开配置页面,按提示操作即可 + + Q: 支持哪些 AI 模型? + A: DeepSeek、Kimi、通义千问、智谱GLM、MiniMax、豆包 + 全部国内直连,不需要翻墙 + + Q: 怎么升级? + A: 重新运行安装脚本,选择"重新安装" + 你的配置和记忆会保留在 data/ 文件夹里 + + Q: Toolkit 文件夹是什么? + A: 给工程师的 DIY 素材包(Node.js + 源码),普通用户不需要 + +======================================== + +【联系我们】 + + 微信: hecare888 + 官网: u-claw.org + GitHub: github.com/dongsheng123132/u-claw + +======================================== diff --git a/uclaw-scripts/Windows-安装并启动.bat b/uclaw-scripts/Windows-Install.bat similarity index 57% rename from uclaw-scripts/Windows-安装并启动.bat rename to uclaw-scripts/Windows-Install.bat index 89e3c04..626fab4 100644 --- a/uclaw-scripts/Windows-安装并启动.bat +++ b/uclaw-scripts/Windows-Install.bat @@ -1,17 +1,17 @@ @echo off chcp 65001 >/dev/null 2>&1 -title U-Claw - Install and Launch +title U-Claw - Extract and Launch echo. echo ======================================== echo U-Claw v1.1 -echo Install and Launch (Windows) +echo Extract and Launch (Windows) echo ======================================== echo. -set "USB_DIR=%~dp0" -set "ARCHIVE=%USB_DIR%U-Claw.tar.gz" -set "INSTALL_DIR=%USERPROFILE%\U-Claw" +set "SCRIPT_DIR=%~dp0" +set "ARCHIVE=%SCRIPT_DIR%U-Claw.tar.gz" +set "INSTALL_DIR=%SCRIPT_DIR%U-Claw" REM Check archive if not exist "%ARCHIVE%" ( @@ -22,17 +22,17 @@ if not exist "%ARCHIVE%" ( exit /b 1 ) -REM Check if already installed +REM Check if already extracted if exist "%INSTALL_DIR%\app\core\node_modules" ( - echo U-Claw already installed at: %INSTALL_DIR% + echo U-Claw already extracted at: %INSTALL_DIR% echo. echo [1] Launch directly (skip extract) - echo [2] Reinstall (overwrite) + echo [2] Re-extract (overwrite) echo. set /p choice=" Choose [1/2, default 1]: " if "%choice%"=="2" ( echo. - echo Reinstalling... + echo Re-extracting... rmdir /s /q "%INSTALL_DIR%" >/dev/null 2>&1 ) else ( echo. @@ -43,26 +43,22 @@ if exist "%INSTALL_DIR%\app\core\node_modules" ( REM Extract echo. -echo Extracting U-Claw to %INSTALL_DIR% ... -echo This may take 1-2 minutes... +echo Extracting U-Claw to: %INSTALL_DIR% +echo This may take a few minutes... echo. where tar >/dev/null 2>&1 if %errorlevel%==0 ( - cd /d "%USERPROFILE%" + cd /d "%SCRIPT_DIR%" tar xzf "%ARCHIVE%" if %errorlevel% neq 0 ( echo Extract failed! Please extract U-Claw.tar.gz manually - echo using 7-Zip or WinRAR to %USERPROFILE% pause exit /b 1 ) ) else ( - echo tar command not available on this Windows version - echo Please extract U-Claw.tar.gz manually using 7-Zip or WinRAR - echo Extract to: %USERPROFILE% - echo. - echo Then run: %INSTALL_DIR%\Windows-Start.bat + echo tar not available. Please extract U-Claw.tar.gz manually + echo using 7-Zip or WinRAR to this directory. pause exit /b 1 ) @@ -71,7 +67,6 @@ echo Extract complete! echo. :start -REM Launch OpenClaw echo Starting OpenClaw... echo. diff --git a/uclaw-scripts/Windows-从U盘启动.bat b/uclaw-scripts/Windows-从U盘启动.bat deleted file mode 100644 index b92a105..0000000 --- a/uclaw-scripts/Windows-从U盘启动.bat +++ /dev/null @@ -1,88 +0,0 @@ -@echo off -chcp 65001 >nul 2>&1 -title U-Claw - OpenClaw Launcher - -echo. -echo ======================================== -echo U-Claw v1.1 -echo OpenClaw One-Click Launcher (Windows) -echo ======================================== -echo. -echo Recommended: temporary PC / no local install -echo. - -set "UCLAW_DIR=%~dp0" -set "OPENCLAW_DIR=%UCLAW_DIR%openclaw" -set "NODE_DIR=%UCLAW_DIR%runtime\node-win-x64" -set "NODE_BIN=%NODE_DIR%\node.exe" -set "NPM_BIN=%NODE_DIR%\npm.cmd" -set "PORTABLE_HOME=%UCLAW_DIR%portable-home" -set "PORTABLE_STATE_DIR=%PORTABLE_HOME%\.openclaw" -set "PORTABLE_CONFIG_PATH=%PORTABLE_STATE_DIR%\openclaw.json" - -set "OPENCLAW_HOME=%PORTABLE_HOME%" -set "OPENCLAW_STATE_DIR=%PORTABLE_STATE_DIR%" -set "OPENCLAW_CONFIG_PATH=%PORTABLE_CONFIG_PATH%" - -if not exist "%PORTABLE_STATE_DIR%" mkdir "%PORTABLE_STATE_DIR%" - -if not exist "%NODE_BIN%" ( - echo [ERROR] Node.js not found - echo Please ensure runtime\node-win-x64 directory is complete - echo. - pause - exit /b 1 -) - -for /f "tokens=*" %%v in ('"%NODE_BIN%" --version') do set NODE_VER=%%v -echo Node.js: %NODE_VER% -echo. - -set "PATH=%NODE_DIR%;%NODE_DIR%\node_modules\.bin;%PATH%" - -if not exist "%OPENCLAW_DIR%\node_modules" ( - echo First run - installing dependencies... - echo Using China mirror, please wait... - echo. - cd /d "%OPENCLAW_DIR%" - call "%NPM_BIN%" install --registry=https://registry.npmmirror.com - echo. - echo Dependencies installed! - echo. -) - -if not exist "%OPENCLAW_DIR%\dist" ( - echo First run - building... - cd /d "%OPENCLAW_DIR%" - call "%NPM_BIN%" run build - echo. -) - -cd /d "%OPENCLAW_DIR%" - -REM First run: auto-create minimal config (skip onboard) -if not exist "%PORTABLE_CONFIG_PATH%" ( - echo First run - initializing config... - if not exist "%PORTABLE_STATE_DIR%" mkdir "%PORTABLE_STATE_DIR%" - echo {"gateway":{"mode":"local","auth":{"token":"uclaw"}}} > "%PORTABLE_CONFIG_PATH%" - echo Config initialized - echo. -) - -echo Starting OpenClaw... -echo DO NOT close this window! -echo. -echo ---------------------------------------- -echo Browser will open automatically. -echo First time setup in web console: -echo 1. Choose AI model (DeepSeek / Kimi / Qwen) -echo 2. Connect chat platform (QQ / Feishu / DingTalk) -echo ---------------------------------------- -echo. - -start "" http://127.0.0.1:18789/#token=uclaw -"%NODE_BIN%" openclaw.mjs gateway run --allow-unconfigured --force - -echo. -echo OpenClaw stopped. You can safely remove the USB drive. -pause diff --git a/uclaw-scripts/Windows-全部功能.bat b/uclaw-scripts/Windows-全部功能.bat deleted file mode 100644 index 14e7f3c..0000000 --- a/uclaw-scripts/Windows-全部功能.bat +++ /dev/null @@ -1,495 +0,0 @@ -@echo off -chcp 65001 >nul 2>&1 -title U-Claw 虾盘 - 启动菜单 -setlocal enabledelayedexpansion - -set "UCLAW_DIR=%~dp0" -set "OPENCLAW_DIR=%UCLAW_DIR%openclaw" -set "NODE_DIR=%UCLAW_DIR%runtime\node-win-x64" -set "NODE_BIN=%NODE_DIR%\node.exe" -set "NPM_BIN=%NODE_DIR%\npm.cmd" -set "PORTABLE_HOME=%UCLAW_DIR%portable-home" -set "PORTABLE_STATE_DIR=%PORTABLE_HOME%\.openclaw" -set "PORTABLE_CONFIG_PATH=%PORTABLE_STATE_DIR%\openclaw.json" - -set "OPENCLAW_HOME=%PORTABLE_HOME%" -set "OPENCLAW_STATE_DIR=%PORTABLE_STATE_DIR%" -set "OPENCLAW_CONFIG_PATH=%PORTABLE_CONFIG_PATH%" -set "PATH=%NODE_DIR%;%PATH%" - -if not exist "%PORTABLE_STATE_DIR%" mkdir "%PORTABLE_STATE_DIR%" - -goto MENU - -:MENU -cls -echo. -echo ╔════════════════════════════════════════════════════════╗ -echo ║ ║ -echo ║ U-Claw 虾盘 v1.1 ║ -echo ║ OpenClaw AI 助手 一键安装盘 ║ -echo ║ ║ -echo ║ 专为中国用户优化 · 免翻墙 · 离线安装 ║ -echo ║ ║ -echo ╠════════════════════════════════════════════════════════╣ -echo ║ ║ - -:: 状态检测 -for /f "tokens=*" %%v in ('"%NODE_BIN%" --version 2^>nul') do set "NODE_VER=%%v" -set "ST_MOD=未安装" -set "ST_BUILD=未构建" -set "ST_INST=未安装" -set "ST_PORT=未配置" -if exist "%OPENCLAW_DIR%\node_modules" set "ST_MOD=已安装" -if exist "%OPENCLAW_DIR%\dist" set "ST_BUILD=已构建" -if exist "%USERPROFILE%\.uclaw\openclaw" set "ST_INST=已安装" -if exist "%PORTABLE_CONFIG_PATH%" set "ST_PORT=已配置" - -echo ║ 系统: x64 ^| Node: %NODE_VER% ║ -echo ║ 依赖: %ST_MOD% ^| 构建: %ST_BUILD% ║ -echo ║ 便携配置: %ST_PORT% ^| 电脑安装: %ST_INST% ║ -echo ║ ║ -echo ╠════════════════════════════════════════════════════════╣ -echo. -echo ---- 安装 ----------------------------------------- -echo. -echo [1] 安装 OpenClaw 到本机(仅限自己的电脑) -echo [2] 仅安装依赖(npm install) -echo [3] 仅构建项目(npm build) -echo [4] 直接从 U 盘运行(配置也保存在 U 盘里) -echo. -echo ---- 中国优化 ------------------------------------- -echo. -echo [5] 首次配置向导(选模型、选平台、填 API Key) -echo [6] 配置中国聊天平台(QQ Bot/飞书/微信) -echo [7] 设置国内镜像源 -echo. -echo ---- 维护工具 ------------------------------------- -echo. -echo [8] 诊断修复(openclaw doctor) -echo [9] 备份当前状态 -echo [10] 恢复备份 -echo [11] 重置 OpenClaw(恢复出厂) -echo [12] 清理缓存和临时文件 -echo. -echo ---- 其他 ----------------------------------------- -echo. -echo [13] 浏览预装技能(58个,已离线可用) -echo [14] 中国用户快速上手指南 -echo [15] 查看使用说明 -echo [16] 系统信息 -echo [17] 打开本地网页控制台 -echo [0] 退出 -echo. -echo ╚════════════════════════════════════════════════════════╝ -echo. - -set /p CHOICE=" 请选择 [0-17]: " - -if "%CHOICE%"=="1" goto INSTALL -if "%CHOICE%"=="2" goto NPM_INSTALL -if "%CHOICE%"=="3" goto BUILD -if "%CHOICE%"=="4" goto RUN -if "%CHOICE%"=="5" goto CHINA_MODELS -if "%CHOICE%"=="6" goto CHINA_CHANNELS -if "%CHOICE%"=="7" goto MIRROR -if "%CHOICE%"=="8" goto DOCTOR -if "%CHOICE%"=="9" goto BACKUP -if "%CHOICE%"=="10" goto RESTORE -if "%CHOICE%"=="11" goto RESET -if "%CHOICE%"=="12" goto CLEANUP -if "%CHOICE%"=="13" goto SKILLS -if "%CHOICE%"=="14" goto CHINA_GUIDE -if "%CHOICE%"=="15" goto README -if "%CHOICE%"=="16" goto SYSINFO -if "%CHOICE%"=="17" goto DASHBOARD -if "%CHOICE%"=="0" goto EXIT - -echo 无效选择 -pause -goto MENU - -:INSTALL -echo. -echo === 安装 OpenClaw 到电脑 === -echo. -echo 提醒:如果这是临时电脑、公司电脑或别人的电脑, -echo 更推荐返回主菜单选择 [4] 从 U 盘运行。 -echo. -call "%UCLAW_DIR%安装到电脑.bat" -pause -goto MENU - -:NPM_INSTALL -echo. -echo === 安装 npm 依赖 === -echo. -cd /d "%OPENCLAW_DIR%" -call "%NPM_BIN%" install --registry=https://registry.npmmirror.com -echo. -echo 依赖安装完成! -pause -goto MENU - -:BUILD -echo. -echo === 构建 OpenClaw === -echo. -if not exist "%OPENCLAW_DIR%\node_modules" ( - echo 先安装依赖... - cd /d "%OPENCLAW_DIR%" - call "%NPM_BIN%" install --registry=https://registry.npmmirror.com -) -cd /d "%OPENCLAW_DIR%" -call "%NPM_BIN%" run build -echo. -echo 构建完成! -pause -goto MENU - -:RUN -echo. -echo === 从 U 盘启动 OpenClaw === -echo. -echo 便携模式:配置、状态、记忆都会写在这只 U 盘里。 -echo 拔掉 U 盘后当前会话会结束,但换一台电脑再插上还能继续用。 -echo. -if not exist "%OPENCLAW_DIR%\node_modules" ( - echo 先安装依赖... - cd /d "%OPENCLAW_DIR%" - call "%NPM_BIN%" install --registry=https://registry.npmmirror.com -) -if not exist "%OPENCLAW_DIR%\dist" ( - echo 先构建... - cd /d "%OPENCLAW_DIR%" - call "%NPM_BIN%" run build -) -cd /d "%OPENCLAW_DIR%" -if not exist "%PORTABLE_CONFIG_PATH%" ( - echo 检测到你还没有完成首次配置。 - echo 首次配置会保存在 U 盘中,不会写进这台电脑。 - echo. - set /p DO_ONBOARD=" 现在开始首次配置? (y/n) " - if /i "!DO_ONBOARD!"=="y" ( - "%NODE_BIN%" openclaw.mjs onboard - echo. - echo 首次配置完成,已保存到 U 盘。 - ) -) else ( - echo 正在启动网关服务... - echo 此窗口不要关闭,关闭后服务会停止。 - echo. - "%NODE_BIN%" openclaw.mjs gateway run --allow-unconfigured --force -) -pause -goto MENU - -:CHINA_MODELS -echo. -echo === 首次配置向导 === -echo. -echo 国产模型选择提示: -echo. -echo DeepSeek → 选 Custom Provider -echo Base URL: https://api.deepseek.com/v1 -echo 模型名: deepseek-chat -echo Kimi → 选 Moonshot AI -echo 通义千问 → 选 Qwen -echo MiniMax → 选 MiniMax -echo 豆包 → 选 Volcano Engine -echo. -echo 按方向键上下滚动列表,回车确认 -echo. -if not exist "%OPENCLAW_DIR%\node_modules" ( - cd /d "%OPENCLAW_DIR%" - call "%NPM_BIN%" install --registry=https://registry.npmmirror.com -) -cd /d "%OPENCLAW_DIR%" -"%NODE_BIN%" openclaw.mjs onboard -pause -goto MENU - -:CHINA_CHANNELS -echo. -echo === 配置中国聊天平台 === -echo. -echo [a] 飞书 Feishu/Lark — 已内置,企业首选 -echo [b] QQ(腾讯官方)★推荐 — 3条命令,1分钟,免费免翻墙 -echo [c] 微信(社区插件) — iPad协议 -echo [d] Telegram — 推荐,简单好用 -echo. -set /p CH=" 请选择 (a-d): " - -if not exist "%OPENCLAW_DIR%\node_modules" ( - cd /d "%OPENCLAW_DIR%" - call "%NPM_BIN%" install --registry=https://registry.npmmirror.com -) -cd /d "%OPENCLAW_DIR%" - -if /i "%CH%"=="a" ( - echo. - echo 配置飞书 Feishu - echo 1. 访问 https://open.feishu.cn/app 创建应用 - echo 2. 获取 App ID 和 App Secret - echo 3. 配置事件订阅和权限 - echo. - "%NODE_BIN%" openclaw.mjs onboard -) -if /i "%CH%"=="b" ( - echo. - echo 配置 QQ(腾讯官方接入) - echo. - echo 这是国内最简单的 AI 助手接入方式! - echo 全程 1 分钟,完全免费,无需翻墙。 - echo. - echo 1. 扫码注册: http://q.qq.com/qqbot/openclaw/login.html - echo 2. 点击「创建机器人」,获取 AppID 和 AppSecret - echo. - if exist "%OPENCLAW_DIR%\dist" ( - set /p DO_QQ=" 是否现在安装 QQ 插件? (y/n) " - if /i "!DO_QQ!"=="y" ( - echo. - echo 正在安装 QQ 插件... - "%NODE_BIN%" openclaw.mjs plugins install @sliverp/qqbot@latest - echo. - set /p QQ_APP_ID=" AppID: " - echo. - set /p QQ_APP_SECRET=" AppSecret: " - echo. - if not "!QQ_APP_ID!"=="" if not "!QQ_APP_SECRET!"=="" ( - echo 正在绑定 QQ 机器人... - "%NODE_BIN%" openclaw.mjs channels add --channel qqbot --token "!QQ_APP_ID!:!QQ_APP_SECRET!" - echo. - set /p QQ_ALLOW=" 请输入你自己的 QQ 号(设置白名单,留空跳过): " - if not "!QQ_ALLOW!"=="" ( - "%NODE_BIN%" openclaw.mjs config set channels.qqbot.allowFrom "\"!QQ_ALLOW!\"" - echo 白名单已设置 - ) - echo. - echo QQ 机器人配置完成! - echo 请重启网关后生效(主菜单选 [4] 或 [17]) - ) - ) - ) -) -if /i "%CH%"=="c" ( - echo. - echo 配置微信(社区插件) - echo 安装微信插件: - "%NODE_BIN%" openclaw.mjs plugins install @icesword760/openclaw-wechat -) -if /i "%CH%"=="d" ( - echo. - echo 配置 Telegram - echo 1. 在 Telegram 中找 @BotFather - echo 2. 发送 /newbot 创建机器人 - echo 3. 获取 Bot Token - echo. - "%NODE_BIN%" openclaw.mjs onboard -) -pause -goto MENU - -:MIRROR -echo. -echo === 设置国内镜像源 === -echo. -cd /d "%OPENCLAW_DIR%" -call "%NPM_BIN%" config set registry https://registry.npmmirror.com --location=project -echo npm 镜像已设置: registry.npmmirror.com -pause -goto MENU - -:DOCTOR -echo. -echo === 诊断修复 === -echo. -echo 提示: 选 [17] 可打开网页控制台,在浏览器中查看完整状态 -echo. -if not exist "%OPENCLAW_DIR%\node_modules" ( - cd /d "%OPENCLAW_DIR%" - call "%NPM_BIN%" install --registry=https://registry.npmmirror.com -) -cd /d "%OPENCLAW_DIR%" -"%NODE_BIN%" openclaw.mjs doctor --repair -pause -goto MENU - -:BACKUP -echo. -echo === 备份当前状态 === -echo. -set "TIMESTAMP=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%" -set "TIMESTAMP=%TIMESTAMP: =0%" -set "BACKUP_DIR=%UCLAW_DIR%backups\backup_%TIMESTAMP%" -mkdir "%BACKUP_DIR%" 2>nul - -if exist "%PORTABLE_STATE_DIR%" ( - xcopy "%PORTABLE_STATE_DIR%" "%BACKUP_DIR%\portable-state\" /e /i /q >nul 2>&1 - echo [OK] 便携模式状态已备份 -) -if exist "%OPENCLAW_DIR%\.env" ( - copy "%OPENCLAW_DIR%\.env" "%BACKUP_DIR%\.env" >nul - echo [OK] .env 配置已备份 -) - -echo. -echo 备份完成! 位置: %BACKUP_DIR% -pause -goto MENU - -:RESTORE -echo. -echo === 恢复备份 === -echo. -set "BACKUP_BASE=%UCLAW_DIR%backups" -if not exist "%BACKUP_BASE%" ( - echo 没有找到任何备份 - pause - goto MENU -) -echo 可用备份: -dir /b "%BACKUP_BASE%" 2>nul -echo. -set /p RESTORE_NAME=" 输入备份名称: " -set "RESTORE_PATH=%BACKUP_BASE%\%RESTORE_NAME%" - -if not exist "%RESTORE_PATH%" ( - echo 备份不存在 - pause - goto MENU -) - -if exist "%RESTORE_PATH%\portable-state" ( - xcopy "%RESTORE_PATH%\portable-state" "%PORTABLE_STATE_DIR%\" /e /i /q /y >nul 2>&1 - echo [OK] 便携模式状态已恢复 -) -if exist "%RESTORE_PATH%\.env" ( - copy "%RESTORE_PATH%\.env" "%OPENCLAW_DIR%\.env" >nul - echo [OK] .env 已恢复 -) - -echo. -echo 恢复完成! -pause -goto MENU - -:RESET -echo. -echo === 重置 OpenClaw === -echo. -echo [1] 仅重置配置(保留凭据) -echo [2] 重置配置+凭据+会话 -echo [3] 完全重置(恢复出厂) -echo [0] 取消 -echo. -set /p RESET_CHOICE=" 选择重置级别: " - -if "%RESET_CHOICE%"=="0" goto MENU -if not exist "%OPENCLAW_DIR%\node_modules" ( - cd /d "%OPENCLAW_DIR%" - call "%NPM_BIN%" install --registry=https://registry.npmmirror.com -) -cd /d "%OPENCLAW_DIR%" - -if "%RESET_CHOICE%"=="1" "%NODE_BIN%" openclaw.mjs reset --scope config -if "%RESET_CHOICE%"=="2" "%NODE_BIN%" openclaw.mjs reset --scope config+creds+sessions -if "%RESET_CHOICE%"=="3" ( - set /p CONFIRM=" 确定完全重置? 输入 YES 确认: " - if "!CONFIRM!"=="YES" "%NODE_BIN%" openclaw.mjs reset --scope full -) -pause -goto MENU - -:CLEANUP -echo. -echo === 清理缓存 === -echo. -call "%NPM_BIN%" cache clean --force 2>nul -echo npm 缓存已清理 -if exist "%PORTABLE_STATE_DIR%\logs" ( - rmdir /s /q "%PORTABLE_STATE_DIR%\logs" 2>nul - echo 日志已清理 -) -echo. -echo 清理完成! -pause -goto MENU - -:SKILLS -echo. -echo === 预装技能 === -echo. -if not exist "%OPENCLAW_DIR%\node_modules" ( - cd /d "%OPENCLAW_DIR%" - call "%NPM_BIN%" install --registry=https://registry.npmmirror.com -) -cd /d "%OPENCLAW_DIR%" -"%NODE_BIN%" openclaw.mjs plugins list -pause -goto MENU - -:CHINA_GUIDE -echo. -if exist "%UCLAW_DIR%中国用户指南.txt" ( - type "%UCLAW_DIR%中国用户指南.txt" -) else ( - echo 指南文件不存在 -) -pause -goto MENU - -:README -echo. -if exist "%UCLAW_DIR%使用说明.txt" ( - type "%UCLAW_DIR%使用说明.txt" -) else ( - echo 使用说明文件不存在 -) -pause -goto MENU - -:SYSINFO -echo. -echo === 系统信息 === -echo. -echo 操作系统: %OS% -echo 处理器: %PROCESSOR_ARCHITECTURE% -echo Node.js: %NODE_VER% -echo U-Claw 路径: %UCLAW_DIR% -echo 便携配置: %ST_PORT% -echo. -if exist "%USERPROFILE%\.uclaw" ( - echo 已安装路径: %USERPROFILE%\.uclaw -) else ( - echo 电脑安装: 未安装 -) -echo. -pause -goto MENU - -:DASHBOARD -echo. -echo === 启动网关 + 打开网页控制台 === -echo. -if not exist "%PORTABLE_CONFIG_PATH%" ( - echo 你还没有完成便携配置。请先选 [4] 从 U 盘运行。 - pause - goto MENU -) -if not exist "%OPENCLAW_DIR%\node_modules" ( - cd /d "%OPENCLAW_DIR%" - call "%NPM_BIN%" install --registry=https://registry.npmmirror.com -) -cd /d "%OPENCLAW_DIR%" -echo 此窗口不要关闭,关闭后服务会停止。 -echo. -"%NODE_BIN%" openclaw.mjs gateway run --allow-unconfigured --force -pause -goto MENU - -:EXIT -echo. -echo 再见! -echo. -exit /b 0 diff --git a/uclaw-scripts/Windows-安装到电脑.bat b/uclaw-scripts/Windows-安装到电脑.bat deleted file mode 100644 index b0b13bf..0000000 --- a/uclaw-scripts/Windows-安装到电脑.bat +++ /dev/null @@ -1,111 +0,0 @@ -@echo off -chcp 65001 >nul 2>&1 -title U-Claw 虾盘 - 安装 OpenClaw 到电脑 - -echo. -echo ╔══════════════════════════════════════╗ -echo ║ U-Claw 虾盘 v1.1 ║ -echo ║ OpenClaw 永久安装 (Windows) ║ -echo ╚══════════════════════════════════════╝ -echo. - -set "UCLAW_DIR=%~dp0" -set "INSTALL_DIR=%USERPROFILE%\.uclaw" - -echo 安装位置: %INSTALL_DIR% -echo 安装内容: Node.js + OpenClaw + 所有依赖 -echo. -echo [安全提醒] 这会把 OpenClaw 和配置写入当前电脑。 -echo 如果这是老电脑、共享电脑、公司电脑或临时机器, -echo 更推荐回到主菜单选择「直接从 U 盘运行」。 -echo. -set /p CONFIRM=" 是否继续安装? (y/n) " -if /i not "%CONFIRM%"=="y" ( - echo 已取消安装 - pause - exit /b 0 -) -echo. - -echo [1/4] 创建安装目录... -if not exist "%INSTALL_DIR%" mkdir "%INSTALL_DIR%" - -echo [2/4] 安装 Node.js 运行环境... -if exist "%INSTALL_DIR%\node" rmdir /s /q "%INSTALL_DIR%\node" -xcopy "%UCLAW_DIR%runtime\node-win-x64" "%INSTALL_DIR%\node\" /e /i /q >nul -if not exist "%INSTALL_DIR%\node\node.exe" ( - echo [错误] Node.js 安装失败 - echo 请确认 U 盘复制完成,再重新运行安装。 - pause - exit /b 1 -) -for /f "tokens=*" %%v in ('"%INSTALL_DIR%\node\node.exe" --version') do echo Node.js %%v 已安装 - -echo [3/4] 安装 OpenClaw... -echo 这一步会复制大量文件,首次安装通常需要 3-10 分钟,请耐心等待... -if exist "%INSTALL_DIR%\openclaw" rmdir /s /q "%INSTALL_DIR%\openclaw" -xcopy "%UCLAW_DIR%openclaw" "%INSTALL_DIR%\openclaw\" /e /i /q >nul - -if exist "%UCLAW_DIR%memory" xcopy "%UCLAW_DIR%memory" "%INSTALL_DIR%\memory\" /e /i /q >nul 2>&1 -if exist "%UCLAW_DIR%persona" xcopy "%UCLAW_DIR%persona" "%INSTALL_DIR%\persona\" /e /i /q >nul 2>&1 - -echo [4/4] 配置环境变量... - -( -echo @echo off -echo set "UCLAW_HOME=%%USERPROFILE%%\.uclaw" -echo "%%UCLAW_HOME%%\node\node.exe" "%%UCLAW_HOME%%\openclaw\openclaw.mjs" %%* -) > "%INSTALL_DIR%\uclaw.cmd" - -( -echo @echo off -echo set "UCLAW_HOME=%%USERPROFILE%%\.uclaw" -echo "%%UCLAW_HOME%%\node\node.exe" "%%UCLAW_HOME%%\openclaw\openclaw.mjs" %%* -) > "%INSTALL_DIR%\openclaw.cmd" - -echo. -echo 正在添加到系统 PATH... -set "CURRENT_PATH=" -for /f "tokens=2*" %%a in ('reg query "HKCU\Environment" /v PATH 2^>nul') do set "CURRENT_PATH=%%b" - -echo %CURRENT_PATH% | findstr /i ".uclaw" >nul 2>&1 -if errorlevel 1 ( - REM 检查 PATH 是否为空(全新账户) - if not defined CURRENT_PATH ( - setx PATH "%INSTALL_DIR%;%INSTALL_DIR%\node" >nul 2>&1 - ) else ( - REM 检查 setx 1024 字符限制 - set "NEW_PATH=%INSTALL_DIR%;%INSTALL_DIR%\node;%CURRENT_PATH%" - setlocal enabledelayedexpansion - if "!NEW_PATH:~1024,1!" neq "" ( - echo [警告] PATH 超过 1024 字符,setx 会截断! - echo 请手动添加以下路径到系统 PATH: - echo %INSTALL_DIR% - echo %INSTALL_DIR%\node - endlocal - ) else ( - endlocal - setx PATH "%INSTALL_DIR%;%INSTALL_DIR%\node;%CURRENT_PATH%" >nul 2>&1 - ) - ) - echo 已添加到用户 PATH -) else ( - echo PATH 已配置,跳过 -) - -echo. -echo ╔══════════════════════════════════════╗ -echo ║ 安装完成! ║ -echo ╚══════════════════════════════════════╝ -echo. -echo 安装位置: %INSTALL_DIR% -echo. -echo 使用方法: -echo 1. 打开新的命令提示符或 PowerShell -echo 2. 运行: openclaw onboard --install-daemon -echo 3. 配置完成后运行: openclaw dashboard -echo. -echo 小白用户推荐: -echo 先按引导完成首次配置,再打开网页控制台 -echo. -pause diff --git a/uclaw-scripts/中国用户指南.txt b/uclaw-scripts/中国用户指南.txt deleted file mode 100644 index 47ceb73..0000000 --- a/uclaw-scripts/中国用户指南.txt +++ /dev/null @@ -1,156 +0,0 @@ -╔══════════════════════════════════════════════════════════╗ -║ ║ -║ U-Claw 虾盘 — 中国用户快速上手指南 ║ -║ ║ -╚══════════════════════════════════════════════════════════╝ - - -第一步:选择 AI 模型 -══════════════════════ - -OpenClaw 支持大量国产模型,以下是推荐: - -1. DeepSeek(深度求索)—— 推荐首选 - - 便宜好用,编程能力强 - - 注册: https://platform.deepseek.com/ - - 免费额度: 有 - -2. Kimi(月之暗面)—— 超长上下文 - - 256K 上下文,适合长文档 - - 注册: https://platform.moonshot.cn/ - - 免费额度: 有 - -3. 通义千问 Qwen(阿里)—— 免费额度最大 - - 注册: https://dashscope.console.aliyun.com/ - - 免费额度: 非常多 - -4. 智谱 GLM(清华系)—— 学术场景强 - - 注册: https://open.bigmodel.cn/ - - 免费额度: 有 - -5. MiniMax —— 语音和多模态强 - - 注册: https://platform.minimaxi.com/ - -6. 豆包 Doubao(字节跳动)—— 火山引擎 - - 注册: https://console.volcengine.com/ark - -7. 百度千帆 —— 百度智能云 - - 注册: https://console.bce.baidu.com/qianfan/ - -8. 小米 Mimo - - 注册: https://dev.mi.com/mimo - -在启动菜单选 [5] 即可一键配置 - - -第二步:选择聊天平台 -══════════════════════ - -让 AI 接入你的聊天工具: - -已内置: - - QQ(腾讯官方)★ — 国内首选!3条命令搞定,免费免翻墙 - - 飞书 Feishu — 企业首选,功能最全 - - Telegram — 海外推荐 - - Discord — 游戏/社区 - - WhatsApp — 海外用户 - - Slack — 外企用户 - -QQ 接入方法(腾讯官方,1分钟搞定): - 1. 扫码注册: http://q.qq.com/qqbot/openclaw/login.html - 2. 点击"创建机器人",获取 AppID 和 AppSecret - 3. 运行 3 条命令: - openclaw plugins install @sliverp/qqbot@latest - openclaw channels add --channel qqbot --token "AppID:AppSecret" - openclaw gateway restart - 4. 安全: 记得设置白名单 openclaw config set channels.qqbot.allowFrom "你的QQ号" - 详见: 启动菜单 [6] 中国聊天平台 - -微信接入: - - 社区插件: openclaw plugins install @icesword760/openclaw-wechat - - 基于 iPad 协议,支持文字/图片/文件 - - -第三步:常用技能(Skills) -══════════════════════════ - -U-Claw 已预装 52 个技能,以下是最实用的: - -【效率工具】 - - github — GitHub 操作(Issues/PR/代码审查) - - coding-agent — 委派编程任务给其他 AI - - summarize — 总结文本/网页/播客 - - nano-pdf — 自然语言编辑 PDF - -【笔记 & 任务】 - - apple-notes — Apple 备忘录自动化 - - obsidian — Obsidian 笔记操作 - - notion — Notion 页面和数据库 - - apple-reminders— Apple 提醒事项 - - things-mac — Things 3 任务管理 - - trello — Trello 看板 - -【AI & 创作】 - - openai-image-gen — AI 图片生成 - - openai-whisper — 语音转文字 - - gemini — Gemini 一键问答 - - sag — ElevenLabs 文字转语音 - -【通讯】 - - himalaya — 邮件收发(IMAP/SMTP) - - discord — Discord 消息操作 - - slack — Slack 消息操作 - - wacli — WhatsApp 消息 - -【系统 & 搜索】 - - weather — 天气查询 - - peekaboo — macOS 屏幕截图和自动化 - - tmux — 远程终端管理 - - clawhub — 搜索安装更多技能 - -使用方法: 在 OpenClaw 对话中直接说 "帮我查天气" 或 "帮我发邮件" 即可 - - -第四步:日常使用场景 -══════════════════════ - -场景1: 编程助手 - "帮我写一个 Python 脚本,批量重命名文件" - "审查这个 PR: #123" - -场景2: 内容创作 - "帮我总结这篇文章: [URL]" - "帮我生成一张关于AI的图片" - -场景3: 日常办公 - "帮我发邮件给 xxx@example.com,主题是..." - "帮我在 Notion 创建一个新页面" - "提醒我明天下午3点开会" - -场景4: 信息查询 - "今天深圳天气怎么样?" - "帮我搜索 GitHub 上最新的 AI 项目" - -场景5: 多平台 AI 助手 - 配置飞书/QQ/Telegram 后,直接在聊天中 @AI 即可 - - -遇到问题? -══════════════════════ - -1. 插 U 盘,双击「启动菜单」 -2. 选 [8] 诊断修复 -3. 如果修不好,选 [11] 重置 -4. 重置前会自动提醒你备份 - -安全提醒: - - 老电脑、共享电脑、公司电脑、临时借用电脑 - 更推荐直接从 U 盘运行 - - 尽量不要把 OpenClaw 和配置安装到不受你控制的本机里 - - 直接从 U 盘运行时,配置和记忆会保存在 U 盘中 - - 同一只 U 盘换一台电脑继续插上,仍然能接着用 - - 但运行过程中不要拔盘,拔掉后当前会话会结束 - -加入社区: - - u-claw.org - - GitHub: github.com/dongsheng123132/u-claw diff --git a/uclaw-scripts/使用说明.txt b/uclaw-scripts/使用说明.txt deleted file mode 100644 index 0974e07..0000000 --- a/uclaw-scripts/使用说明.txt +++ /dev/null @@ -1,123 +0,0 @@ -╔══════════════════════════════════════════════════════════╗ -║ ║ -║ U-Claw 虾盘 v1.0 ║ -║ OpenClaw 离线安装 U 盘 ║ -║ ║ -║ by OpenClaw Community ║ -║ u-claw.org ║ -║ ║ -╚══════════════════════════════════════════════════════════╝ - -什么是 U-Claw? -═══════════════ -U-Claw 虾盘是 OpenClaw(开源 AI 助手)的离线安装包。 -就像当年的"雨林木风"Windows 光盘一样, -把所有依赖打包好,插上 U 盘就能用。 - -特别适合中国大陆用户 - 不需要访问 GitHub、npm 等海外服务。 - - -U 盘里有什么? -═══════════════ -U-Claw/ -├── 运行.command <- Mac 用户双击这个 -├── 运行.bat <- Windows 用户双击这个 -├── 安装到电脑.command <- Mac 永久安装 -├── 安装到电脑.bat <- Windows 永久安装 -├── runtime/ <- Node.js 运行环境 (Mac/Win) -├── openclaw/ <- OpenClaw 源码 + 依赖 -├── memory/ <- AI 记忆文件 -├── persona/ <- AI 人格配置 -├── skills/ <- AI 技能 -└── 使用说明.txt <- 你正在看的这个 - - -快速开始 -═══════════════ - -【方式一:直接从 U 盘运行(推荐)】 - - Mac 用户: - 1. 插入 U 盘 - 2. 打开 U-Claw 文件夹 - 3. 双击 "运行.command" - 4. 如果提示"无法打开",右键 -> 打开 - 5. 等待启动完成 - - Windows 用户: - 1. 插入 U 盘 - 2. 打开 U-Claw 文件夹 - 3. 双击 "运行.bat" - 4. 等待启动完成 - - 首次运行可能需要几分钟检查环境(主要文件已预打包) - 首次配置、记忆和状态会直接保存在这只 U 盘里 - 回家再插到另一台电脑,仍然可以继续使用同一套配置 - 如果是老电脑、共享电脑、公司电脑、临时借来的电脑, - 强烈建议用这种方式,不要安装到本机。 - - 注意: - 1. 便携模式运行时,U 盘不能拔掉 - 2. 拔掉 U 盘后,这次运行就会结束 - 3. 但下次把同一只 U 盘插到别的电脑上,仍可继续运行 - - -【方式二:安装到电脑(仅推荐你自己的电脑)】 - - Mac 用户: - 1. 双击 "安装到电脑.command" - 2. 按提示操作 - 3. 安装后在终端输入 openclaw 即可使用 - - Windows 用户: - 1. 双击 "安装到电脑.bat" - 2. 按提示操作 - 3. 安装后在命令提示符输入 openclaw 即可使用 - - 安装位置: ~/.uclaw/ (Mac) 或 %USERPROFILE%\.uclaw\ (Win) - 注意: 这会把程序和配置写入本机。 - 如果不是你自己的长期使用电脑,请尽量不要选这个方式。 - - -系统要求 -═══════════════ -- macOS 12+ (Intel 或 Apple Silicon) -- Windows 10/11 (64位) -- 内存: 2GB 以上(推荐 4GB+) -- 磁盘: 2GB 可用空间 - - -更新方法 -═══════════════ -下载新版 U-Claw,重新运行 "安装到电脑" 即可覆盖更新。 -你的记忆文件和配置会自动保留。 - - -常见问题 -═══════════════ - -Q: Mac 提示"无法打开,因为它来自身份不明的开发者" -A: 右键点击文件 -> 选择 "打开" -> 再点 "打开" - -Q: Windows 提示"Windows 已保护你的电脑" -A: 点击 "更多信息" -> "仍要运行" - -Q: 运行报错 "Node.js v22+ is required" -A: U-Claw 自带 Node.js,请确保从 U-Claw 文件夹内启动 - -Q: 如何配置 AI 模型的 API Key? -A: 运行 openclaw 后按引导配置,或编辑 openclaw/.env 文件 - -Q: 能换电脑继续用吗? -A: 可以。使用「直接从 U 盘运行」时,配置和状态保存在 U 盘里。 - 同一只 U 盘插到另一台兼容电脑上,可以继续使用。 - -Q: 能离线使用吗? -A: OpenClaw 本身需要联网调用 AI API(如 Claude、DeepSeek)。 - 但安装过程完全离线,不需要访问 GitHub 或 npm。 - - -获取帮助 -═══════════════ -- OpenClaw 官方: https://github.com/openclaw/openclaw -- U-Claw 项目: https://u-claw.org diff --git a/小红书二维码.jpg b/小红书二维码.jpg deleted file mode 100644 index 8735c1f..0000000 Binary files a/小红书二维码.jpg and /dev/null differ diff --git a/微信二维码.jpg b/微信二维码.jpg deleted file mode 100644 index af269b1..0000000 Binary files a/微信二维码.jpg and /dev/null differ