@@ -103,47 +103,109 @@ orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && pnpm ui:build"
103103echo " $MSG_CMD_UPDATE_REINSTALL "
104104orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && sudo npm install -g ."
105105
106- # Auto-detect sandbox Dockerfile changes
107- OLD_HASH=$( orb -m " $OPENCLAW_VM_NAME " bash -lc " cat ~/.openclaw/.sandbox-build-hash 2>/dev/null || echo none" )
108- NEW_HASH=$( orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && cat Dockerfile.sandbox Dockerfile.sandbox-browser scripts/sandbox-setup.sh scripts/sandbox-common-setup.sh scripts/sandbox-browser-setup.sh 2>/dev/null | sha256sum | cut -d' ' -f1" )
109- if [ " $OLD_HASH " != " $NEW_HASH " ]; then
110- SANDBOX=true
111- echo " $MSG_CMD_UPDATE_SANDBOX_CHANGED "
106+ # --- Migrate old single hash → per-image hashes (no rebuild) ---
107+ orb -m " $OPENCLAW_VM_NAME " bash -lc '
108+ if [ -f ~/.openclaw/.sandbox-build-hash ] && [ ! -f ~/.openclaw/.sandbox-hash-base ]; then
109+ cd ~/openclaw
110+ cat Dockerfile.sandbox scripts/sandbox-setup.sh 2>/dev/null | sha256sum | cut -c1-64 > ~/.openclaw/.sandbox-hash-base
111+ cat Dockerfile.sandbox-common scripts/sandbox-common-setup.sh 2>/dev/null | sha256sum | cut -c1-64 > ~/.openclaw/.sandbox-hash-common
112+ cat Dockerfile.sandbox-browser scripts/sandbox-browser-setup.sh 2>/dev/null | sha256sum | cut -c1-64 > ~/.openclaw/.sandbox-hash-browser
113+ rm -f ~/.openclaw/.sandbox-build-hash
114+ fi
115+ ' 2> /dev/null || true
116+
117+ # --- Per-image sandbox hash detection ---
118+ BUILD_BASE=false
119+ BUILD_COMMON=false
120+ BUILD_BROWSER=false
121+
122+ if [ " $SANDBOX " = true ]; then
123+ # --sandbox flag: force rebuild all
124+ BUILD_BASE=true; BUILD_COMMON=true; BUILD_BROWSER=true
125+ else
126+ # Single orb round-trip: read 3 old hashes + calculate 3 new hashes
127+ HASH_DATA=$( orb -m " $OPENCLAW_VM_NAME " bash -lc '
128+ cat ~/.openclaw/.sandbox-hash-base 2>/dev/null || echo none
129+ cat ~/.openclaw/.sandbox-hash-common 2>/dev/null || echo none
130+ cat ~/.openclaw/.sandbox-hash-browser 2>/dev/null || echo none
131+ cd ~/openclaw
132+ cat Dockerfile.sandbox scripts/sandbox-setup.sh 2>/dev/null | sha256sum | cut -c1-64
133+ cat Dockerfile.sandbox-common scripts/sandbox-common-setup.sh 2>/dev/null | sha256sum | cut -c1-64
134+ cat Dockerfile.sandbox-browser scripts/sandbox-browser-setup.sh 2>/dev/null | sha256sum | cut -c1-64
135+ ' )
136+ # Parse 6 lines
137+ OLD_BASE=$( echo " $HASH_DATA " | sed -n ' 1p' )
138+ OLD_COMMON=$( echo " $HASH_DATA " | sed -n ' 2p' )
139+ OLD_BROWSER=$( echo " $HASH_DATA " | sed -n ' 3p' )
140+ NEW_BASE=$( echo " $HASH_DATA " | sed -n ' 4p' )
141+ NEW_COMMON=$( echo " $HASH_DATA " | sed -n ' 5p' )
142+ NEW_BROWSER=$( echo " $HASH_DATA " | sed -n ' 6p' )
143+
144+ [ " $OLD_BASE " != " $NEW_BASE " ] && BUILD_BASE=true && BUILD_COMMON=true # cascade
145+ [ " $OLD_COMMON " != " $NEW_COMMON " ] && BUILD_COMMON=true
146+ [ " $OLD_BROWSER " != " $NEW_BROWSER " ] && BUILD_BROWSER=true
147+
148+ if [ " $BUILD_BASE " = true ] || [ " $BUILD_COMMON " = true ] || [ " $BUILD_BROWSER " = true ]; then
149+ SANDBOX=true
150+ echo " $MSG_CMD_UPDATE_SANDBOX_CHANGED "
151+ fi
112152fi
113153
114154if [ " $SANDBOX " = true ]; then
115155 echo " $MSG_CMD_UPDATE_SANDBOX_REBUILD "
116- SANDBOX_OK=true
117- echo " $MSG_CMD_UPDATE_SANDBOX_BASE "
118- echo " $MSG_BUILD_PATIENCE "
119- start_progress
120- if ! orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && sg docker -c './scripts/sandbox-setup.sh'" 2> /dev/null; then
121- SANDBOX_OK=false
122- fi
123- stop_progress
124- echo " $MSG_CMD_UPDATE_SANDBOX_COMMON "
125- echo " $MSG_BUILD_PATIENCE "
126- start_progress
127- if ! orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && sg docker -c './scripts/sandbox-common-setup.sh'" 2> /dev/null; then
128- echo " $MSG_CMD_UPDATE_SANDBOX_COMMON_FAIL "
129- SANDBOX_OK=false
156+
157+ # --- Base ---
158+ if [ " $BUILD_BASE " = true ]; then
159+ echo " $MSG_CMD_UPDATE_SANDBOX_BASE "
160+ echo " $MSG_BUILD_PATIENCE "
161+ start_progress
162+ if orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && sg docker -c './scripts/sandbox-setup.sh'" 2> /dev/null; then
163+ stop_progress
164+ save_sandbox_hash base Dockerfile.sandbox scripts/sandbox-setup.sh
165+ else
166+ stop_progress
167+ BUILD_COMMON=false # cascade: skip common if base failed
168+ fi
169+ else
170+ echo " $MSG_CMD_UPDATE_SANDBOX_BASE_SKIP "
130171 fi
131- stop_progress
132- echo " $MSG_CMD_UPDATE_SANDBOX_BROWSER "
133- echo " $MSG_BUILD_PATIENCE "
134- start_progress
135- if ! orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && sg docker -c './scripts/sandbox-browser-setup.sh'" 2> /dev/null; then
136- echo " $MSG_CMD_UPDATE_SANDBOX_BROWSER_FAIL "
137- SANDBOX_OK=false
172+
173+ # --- Common ---
174+ if [ " $BUILD_COMMON " = true ]; then
175+ [ " $BUILD_BASE " = true ] && [ " $OLD_COMMON " = " $NEW_COMMON " ] && echo " $MSG_CMD_UPDATE_SANDBOX_COMMON_CASCADE "
176+ echo " $MSG_CMD_UPDATE_SANDBOX_COMMON "
177+ echo " $MSG_BUILD_PATIENCE "
178+ start_progress
179+ if orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && sg docker -c './scripts/sandbox-common-setup.sh'" 2> /dev/null; then
180+ stop_progress
181+ save_sandbox_hash common Dockerfile.sandbox-common scripts/sandbox-common-setup.sh
182+ else
183+ stop_progress
184+ echo " $MSG_CMD_UPDATE_SANDBOX_COMMON_FAIL "
185+ fi
186+ else
187+ echo " $MSG_CMD_UPDATE_SANDBOX_COMMON_SKIP "
138188 fi
139- stop_progress
140- echo " $MSG_CMD_UPDATE_SANDBOX_NOTE "
141- # Save new sandbox build hash only if all builds succeeded
142- if [ " $SANDBOX_OK " = true ]; then
143- orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && cat Dockerfile.sandbox Dockerfile.sandbox-browser scripts/sandbox-setup.sh scripts/sandbox-common-setup.sh scripts/sandbox-browser-setup.sh 2>/dev/null | sha256sum | cut -d' ' -f1 > ~/.openclaw/.sandbox-build-hash"
189+
190+ # --- Browser (independent) ---
191+ if [ " $BUILD_BROWSER " = true ]; then
192+ echo " $MSG_CMD_UPDATE_SANDBOX_BROWSER "
193+ echo " $MSG_BUILD_PATIENCE "
194+ start_progress
195+ if orb -m " $OPENCLAW_VM_NAME " bash -lc " cd ~/openclaw && sg docker -c './scripts/sandbox-browser-setup.sh'" 2> /dev/null; then
196+ stop_progress
197+ save_sandbox_hash browser Dockerfile.sandbox-browser scripts/sandbox-browser-setup.sh
198+ else
199+ stop_progress
200+ echo " $MSG_CMD_UPDATE_SANDBOX_BROWSER_FAIL "
201+ fi
144202 else
145- echo " $MSG_CMD_UPDATE_SANDBOX_PARTIAL "
203+ echo " $MSG_CMD_UPDATE_SANDBOX_BROWSER_SKIP "
146204 fi
205+
206+ echo " $MSG_CMD_UPDATE_SANDBOX_NOTE "
207+ # Clean up old monolithic hash file
208+ orb -m " $OPENCLAW_VM_NAME " bash -lc " rm -f ~/.openclaw/.sandbox-build-hash" 2> /dev/null || true
147209fi
148210
149211GATEWAY_STOPPED=false
0 commit comments