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>
This commit is contained in:
@@ -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. **中文优先**:面向中文开发者,正文使用中文,代码和技术术语保留英文
|
||||||
|
|||||||
87
plugins/mipu-api/skills/mipu-api/update.py
Normal file
87
plugins/mipu-api/skills/mipu-api/update.py
Normal 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()
|
||||||
@@ -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}"
|
|
||||||
Reference in New Issue
Block a user