diff --git a/README.md b/README.md index 2af72ff..91ebde0 100644 --- a/README.md +++ b/README.md @@ -1,142 +1,74 @@ # 🦞 U-Claw -**AI 助手 U 盘制作工具 — 克隆代码,一键制作,双击就能用** +**AI 助手 U 盘 — 克隆、补依赖、拷到 U 盘、双击运行** [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -U-Claw 是一个开源工具集,帮你把 [OpenClaw](https://github.com/openclaw/openclaw) AI 助手打包成 U 盘。插上 U 盘双击运行,或从 U 盘安装到电脑。全部依赖从国内镜像下载,不需要翻墙。 +U-Claw 把 [OpenClaw](https://github.com/openclaw/openclaw) 打包成 U 盘便携版。这个代码库就是 U 盘里的全部内容,只是不上传大依赖(Node.js、node_modules)。运行 `setup.sh` 补齐依赖后,直接拷贝到 U 盘就能用。 --- -## 这个项目能做什么 - -| # | 功能 | 说明 | -|---|------|------| -| 1 | **制作 U 盘** | `build-usb.sh` 一键下载所有资源,打包成可拷贝到 U 盘的完整目录 | -| 2 | **免安装运行** | U 盘插上电脑,双击 `Mac-Start.command` 或 `Windows-Start.bat` 直接用 | -| 3 | **从 U 盘安装** | 双击 `Mac-Install.command` 或 `Windows-Install.bat`,离线安装到电脑 | -| 4 | **桌面 App** | Electron 桌面版,打包成 DMG/EXE 分发 | -| 5 | **文档 + 官网** | 使用指南、国内镜像说明、AI 模型配置教程 | - -## 快速开始 - -### 制作一个 U 盘(最常用) +## 使用方式 ```bash git clone https://github.com/dongsheng123132/u-claw.git cd u-claw/portable - -# 一键制作 U 盘(自动下载 Node.js + OpenClaw + QQ 插件,全部国内镜像) -bash build-usb.sh - -# 完成后把 usb-build/U-Claw/ 文件夹拷贝到 U 盘 +bash setup.sh # 补齐大依赖(Node.js + OpenClaw,国内镜像,约 1 分钟) ``` -`build-usb.sh` 自动完成: -1. 选择目标平台(Mac / Windows / 全部) -2. 从国内镜像下载 Node.js v22 -3. 安装 OpenClaw + QQ 插件 -4. 打包成可直接拷贝的目录 -5. 可选打包成 tar.gz - -### 在自己电脑上搭建(开发/测试) +**完成后 `portable/` 就是完整的 U 盘内容。** 拷贝到 U 盘即可: ```bash -cd u-claw/portable -bash setup.sh # 搭建运行环境 -bash Mac-Start.command # Mac 启动 -# 或 Windows-Start.bat # Windows 启动 +# Mac +cp -R portable/ /Volumes/你的U盘/U-Claw/ + +# 或直接在 Finder 拖过去 ``` ---- +## U 盘上能做什么 -## 项目结构 +| 功能 | Mac | Windows | 说明 | +|------|-----|---------|------| +| **免安装运行** | `Mac-Start.command` | `Windows-Start.bat` | 双击直接跑,不碰电脑 | +| **功能菜单** | `Mac-Menu.command` | `Windows-Menu.bat` | 配置、QQ、备份等 8 项 | +| **安装到电脑** | `Mac-Install.command` | `Windows-Install.bat` | 离线优先,缺啥走国内镜像 | +| **首次配置** | `Config.html` | `Config.html` | 浏览器打开,选模型填 Key | + +## U 盘文件结构 ``` -U-Claw/ -├── portable/ ← 🔥 U 盘核心 -│ ├── build-usb.sh ⭐ 一键制作 U 盘 -│ ├── setup.sh 开发者搭建脚本 -│ ├── Mac-Start.command Mac 免安装启动 -│ ├── Mac-Menu.command Mac 功能菜单(8 项) -│ ├── Mac-Install.command Mac 从 U 盘安装到电脑 -│ ├── Windows-Start.bat Windows 免安装启动 -│ ├── Windows-Menu.bat Windows 功能菜单 -│ ├── Windows-Install.bat Windows 从 U 盘安装到电脑 -│ ├── Config.html 首次配置页面 -│ ├── U-Claw.html 导航首页 -│ └── migrate.js 配置迁移工具 -│ -├── u-claw-app/ ← 🖥 桌面安装版(Electron) -│ ├── setup.sh / setup.bat 一键搭建开发环境 -│ ├── src/main.js Electron 主进程 -│ └── package.json 依赖 & 构建配置 -│ -├── website/ ← 🌐 官网 + 教程(u-claw.org) -│ ├── guide.html 使用指南(含国内镜像、搭建教程) -│ ├── index.html 官网首页 -│ └── skills.html 技能市场页 -│ -└── README.md -``` - -### U 盘上的文件(制作完成后) - -``` -U-Claw/ ← 拷贝到 U 盘 -├── Mac-Start.command 双击 = Mac 免安装运行 -├── Mac-Install.command 双击 = 安装到 Mac -├── Windows-Start.bat 双击 = Windows 免安装运行 -├── Windows-Install.bat 双击 = 安装到 Windows -├── Mac-Menu.command Mac 功能菜单 -├── Windows-Menu.bat Windows 功能菜单 -├── Config.html 配置页面 -├── app/ 运行时(~2.3GB) -│ ├── core/ OpenClaw + QQ 插件 +U-Claw/ ← 整个拷到 U 盘 +├── Mac-Start.command 双击 = Mac 免安装运行 +├── Mac-Menu.command 功能菜单(8 项) +├── Mac-Install.command 安装到 Mac +├── Windows-Start.bat 双击 = Windows 免安装运行 +├── Windows-Menu.bat 功能菜单 +├── Windows-Install.bat 安装到 Windows +├── Config.html 首次配置页面 +├── setup.sh 补齐依赖用(开发者用) +├── app/ ← 大依赖(setup.sh 下载,不进 git) +│ ├── core/ OpenClaw + QQ 插件 │ └── runtime/ -│ ├── node-mac-arm64/ Mac Apple Silicon -│ └── node-win-x64/ Windows 64-bit -└── data/ 用户数据 - ├── .openclaw/ 配置文件 - ├── memory/ AI 记忆 - └── backups/ 备份 +│ ├── node-mac-arm64/ Mac Apple Silicon +│ └── node-win-x64/ Windows 64-bit +└── data/ ← 用户数据(不进 git) + ├── .openclaw/ 配置文件 + ├── memory/ AI 记忆 + └── backups/ 备份 ``` -## U 盘上的两种用法 +**代码库 = U 盘内容 - 大依赖。** `app/` 和 `data/` 在 `.gitignore` 里。 -### 免安装运行(推荐) +## 桌面安装版(Electron App) -直接从 U 盘运行,不修改电脑任何文件。换电脑插上 U 盘,配置还在。 - -- Mac: 双击 `Mac-Start.command` -- Windows: 双击 `Windows-Start.bat` - -**适合:** 临时电脑、公司电脑、网吧、不想装东西 - -### 安装到电脑 - -从 U 盘安装到 `~/.uclaw/`,之后不需要 U 盘也能用。 - -- Mac: 双击 `Mac-Install.command` -- Windows: 双击 `Windows-Install.bat` - -安装逻辑: -1. 检查环境 → 缺什么先从 U 盘离线安装 -2. U 盘没有的 → 从国内镜像在线下载 -3. 创建启动脚本 → 以后双击 `~/.uclaw/start.command` 启动 - -## 桌面版(Electron App) +除了 U 盘便携版,还有桌面 App 版本: ```bash cd u-claw-app - -# 一键安装开发环境(国内镜像) -bash setup.sh # Mac/Linux -setup.bat # Windows - -# 打包 -npm run build:mac-arm64 # → release/*.dmg -npm run build:win # → release/*.exe +bash setup.sh # 一键安装开发环境(国内镜像) +npm run dev # 开发模式运行 +npm run build:mac-arm64 # 打包 → release/*.dmg +npm run build:win # 打包 → release/*.exe ``` ## 支持的 AI 模型 @@ -169,7 +101,7 @@ Claude · GPT · Gemini(需翻墙或中转) ## 国内镜像 -所有脚本默认使用国内镜像,无需翻墙: +所有脚本默认走国内镜像,无需翻墙: | 资源 | 镜像 | |------|------| @@ -177,13 +109,21 @@ Claude · GPT · Gemini(需翻墙或中转) | Node.js | `npmmirror.com/mirrors/node` | | Electron | `npmmirror.com/mirrors/electron` | -## 参与开发 +## 开发 & 测试 ```bash +# 克隆 git clone https://github.com/dongsheng123132/u-claw.git -cd u-claw/portable -bash setup.sh # 搭建开发环境 -bash Mac-Start.command # 测试启动 + +# 补依赖 +cd u-claw/portable && bash setup.sh + +# 测试启动 +bash Mac-Start.command # Mac +# 或 Windows-Start.bat # Windows + +# 测试没问题 → 拷到 U 盘 +# 有问题 → 修代码 → 重新测试 ``` ### 提交代码 @@ -209,18 +149,15 @@ git push -u origin feat/your-feature **Q: 需要翻墙吗?** 安装不需要。运行需要联网调 API,国产模型无需翻墙。 +**Q: U 盘需要多大?** +建议 4GB 以上(完整版约 2.3GB)。 + **Q: 能分发吗?** MIT 协议,随便复制。 **Q: Mac 提示"未验证的开发者"?** 右键脚本 → 打开。 -**Q: U 盘需要多大?** -建议 4GB 以上(完整版约 2.3GB)。 - -**Q: Windows 需要 WSL?** -不需要,自带 Windows 版 Node.js。 - ## License [MIT](LICENSE) diff --git a/portable/build-usb.sh b/portable/build-usb.sh deleted file mode 100755 index b9b093f..0000000 --- a/portable/build-usb.sh +++ /dev/null @@ -1,262 +0,0 @@ -#!/bin/bash -# ============================================================ -# U-Claw USB Builder - 一键制作 U 盘 -# 运行后自动下载所有依赖,打包成可直接拷贝到 U 盘的完整目录 -# ============================================================ - -set -e - -GREEN='\033[0;32m' -CYAN='\033[0;36m' -RED='\033[0;31m' -YELLOW='\033[1;33m' -NC='\033[0m' -BOLD='\033[1m' -DIM='\033[2m' - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_DIR="$(dirname "$SCRIPT_DIR")" -NODE_VER="v22.14.0" -MIRROR="https://registry.npmmirror.com" -NODE_MIRROR="https://npmmirror.com/mirrors/node" - -# Output directory -OUTPUT_DIR="$REPO_DIR/usb-build" -USB_DIR="$OUTPUT_DIR/U-Claw" - -clear -echo "" -echo -e "${CYAN}${BOLD}" -echo " ╔══════════════════════════════════════╗" -echo " ║ U-Claw USB Builder ║" -echo " ║ 一键制作 U 盘 ║" -echo " ╚══════════════════════════════════════╝" -echo -e "${NC}" -echo "" - -# ---- Detect platform ---- -OS=$(uname -s | tr '[:upper:]' '[:lower:]') -ARCH=$(uname -m) - -echo -e " ${BOLD}系统:${NC} $OS $ARCH" -echo "" - -# Ask which platforms to build for -echo -e " ${BOLD}选择要打包的平台:${NC}" -echo -e " ${GREEN}[1]${NC} 仅 Mac Apple Silicon (arm64)" -echo -e " ${GREEN}[2]${NC} 仅 Windows (x64)" -echo -e " ${GREEN}[3]${NC} Mac + Windows (全部)" -echo "" - -if [ -t 0 ]; then - read -p " 选择 [1-3, 默认 3]: " PLATFORM_CHOICE -else - PLATFORM_CHOICE="3" -fi -PLATFORM_CHOICE="${PLATFORM_CHOICE:-3}" - -BUILD_MAC=false -BUILD_WIN=false -case $PLATFORM_CHOICE in - 1) BUILD_MAC=true ;; - 2) BUILD_WIN=true ;; - *) BUILD_MAC=true; BUILD_WIN=true ;; -esac - -echo "" - -# ---- Clean previous build ---- -if [ -d "$USB_DIR" ]; then - echo -e " ${YELLOW}清理上次构建...${NC}" - rm -rf "$USB_DIR" -fi -mkdir -p "$USB_DIR" - -# ---- Step 1: Copy scripts and HTML ---- -echo -e " ${BOLD}[1/5] 复制脚本和页面...${NC}" - -# Copy all launch scripts and HTML pages -for f in Mac-Start.command Mac-Menu.command Windows-Start.bat Windows-Menu.bat \ - Config.html U-Claw.html SkillHub.html default-config.json migrate.js setup.sh; do - if [ -f "$SCRIPT_DIR/$f" ]; then - cp "$SCRIPT_DIR/$f" "$USB_DIR/" - echo -e " ${DIM} + $f${NC}" - fi -done - -# Make scripts executable -chmod +x "$USB_DIR"/*.command 2>/dev/null || true -chmod +x "$USB_DIR"/*.sh 2>/dev/null || true - -echo -e " ${GREEN}脚本复制完成 ✓${NC}" -echo "" - -# ---- Step 2: Create data directory structure ---- -echo -e " ${BOLD}[2/5] 创建数据目录...${NC}" - -mkdir -p "$USB_DIR/data/.openclaw" -mkdir -p "$USB_DIR/data/memory" -mkdir -p "$USB_DIR/data/backups" - -# Default config -cat > "$USB_DIR/data/.openclaw/openclaw.json" << 'CFGEOF' -{ - "gateway": { - "mode": "local", - "auth": { "token": "uclaw" } - } -} -CFGEOF - -echo -e " ${GREEN}数据目录创建完成 ✓${NC}" -echo "" - -# ---- Step 3: Download Node.js runtimes ---- -echo -e " ${BOLD}[3/5] 下载 Node.js 运行时...${NC}" - -download_node() { - local PLATFORM=$1 - local TARGET_DIR=$2 - - if [ -d "$TARGET_DIR" ] && [ -f "$TARGET_DIR/bin/node" -o -f "$TARGET_DIR/node.exe" ]; then - echo -e " ${GREEN}$PLATFORM 已存在,跳过${NC}" - return - fi - - mkdir -p "$TARGET_DIR" - - if echo "$PLATFORM" | grep -q "win"; then - local ZIPNAME="node-${NODE_VER}-${PLATFORM}.zip" - local URL="${NODE_MIRROR}/${NODE_VER}/${ZIPNAME}" - echo -e " ${CYAN}下载 $ZIPNAME...${NC}" - curl -# -L "$URL" -o "/tmp/$ZIPNAME" - - # Unzip - local TMPEXTRACT="/tmp/node-extract-$$" - mkdir -p "$TMPEXTRACT" - unzip -q "/tmp/$ZIPNAME" -d "$TMPEXTRACT" - cp -R "$TMPEXTRACT"/node-${NODE_VER}-${PLATFORM}/* "$TARGET_DIR/" - rm -rf "$TMPEXTRACT" "/tmp/$ZIPNAME" - else - local TARBALL="node-${NODE_VER}-${PLATFORM}.tar.gz" - local URL="${NODE_MIRROR}/${NODE_VER}/${TARBALL}" - echo -e " ${CYAN}下载 $TARBALL...${NC}" - curl -# -L "$URL" -o "/tmp/$TARBALL" - tar -xzf "/tmp/$TARBALL" -C "$TARGET_DIR" --strip-components=1 - rm -f "/tmp/$TARBALL" - chmod +x "$TARGET_DIR/bin/node" - fi - - echo -e " ${GREEN}$PLATFORM 下载完成 ✓${NC}" -} - -RUNTIME_DIR="$USB_DIR/app/runtime" -mkdir -p "$RUNTIME_DIR" - -if $BUILD_MAC; then - download_node "darwin-arm64" "$RUNTIME_DIR/node-mac-arm64" -fi - -if $BUILD_WIN; then - download_node "win-x64" "$RUNTIME_DIR/node-win-x64" -fi - -echo "" - -# ---- Step 4: Install OpenClaw + plugins ---- -echo -e " ${BOLD}[4/5] 安装 OpenClaw + QQ 插件...${NC}" - -CORE_DIR="$USB_DIR/app/core" -mkdir -p "$CORE_DIR" - -# Determine which Node.js to use for npm install -if $BUILD_MAC && [ -f "$RUNTIME_DIR/node-mac-arm64/bin/node" ]; then - INSTALL_NODE="$RUNTIME_DIR/node-mac-arm64/bin/node" - INSTALL_NPM="$RUNTIME_DIR/node-mac-arm64/bin/npm" -elif command -v node >/dev/null 2>&1; then - INSTALL_NODE="node" - INSTALL_NPM="npm" -else - echo -e " ${RED}没有可用的 Node.js,无法安装依赖${NC}" - exit 1 -fi - -# Create package.json -cat > "$CORE_DIR/package.json" << 'PKGEOF' -{ - "name": "u-claw-core", - "version": "1.0.0", - "private": true, - "dependencies": { - "openclaw": "latest" - } -} -PKGEOF - -echo -e " ${CYAN}安装 OpenClaw (国内镜像)...${NC}" -cd "$CORE_DIR" -"$INSTALL_NODE" "$INSTALL_NPM" install --registry="$MIRROR" 2>&1 | tail -3 - -# Install QQ plugin -echo -e " ${CYAN}安装 QQ 插件...${NC}" -"$INSTALL_NODE" "$INSTALL_NPM" install @sliverp/qqbot@latest --registry="$MIRROR" 2>&1 | tail -2 - -echo -e " ${GREEN}OpenClaw + QQ 插件安装完成 ✓${NC}" -echo "" - -# ---- Step 5: Calculate size and finish ---- -echo -e " ${BOLD}[5/5] 完成!${NC}" -echo "" - -USB_SIZE=$(du -sh "$USB_DIR" | cut -f1) -FILE_COUNT=$(find "$USB_DIR" -type f | wc -l | tr -d ' ') - -echo -e " ${GREEN}${BOLD}╔══════════════════════════════════════════╗" -echo -e " ║ ✅ U 盘制作完成! ║" -echo -e " ╚══════════════════════════════════════════╝${NC}" -echo "" -echo -e " ${BOLD}输出目录:${NC} $USB_DIR" -echo -e " ${BOLD}总大小:${NC} $USB_SIZE" -echo -e " ${BOLD}文件数:${NC} $FILE_COUNT" -echo "" - -if $BUILD_MAC; then - echo -e " ${GREEN}✓${NC} Mac Apple Silicon (arm64)" -fi -if $BUILD_WIN; then - echo -e " ${GREEN}✓${NC} Windows x64" -fi -echo "" - -echo -e " ${BOLD}接下来:${NC}" -echo "" -echo -e " ${CYAN}1. 插入 U 盘(建议 4GB 以上)${NC}" -echo -e " ${CYAN}2. 复制到 U 盘:${NC}" -echo "" -echo -e " ${BOLD}Mac:${NC}" -echo -e " cp -R $USB_DIR /Volumes/你的U盘/" -echo "" -echo -e " ${BOLD}或者用 Finder:${NC}" -echo -e " 直接把 ${BOLD}U-Claw${NC} 文件夹拖到 U 盘" -echo "" -echo -e " ${CYAN}3. 在目标电脑上:${NC}" -echo -e " Mac: 双击 ${BOLD}Mac-Start.command${NC}" -echo -e " Win: 双击 ${BOLD}Windows-Start.bat${NC}" -echo "" - -# Optional: create tar.gz -if [ -t 0 ]; then - read -p " 是否也打包成 tar.gz 方便分发?(y/n): " -n 1 PACK - echo "" - if [ "$PACK" = "y" ] || [ "$PACK" = "Y" ]; then - echo "" - echo -e " ${CYAN}打包中...${NC}" - cd "$OUTPUT_DIR" - tar -czf "U-Claw.tar.gz" "U-Claw/" - PACK_SIZE=$(du -sh "$OUTPUT_DIR/U-Claw.tar.gz" | cut -f1) - echo -e " ${GREEN}打包完成: $OUTPUT_DIR/U-Claw.tar.gz ($PACK_SIZE)${NC}" - fi -fi - -echo "" -echo -e " ${DIM}完成!${NC}"