diff --git a/scripts/release-portal-runtime-prod.sh b/scripts/release-portal-runtime-prod.sh index 57a631b..7028d26 100755 --- a/scripts/release-portal-runtime-prod.sh +++ b/scripts/release-portal-runtime-prod.sh @@ -438,8 +438,42 @@ remount_goosed_after_live_swap() { local ready=0 if [[ ! -x "${docker_bin}" || ! -f "${compose_file}" ]]; then - echo "goosed remount failed: docker or ${compose_file} is unavailable" >&2 - return 1 + say "重启 native goosed 以刷新 Portal/MindSpace bind mount" + mkdir -p "${APP_DIR}" + printf '%s\n' "${marker_value}" > "${marker_host}" + + local gui="gui/$(id -u)" + local port + for port in $(seq 18006 18014); do + launchctl kickstart -k "${gui}/cn.tkmind.goosed-native-${port}" >/dev/null 2>&1 || true + done + + for _ in $(seq 1 60); do + local healthy=1 + if [[ "$(cat "${marker_host}" 2>/dev/null || true)" != "${marker_value}" ]]; then + healthy=0 + fi + if [[ ! -f "${APP_DIR}/mindspace-sandbox-mcp.mjs" ]]; then + healthy=0 + fi + for port in $(seq 18006 18014); do + if [[ "$(curl -skS -m 5 "https://127.0.0.1:${port}/status" 2>/dev/null || true)" != "ok" ]]; then + healthy=0 + fi + done + if [[ "${healthy}" -eq 1 ]]; then + ready=1 + break + fi + sleep 2 + done + + rm -f "${marker_host}" + if [[ "${ready}" -ne 1 ]]; then + echo "goosed remount failed: native goosed pool did not become healthy on the new live directory" >&2 + return 1 + fi + return 0 fi mkdir -p "${APP_DIR}"