





















@@ -127,6 +127,29 @@ test -d "$package_root/dist/extensions/slack"
127127test -d "$package_root/dist/extensions/feishu"
128128test -d "$package_root/dist/extensions/memory-lancedb"
129129130+stage_root() {
131+ printf "%s/.openclaw/plugin-runtime-deps" "$HOME"
132+}
133+134+find_external_dep_package() {
135+ local dep_path="$1"
136+ find "$(stage_root)" -maxdepth 12 -path "*/node_modules/$dep_path/package.json" -type f -print -quit 2>/dev/null || true
137+}
138+139+assert_package_dep_absent() {
140+ local channel="$1"
141+ local dep_path="$2"
142+ for candidate in \
143+ "$package_root/dist/extensions/$channel/node_modules/$dep_path/package.json" \
144+ "$package_root/dist/extensions/node_modules/$dep_path/package.json" \
145+ "$package_root/node_modules/$dep_path/package.json"; do
146+ if [ -f "$candidate" ]; then
147+ echo "packaged install should not mutate package tree for $channel: $candidate" >&2
148+ exit 1
149+ fi
150+ done
151+}
152+130153if [ -d "$package_root/dist/extensions/$CHANNEL/node_modules" ]; then
131154 echo "$CHANNEL runtime deps should not be preinstalled in package" >&2
132155 find "$package_root/dist/extensions/$CHANNEL/node_modules" -maxdepth 2 -type f | head -20 >&2 || true
@@ -357,12 +380,10 @@ assert_installed_once() {
357380 if [ "$count" -eq 1 ]; then
358381 return 0
359382 fi
360- if [ "$count" -eq 0 ] && [ -f "$package_root/dist/extensions/$channel/node_modules/$dep_path/package.json" ]; then
361- return 0
362- fi
363383 if [ "$count" -ne 1 ]; then
364- echo "expected exactly one runtime deps install log or installed sentinel for $channel, got $count log lines" >&2
384+ echo "expected exactly one runtime deps install log for $channel, got $count log lines" >&2
365385 cat "$log_file" >&2
386+ find "$(stage_root)" -maxdepth 12 -type f | sort | head -120 >&2 || true
366387 exit 1
367388 fi
368389}
@@ -380,18 +401,22 @@ assert_not_installed() {
380401assert_dep_sentinel() {
381402 local channel="$1"
382403 local dep_path="$2"
383- if [ ! -f "$package_root/dist/extensions/$channel/node_modules/$dep_path/package.json" ]; then
384- echo "missing dependency sentinel for $channel: $dep_path" >&2
385- find "$package_root/dist/extensions/$channel" -maxdepth 3 -type f | sort | head -80 >&2 || true
404+ local sentinel
405+ sentinel="$(find_external_dep_package "$dep_path")"
406+ if [ -z "$sentinel" ]; then
407+ echo "missing external dependency sentinel for $channel: $dep_path" >&2
408+ find "$(stage_root)" -maxdepth 12 -type f | sort | head -120 >&2 || true
386409 exit 1
387410 fi
411+ assert_package_dep_absent "$channel" "$dep_path"
388412}
389413390414assert_no_dep_sentinel() {
391415 local channel="$1"
392416 local dep_path="$2"
393- if [ -f "$package_root/dist/extensions/$channel/node_modules/$dep_path/package.json" ]; then
394- echo "dependency sentinel should be absent before activation for $channel: $dep_path" >&2
417+ assert_package_dep_absent "$channel" "$dep_path"
418+ if [ -n "$(find_external_dep_package "$dep_path")" ]; then
419+ echo "external dependency sentinel should be absent before activation for $channel: $dep_path" >&2
395420 exit 1
396421 fi
397422}
@@ -1063,6 +1088,15 @@ package_root() {
10631088 printf "%s/openclaw" "$(npm root -g)"
10641089}
106510901091+stage_root() {
1092+ printf "%s/.openclaw/plugin-runtime-deps" "$HOME"
1093+}
1094+1095+find_external_dep_package() {
1096+ local dep_path="$1"
1097+ find "$(stage_root)" -maxdepth 12 -path "*/node_modules/$dep_path/package.json" -type f -print -quit 2>/dev/null || true
1098+}
1099+10661100package_tgz="${OPENCLAW_CURRENT_PACKAGE_TGZ:?missing OPENCLAW_CURRENT_PACKAGE_TGZ}"
10671101update_target="file:$package_tgz"
10681102candidate_version="$(node - <<'NODE' "$package_tgz"
@@ -1182,41 +1216,59 @@ assert_dep_sentinel() {
11821216 local channel="$1"
11831217 local dep_path="$2"
11841218 local root
1219+ local sentinel
11851220 root="$(package_root)"
1186- if [ ! -f "$root/dist/extensions/$channel/node_modules/$dep_path/package.json" ]; then
1187- echo "missing dependency sentinel for $channel: $dep_path" >&2
1188- find "$root/dist/extensions/$channel" -maxdepth 3 -type f | sort | head -80 >&2 || true
1221+ sentinel="$(find_external_dep_package "$dep_path")"
1222+ if [ -z "$sentinel" ]; then
1223+ echo "missing external dependency sentinel for $channel: $dep_path" >&2
1224+ find "$(stage_root)" -maxdepth 12 -type f | sort | head -120 >&2 || true
11891225 exit 1
11901226 fi
1227+ assert_no_package_dep_available "$channel" "$dep_path" "$root"
11911228}
1192122911931230assert_no_dep_sentinel() {
11941231 local channel="$1"
11951232 local dep_path="$2"
11961233 local root
11971234 root="$(package_root)"
1198- if [ -f "$root/dist/extensions/$channel/node_modules/$dep_path/package.json" ]; then
1199- echo "dependency sentinel should be absent before repair for $channel: $dep_path" >&2
1235+ assert_no_package_dep_available "$channel" "$dep_path" "$root"
1236+ if [ -n "$(find_external_dep_package "$dep_path")" ]; then
1237+ echo "external dependency sentinel should be absent before repair for $channel: $dep_path" >&2
12001238 exit 1
12011239 fi
12021240}
120312411204-assert_dep_available() {
1242+assert_no_package_dep_available() {
12051243 local channel="$1"
12061244 local dep_path="$2"
1207- local root
1208- root="$(package_root)"
1245+ local root="$3"
12091246 for candidate in \
12101247 "$root/dist/extensions/$channel/node_modules/$dep_path/package.json" \
12111248 "$root/dist/extensions/node_modules/$dep_path/package.json" \
12121249 "$root/node_modules/$dep_path/package.json"; do
12131250 if [ -f "$candidate" ]; then
1214- return 0
1251+ echo "packaged install should not mutate package tree for $channel: $candidate" >&2
1252+ exit 1
12151253 fi
12161254 done
1255+}
1256+1257+assert_dep_available() {
1258+ local channel="$1"
1259+ local dep_path="$2"
1260+ local root
1261+ local sentinel
1262+ root="$(package_root)"
1263+ sentinel="$(find_external_dep_package "$dep_path")"
1264+ if [ -n "$sentinel" ]; then
1265+ assert_no_package_dep_available "$channel" "$dep_path" "$root"
1266+ return 0
1267+ fi
12171268 echo "missing dependency sentinel for $channel: $dep_path" >&2
12181269 find "$root/dist/extensions/$channel" -maxdepth 3 -type f | sort | head -80 >&2 || true
12191270 find "$root/node_modules" -maxdepth 3 -path "*/$dep_path/package.json" -type f -print >&2 || true
1271+ find "$(stage_root)" -maxdepth 12 -type f | sort | head -120 >&2 || true
12201272 exit 1
12211273}
12221274@@ -1225,15 +1277,11 @@ assert_no_dep_available() {
12251277 local dep_path="$2"
12261278 local root
12271279 root="$(package_root)"
1228- for candidate in \
1229- "$root/dist/extensions/$channel/node_modules/$dep_path/package.json" \
1230- "$root/dist/extensions/node_modules/$dep_path/package.json" \
1231- "$root/node_modules/$dep_path/package.json"; do
1232- if [ -f "$candidate" ]; then
1233- echo "dependency sentinel should be absent before repair for $channel: $dep_path ($candidate)" >&2
1234- exit 1
1235- fi
1236- done
1280+ assert_no_package_dep_available "$channel" "$dep_path" "$root"
1281+ if [ -n "$(find_external_dep_package "$dep_path")" ]; then
1282+ echo "dependency sentinel should be absent before repair for $channel: $dep_path" >&2
1283+ exit 1
1284+ fi
12371285}
1238128612391287remove_runtime_dep() {
@@ -1244,6 +1292,7 @@ remove_runtime_dep() {
12441292 rm -rf "$root/dist/extensions/$channel/node_modules"
12451293 rm -rf "$root/dist/extensions/node_modules/$dep_path"
12461294 rm -rf "$root/node_modules/$dep_path"
1295+ rm -rf "$(stage_root)"
12471296}
1248129712491298assert_update_ok() {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。