@aiyiran/myclaw 1.1.20 → 1.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +17 -1
- package/assets/myclaw-artifacts.js +142 -46
- package/index.js +36 -4
- package/package.json +1 -1
- package/server/artifacts_schema.py +32 -0
- package/server/fork.py +615 -0
- package/server/install-linux-guard.sh +88 -0
- package/server/myclaw-guard.sh +121 -0
- package/server/myclaw-sync.service +18 -0
- package/server/sync_workspace.py +398 -83
- package/skills/yiran-skill-media/scripts/registry.py +10 -14
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# myclaw-guard.sh - MyClaw Sync 守卫包装脚本
|
|
3
|
+
# 职责:探测环境、打印完整日志、持续守卫 mc server
|
|
4
|
+
# 用法: nohup bash myclaw-guard.sh >> ~/.openclaw/logs/myclaw-guard.log 2>&1 &
|
|
5
|
+
|
|
6
|
+
LOG_DIR="$HOME/.openclaw/logs"
|
|
7
|
+
LOG_FILE="$LOG_DIR/myclaw-guard.log"
|
|
8
|
+
mkdir -p "$LOG_DIR"
|
|
9
|
+
|
|
10
|
+
log() {
|
|
11
|
+
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "$LOG_FILE"
|
|
12
|
+
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
log "========================================"
|
|
16
|
+
log "myclaw-guard 启动"
|
|
17
|
+
log "USER=$USER HOME=$HOME PID=$$"
|
|
18
|
+
log "原始 PATH=$PATH"
|
|
19
|
+
|
|
20
|
+
# ── 加载 shell 环境(探测 nvm / fnm / volta 等) ──────────────────────────
|
|
21
|
+
for rc in \
|
|
22
|
+
"$HOME/.profile" \
|
|
23
|
+
"$HOME/.bash_profile" \
|
|
24
|
+
"$HOME/.bashrc" \
|
|
25
|
+
"$HOME/.zshrc" \
|
|
26
|
+
"$HOME/.nvm/nvm.sh" \
|
|
27
|
+
"$HOME/.config/nvm/nvm.sh" \
|
|
28
|
+
"/usr/local/share/nvm/nvm.sh" \
|
|
29
|
+
"$HOME/.volta/bin/../load.sh" \
|
|
30
|
+
"$HOME/.fnm/fnm.env"; do
|
|
31
|
+
if [ -f "$rc" ]; then
|
|
32
|
+
log "加载 rc: $rc"
|
|
33
|
+
# shellcheck disable=SC1090
|
|
34
|
+
source "$rc" 2>/dev/null || true
|
|
35
|
+
fi
|
|
36
|
+
done
|
|
37
|
+
|
|
38
|
+
# 手动追加常见 bin 路径(覆盖 nvm/npm global 等)
|
|
39
|
+
for extra_path in \
|
|
40
|
+
"$HOME/.nvm/versions/node/$(ls $HOME/.nvm/versions/node 2>/dev/null | sort -V | tail -1)/bin" \
|
|
41
|
+
"$HOME/.volta/bin" \
|
|
42
|
+
"$HOME/.fnm/aliases/default/bin" \
|
|
43
|
+
"$HOME/.local/bin" \
|
|
44
|
+
"$HOME/.npm-global/bin" \
|
|
45
|
+
"/usr/local/bin" \
|
|
46
|
+
"/usr/bin"; do
|
|
47
|
+
if [ -d "$extra_path" ]; then
|
|
48
|
+
export PATH="$extra_path:$PATH"
|
|
49
|
+
fi
|
|
50
|
+
done
|
|
51
|
+
|
|
52
|
+
log "探测后 PATH=$PATH"
|
|
53
|
+
|
|
54
|
+
# ── 探测 node ─────────────────────────────────────────────────────────────
|
|
55
|
+
NODE_BIN=$(command -v node 2>/dev/null || echo "")
|
|
56
|
+
if [ -n "$NODE_BIN" ]; then
|
|
57
|
+
NODE_VER=$("$NODE_BIN" --version 2>/dev/null || echo "unknown")
|
|
58
|
+
log "node: $NODE_BIN ($NODE_VER)"
|
|
59
|
+
else
|
|
60
|
+
log "警告: 未找到 node"
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
# ── 探测 mc ───────────────────────────────────────────────────────────────
|
|
64
|
+
MC_BIN=$(command -v mc 2>/dev/null || echo "")
|
|
65
|
+
|
|
66
|
+
if [ -z "$MC_BIN" ]; then
|
|
67
|
+
log "which mc 未找到,尝试常见路径..."
|
|
68
|
+
for candidate in \
|
|
69
|
+
"/usr/local/bin/mc" \
|
|
70
|
+
"/usr/bin/mc" \
|
|
71
|
+
"$HOME/.npm-global/bin/mc" \
|
|
72
|
+
"$HOME/.local/bin/mc" \
|
|
73
|
+
"$HOME/.nvm/versions/node/$(ls $HOME/.nvm/versions/node 2>/dev/null | sort -V | tail -1)/bin/mc" \
|
|
74
|
+
"$HOME/.volta/bin/mc" \
|
|
75
|
+
"$HOME/.fnm/aliases/default/bin/mc"; do
|
|
76
|
+
if [ -x "$candidate" ]; then
|
|
77
|
+
MC_BIN="$candidate"
|
|
78
|
+
log "找到 mc: $MC_BIN"
|
|
79
|
+
break
|
|
80
|
+
fi
|
|
81
|
+
done
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
if [ -z "$MC_BIN" ]; then
|
|
85
|
+
log "错误: 无法找到 mc 命令,10秒后重试..."
|
|
86
|
+
sleep 10
|
|
87
|
+
exit 1
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
log "mc: $MC_BIN"
|
|
91
|
+
|
|
92
|
+
# ── 读取 config.json,打印当前 claw 名 ──────────────────────────────────
|
|
93
|
+
CONFIG_FILE="$HOME/.openclaw/myclaw/server/config.json"
|
|
94
|
+
if [ -f "$CONFIG_FILE" ]; then
|
|
95
|
+
CLAW_NAME=$(python3 -c "import json,sys; print(json.load(open('$CONFIG_FILE')).get('claw','?'))" 2>/dev/null || cat "$CONFIG_FILE")
|
|
96
|
+
log "config.json: $CONFIG_FILE"
|
|
97
|
+
log "claw name: $CLAW_NAME"
|
|
98
|
+
else
|
|
99
|
+
log "错误: config.json 不存在 ($CONFIG_FILE)"
|
|
100
|
+
log "请先手动运行一次 mc server <name> 完成注册"
|
|
101
|
+
exit 1
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
# ── PID 文件路径 ─────────────────────────────────────────────────────────
|
|
105
|
+
PID_FILE="$HOME/.openclaw/.myclaw-sync.pid"
|
|
106
|
+
log "pid file: $PID_FILE"
|
|
107
|
+
log "========================================"
|
|
108
|
+
log ""
|
|
109
|
+
|
|
110
|
+
# ── 持续守卫循环 ──────────────────────────────────────────────────────────
|
|
111
|
+
RESTART_COUNT=0
|
|
112
|
+
while true; do
|
|
113
|
+
RESTART_COUNT=$((RESTART_COUNT + 1))
|
|
114
|
+
log "[ 第 $RESTART_COUNT 次启动 ] $MC_BIN server"
|
|
115
|
+
|
|
116
|
+
"$MC_BIN" server
|
|
117
|
+
EXIT_CODE=$?
|
|
118
|
+
|
|
119
|
+
log "mc server 退出,退出码=$EXIT_CODE,3秒后重启..."
|
|
120
|
+
sleep 3
|
|
121
|
+
done
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
[Unit]
|
|
2
|
+
Description=MyClaw Sync Workspace Guard
|
|
3
|
+
Documentation=https://github.com/openclaw/myclaw
|
|
4
|
+
After=network-online.target
|
|
5
|
+
Wants=network-online.target
|
|
6
|
+
|
|
7
|
+
[Service]
|
|
8
|
+
Type=simple
|
|
9
|
+
ExecStart=%h/.openclaw/myclaw/server/myclaw-guard.sh
|
|
10
|
+
Restart=always
|
|
11
|
+
RestartSec=5
|
|
12
|
+
|
|
13
|
+
# 日志追加到文件(与 guard 脚本内的日志合并在一起)
|
|
14
|
+
StandardOutput=append:%h/.openclaw/logs/myclaw-guard.log
|
|
15
|
+
StandardError=append:%h/.openclaw/logs/myclaw-guard.log
|
|
16
|
+
|
|
17
|
+
[Install]
|
|
18
|
+
WantedBy=default.target
|