上一轮我说"剩余中文都合理",说得太满。这三处不合理: 1. bootable/linux-setup/test-installation.sh —— 在用户的 Linux 机器上跑的 自检脚本,输出中英混杂(check "安装目录存在" ... "Directory $INSTALL_DIR") 2. issue / PR 模板 —— 贡献者第一眼看到的东西,而 CONTRIBUTING.md 已经是 英文了。顺带修掉模板里指向上游官网和上游微信的链接(那些我们控制不了), 改为指向本仓库。PR 模板加了一条"说明你在哪个平台跑过" —— 只在 Mac 上 验证过的 .bat 改动一直是本项目最主要的故障来源。 3. release.yml 的发布说明正文 —— 那是用户在 release 页面读到的文字,内容 还停留在旧产品(DeepSeek/通义、预装微信 QQ 钉钉飞书企微)。 第 3 项里还有一条**和事实相反**的建议:它让用户把 U 盘格式化成 NTFS。 macOS 对 NTFS 只读,照做正好会让"配置跟着盘走"这个核心卖点在 Mac 上 彻底失效。改为 exFAT,并说明为什么慢、以及我们如何用本机缓存补偿。 track-upstream.yml 的输入描述和输出也翻了 —— 它们会显示给手动触发 workflow 的人。
This commit is contained in:
36
.github/workflows/release.yml
vendored
36
.github/workflows/release.yml
vendored
@@ -119,7 +119,7 @@ jobs:
|
||||
--registry="$mirror_npm" \
|
||||
--ignore-scripts \
|
||||
--no-audit \
|
||||
--no-fund || echo "WARN: $cn_pkg install failed, skipping (便携版仍可用其它渠道)"
|
||||
--no-fund || echo "WARN: $cn_pkg install failed, skipping — the drive still works with the other channels"
|
||||
done
|
||||
|
||||
# 6) Install skills from the manifest.
|
||||
@@ -256,18 +256,36 @@ jobs:
|
||||
body: |
|
||||
## U-Claw ${{ steps.tag.outputs.tag }}
|
||||
|
||||
- 打开 Config 选模型、填入自己的 API Key 即可使用,支持 DeepSeek / 通义 / Claude / GPT 等国内外大模型
|
||||
- 想用「虾盘云」中转站(一个 Key 调用国内外全部模型、免翻墙):先到 https://cloud.u-claw.org 注册并创建 Key
|
||||
- **聊天渠道开箱即用**:便携版已离线预装 微信 / QQ / 钉钉 / 飞书 / 企业微信 插件,无需自己 npm 安装
|
||||
An AI assistant on a USB drive. Plug it into any Mac or Windows
|
||||
machine — no installer, no admin rights, nothing left behind.
|
||||
|
||||
- Paste one API key and you are running. U-Claw works out the
|
||||
provider from the key itself and checks it before accepting it.
|
||||
- Your settings, keys and memory live on the drive, so they travel
|
||||
with you between machines.
|
||||
- OpenClaw runtime: `${{ steps.openclaw_version.outputs.version }}`
|
||||
|
||||
### 下载
|
||||
### Downloads
|
||||
|
||||
- **Windows 便携完整版(U 盘版)**:`u-claw-portable-windows-*.zip`(约 150-200 MB,已预装 Node.js + OpenClaw,**解压即用,零网络依赖**)。解压到 U 盘后双击 `START HERE - Windows.bat` 启动。
|
||||
- **macOS 便携版**:源码在 `portable/` 目录,`bash setup.sh` 自动下载 Node + OpenClaw(约 1 分钟),双击 `START HERE - Mac.command` 启动。
|
||||
- **Windows** — `u-claw-portable-windows-*.zip`, roughly 150–200 MB
|
||||
with Node.js and OpenClaw already inside. Unzip onto the drive and
|
||||
double-click `START HERE - Windows.bat`. No network needed to start.
|
||||
- **macOS** — clone the repo, run `bash portable/advanced/setup.sh`
|
||||
(about a minute to fetch Node and OpenClaw), then double-click
|
||||
`START HERE - Mac.command`.
|
||||
|
||||
Each asset has a `.sha256` next to it. Check it before you run it.
|
||||
|
||||
### Format the drive as exFAT
|
||||
|
||||
Not NTFS. **macOS can only read NTFS, not write to it**, so an
|
||||
NTFS drive silently breaks the one thing this product is for —
|
||||
your settings will not follow you to a Mac.
|
||||
|
||||
exFAT is slower with many small files, which is why U-Claw moves its
|
||||
rebuildable caches onto the host's local disk at startup. Your actual
|
||||
data stays on the drive.
|
||||
|
||||
> **U 盘格式建议**:请用 **NTFS** 格式化 U 盘(NOT exFAT/FAT32)。Node.js 在 exFAT 上 IO 极慢且不支持符号链接,可能导致启动失败。
|
||||
> Windows 下右键 U 盘 → 格式化 → 文件系统选择 NTFS。
|
||||
files: |
|
||||
artifacts/portable-windows-full/*
|
||||
fail_on_unmatched_files: false
|
||||
|
||||
32
.github/workflows/track-upstream.yml
vendored
32
.github/workflows/track-upstream.yml
vendored
@@ -22,11 +22,11 @@ on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
force_version:
|
||||
description: '强制使用的上游 OpenClaw 版本(留空=用 npm latest)'
|
||||
description: 'Pin a specific upstream OpenClaw version (blank = whatever npm says is latest)'
|
||||
required: false
|
||||
default: ''
|
||||
dry_run:
|
||||
description: '只检测不改动(true/false)'
|
||||
description: 'Check only, change nothing (true/false)'
|
||||
required: false
|
||||
default: 'false'
|
||||
|
||||
@@ -58,13 +58,13 @@ jobs:
|
||||
force="${{ github.event.inputs.force_version }}"
|
||||
if [ -n "$force" ]; then
|
||||
latest="${force#v}"
|
||||
echo "强制指定上游版本: $latest"
|
||||
echo "Forced upstream version: $latest"
|
||||
else
|
||||
latest="$(npm view openclaw version --registry=https://registry.npmjs.org 2>/dev/null | tr -d '[:space:]')"
|
||||
echo "npm latest openclaw: $latest"
|
||||
fi
|
||||
if [ -z "$latest" ]; then
|
||||
echo "::error::无法获取上游 openclaw 版本(npm view 失败)"
|
||||
echo "::error::Could not read the upstream openclaw version — npm view failed"
|
||||
exit 1
|
||||
fi
|
||||
echo "latest=$latest" >> "$GITHUB_OUTPUT"
|
||||
@@ -76,7 +76,7 @@ jobs:
|
||||
shell_ver="$(node -p "require('./u-claw-app/package.json').version")"
|
||||
echo "pinned=$pinned" >> "$GITHUB_OUTPUT"
|
||||
echo "shell_ver=$shell_ver" >> "$GITHUB_OUTPUT"
|
||||
echo "当前 pin: $pinned | 壳版本: $shell_ver"
|
||||
echo "Currently pinned: $pinned | shell version: $shell_ver"
|
||||
|
||||
- name: Decide whether to bump
|
||||
id: decide
|
||||
@@ -84,18 +84,18 @@ jobs:
|
||||
latest="${{ steps.upstream.outputs.latest }}"
|
||||
pinned="${{ steps.current.outputs.pinned }}"
|
||||
if [ "$latest" = "$pinned" ]; then
|
||||
echo "✅ 已是最新(pin=$pinned),无需发版。"
|
||||
echo "Already up to date (pinned=$pinned) — nothing to release."
|
||||
echo "changed=false" >> "$GITHUB_OUTPUT"
|
||||
exit 0
|
||||
fi
|
||||
# 只在 latest 严格 > pinned 时发版(避免上游撤版导致回退)
|
||||
newer="$(printf '%s\n%s\n' "$pinned" "$latest" | sort -V | tail -1)"
|
||||
if [ "$newer" != "$latest" ]; then
|
||||
echo "⚠️ npm latest ($latest) 不比当前 pin ($pinned) 新,跳过。"
|
||||
echo "npm latest ($latest) is not newer than the pin ($pinned) — skipping."
|
||||
echo "changed=false" >> "$GITHUB_OUTPUT"
|
||||
exit 0
|
||||
fi
|
||||
echo "🆕 发现上游新版: $pinned → $latest"
|
||||
echo "Upstream has moved: $pinned -> $latest"
|
||||
echo "changed=true" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Compute next shell version (patch bump)
|
||||
@@ -106,7 +106,7 @@ jobs:
|
||||
IFS='.' read -r MA MI PA <<< "$cur"
|
||||
PA=$((PA + 1))
|
||||
next="${MA}.${MI}.${PA}"
|
||||
echo "壳版本 bump: $cur → $next"
|
||||
echo "Bumping shell version: $cur -> $next"
|
||||
echo "next=$next" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Apply changes (pin + version files)
|
||||
@@ -123,7 +123,7 @@ jobs:
|
||||
# 这里写一份让 main 分支也保持一致。
|
||||
node -e "const f='u-claw-app/package.json';const p=require('./'+f);p.version='$next';require('fs').writeFileSync(f, JSON.stringify(p,null,2)+'\n')"
|
||||
|
||||
echo "已写入: OPENCLAW_VERSION=$latest, 壳版本=$next"
|
||||
echo "Wrote OPENCLAW_VERSION=$latest, shell version=$next"
|
||||
|
||||
- name: Commit, tag & push
|
||||
if: steps.decide.outputs.changed == 'true' && github.event.inputs.dry_run != 'true'
|
||||
@@ -135,10 +135,10 @@ jobs:
|
||||
git config user.email "bot@u-claw.org"
|
||||
|
||||
git add OPENCLAW_VERSION portable/OPENCLAW_VERSION u-claw-app/package.json
|
||||
git commit -m "chore(upstream): 跟随 OpenClaw $latest,发布 v$next
|
||||
git commit -m "chore(upstream): follow OpenClaw $latest, release v$next
|
||||
|
||||
自动跟踪上游:OpenClaw npm latest 升到 $latest,
|
||||
自动 bump 壳版本到 $next 并打 tag 触发发版。"
|
||||
Automated: upstream OpenClaw moved to $latest, so the shell version
|
||||
is bumped to $next and tagged, which triggers a release."
|
||||
|
||||
git push origin HEAD:main
|
||||
|
||||
@@ -146,10 +146,10 @@ jobs:
|
||||
git tag "v$next"
|
||||
git push origin "v$next"
|
||||
|
||||
echo "✅ 已推送 v$next,release.yml 将自动构建并发布。"
|
||||
echo "Pushed v$next — release.yml will build and publish it."
|
||||
|
||||
- name: Dry-run summary
|
||||
if: steps.decide.outputs.changed == 'true' && github.event.inputs.dry_run == 'true'
|
||||
run: |
|
||||
echo "🔍 DRY RUN — 不改动。"
|
||||
echo "若执行将:OPENCLAW_VERSION ${{ steps.current.outputs.pinned }} → ${{ steps.upstream.outputs.latest }},发布 v${{ steps.nextver.outputs.next }}"
|
||||
echo "DRY RUN — nothing changed."
|
||||
echo "Would set OPENCLAW_VERSION ${{ steps.current.outputs.pinned }} -> ${{ steps.upstream.outputs.latest }} and release v${{ steps.nextver.outputs.next }}"
|
||||
|
||||
Reference in New Issue
Block a user