
























@@ -69,6 +69,58 @@ openclaw_find_toolcache_node() {
6969return 1
7070}
717172+openclaw_resolve_node_download_version() {
73+local requested_node="$1"
74+case "$requested_node" in
75+*x | *X)
76+local major="${requested_node%%.*}"
77+ curl -fsSL https://nodejs.org/dist/index.json |
78+ OPENCLAW_NODE_MAJOR="$major" python3 -c 'import json, os, sys
79+major = int(os.environ["OPENCLAW_NODE_MAJOR"])
80+for item in json.load(sys.stdin):
81+ version = item.get("version", "")
82+ if version.startswith(f"v{major}."):
83+ print(version)
84+ break
85+' OPENCLAW_NODE_MAJOR="$major"
86+ ;;
87+ v*)
88+printf '%s\n' "$requested_node"
89+ ;;
90+*)
91+printf 'v%s\n' "$requested_node"
92+ ;;
93+esac
94+}
95+96+openclaw_node_download_platform() {
97+local os_name arch_name
98+ os_name="$(uname -s)"
99+ arch_name="$(uname -m)"
100+case "$os_name:$arch_name" in
101+ Linux:x86_64) printf 'linux-x64\n' ;;
102+ Linux:aarch64 | Linux:arm64) printf 'linux-arm64\n' ;;
103+ Darwin:x86_64) printf 'darwin-x64\n' ;;
104+ Darwin:arm64) printf 'darwin-arm64\n' ;;
105+*)
106+return 1
107+ ;;
108+esac
109+}
110+111+openclaw_download_node() {
112+local requested_node="$1"
113+local version platform archive_url install_root
114+ version="$(openclaw_resolve_node_download_version "$requested_node")"
115+ platform="$(openclaw_node_download_platform)" || return 1
116+ install_root="${RUNNER_TEMP:-/tmp}/openclaw-node-${version}-${platform}"
117+ archive_url="https://nodejs.org/dist/${version}/node-${version}-${platform}.tar.xz"
118+ mkdir -p "$install_root"
119+echo "Downloading Node ${version} from ${archive_url}"
120+ curl -fsSL "$archive_url" | tar -xJ -C "$install_root" --strip-components=1
121+ openclaw_prepend_node_bin "$install_root/bin"
122+}
123+72124openclaw_ensure_node() {
73125local requested_node="${1:-}"
74126 requested_node="${requested_node#v}"
@@ -87,6 +139,8 @@ openclaw_ensure_node() {
87139if [[ -n "$node_bin" ]]; then
88140echo "Using Node $("$node_bin" -p 'process.versions.node') from $node_bin"
89141 openclaw_prepend_node_bin "$(dirname "$node_bin")"
142+else
143+ openclaw_download_node "$requested_node" || true
90144fi
9114592146 active_node_version="$(openclaw_active_node_version)"
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。