myoc / opencode-tools.sh
OpenCode Deployer
update
3dd8e3c
#!/bin/bash
# OpenCode AI Web Interface - 统一工具脚本
# 集成诊断、修复和验证功能
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
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
# Hugging Face 相关测试
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
}
# JavaScript 错误诊断
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 服务..."
# 检查 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 "$@"