From be734cb111f259a2d78ec35cd3bdb27c6356510a Mon Sep 17 00:00:00 2001
From: dongsheng123132 <90887123+dongsheng123132@users.noreply.github.com>
Date: Thu, 12 Mar 2026 10:59:26 +0800
Subject: [PATCH] feat: restructure repo for collaboration + add desktop app
source
- Reorganize project: clean structure (portable/ u-claw-app/ usb-scripts/ website/)
- Move docs into website/, rename uclaw-scripts to usb-scripts
- Add u-claw-app/ Electron desktop source code
- Add portable/setup.sh: one-command dev environment setup
- Add portable/SkillHub.html: skill marketplace page
- Update README: dev guide, contribution workflow, project structure
- Update .gitignore: exclude runtime binaries and build artifacts
- Expand China install guide: npm mirrors, detailed onboard wizard
---
.gitignore | 37 +-
README.md | 276 +-
portable/Config.html | 53 +-
portable/SkillHub.html | 705 +
portable/setup.sh | 127 +
u-claw-app/assets/icon.icns | Bin 0 -> 457610 bytes
u-claw-app/assets/icon.ico | Bin 0 -> 115073 bytes
u-claw-app/assets/icon.png | Bin 0 -> 256620 bytes
u-claw-app/assets/icon.svg | 54 +
u-claw-app/package-lock.json | 13651 ++++++++++++++++
u-claw-app/package.json | 109 +
u-claw-app/resources/Config.html | 1183 ++
u-claw-app/resources/context/AGENTS.u-claw.md | 29 +
u-claw-app/scripts/generate-icons.js | 85 +
u-claw-app/src/loading.html | 138 +
u-claw-app/src/main.js | 419 +
u-claw-app/src/preload.js | 7 +
.../Mac-Install.command | 0
{uclaw-scripts => usb-scripts}/README.txt | 0
.../Windows-Install.bat | 0
.../教程-OpenClaw中国区完全指南.md | 229 +-
21 files changed, 16931 insertions(+), 171 deletions(-)
create mode 100644 portable/SkillHub.html
create mode 100755 portable/setup.sh
create mode 100644 u-claw-app/assets/icon.icns
create mode 100644 u-claw-app/assets/icon.ico
create mode 100644 u-claw-app/assets/icon.png
create mode 100644 u-claw-app/assets/icon.svg
create mode 100644 u-claw-app/package-lock.json
create mode 100644 u-claw-app/package.json
create mode 100644 u-claw-app/resources/Config.html
create mode 100644 u-claw-app/resources/context/AGENTS.u-claw.md
create mode 100644 u-claw-app/scripts/generate-icons.js
create mode 100644 u-claw-app/src/loading.html
create mode 100644 u-claw-app/src/main.js
create mode 100644 u-claw-app/src/preload.js
rename {uclaw-scripts => usb-scripts}/Mac-Install.command (100%)
rename {uclaw-scripts => usb-scripts}/README.txt (100%)
rename {uclaw-scripts => usb-scripts}/Windows-Install.bat (100%)
rename {docs => website}/教程-OpenClaw中国区完全指南.md (63%)
diff --git a/.gitignore b/.gitignore
index cd4f7b9..47995ef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,25 +1,34 @@
-# U-Claw build output bundle (generated release artifact)
-U-Claw/
-U-Claw-v2/
+# ── Runtime dependencies (too large for git, download on build) ──
+portable/app/
+portable/data/
+u-claw-app/node_modules/
+u-claw-app/release/
-# Toolkit (engineer DIY package, local only)
-Toolkit/
-
-# Marketing assets
+# ── Non-dev assets (stored locally, not in repo) ──
+archive/
+reference/
+releases/
+toolkit/
marketing/
-marketing.zip
social-assets/
-# OpenClaw source (users download separately)
+# ── Build cache & temp ──
+.download-cache/
+*.dmg
+*.exe
+*.blockmap
+builder-debug.yml
+
+# ── OpenClaw source downloads ──
openclaw-2026.3.7/
openclaw-2026.3.7.zip
-# Build cache
-.download-cache/
-
-# OS files
+# ── OS files ──
.DS_Store
Thumbs.db
-# Claude
+# ── Claude workspace ──
.claude/
+
+# ── u-claw-app runtime binaries (download on build) ──
+u-claw-app/resources/runtime/
diff --git a/README.md b/README.md
index c558514..0283de6 100644
--- a/README.md
+++ b/README.md
@@ -1,174 +1,198 @@
-# 🦞 U-Claw 虾盘
+# 🦞 U-Claw
-**Portable AI Agent — 插上就能用的 AI 助手**
-
-**Portable AI Agent — Double-click to run, no installation needed**
-
-> 像当年的雨林木风,把 AI 助手简化到"双击运行"。
-> Like the legendary YuLinMuFeng installer discs, but for AI.
+**把 AI 助手简化到"双击运行" — Portable AI Agent, double-click to run**
[](https://opensource.org/licenses/MIT)
+U-Claw 把 [OpenClaw](https://github.com/openclaw/openclaw) 打包成开箱即用的形态。Node.js + OpenClaw + 全部依赖 + QQ 插件,不需要翻墙,不需要命令行基础。
+
---
-## Why U-Claw? / 为什么需要 U-Claw?
-
-[OpenClaw](https://github.com/openclaw/openclaw) is the most powerful open-source AI assistant framework. But in China, installing it is a nightmare: GitHub blocked, npm timeout, Node.js download slow.
-
-[OpenClaw](https://github.com/openclaw/openclaw) 是最强的开源 AI 助手框架,但在中国安装它是个噩梦。
-
-**U-Claw bundles everything.** Node.js + OpenClaw + all dependencies + QQ plugin, pre-built and ready to run.
-
-**U-Claw 全部打包好。** Node.js + OpenClaw + 所有依赖 + QQ 插件,双击即用。
-
-## Quick Start / 快速开始
-
-### Option 1: Download Release / 从 Releases 下载(推荐)
-
-1. Download [U-Claw-v1.1.tar.gz](https://github.com/dongsheng123132/u-claw/releases)
-2. Extract anywhere (USB drive, Desktop, Documents)
-3. Mac: double-click `Mac-Start.command` / Windows: double-click `Windows-Start.bat`
-4. Browser opens automatically — configure your AI model and API key
-
-下载解压,双击启动,浏览器自动打开配置页面。
-
-### Option 2: USB Install Script / U 盘安装脚本
-
-USB drive has install scripts that auto-extract + launch:
-- Mac: `Mac-Install.command`
-- Windows: `Windows-Install.bat`
-
-### Option 3: Copy / 复制别人的
-
-Just copy the `U-Claw/` folder. That's it.
-
-直接复制 `U-Claw/` 文件夹就行。
-
-## Directory Structure / 目录结构
+## 项目结构
```
-U-Claw/ (~2.3GB)
-├── Mac-Start.command ← Mac: double-click to start
-├── Windows-Start.bat ← Windows: double-click to start
-├── Mac-Menu.command ← Mac: config & maintenance menu
-├── Windows-Menu.bat ← Windows: config & maintenance menu
-├── U-Claw.html ← Navigation page / 导航页面
-├── app/
-│ ├── core/ ← OpenClaw + deps + QQ plugin
+U-Claw/
+├── portable/ ← 🔥 U盘便携版(核心)
+│ ├── Mac-Start.command Mac 启动脚本
+│ ├── Windows-Start.bat Windows 启动脚本
+│ ├── Mac-Menu.command Mac 菜单(8 个功能)
+│ ├── Windows-Menu.bat Windows 菜单
+│ ├── Config.html 首次配置页面
+│ ├── U-Claw.html 导航首页
+│ ├── SkillHub.html 技能市场
+│ ├── default-config.json 默认配置模板
+│ └── migrate.js 配置迁移工具
+│
+├── u-claw-app/ ← 🖥 桌面安装版(Electron)
+│ ├── src/main.js 主进程(11K 行)
+│ ├── package.json 依赖 & 构建配置
+│ ├── assets/ 图标资源
+│ ├── resources/ Config.html + Node.js 运行时
+│ └── scripts/ 构建脚本
+│
+├── usb-scripts/ ← 💾 U盘安装脚本
+│ ├── Mac-Install.command Mac: 解压 + 启动
+│ └── Windows-Install.bat Windows: 解压 + 启动
+│
+├── website/ ← 🌐 官网 + 教程(u-claw.org)
+│ ├── index.html 官网首页
+│ ├── guide.html 帮助指南
+│ ├── skills.html 技能市场页
+│ └── 教程-OpenClaw中国区完全指南.md
+│
+└── README.md
+```
+
+## 两个产品线
+
+### 1. U盘便携版 (`portable/`)
+
+**用户体验:** 插 U 盘 → 双击启动 → 浏览器打开配置页 → 开始用
+
+```
+portable/
+├── app/ ← 运行时(不进 git,~2.3GB)
+│ ├── core/ OpenClaw + 依赖 + QQ 插件
│ └── runtime/
-│ ├── node-mac-arm64/ ← Mac Apple Silicon
-│ └── node-win-x64/ ← Windows 64-bit
-├── data/ ← User data (config, memory, backups)
-└── system/
- └── migrate.js ← Config migration
+│ ├── node-mac-arm64/ Mac Apple Silicon
+│ └── node-win-x64/ Windows 64-bit
+├── data/ ← 用户数据(不进 git)
+│ ├── .openclaw/ 配置文件
+│ ├── memory/ AI 记忆
+│ └── backups/ 备份
+└── [脚本和HTML] ← 这些进 git
```
-## Menu / 菜单功能
+**分发方式:** 把整个 `portable/` + `app/` 打包成 `U-Claw.tar.gz`(约 743MB),用 `usb-scripts/` 的脚本解压启动。
-8 options, covering config and maintenance:
+**状态:** ✅ Mac Apple Silicon 可用 · 🚧 Windows 开发中 · ❌ Mac Intel / Linux 暂不支持
-```
-[1] Setup wizard (model, API key) / 配置向导
-[2] Open web dashboard / 打开网页控制台
-[3] QQ Bot (pre-installed) / QQ 机器人(已预装)
-[4] Other platforms (Feishu/Telegram/WeChat) / 其他平台
-[5] Diagnostics / 诊断修复
-[6] Backup / 备份配置
-[7] Restore / 恢复备份
-[8] System info / 系统信息
+### 2. 桌面安装版 (`u-claw-app/`)
+
+**用户体验:** 下载 DMG/EXE → 安装 → 打开 App → 自动配置
+
+```bash
+# 开发
+cd u-claw-app
+npm install
+npm start # 本地运行
+
+# 构建
+npm run build:mac # → release/U-Claw-x.x.x.dmg
+npm run build:mac-arm64 # → ARM64 版
+npm run build:win # → release/U-Claw-x.x.x.exe
```
-## AI Models / 支持的 AI 模型
+**状态:** 🚧 Mac ARM64 基本可用 · 🚧 Windows 开发中 · ❌ Linux 暂不支持
-### Chinese Models (no VPN) / 国产模型(无需翻墙)
+## 支持的 AI 模型
-| Model 模型 | Best for 推荐场景 |
-|------------|-------------------|
-| DeepSeek | Coding, best value / 编程首选 |
-| Kimi K2.5 | Long docs, 256K context / 长文档 |
-| Qwen 通义千问 | Large free tier / 免费额度大 |
-| GLM 智谱 | Academic / 学术 |
-| MiniMax | Voice, multimodal / 语音 |
-| Doubao 豆包 | Volcano Engine / 火山引擎 |
+### 国产模型(无需翻墙)
-### International Models / 国际模型
+| 模型 | 推荐场景 |
+|------|----------|
+| DeepSeek | 编程首选,极便宜 |
+| Kimi K2.5 | 长文档,256K 上下文 |
+| 通义千问 Qwen | 免费额度大 |
+| 智谱 GLM | 学术场景 |
+| MiniMax | 语音多模态 |
+| 豆包 Doubao | 火山引擎 |
-Claude (Anthropic) · GPT (OpenAI) · Gemini (Google)
+### 国际模型
-## Chat Platforms / 聊天平台
+Claude · GPT · Gemini(需翻墙或中转)
-| Platform 平台 | Status 状态 | Notes 说明 |
-|---------------|------------|------------|
-| QQ | ✅ **Pre-installed 已预装** | Just enter AppID + Secret |
-| Feishu 飞书 | ✅ Built-in 内置 | Enterprise / 企业首选 |
-| Telegram | ✅ Built-in 内置 | International / 海外推荐 |
-| WhatsApp | ✅ Built-in 内置 | Baileys protocol |
-| Discord | ✅ Built-in 内置 | — |
-| Slack | ✅ Built-in 内置 | — |
-| WeChat 微信 | ✅ Community plugin | iPad protocol |
+## 支持的聊天平台
-### QQ Setup (1 min) / QQ 接入(1 分钟)
+| 平台 | 状态 | 说明 |
+|------|------|------|
+| QQ | ✅ 已预装 | 输入 AppID + Secret 即可 |
+| 飞书 | ✅ 内置 | 企业首选 |
+| Telegram | ✅ 内置 | 海外推荐 |
+| WhatsApp | ✅ 内置 | Baileys 协议 |
+| Discord | ✅ 内置 | — |
+| 微信 | ✅ 社区插件 | iPad 协议 |
-QQ plugin is pre-installed! Just:
-1. Visit q.qq.com, create a bot, get AppID and AppSecret
-2. Run `Mac-Menu.command`, choose [3] QQ Bot
-3. Enter AppID and AppSecret, done
+## 参与开发
-## System Requirements / 系统要求
+### 环境要求
-- **macOS**: Apple Silicon (M1-M4), macOS 12+
-- **Windows**: 10/11, 64-bit
-- **RAM**: 2GB+ (4GB+ recommended)
-- **Storage**: 3GB+
+- Node.js 22+
+- macOS 12+ 或 Windows 10+
-## Upgrade / 升级
+### 开发 portable 版
-Replace `app/` with new version. `data/` stays (config and memory preserved).
+```bash
+git clone https://github.com/dongsheng123132/u-claw.git
+cd u-claw/portable
-下载新版替换 `app/`,`data/` 不动。
-
-## USB Drive Structure / U 盘结构
+# 一键搭建运行环境(自动下载 Node.js + OpenClaw + QQ 插件)
+bash setup.sh
+# 启动测试
+bash Mac-Start.command # Mac
+# 或双击 Windows-Start.bat # Windows
```
-UCLAW (USB Drive)
-├── Mac-Install.command ← First run (extract + launch)
-├── Windows-Install.bat
-├── U-Claw.tar.gz ← Compressed package (743MB)
-├── README.txt ← Instructions
-└── Toolkit/ ← Engineer DIY kit
- ├── node-v22-mac-arm64.pkg
- ├── node-v22-win-x64.msi
- ├── openclaw-source.tar.gz
- └── npm-cache.tar.gz
+
+`setup.sh` 会自动:
+1. 检测你的系统(Mac ARM/Intel/Linux)
+2. 从国内镜像下载 Node.js v22
+3. 安装 OpenClaw + QQ 插件到 `app/` 目录
+
+### 开发桌面版
+
+```bash
+cd u-claw-app
+npm install --registry=https://registry.npmmirror.com
+npm start # 开发模式运行
+npm run build:mac # 打包
```
+### 提交代码
+
+```bash
+git checkout -b feat/your-feature
+# 改代码...
+git add -A
+git commit -m "feat: your change"
+git push -u origin feat/your-feature
+# 在 GitHub 上创建 PR
+```
+
+## 待开发 / 欢迎贡献
+
+- [ ] Windows 便携版完善测试
+- [ ] Mac Intel 支持
+- [ ] Linux 支持(AppImage)
+- [ ] 桌面版自动更新
+- [ ] 一键安装到电脑(永久模式)
+- [ ] 在线安装脚本(curl 一行安装)
+- [ ] SkillHub 技能市场功能完善
+- [ ] 多语言支持(English UI)
+
## FAQ
-**Q: Need VPN? / 需要翻墙吗?**
-No for installation. Runtime needs internet for AI APIs — Chinese models work without VPN.
+**Q: 需要翻墙吗?**
安装不需要。运行需要联网调 API,国产模型无需翻墙。
-**Q: Can I share it? / 能分发吗?**
-Yes, MIT license, copy freely.
-可以,MIT 协议,随便复制。
+**Q: 能分发吗?**
+MIT 协议,随便复制。
-**Q: Windows needs WSL?**
-No. Bundled Windows Node.js runs natively.
+**Q: Mac 提示"未验证的开发者"?**
+右键脚本 → 打开。
+
+**Q: Windows 需要 WSL?**
不需要,自带 Windows 版 Node.js。
-**Q: Mac says "unverified developer"?**
-Right-click the script → Open.
-右键点击脚本 → 打开。
-
## License
[MIT](LICENSE)
-## Contact / 联系
+## 联系
-- WeChat 微信: hecare888
+- 微信: hecare888
- GitHub: [@dongsheng123132](https://github.com/dongsheng123132)
-- Website 官网: [u-claw.org](https://u-claw.org)
+- 官网: [u-claw.org](https://u-claw.org)
---
diff --git a/portable/Config.html b/portable/Config.html
index 5c28e30..47536f5 100644
--- a/portable/Config.html
+++ b/portable/Config.html
@@ -653,13 +653,50 @@ function tryPort(port) {
testWs.onopen = () => {
clearTimeout(timeout);
- testWs.send(JSON.stringify({ type: 'auth', token: 'uclaw' }));
- ws = testWs;
- gwPort = port;
- connected = true;
- setStatus('on', `OpenClaw 已连接(端口 ${port})`);
- setupWs();
- loadConfig().then(prefillFromConfig);
+ // Wait for connect.challenge from gateway, then send connect handshake
+ let connectSent = false;
+ const sendConnect = () => {
+ if (connectSent) return;
+ connectSent = true;
+ const connectId = String(++reqId);
+ pendingReqs[connectId] = (msg) => {
+ delete pendingReqs[connectId];
+ if (msg.ok !== false) {
+ ws = testWs;
+ gwPort = port;
+ connected = true;
+ setStatus('on', `OpenClaw 已连接(端口 ${port})`);
+ setupWs();
+ loadConfig().then(prefillFromConfig);
+ } else {
+ testWs.close();
+ tryPort(port + 1);
+ }
+ };
+ testWs.send(JSON.stringify({
+ type: 'req', id: connectId, method: 'connect',
+ params: {
+ minProtocol: 3, maxProtocol: 3,
+ client: { id: 'webchat', version: '2.0.0', platform: 'web', mode: 'webchat' },
+ role: 'operator',
+ scopes: ['operator.admin', 'operator.approvals', 'operator.pairing'],
+ auth: { token: 'uclaw' }
+ }
+ }));
+ };
+ // Listen for challenge or timeout
+ testWs.onmessage = (e) => {
+ try {
+ const msg = JSON.parse(e.data);
+ if (msg.type === 'event' && msg.event === 'connect.challenge') {
+ sendConnect();
+ } else if (msg.type === 'res' && pendingReqs[msg.id]) {
+ pendingReqs[msg.id](msg);
+ }
+ } catch(err) {}
+ };
+ // Fallback: if no challenge in 750ms, send anyway
+ setTimeout(sendConnect, 750);
};
testWs.onerror = () => { clearTimeout(timeout); tryPort(port + 1); };
testWs.onclose = () => {
@@ -691,7 +728,7 @@ function setupWs() {
function rpc(method, params) {
return new Promise((resolve, reject) => {
if (!ws || ws.readyState !== 1) { reject('未连接'); return; }
- const id = ++reqId;
+ const id = String(++reqId);
pendingReqs[id] = (msg) => msg.ok ? resolve(msg.payload) : reject(msg.payload || msg.error);
ws.send(JSON.stringify({ type: 'req', id, method, params: params || {} }));
setTimeout(() => { if (pendingReqs[id]) { delete pendingReqs[id]; reject('请求超时'); } }, 15000);
diff --git a/portable/SkillHub.html b/portable/SkillHub.html
new file mode 100644
index 0000000..f506976
--- /dev/null
+++ b/portable/SkillHub.html
@@ -0,0 +1,705 @@
+
+
+
+
+
+U-Claw SkillHub - AI 技能市场
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
必装
+
+
管理 Issue、PR、搜索仓库、查看代码。开发者最强助手。
+
+
+
+
必装
+
+
AI 驱动的网络搜索引擎。让你的 AI 助手能实时搜索互联网。
+
+
+
+
必装
+
+
总结网页、文章、PDF、视频内容。一键提取关键信息。
+
+
+
+
必装
+
+
收发邮件、搜索邮件、管理文件夹。支持 Gmail/Outlook/QQ 邮箱。
+
+
+
+
必装
+
+
AI 控制浏览器,自动填表、截图、抓取网页数据。
+
+
+
+
+
+
+
+
+
查询全球天气预报。支持多日预报和实时天气。
+
+
+
+
+
读写 Apple 备忘录。用语音或文字快速记录想法。
+
+
+
+
+
创建和管理提醒事项。"提醒我明天下午3点开会"。
+
+
+
+
+
在 Obsidian 知识库中创建、搜索、管理笔记。
+
+
+
+
+
创建 Notion 页面、管理数据库、搜索工作区内容。
+
+
+
+
+
编辑 PDF 文件:合并、拆分、加水印、提取文本。
+
+
+
+
+
+
+
+
+
委派编程任务给 AI Agent。重构代码、写测试、修 bug。
+
+
+
+
+
远程终端操作。查看服务器状态、执行命令、管理进程。
+
+
+
+
+
🎨
+
OpenAI Image Gen
@openclaw
+
+
DALL-E AI 绘图。用自然语言描述,生成高质量图片。
+
+
+
+
+
屏幕截图 + OCR。AI 能"看见"你的屏幕并理解内容。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 更多分类请在搜索框输入关键词,或使用命令:openclaw skills search 关键词
+
+
+
+
+
+
+
+
+ | # | 技能 | 分类 | 下载量 | 安装命令 |
+
+
+ | 1 | Tavily Search | 搜索 | 52,000+ | openclaw skills install @tavily/search |
+ | 2 | GitHub | 开发 | 48,000+ | openclaw skills install @openclaw/github |
+ | 3 | Capability Evolver | AI | 35,581 | openclaw skills install @cap/evolver |
+ | 4 | Coding Agent | 编程 | 31,000+ | openclaw skills install @openclaw/coding-agent |
+ | 5 | Browser Relay | 自动化 | 29,000+ | openclaw skills install @nicosql/browser-relay |
+ | 6 | OpenAI Image Gen | 创作 | 26,000+ | openclaw skills install @openclaw/openai-image-gen |
+ | 7 | Obsidian | 笔记 | 22,000+ | openclaw skills install @openclaw/obsidian |
+ | 8 | Himalaya | 邮件 | 21,000+ | openclaw skills install @sostrovsky/himalaya |
+ | 9 | Notion | 效率 | 19,000+ | openclaw skills install @openclaw/notion |
+ | 10 | Weather | 生活 | 18,000+ | openclaw skills install @openclaw/weather |
+ | 11 | Peekaboo | 多模态 | 17,000+ | openclaw skills install @nicosql/peekaboo |
+ | 12 | Wacli | 自动化 | 16,415 | openclaw skills install @nicosql/wacli |
+ | 13 | ByteRover | 搜索 | 16,004 | openclaw skills install @byterover/search |
+ | 14 | Self-Improving Agent | AI | 15,962 | openclaw skills install @self-improving-agent |
+ | 15 | Apple Notes | 笔记 | 15,000+ | openclaw skills install @openclaw/apple-notes |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
将此提示发送给你的 Agent,以安装技能
+
复制下面的命令,粘贴到你的 OpenClaw 对话中。Agent 会自动搜索和安装。
+
+ 帮我安装 [技能名称] 这个 skill
+
+
+
+ 搜索关于 [功能描述] 的 skill 并安装最合适的
+
+
+
+
+
+
+
+
+
+
终端命令安装
+
在终端中直接运行以下命令:
+
+ openclaw skills search 关键词
+
+
+
+ openclaw skills install @作者/技能名
+
+
+
+ openclaw clawhub search 关键词
+
+
+
+
+
+
+
+
常用操作速查
+
+ | 操作 | 命令 |
+
+ | 搜索技能 | openclaw skills search 关键词 |
+ | 安装技能 | openclaw skills install @作者/技能名 |
+ | 查看已装技能 | openclaw skills list |
+ | 卸载技能 | openclaw skills uninstall 技能名 |
+ | 更新技能 | openclaw skills update 技能名 |
+ | ClawHub 搜索 | openclaw clawhub search 关键词 |
+ | 查看技能详情 | openclaw skills info @作者/技能名 |
+
+
+
+
+
+
U-Claw 用户专属
+
+
+
52 个技能已预装,开箱即用
+
U-Claw 已内置最常用的 52 个官方技能,无需联网下载。在启动菜单选 [13] 可浏览完整列表。
需要更多技能?使用上面的命令从 ClawHub 在线安装。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/portable/setup.sh b/portable/setup.sh
new file mode 100755
index 0000000..076bf48
--- /dev/null
+++ b/portable/setup.sh
@@ -0,0 +1,127 @@
+#!/bin/bash
+# ============================================================
+# U-Claw Portable — 开发环境搭建脚本
+# 用法: bash setup.sh
+# 作用: 下载 Node.js 运行时 + 安装 OpenClaw 到 app/ 目录
+# ============================================================
+
+set -e
+
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+APP_DIR="$SCRIPT_DIR/app"
+CORE_DIR="$APP_DIR/core"
+RUNTIME_DIR="$APP_DIR/runtime"
+MIRROR="https://registry.npmmirror.com"
+NODE_MIRROR="https://npmmirror.com/mirrors/node"
+NODE_VERSION="v22.14.0"
+
+GREEN='\033[0;32m'
+CYAN='\033[0;36m'
+RED='\033[0;31m'
+NC='\033[0m'
+
+echo ""
+echo -e "${CYAN}╔══════════════════════════════════════╗${NC}"
+echo -e "${CYAN}║ 🦞 U-Claw Portable Setup ║${NC}"
+echo -e "${CYAN}╚══════════════════════════════════════╝${NC}"
+echo ""
+
+# ---- Detect OS & Arch ----
+OS=$(uname -s)
+ARCH=$(uname -m)
+
+if [ "$OS" = "Darwin" ]; then
+ if [ "$ARCH" = "arm64" ]; then
+ PLATFORM="darwin-arm64"
+ NODE_DIR_NAME="node-mac-arm64"
+ else
+ PLATFORM="darwin-x64"
+ NODE_DIR_NAME="node-mac-x64"
+ fi
+elif [ "$OS" = "Linux" ]; then
+ PLATFORM="linux-x64"
+ NODE_DIR_NAME="node-linux-x64"
+else
+ echo -e "${RED}请在 Mac 或 Linux 上运行此脚本。Windows 请用 setup.bat${NC}"
+ exit 1
+fi
+
+echo -e " 系统: ${GREEN}$OS $ARCH${NC}"
+echo ""
+
+# ---- 1. Download Node.js ----
+NODE_TARGET="$RUNTIME_DIR/$NODE_DIR_NAME"
+
+if [ -f "$NODE_TARGET/bin/node" ]; then
+ echo -e " ${GREEN}✓${NC} Node.js 已存在,跳过下载"
+else
+ echo -e " ${CYAN}↓${NC} 下载 Node.js $NODE_VERSION ($PLATFORM)..."
+ mkdir -p "$NODE_TARGET"
+
+ NODE_URL="$NODE_MIRROR/$NODE_VERSION/node-$NODE_VERSION-$PLATFORM.tar.gz"
+ echo " $NODE_URL"
+
+ curl -fSL "$NODE_URL" | tar xz -C "$NODE_TARGET" --strip-components=1
+
+ if [ -f "$NODE_TARGET/bin/node" ]; then
+ echo -e " ${GREEN}✓${NC} Node.js 下载完成"
+ else
+ echo -e " ${RED}✗ Node.js 下载失败${NC}"
+ exit 1
+ fi
+fi
+
+# ---- 2. Install OpenClaw ----
+if [ -d "$CORE_DIR/node_modules/openclaw" ]; then
+ echo -e " ${GREEN}✓${NC} OpenClaw 已安装,跳过"
+else
+ echo -e " ${CYAN}↓${NC} 安装 OpenClaw..."
+ mkdir -p "$CORE_DIR"
+
+ # Init package.json if not exists
+ if [ ! -f "$CORE_DIR/package.json" ]; then
+ cat > "$CORE_DIR/package.json" << 'PKGJSON'
+{
+ "name": "u-claw-core",
+ "version": "1.0.0",
+ "private": true,
+ "dependencies": {
+ "openclaw": "latest"
+ }
+}
+PKGJSON
+ fi
+
+ # Install with China mirror
+ NODE_BIN="$NODE_TARGET/bin/node"
+ NPM_BIN="$NODE_TARGET/bin/npm"
+ "$NODE_BIN" "$NPM_BIN" install --prefix "$CORE_DIR" --registry="$MIRROR"
+
+ echo -e " ${GREEN}✓${NC} OpenClaw 安装完成"
+fi
+
+# ---- 3. Install QQ Plugin ----
+if [ -d "$CORE_DIR/node_modules/@sliverp/qqbot" ]; then
+ echo -e " ${GREEN}✓${NC} QQ 插件已安装,跳过"
+else
+ echo -e " ${CYAN}↓${NC} 安装 QQ 插件..."
+ NODE_BIN="$NODE_TARGET/bin/node"
+ NPM_BIN="$NODE_TARGET/bin/npm"
+ "$NODE_BIN" "$NPM_BIN" install @sliverp/qqbot@latest --prefix "$CORE_DIR" --registry="$MIRROR" 2>/dev/null || true
+ echo -e " ${GREEN}✓${NC} QQ 插件安装完成"
+fi
+
+# ---- Done ----
+echo ""
+echo -e "${GREEN}════════════════════════════════════════${NC}"
+echo -e "${GREEN} ✅ 搭建完成!${NC}"
+echo ""
+echo -e " 启动方式:"
+echo -e " Mac: ${CYAN}bash Mac-Start.command${NC}"
+echo -e " Windows: 双击 ${CYAN}Windows-Start.bat${NC}"
+echo ""
+echo -e " 目录结构:"
+echo -e " app/core/ ← OpenClaw + 依赖"
+echo -e " app/runtime/ ← Node.js $NODE_VERSION"
+echo -e " data/ ← 运行后自动生成"
+echo -e "${GREEN}════════════════════════════════════════${NC}"
diff --git a/u-claw-app/assets/icon.icns b/u-claw-app/assets/icon.icns
new file mode 100644
index 0000000000000000000000000000000000000000..c9b43576563efab563e035403759197833e6f69b
GIT binary patch
literal 457610
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