|
|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
set -e |
|
|
|
|
|
|
|
|
RED='\033[0;31m' |
|
|
GREEN='\033[0;32m' |
|
|
YELLOW='\033[1;33m' |
|
|
BLUE='\033[0;34m' |
|
|
NC='\033[0m' |
|
|
|
|
|
print_info() { |
|
|
echo -e "${BLUE}ℹ️ $1${NC}" |
|
|
} |
|
|
|
|
|
print_success() { |
|
|
echo -e "${GREEN}✅ $1${NC}" |
|
|
} |
|
|
|
|
|
print_warning() { |
|
|
echo -e "${YELLOW}⚠️ $1${NC}" |
|
|
} |
|
|
|
|
|
print_error() { |
|
|
echo -e "${RED}❌ $1${NC}" |
|
|
} |
|
|
|
|
|
print_header() { |
|
|
echo -e "${BLUE}" |
|
|
echo "==================================" |
|
|
echo " OpenCode AI 统一工具" |
|
|
echo "==================================" |
|
|
echo -e "${NC}" |
|
|
} |
|
|
|
|
|
|
|
|
show_help() { |
|
|
echo "OpenCode AI Web Interface 统一工具" |
|
|
echo "" |
|
|
echo "用法: $0 [选项]" |
|
|
echo "" |
|
|
echo "选项:" |
|
|
echo " verify 验证服务状态" |
|
|
echo " diagnose 运行深度诊断" |
|
|
echo " network 网络连接诊断" |
|
|
echo " js JavaScript 错误诊断" |
|
|
echo " local 启动本地部署" |
|
|
echo " help 显示此帮助信息" |
|
|
echo "" |
|
|
echo "示例:" |
|
|
echo " $0 verify # 验证服务状态" |
|
|
echo " $0 diagnose # 运行完整诊断" |
|
|
echo " $0 local # 启动本地服务" |
|
|
} |
|
|
|
|
|
|
|
|
verify_service() { |
|
|
print_info "验证 OpenCode AI 服务状态..." |
|
|
|
|
|
local base_url="https://airsltd-hfoc.hf.space" |
|
|
local health_url="$base_url/global/health" |
|
|
|
|
|
|
|
|
local health_response=$(curl -s --connect-timeout 10 "$health_url" 2>/dev/null) |
|
|
|
|
|
if echo "$health_response" | grep -q "healthy.*true"; then |
|
|
print_success "✅ 服务器健康检查通过" |
|
|
local version=$(echo "$health_response" | grep -o '"version":"[^"]*"' | cut -d'"' -f4) |
|
|
print_info "版本: $version" |
|
|
return 0 |
|
|
else |
|
|
print_error "❌ 服务器健康检查失败" |
|
|
return 1 |
|
|
fi |
|
|
} |
|
|
|
|
|
|
|
|
diagnose_network() { |
|
|
print_info "执行网络连接诊断..." |
|
|
|
|
|
local base_url="https://airsltd-hfoc.hf.space" |
|
|
|
|
|
|
|
|
print_info "测试基本网络连接..." |
|
|
if curl -s --connect-timeout 5 "https://www.google.com" >/dev/null 2>&1; then |
|
|
print_success "互联网连接正常" |
|
|
else |
|
|
print_warning "互联网连接可能有问题" |
|
|
fi |
|
|
|
|
|
|
|
|
print_info "测试 Hugging Face Spaces 连接..." |
|
|
if curl -s --connect-timeout 10 "$base_url" >/dev/null 2>&1; then |
|
|
print_success "Hugging Face Spaces 连接正常" |
|
|
else |
|
|
print_error "Hugging Face Spaces 连接失败" |
|
|
print_info "建议:" |
|
|
echo "1. 使用 VPN 或代理" |
|
|
echo "2. 尝试本地部署" |
|
|
echo "3. 检查网络设置" |
|
|
fi |
|
|
} |
|
|
|
|
|
|
|
|
diagnose_js() { |
|
|
print_info "诊断 JavaScript 错误..." |
|
|
|
|
|
print_warning "常见的 JavaScript 错误:" |
|
|
echo "1. InvalidCharacterError: atob 解码失败" |
|
|
echo "2. 网络连接错误" |
|
|
echo "3. 资源加载失败" |
|
|
echo "" |
|
|
|
|
|
print_info "解决方案:" |
|
|
echo "1. 清除浏览器缓存: Ctrl+Shift+Delete" |
|
|
echo "2. 强制刷新: Ctrl+Shift+R" |
|
|
echo "3. 尝试无痕模式" |
|
|
echo "4. 使用本地部署作为备用" |
|
|
} |
|
|
|
|
|
|
|
|
deep_diagnose() { |
|
|
print_info "执行深度诊断..." |
|
|
|
|
|
|
|
|
verify_service |
|
|
diagnose_network |
|
|
diagnose_js |
|
|
|
|
|
echo "" |
|
|
print_info "深度诊断完成" |
|
|
} |
|
|
|
|
|
|
|
|
start_local() { |
|
|
print_info "启动本地 OpenCode 服务..." |
|
|
|
|
|
|
|
|
if ! command_exists opencode; then |
|
|
print_info "检测到 OpenCode 未安装,正在安装..." |
|
|
|
|
|
if command_exists npm; then |
|
|
print_info "使用 npm 安装 OpenCode..." |
|
|
npm install -g opencode-ai |
|
|
elif command_exists brew; then |
|
|
print_info "使用 Homebrew 安装 OpenCode..." |
|
|
brew install opencode-ai/tap/opencode |
|
|
else |
|
|
print_error "未找到 npm 或 brew,请手动安装 OpenCode" |
|
|
exit 1 |
|
|
fi |
|
|
fi |
|
|
|
|
|
|
|
|
local PORT=7860 |
|
|
if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null 2>&1; then |
|
|
print_warning "端口 $PORT 已被占用,尝试端口 7861..." |
|
|
PORT=7861 |
|
|
fi |
|
|
|
|
|
print_info "启动 OpenCode Web Interface..." |
|
|
echo "" |
|
|
echo -e "${GREEN}服务地址: http://localhost:$PORT${NC}" |
|
|
echo "" |
|
|
|
|
|
|
|
|
export HTTP_PROXY="" |
|
|
export HTTPS_PROXY="" |
|
|
export NO_PROXY="localhost,127.0.0.1,0.0.0.0" |
|
|
|
|
|
opencode serve --port $PORT --hostname 0.0.0.0 --cors "*" |
|
|
} |
|
|
|
|
|
|
|
|
command_exists() { |
|
|
command -v "$1" >/dev/null 2>&1 |
|
|
} |
|
|
|
|
|
|
|
|
main() { |
|
|
case "${1:-help}" in |
|
|
"verify") |
|
|
print_header |
|
|
verify_service |
|
|
;; |
|
|
"diagnose") |
|
|
print_header |
|
|
deep_diagnose |
|
|
;; |
|
|
"network") |
|
|
print_header |
|
|
diagnose_network |
|
|
;; |
|
|
"js") |
|
|
print_header |
|
|
diagnose_js |
|
|
;; |
|
|
"local") |
|
|
print_header |
|
|
start_local |
|
|
;; |
|
|
"help"|*) |
|
|
show_help |
|
|
;; |
|
|
esac |
|
|
} |
|
|
|
|
|
|
|
|
main "$@" |