Compare commits

..

1 Commits

Author SHA1 Message Date
杨柳杰
721be2de5b refactor: update.sh改为update.py,兼容Windows/macOS/Linux
使用纯Python标准库(urllib/tarfile/shutil)替换bash+curl+tar,
确保在Windows上无需额外依赖即可运行。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-04 12:25:52 +08:00
3 changed files with 91 additions and 58 deletions

View File

@@ -10,10 +10,10 @@ allowed-tools: "Read,Grep,Glob,Bash"
每次响应用户请求前,**必须先执行文档更新检查** 每次响应用户请求前,**必须先执行文档更新检查**
1. 使用 `Glob` 查找 skill 目录:搜索 `**/skills/mipu-api/update.sh` 获取脚本绝对路径 1. 使用 `Glob` 查找 skill 目录:搜索 `**/skills/mipu-api/update.py` 获取脚本绝对路径
2. 使用 `Bash` 执行更新脚本: 2. 使用 `Bash` 执行更新脚本:
```bash ```bash
bash <update.sh的绝对路径> python3 <update.py的绝对路径>
``` ```
3. 脚本会自动: 3. 脚本会自动:
- 对比本地 `.version` 与 Gitea 远程最新 Release 版本 - 对比本地 `.version` 与 Gitea 远程最新 Release 版本
@@ -22,7 +22,7 @@ allowed-tools: "Read,Grep,Glob,Bash"
- 网络异常 → 静默退出,不影响后续使用 - 网络异常 → 静默退出,不影响后续使用
4. 更新完成后继续用本地 `docs/` 回答问题 4. 更新完成后继续用本地 `docs/` 回答问题
**重要**:如果 update.sh 执行超过 5 秒或报错,直接跳过,使用现有本地文档即可。 **重要**:如果 update.py 执行超过 5 秒或报错,直接跳过,使用现有本地文档即可。
## 1. 角色 ## 1. 角色
@@ -108,7 +108,7 @@ Base URL: `https://${endpoint}/`
## 7. 行为规则 ## 7. 行为规则
1. **只读**绝不修改任何文件update.sh 自动更新除外) 1. **只读**绝不修改任何文件update.py 自动更新除外)
2. **引用来源**:回答时标注引用的文档文件名 2. **引用来源**:回答时标注引用的文档文件名
3. **不确定时询问**agent code、proxy 配置等不明确的参数,主动询问客户 3. **不确定时询问**agent code、proxy 配置等不明确的参数,主动询问客户
4. **中文优先**:面向中文开发者,正文使用中文,代码和技术术语保留英文 4. **中文优先**:面向中文开发者,正文使用中文,代码和技术术语保留英文

View File

@@ -0,0 +1,87 @@
#!/usr/bin/env python3
"""Mipu API docs auto-updater.
Checks latest release from mipu-open repo and updates local docs.
Works on macOS, Linux, and Windows.
Safe to run in any environment - fails silently on network errors.
"""
import json
import os
import shutil
import sys
import tarfile
import tempfile
import urllib.request
import urllib.error
API_URL = "https://git.addhh.com/api/v1/repos/willow/mipu-open/releases/latest"
TIMEOUT = 5
DOWNLOAD_TIMEOUT = 30
def main():
script_dir = os.path.dirname(os.path.abspath(__file__))
docs_dir = os.path.join(script_dir, "docs")
version_file = os.path.join(script_dir, ".version")
# Read current version
current = ""
if os.path.isfile(version_file):
with open(version_file, "r", encoding="utf-8") as f:
current = f.read().strip()
# Fetch latest release info
try:
req = urllib.request.Request(API_URL)
with urllib.request.urlopen(req, timeout=TIMEOUT) as resp:
release = json.loads(resp.read().decode("utf-8"))
except Exception:
# Network error — silent fail
return
remote = release.get("tag_name", "")
if not remote or remote == current:
return
# Find docs.tar.gz asset URL
asset_url = ""
for asset in release.get("assets", []):
if asset.get("name") == "docs.tar.gz":
asset_url = asset.get("browser_download_url", "")
break
if not asset_url:
return
# Download docs.tar.gz to temp file
tmp_fd, tmp_path = tempfile.mkstemp(suffix=".tar.gz")
try:
os.close(tmp_fd)
req = urllib.request.Request(asset_url)
with urllib.request.urlopen(req, timeout=DOWNLOAD_TIMEOUT) as resp:
with open(tmp_path, "wb") as f:
shutil.copyfileobj(resp, f)
# Remove old docs and extract new
if os.path.isdir(docs_dir):
shutil.rmtree(docs_dir)
with tarfile.open(tmp_path, "r:gz") as tar:
tar.extractall(path=script_dir)
# Write new version
with open(version_file, "w", encoding="utf-8") as f:
f.write(remote)
print(f"Mipu API docs updated: {current or 'none'} -> {remote}")
except Exception:
return
finally:
if os.path.isfile(tmp_path):
os.unlink(tmp_path)
if __name__ == "__main__":
main()

View File

@@ -1,54 +0,0 @@
#!/bin/bash
# Mipu API docs auto-updater
# Checks latest release from mipu-open repo and updates local docs.
# Safe to run in any environment — fails silently on network errors.
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DOCS_DIR="$SCRIPT_DIR/docs"
VERSION_FILE="$SCRIPT_DIR/.version"
API_URL="https://git.addhh.com/api/v1/repos/willow/mipu-open/releases/latest"
# Get current version
CURRENT=""
if [ -f "$VERSION_FILE" ]; then
CURRENT=$(cat "$VERSION_FILE" | tr -d '[:space:]')
fi
# Fetch latest release info (timeout 3s, fail silently)
RELEASE=$(curl -sf --connect-timeout 3 --max-time 5 "$API_URL" 2>/dev/null) || exit 0
# Parse remote version
REMOTE=$(echo "$RELEASE" | python3 -c "import sys,json; print(json.load(sys.stdin).get('tag_name',''))" 2>/dev/null) || exit 0
# Skip if same version or empty
[ -z "$REMOTE" ] && exit 0
[ "$REMOTE" = "$CURRENT" ] && exit 0
# Find docs.tar.gz download URL
ASSET_URL=$(echo "$RELEASE" | python3 -c "
import sys,json
r=json.load(sys.stdin)
for a in r.get('assets',[]):
if a['name']=='docs.tar.gz':
print(a['browser_download_url'])
break
" 2>/dev/null) || exit 0
[ -z "$ASSET_URL" ] && exit 0
# Download
TMP=$(mktemp /tmp/mipu-docs.XXXXXX.tar.gz)
curl -sfL --connect-timeout 5 --max-time 30 "$ASSET_URL" -o "$TMP" 2>/dev/null || { rm -f "$TMP"; exit 0; }
# Replace docs directory
rm -rf "$DOCS_DIR"
mkdir -p "$SCRIPT_DIR"
tar -xzf "$TMP" -C "$SCRIPT_DIR"
rm -f "$TMP"
# Write new version
echo "$REMOTE" > "$VERSION_FILE"
echo "Mipu API docs updated: ${CURRENT:-none}${REMOTE}"