openclacky 1.2.8 → 1.2.9

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.
@@ -17,12 +17,15 @@ DEFAULT_NPM_REGISTRY="https://registry.npmjs.org"
17
17
  DEFAULT_MISE_INSTALL_URL="https://mise.run"
18
18
 
19
19
  CN_CDN_BASE_URL="https://oss.1024code.com"
20
+ CN_CDN_FALLBACK_URL="https://clackyai-1258723534.cos.ap-guangzhou.myqcloud.com"
20
21
  CN_ALIYUN_MIRROR="https://mirrors.aliyun.com"
21
- CN_MISE_INSTALL_URL="${CN_CDN_BASE_URL}/mise.sh"
22
- CN_RUBY_PRECOMPILED_URL="${CN_CDN_BASE_URL}/ruby/ruby-{version}.{platform}.tar.gz"
23
22
  CN_RUBYGEMS_URL="${CN_ALIYUN_MIRROR}/rubygems/"
24
23
  CN_NPM_REGISTRY="https://registry.npmmirror.com"
25
24
  CN_NODE_MIRROR_URL="https://cdn.npmmirror.com/binaries/node/"
25
+
26
+ # Derived from CN_CDN_BASE_URL — always set via _apply_cdn_base_url()
27
+ CN_MISE_INSTALL_URL="${CN_CDN_BASE_URL}/mise.sh"
28
+ CN_RUBY_PRECOMPILED_URL="${CN_CDN_BASE_URL}/ruby/ruby-{version}.{platform}.tar.gz"
26
29
  CN_GEM_BASE_URL="${CN_CDN_BASE_URL}/openclacky"
27
30
  CN_GEM_LATEST_URL="${CN_GEM_BASE_URL}/latest.txt"
28
31
 
@@ -85,6 +88,37 @@ _probe_url_with_retry() {
85
88
  echo "$result"
86
89
  }
87
90
 
91
+ # --------------------------------------------------------------------------
92
+ # CN CDN resolution helpers
93
+ # --------------------------------------------------------------------------
94
+
95
+ # Probe primary CDN then fallback; echoes the reachable base URL or exits 1
96
+ _resolve_cdn_base_url() {
97
+ local result
98
+ result=$(_probe_url_with_retry "$CN_CDN_BASE_URL")
99
+ _print_probe_result "CN CDN (oss.1024code.com)" "$result"
100
+ ! _is_slow_or_unreachable "$result" && return 0
101
+
102
+ print_warning "CN CDN unreachable — trying fallback..."
103
+ result=$(_probe_url_with_retry "$CN_CDN_FALLBACK_URL")
104
+ _print_probe_result "CN CDN fallback" "$result"
105
+ if _is_slow_or_unreachable "$result"; then
106
+ print_error "CN CDN and fallback both unreachable — cannot install."
107
+ exit 1
108
+ fi
109
+ CN_CDN_BASE_URL="$CN_CDN_FALLBACK_URL"
110
+ }
111
+
112
+ # Apply a resolved base URL to all CDN-derived variables
113
+ _apply_cdn_base_url() {
114
+ local base="$1"
115
+ CN_CDN_BASE_URL="$base"
116
+ CN_MISE_INSTALL_URL="${base}/mise.sh"
117
+ CN_RUBY_PRECOMPILED_URL="${base}/ruby/ruby-{version}.{platform}.tar.gz"
118
+ CN_GEM_BASE_URL="${base}/openclacky"
119
+ CN_GEM_LATEST_URL="${CN_GEM_BASE_URL}/latest.txt"
120
+ }
121
+
88
122
  # --------------------------------------------------------------------------
89
123
  # detect_network_region — sets USE_CN_MIRRORS and active mirror variables
90
124
  # --------------------------------------------------------------------------
@@ -92,42 +126,48 @@ detect_network_region() {
92
126
  print_step "Network pre-flight check..."
93
127
  echo ""
94
128
 
95
- local google_result baidu_result
96
- google_result=$(_probe_url "https://www.google.com")
97
- baidu_result=$(_probe_url "https://www.baidu.com")
129
+ local probe_google="https://www.google.com"
130
+ local probe_github="https://raw.githubusercontent.com"
131
+ local probe_baidu="https://www.baidu.com"
98
132
 
99
- _print_probe_result "google.com" "$google_result"
100
- _print_probe_result "baidu.com" "$baidu_result"
133
+ local google_result github_result baidu_result
134
+ google_result=$(_probe_url "$probe_google")
135
+ github_result=$(_probe_url "$probe_github")
136
+ baidu_result=$(_probe_url "$probe_baidu")
101
137
 
102
- local google_ok=false baidu_ok=false
138
+ _print_probe_result "google.com" "$google_result"
139
+ _print_probe_result "raw.githubusercontent.com" "$github_result"
140
+ _print_probe_result "baidu.com" "$baidu_result"
141
+
142
+ local google_ok=false github_ok=false baidu_ok=false
103
143
  ! _is_slow_or_unreachable "$google_result" && google_ok=true
144
+ ! _is_slow_or_unreachable "$github_result" && github_ok=true
104
145
  ! _is_slow_or_unreachable "$baidu_result" && baidu_ok=true
105
146
 
106
- if [ "$google_ok" = true ]; then
147
+ if [ "$google_ok" = true ] && [ "$github_ok" = true ]; then
107
148
  NETWORK_REGION="global"
108
149
  print_success "Region: global"
109
150
  elif [ "$baidu_ok" = true ]; then
110
151
  NETWORK_REGION="china"
111
152
  print_success "Region: china"
112
153
  else
113
- NETWORK_REGION="unknown"
114
- print_warning "Region: unknown (both unreachable)"
154
+ print_error "Region: unknown (all unreachable) — cannot install."
155
+ exit 1
115
156
  fi
116
157
  echo ""
117
158
 
118
159
  if [ "$NETWORK_REGION" = "china" ]; then
119
- local cdn_result mirror_result
120
- cdn_result=$(_probe_url_with_retry "$CN_MISE_INSTALL_URL")
121
- mirror_result=$(_probe_url_with_retry "$CN_RUBYGEMS_URL")
160
+ _resolve_cdn_base_url
161
+ _apply_cdn_base_url "$CN_CDN_BASE_URL"
122
162
 
123
- _print_probe_result "CN CDN (mise/Ruby)" "$cdn_result"
124
- _print_probe_result "Aliyun (gem)" "$mirror_result"
163
+ local mirror_result
164
+ mirror_result=$(_probe_url_with_retry "$CN_ALIYUN_MIRROR")
165
+ _print_probe_result "Aliyun mirror" "$mirror_result"
125
166
 
126
- local cdn_ok=false mirror_ok=false
127
- ! _is_slow_or_unreachable "$cdn_result" && cdn_ok=true
167
+ local mirror_ok=false
128
168
  ! _is_slow_or_unreachable "$mirror_result" && mirror_ok=true
129
169
 
130
- if [ "$cdn_ok" = true ] || [ "$mirror_ok" = true ]; then
170
+ if [ "$mirror_ok" = true ]; then
131
171
  USE_CN_MIRRORS=true
132
172
  MISE_INSTALL_URL="$CN_MISE_INSTALL_URL"
133
173
  RUBYGEMS_INSTALL_URL="$CN_RUBYGEMS_URL"
@@ -136,19 +176,10 @@ detect_network_region() {
136
176
  RUBY_VERSION_SPEC="ruby@3.4.8"
137
177
  print_info "CN mirrors applied"
138
178
  else
139
- print_warning "CN mirrors unreachable — falling back to global sources"
179
+ print_error "CN mirrors unreachable — cannot install."
180
+ exit 1
140
181
  fi
141
182
  else
142
- local rubygems_result mise_result
143
- rubygems_result=$(_probe_url_with_retry "$DEFAULT_RUBYGEMS_URL")
144
- mise_result=$(_probe_url_with_retry "$DEFAULT_MISE_INSTALL_URL")
145
-
146
- _print_probe_result "RubyGems" "$rubygems_result"
147
- _print_probe_result "mise.run" "$mise_result"
148
-
149
- _is_slow_or_unreachable "$rubygems_result" && print_warning "RubyGems is slow/unreachable."
150
- _is_slow_or_unreachable "$mise_result" && print_warning "mise.run is slow/unreachable."
151
-
152
183
  USE_CN_MIRRORS=false
153
184
  RUBY_VERSION_SPEC="ruby@3"
154
185
  fi
data/scripts/install.sh CHANGED
@@ -129,12 +129,15 @@ DEFAULT_NPM_REGISTRY="https://registry.npmjs.org"
129
129
  DEFAULT_MISE_INSTALL_URL="https://mise.run"
130
130
 
131
131
  CN_CDN_BASE_URL="https://oss.1024code.com"
132
+ CN_CDN_FALLBACK_URL="https://clackyai-1258723534.cos.ap-guangzhou.myqcloud.com"
132
133
  CN_ALIYUN_MIRROR="https://mirrors.aliyun.com"
133
- CN_MISE_INSTALL_URL="${CN_CDN_BASE_URL}/mise.sh"
134
- CN_RUBY_PRECOMPILED_URL="${CN_CDN_BASE_URL}/ruby/ruby-{version}.{platform}.tar.gz"
135
134
  CN_RUBYGEMS_URL="${CN_ALIYUN_MIRROR}/rubygems/"
136
135
  CN_NPM_REGISTRY="https://registry.npmmirror.com"
137
136
  CN_NODE_MIRROR_URL="https://cdn.npmmirror.com/binaries/node/"
137
+
138
+ # Derived from CN_CDN_BASE_URL — always set via _apply_cdn_base_url()
139
+ CN_MISE_INSTALL_URL="${CN_CDN_BASE_URL}/mise.sh"
140
+ CN_RUBY_PRECOMPILED_URL="${CN_CDN_BASE_URL}/ruby/ruby-{version}.{platform}.tar.gz"
138
141
  CN_GEM_BASE_URL="${CN_CDN_BASE_URL}/openclacky"
139
142
  CN_GEM_LATEST_URL="${CN_GEM_BASE_URL}/latest.txt"
140
143
 
@@ -197,6 +200,37 @@ _probe_url_with_retry() {
197
200
  echo "$result"
198
201
  }
199
202
 
203
+ # --------------------------------------------------------------------------
204
+ # CN CDN resolution helpers
205
+ # --------------------------------------------------------------------------
206
+
207
+ # Probe primary CDN then fallback; echoes the reachable base URL or exits 1
208
+ _resolve_cdn_base_url() {
209
+ local result
210
+ result=$(_probe_url_with_retry "$CN_CDN_BASE_URL")
211
+ _print_probe_result "CN CDN (oss.1024code.com)" "$result"
212
+ ! _is_slow_or_unreachable "$result" && return 0
213
+
214
+ print_warning "CN CDN unreachable — trying fallback..."
215
+ result=$(_probe_url_with_retry "$CN_CDN_FALLBACK_URL")
216
+ _print_probe_result "CN CDN fallback" "$result"
217
+ if _is_slow_or_unreachable "$result"; then
218
+ print_error "CN CDN and fallback both unreachable — cannot install."
219
+ exit 1
220
+ fi
221
+ CN_CDN_BASE_URL="$CN_CDN_FALLBACK_URL"
222
+ }
223
+
224
+ # Apply a resolved base URL to all CDN-derived variables
225
+ _apply_cdn_base_url() {
226
+ local base="$1"
227
+ CN_CDN_BASE_URL="$base"
228
+ CN_MISE_INSTALL_URL="${base}/mise.sh"
229
+ CN_RUBY_PRECOMPILED_URL="${base}/ruby/ruby-{version}.{platform}.tar.gz"
230
+ CN_GEM_BASE_URL="${base}/openclacky"
231
+ CN_GEM_LATEST_URL="${CN_GEM_BASE_URL}/latest.txt"
232
+ }
233
+
200
234
  # --------------------------------------------------------------------------
201
235
  # detect_network_region — sets USE_CN_MIRRORS and active mirror variables
202
236
  # --------------------------------------------------------------------------
@@ -204,42 +238,48 @@ detect_network_region() {
204
238
  print_step "Network pre-flight check..."
205
239
  echo ""
206
240
 
207
- local google_result baidu_result
208
- google_result=$(_probe_url "https://www.google.com")
209
- baidu_result=$(_probe_url "https://www.baidu.com")
241
+ local probe_google="https://www.google.com"
242
+ local probe_github="https://raw.githubusercontent.com"
243
+ local probe_baidu="https://www.baidu.com"
244
+
245
+ local google_result github_result baidu_result
246
+ google_result=$(_probe_url "$probe_google")
247
+ github_result=$(_probe_url "$probe_github")
248
+ baidu_result=$(_probe_url "$probe_baidu")
210
249
 
211
- _print_probe_result "google.com" "$google_result"
212
- _print_probe_result "baidu.com" "$baidu_result"
250
+ _print_probe_result "google.com" "$google_result"
251
+ _print_probe_result "raw.githubusercontent.com" "$github_result"
252
+ _print_probe_result "baidu.com" "$baidu_result"
213
253
 
214
- local google_ok=false baidu_ok=false
254
+ local google_ok=false github_ok=false baidu_ok=false
215
255
  ! _is_slow_or_unreachable "$google_result" && google_ok=true
256
+ ! _is_slow_or_unreachable "$github_result" && github_ok=true
216
257
  ! _is_slow_or_unreachable "$baidu_result" && baidu_ok=true
217
258
 
218
- if [ "$google_ok" = true ]; then
259
+ if [ "$google_ok" = true ] && [ "$github_ok" = true ]; then
219
260
  NETWORK_REGION="global"
220
261
  print_success "Region: global"
221
262
  elif [ "$baidu_ok" = true ]; then
222
263
  NETWORK_REGION="china"
223
264
  print_success "Region: china"
224
265
  else
225
- NETWORK_REGION="unknown"
226
- print_warning "Region: unknown (both unreachable)"
266
+ print_error "Region: unknown (all unreachable) — cannot install."
267
+ exit 1
227
268
  fi
228
269
  echo ""
229
270
 
230
271
  if [ "$NETWORK_REGION" = "china" ]; then
231
- local cdn_result mirror_result
232
- cdn_result=$(_probe_url_with_retry "$CN_MISE_INSTALL_URL")
233
- mirror_result=$(_probe_url_with_retry "$CN_RUBYGEMS_URL")
272
+ _resolve_cdn_base_url
273
+ _apply_cdn_base_url "$CN_CDN_BASE_URL"
234
274
 
235
- _print_probe_result "CN CDN (mise/Ruby)" "$cdn_result"
236
- _print_probe_result "Aliyun (gem)" "$mirror_result"
275
+ local mirror_result
276
+ mirror_result=$(_probe_url_with_retry "$CN_ALIYUN_MIRROR")
277
+ _print_probe_result "Aliyun mirror" "$mirror_result"
237
278
 
238
- local cdn_ok=false mirror_ok=false
239
- ! _is_slow_or_unreachable "$cdn_result" && cdn_ok=true
279
+ local mirror_ok=false
240
280
  ! _is_slow_or_unreachable "$mirror_result" && mirror_ok=true
241
281
 
242
- if [ "$cdn_ok" = true ] || [ "$mirror_ok" = true ]; then
282
+ if [ "$mirror_ok" = true ]; then
243
283
  USE_CN_MIRRORS=true
244
284
  MISE_INSTALL_URL="$CN_MISE_INSTALL_URL"
245
285
  RUBYGEMS_INSTALL_URL="$CN_RUBYGEMS_URL"
@@ -248,19 +288,10 @@ detect_network_region() {
248
288
  RUBY_VERSION_SPEC="ruby@3.4.8"
249
289
  print_info "CN mirrors applied"
250
290
  else
251
- print_warning "CN mirrors unreachable — falling back to global sources"
291
+ print_error "CN mirrors unreachable — cannot install."
292
+ exit 1
252
293
  fi
253
294
  else
254
- local rubygems_result mise_result
255
- rubygems_result=$(_probe_url_with_retry "$DEFAULT_RUBYGEMS_URL")
256
- mise_result=$(_probe_url_with_retry "$DEFAULT_MISE_INSTALL_URL")
257
-
258
- _print_probe_result "RubyGems" "$rubygems_result"
259
- _print_probe_result "mise.run" "$mise_result"
260
-
261
- _is_slow_or_unreachable "$rubygems_result" && print_warning "RubyGems is slow/unreachable."
262
- _is_slow_or_unreachable "$mise_result" && print_warning "mise.run is slow/unreachable."
263
-
264
295
  USE_CN_MIRRORS=false
265
296
  RUBY_VERSION_SPEC="ruby@3"
266
297
  fi
@@ -125,12 +125,15 @@ DEFAULT_NPM_REGISTRY="https://registry.npmjs.org"
125
125
  DEFAULT_MISE_INSTALL_URL="https://mise.run"
126
126
 
127
127
  CN_CDN_BASE_URL="https://oss.1024code.com"
128
+ CN_CDN_FALLBACK_URL="https://clackyai-1258723534.cos.ap-guangzhou.myqcloud.com"
128
129
  CN_ALIYUN_MIRROR="https://mirrors.aliyun.com"
129
- CN_MISE_INSTALL_URL="${CN_CDN_BASE_URL}/mise.sh"
130
- CN_RUBY_PRECOMPILED_URL="${CN_CDN_BASE_URL}/ruby/ruby-{version}.{platform}.tar.gz"
131
130
  CN_RUBYGEMS_URL="${CN_ALIYUN_MIRROR}/rubygems/"
132
131
  CN_NPM_REGISTRY="https://registry.npmmirror.com"
133
132
  CN_NODE_MIRROR_URL="https://cdn.npmmirror.com/binaries/node/"
133
+
134
+ # Derived from CN_CDN_BASE_URL — always set via _apply_cdn_base_url()
135
+ CN_MISE_INSTALL_URL="${CN_CDN_BASE_URL}/mise.sh"
136
+ CN_RUBY_PRECOMPILED_URL="${CN_CDN_BASE_URL}/ruby/ruby-{version}.{platform}.tar.gz"
134
137
  CN_GEM_BASE_URL="${CN_CDN_BASE_URL}/openclacky"
135
138
  CN_GEM_LATEST_URL="${CN_GEM_BASE_URL}/latest.txt"
136
139
 
@@ -193,6 +196,37 @@ _probe_url_with_retry() {
193
196
  echo "$result"
194
197
  }
195
198
 
199
+ # --------------------------------------------------------------------------
200
+ # CN CDN resolution helpers
201
+ # --------------------------------------------------------------------------
202
+
203
+ # Probe primary CDN then fallback; echoes the reachable base URL or exits 1
204
+ _resolve_cdn_base_url() {
205
+ local result
206
+ result=$(_probe_url_with_retry "$CN_CDN_BASE_URL")
207
+ _print_probe_result "CN CDN (oss.1024code.com)" "$result"
208
+ ! _is_slow_or_unreachable "$result" && return 0
209
+
210
+ print_warning "CN CDN unreachable — trying fallback..."
211
+ result=$(_probe_url_with_retry "$CN_CDN_FALLBACK_URL")
212
+ _print_probe_result "CN CDN fallback" "$result"
213
+ if _is_slow_or_unreachable "$result"; then
214
+ print_error "CN CDN and fallback both unreachable — cannot install."
215
+ exit 1
216
+ fi
217
+ CN_CDN_BASE_URL="$CN_CDN_FALLBACK_URL"
218
+ }
219
+
220
+ # Apply a resolved base URL to all CDN-derived variables
221
+ _apply_cdn_base_url() {
222
+ local base="$1"
223
+ CN_CDN_BASE_URL="$base"
224
+ CN_MISE_INSTALL_URL="${base}/mise.sh"
225
+ CN_RUBY_PRECOMPILED_URL="${base}/ruby/ruby-{version}.{platform}.tar.gz"
226
+ CN_GEM_BASE_URL="${base}/openclacky"
227
+ CN_GEM_LATEST_URL="${CN_GEM_BASE_URL}/latest.txt"
228
+ }
229
+
196
230
  # --------------------------------------------------------------------------
197
231
  # detect_network_region — sets USE_CN_MIRRORS and active mirror variables
198
232
  # --------------------------------------------------------------------------
@@ -200,42 +234,48 @@ detect_network_region() {
200
234
  print_step "Network pre-flight check..."
201
235
  echo ""
202
236
 
203
- local google_result baidu_result
204
- google_result=$(_probe_url "https://www.google.com")
205
- baidu_result=$(_probe_url "https://www.baidu.com")
237
+ local probe_google="https://www.google.com"
238
+ local probe_github="https://raw.githubusercontent.com"
239
+ local probe_baidu="https://www.baidu.com"
240
+
241
+ local google_result github_result baidu_result
242
+ google_result=$(_probe_url "$probe_google")
243
+ github_result=$(_probe_url "$probe_github")
244
+ baidu_result=$(_probe_url "$probe_baidu")
206
245
 
207
- _print_probe_result "google.com" "$google_result"
208
- _print_probe_result "baidu.com" "$baidu_result"
246
+ _print_probe_result "google.com" "$google_result"
247
+ _print_probe_result "raw.githubusercontent.com" "$github_result"
248
+ _print_probe_result "baidu.com" "$baidu_result"
209
249
 
210
- local google_ok=false baidu_ok=false
250
+ local google_ok=false github_ok=false baidu_ok=false
211
251
  ! _is_slow_or_unreachable "$google_result" && google_ok=true
252
+ ! _is_slow_or_unreachable "$github_result" && github_ok=true
212
253
  ! _is_slow_or_unreachable "$baidu_result" && baidu_ok=true
213
254
 
214
- if [ "$google_ok" = true ]; then
255
+ if [ "$google_ok" = true ] && [ "$github_ok" = true ]; then
215
256
  NETWORK_REGION="global"
216
257
  print_success "Region: global"
217
258
  elif [ "$baidu_ok" = true ]; then
218
259
  NETWORK_REGION="china"
219
260
  print_success "Region: china"
220
261
  else
221
- NETWORK_REGION="unknown"
222
- print_warning "Region: unknown (both unreachable)"
262
+ print_error "Region: unknown (all unreachable) — cannot install."
263
+ exit 1
223
264
  fi
224
265
  echo ""
225
266
 
226
267
  if [ "$NETWORK_REGION" = "china" ]; then
227
- local cdn_result mirror_result
228
- cdn_result=$(_probe_url_with_retry "$CN_MISE_INSTALL_URL")
229
- mirror_result=$(_probe_url_with_retry "$CN_RUBYGEMS_URL")
268
+ _resolve_cdn_base_url
269
+ _apply_cdn_base_url "$CN_CDN_BASE_URL"
230
270
 
231
- _print_probe_result "CN CDN (mise/Ruby)" "$cdn_result"
232
- _print_probe_result "Aliyun (gem)" "$mirror_result"
271
+ local mirror_result
272
+ mirror_result=$(_probe_url_with_retry "$CN_ALIYUN_MIRROR")
273
+ _print_probe_result "Aliyun mirror" "$mirror_result"
233
274
 
234
- local cdn_ok=false mirror_ok=false
235
- ! _is_slow_or_unreachable "$cdn_result" && cdn_ok=true
275
+ local mirror_ok=false
236
276
  ! _is_slow_or_unreachable "$mirror_result" && mirror_ok=true
237
277
 
238
- if [ "$cdn_ok" = true ] || [ "$mirror_ok" = true ]; then
278
+ if [ "$mirror_ok" = true ]; then
239
279
  USE_CN_MIRRORS=true
240
280
  MISE_INSTALL_URL="$CN_MISE_INSTALL_URL"
241
281
  RUBYGEMS_INSTALL_URL="$CN_RUBYGEMS_URL"
@@ -244,19 +284,10 @@ detect_network_region() {
244
284
  RUBY_VERSION_SPEC="ruby@3.4.8"
245
285
  print_info "CN mirrors applied"
246
286
  else
247
- print_warning "CN mirrors unreachable — falling back to global sources"
287
+ print_error "CN mirrors unreachable — cannot install."
288
+ exit 1
248
289
  fi
249
290
  else
250
- local rubygems_result mise_result
251
- rubygems_result=$(_probe_url_with_retry "$DEFAULT_RUBYGEMS_URL")
252
- mise_result=$(_probe_url_with_retry "$DEFAULT_MISE_INSTALL_URL")
253
-
254
- _print_probe_result "RubyGems" "$rubygems_result"
255
- _print_probe_result "mise.run" "$mise_result"
256
-
257
- _is_slow_or_unreachable "$rubygems_result" && print_warning "RubyGems is slow/unreachable."
258
- _is_slow_or_unreachable "$mise_result" && print_warning "mise.run is slow/unreachable."
259
-
260
291
  USE_CN_MIRRORS=false
261
292
  RUBY_VERSION_SPEC="ruby@3"
262
293
  fi
@@ -129,12 +129,15 @@ DEFAULT_NPM_REGISTRY="https://registry.npmjs.org"
129
129
  DEFAULT_MISE_INSTALL_URL="https://mise.run"
130
130
 
131
131
  CN_CDN_BASE_URL="https://oss.1024code.com"
132
+ CN_CDN_FALLBACK_URL="https://clackyai-1258723534.cos.ap-guangzhou.myqcloud.com"
132
133
  CN_ALIYUN_MIRROR="https://mirrors.aliyun.com"
133
- CN_MISE_INSTALL_URL="${CN_CDN_BASE_URL}/mise.sh"
134
- CN_RUBY_PRECOMPILED_URL="${CN_CDN_BASE_URL}/ruby/ruby-{version}.{platform}.tar.gz"
135
134
  CN_RUBYGEMS_URL="${CN_ALIYUN_MIRROR}/rubygems/"
136
135
  CN_NPM_REGISTRY="https://registry.npmmirror.com"
137
136
  CN_NODE_MIRROR_URL="https://cdn.npmmirror.com/binaries/node/"
137
+
138
+ # Derived from CN_CDN_BASE_URL — always set via _apply_cdn_base_url()
139
+ CN_MISE_INSTALL_URL="${CN_CDN_BASE_URL}/mise.sh"
140
+ CN_RUBY_PRECOMPILED_URL="${CN_CDN_BASE_URL}/ruby/ruby-{version}.{platform}.tar.gz"
138
141
  CN_GEM_BASE_URL="${CN_CDN_BASE_URL}/openclacky"
139
142
  CN_GEM_LATEST_URL="${CN_GEM_BASE_URL}/latest.txt"
140
143
 
@@ -197,6 +200,37 @@ _probe_url_with_retry() {
197
200
  echo "$result"
198
201
  }
199
202
 
203
+ # --------------------------------------------------------------------------
204
+ # CN CDN resolution helpers
205
+ # --------------------------------------------------------------------------
206
+
207
+ # Probe primary CDN then fallback; echoes the reachable base URL or exits 1
208
+ _resolve_cdn_base_url() {
209
+ local result
210
+ result=$(_probe_url_with_retry "$CN_CDN_BASE_URL")
211
+ _print_probe_result "CN CDN (oss.1024code.com)" "$result"
212
+ ! _is_slow_or_unreachable "$result" && return 0
213
+
214
+ print_warning "CN CDN unreachable — trying fallback..."
215
+ result=$(_probe_url_with_retry "$CN_CDN_FALLBACK_URL")
216
+ _print_probe_result "CN CDN fallback" "$result"
217
+ if _is_slow_or_unreachable "$result"; then
218
+ print_error "CN CDN and fallback both unreachable — cannot install."
219
+ exit 1
220
+ fi
221
+ CN_CDN_BASE_URL="$CN_CDN_FALLBACK_URL"
222
+ }
223
+
224
+ # Apply a resolved base URL to all CDN-derived variables
225
+ _apply_cdn_base_url() {
226
+ local base="$1"
227
+ CN_CDN_BASE_URL="$base"
228
+ CN_MISE_INSTALL_URL="${base}/mise.sh"
229
+ CN_RUBY_PRECOMPILED_URL="${base}/ruby/ruby-{version}.{platform}.tar.gz"
230
+ CN_GEM_BASE_URL="${base}/openclacky"
231
+ CN_GEM_LATEST_URL="${CN_GEM_BASE_URL}/latest.txt"
232
+ }
233
+
200
234
  # --------------------------------------------------------------------------
201
235
  # detect_network_region — sets USE_CN_MIRRORS and active mirror variables
202
236
  # --------------------------------------------------------------------------
@@ -204,42 +238,48 @@ detect_network_region() {
204
238
  print_step "Network pre-flight check..."
205
239
  echo ""
206
240
 
207
- local google_result baidu_result
208
- google_result=$(_probe_url "https://www.google.com")
209
- baidu_result=$(_probe_url "https://www.baidu.com")
241
+ local probe_google="https://www.google.com"
242
+ local probe_github="https://raw.githubusercontent.com"
243
+ local probe_baidu="https://www.baidu.com"
210
244
 
211
- _print_probe_result "google.com" "$google_result"
212
- _print_probe_result "baidu.com" "$baidu_result"
245
+ local google_result github_result baidu_result
246
+ google_result=$(_probe_url "$probe_google")
247
+ github_result=$(_probe_url "$probe_github")
248
+ baidu_result=$(_probe_url "$probe_baidu")
213
249
 
214
- local google_ok=false baidu_ok=false
250
+ _print_probe_result "google.com" "$google_result"
251
+ _print_probe_result "raw.githubusercontent.com" "$github_result"
252
+ _print_probe_result "baidu.com" "$baidu_result"
253
+
254
+ local google_ok=false github_ok=false baidu_ok=false
215
255
  ! _is_slow_or_unreachable "$google_result" && google_ok=true
256
+ ! _is_slow_or_unreachable "$github_result" && github_ok=true
216
257
  ! _is_slow_or_unreachable "$baidu_result" && baidu_ok=true
217
258
 
218
- if [ "$google_ok" = true ]; then
259
+ if [ "$google_ok" = true ] && [ "$github_ok" = true ]; then
219
260
  NETWORK_REGION="global"
220
261
  print_success "Region: global"
221
262
  elif [ "$baidu_ok" = true ]; then
222
263
  NETWORK_REGION="china"
223
264
  print_success "Region: china"
224
265
  else
225
- NETWORK_REGION="unknown"
226
- print_warning "Region: unknown (both unreachable)"
266
+ print_error "Region: unknown (all unreachable) — cannot install."
267
+ exit 1
227
268
  fi
228
269
  echo ""
229
270
 
230
271
  if [ "$NETWORK_REGION" = "china" ]; then
231
- local cdn_result mirror_result
232
- cdn_result=$(_probe_url_with_retry "$CN_MISE_INSTALL_URL")
233
- mirror_result=$(_probe_url_with_retry "$CN_RUBYGEMS_URL")
272
+ _resolve_cdn_base_url
273
+ _apply_cdn_base_url "$CN_CDN_BASE_URL"
234
274
 
235
- _print_probe_result "CN CDN (mise/Ruby)" "$cdn_result"
236
- _print_probe_result "Aliyun (gem)" "$mirror_result"
275
+ local mirror_result
276
+ mirror_result=$(_probe_url_with_retry "$CN_ALIYUN_MIRROR")
277
+ _print_probe_result "Aliyun mirror" "$mirror_result"
237
278
 
238
- local cdn_ok=false mirror_ok=false
239
- ! _is_slow_or_unreachable "$cdn_result" && cdn_ok=true
279
+ local mirror_ok=false
240
280
  ! _is_slow_or_unreachable "$mirror_result" && mirror_ok=true
241
281
 
242
- if [ "$cdn_ok" = true ] || [ "$mirror_ok" = true ]; then
282
+ if [ "$mirror_ok" = true ]; then
243
283
  USE_CN_MIRRORS=true
244
284
  MISE_INSTALL_URL="$CN_MISE_INSTALL_URL"
245
285
  RUBYGEMS_INSTALL_URL="$CN_RUBYGEMS_URL"
@@ -248,19 +288,10 @@ detect_network_region() {
248
288
  RUBY_VERSION_SPEC="ruby@3.4.8"
249
289
  print_info "CN mirrors applied"
250
290
  else
251
- print_warning "CN mirrors unreachable — falling back to global sources"
291
+ print_error "CN mirrors unreachable — cannot install."
292
+ exit 1
252
293
  fi
253
294
  else
254
- local rubygems_result mise_result
255
- rubygems_result=$(_probe_url_with_retry "$DEFAULT_RUBYGEMS_URL")
256
- mise_result=$(_probe_url_with_retry "$DEFAULT_MISE_INSTALL_URL")
257
-
258
- _print_probe_result "RubyGems" "$rubygems_result"
259
- _print_probe_result "mise.run" "$mise_result"
260
-
261
- _is_slow_or_unreachable "$rubygems_result" && print_warning "RubyGems is slow/unreachable."
262
- _is_slow_or_unreachable "$mise_result" && print_warning "mise.run is slow/unreachable."
263
-
264
295
  USE_CN_MIRRORS=false
265
296
  RUBY_VERSION_SPEC="ruby@3"
266
297
  fi