a058b0ab8e
- 修复记忆管理数据库连接不可用 (ai-core重编译+Unicode修复) - 修复IoT子会话工具调用链路日志缺失 - 新增最终审查子会话(review_provider) 支持消息格式解析拆分 - 实现历史消息持久化(后端存储+前端分页加载) - 前端新增动作消息(ActionMessage)类型和渲染 - 优化对话链路速度(非阻塞子会话+快速问候通道) - JWT密钥环境变量化(无默认值启动panic) - Token自动刷新机制(401拦截器+refresh接口) - WebSocket指数退避重连(jitter+最大10次) - localStorage清理一致性(cyrene_前缀+版本检查) - IoT环境变量统一为IOT_SERVICE_URL
243 lines
7.6 KiB
Bash
Executable File
243 lines
7.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# ==================== 配置 ====================
|
|
ROOT_HOST="${CHROMIUM_MANAGER_HOST:-127.0.0.1}"
|
|
ROOT_PORT="${CHROMIUM_MANAGER_PORT:-19520}"
|
|
BASE_URL="http://$ROOT_HOST:$ROOT_PORT"
|
|
|
|
# ==================== 颜色 ====================
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
# ==================== 帮助 ====================
|
|
show_help() {
|
|
cat << EOF
|
|
${CYAN}Chromium 调试管理器${NC}
|
|
用法: ./chromium_debugging.sh <命令> [选项]
|
|
|
|
${GREEN}命令:${NC}
|
|
start 启动 Chromium(带 GUI,显示在 root 桌面)
|
|
stop 停止 Chromium
|
|
restart 重启 Chromium
|
|
status 查看 Chromium 状态
|
|
debug-url 获取 WebSocket 调试地址(给 VS Code 插件用)
|
|
log 查看 Chromium 日志(默认最近 50 行)
|
|
log -f 实时跟踪日志
|
|
help 显示此帮助
|
|
|
|
${YELLOW}环境变量:${NC}
|
|
CHROMIUM_MANAGER_HOST 管理服务地址(默认 127.0.0.1)
|
|
CHROMIUM_MANAGER_PORT 管理服务端口(默认 19520)
|
|
|
|
${CYAN}示例:${NC}
|
|
./chromium_debugging.sh start # 启动 Chromium
|
|
./chromium_debugging.sh status # 查看状态
|
|
./chromium_debugging.sh debug-url # 获取调试地址
|
|
EOF
|
|
}
|
|
|
|
# ==================== API 调用 ====================
|
|
|
|
call_api() {
|
|
local ENDPOINT="$1"
|
|
local RESULT
|
|
local HTTP_CODE
|
|
|
|
RESULT=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL$ENDPOINT" 2>/dev/null)
|
|
HTTP_CODE=$(echo "$RESULT" | tail -1)
|
|
RESULT=$(echo "$RESULT" | sed '$d')
|
|
|
|
if [ "$HTTP_CODE" != "200" ]; then
|
|
echo "{\"status\":\"error\",\"message\":\"连接管理服务失败 ($HTTP_CODE),请确认 root 上已运行 chromium-manager.sh\"}"
|
|
return 1
|
|
fi
|
|
|
|
echo "$RESULT"
|
|
return 0
|
|
}
|
|
|
|
# ==================== 命令实现 ====================
|
|
|
|
cmd_start() {
|
|
echo -e "${YELLOW}🚀 请求启动 Chromium...${NC}"
|
|
local RESULT=$(call_api "/start")
|
|
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
|
|
|
if [ "$STATUS" = "ok" ]; then
|
|
local PID=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('pid',''))" 2>/dev/null)
|
|
echo -e "${GREEN}✅ Chromium 已启动 (PID: $PID)${NC}"
|
|
echo -e " 调试地址: ${CYAN}http://$ROOT_HOST:9222${NC}"
|
|
elif [ "$STATUS" = "error" ]; then
|
|
local MSG=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('message','未知错误'))" 2>/dev/null)
|
|
echo -e "${RED}❌ $MSG${NC}"
|
|
else
|
|
echo -e "${RED}❌ 请求失败${NC}"
|
|
echo "$RESULT"
|
|
fi
|
|
}
|
|
|
|
cmd_stop() {
|
|
echo -e "${YELLOW}🛑 请求停止 Chromium...${NC}"
|
|
local RESULT=$(call_api "/stop")
|
|
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
|
|
|
if [ "$STATUS" = "ok" ]; then
|
|
echo -e "${GREEN}✅ Chromium 已停止${NC}"
|
|
else
|
|
local MSG=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('message','未知错误'))" 2>/dev/null)
|
|
echo -e "${YELLOW}⚠️ $MSG${NC}"
|
|
fi
|
|
}
|
|
|
|
cmd_restart() {
|
|
echo -e "${YELLOW}🔄 请求重启 Chromium...${NC}"
|
|
local RESULT=$(call_api "/restart")
|
|
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
|
|
|
if [ "$STATUS" = "ok" ]; then
|
|
local PID=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('pid',''))" 2>/dev/null)
|
|
echo -e "${GREEN}✅ Chromium 已重启 (PID: $PID)${NC}"
|
|
else
|
|
local MSG=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('message','未知错误'))" 2>/dev/null)
|
|
echo -e "${RED}❌ $MSG${NC}"
|
|
fi
|
|
}
|
|
|
|
cmd_status() {
|
|
local RESULT=$(call_api "/status")
|
|
if [ $? -ne 0 ]; then
|
|
echo -e "${RED}❌ 无法连接管理服务${NC}"
|
|
return 1
|
|
fi
|
|
|
|
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
|
|
|
if [ "$STATUS" = "running" ]; then
|
|
local PID=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('pid',''))" 2>/dev/null)
|
|
echo -e "${GREEN}✅ Chromium 运行中${NC}"
|
|
echo -e " PID: ${CYAN}$PID${NC}"
|
|
echo -e " 调试端口: ${CYAN}$ROOT_HOST:9222${NC}"
|
|
|
|
local BROWSER=$(echo "$RESULT" | python3 -c "
|
|
import sys,json
|
|
data = json.load(sys.stdin)
|
|
info = data.get('browser_info', {})
|
|
if isinstance(info, dict):
|
|
print(f\" 浏览器: {info.get('Browser', '未知')}\")
|
|
ua = info.get('User-Agent', '')
|
|
if ua:
|
|
print(f\" 用户代理: {ua[:80]}...\")
|
|
" 2>/dev/null)
|
|
echo -e "$BROWSER"
|
|
else
|
|
echo -e "${YELLOW}⏹️ Chromium 未运行${NC}"
|
|
fi
|
|
}
|
|
|
|
cmd_debug_url() {
|
|
local RESULT=$(call_api "/status")
|
|
if [ $? -ne 0 ]; then return 1; fi
|
|
|
|
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
|
|
|
if [ "$STATUS" != "running" ]; then
|
|
echo -e "${RED}❌ Chromium 未运行,请先执行 start${NC}"
|
|
return 1
|
|
fi
|
|
|
|
# 获取 WebSocket 调试地址
|
|
local WS_URL=$(curl -s "http://$ROOT_HOST:9222/json/version" 2>/dev/null | python3 -c "
|
|
import sys,json
|
|
try:
|
|
data = json.load(sys.stdin)
|
|
print(data.get('webSocketDebuggerUrl', ''))
|
|
except:
|
|
print('')
|
|
" 2>/dev/null)
|
|
|
|
local PAGE_WS=$(curl -s "http://$ROOT_HOST:9222/json" 2>/dev/null | python3 -c "
|
|
import sys,json
|
|
try:
|
|
pages = json.load(sys.stdin)
|
|
if pages:
|
|
print(pages[0].get('webSocketDebuggerUrl', ''))
|
|
else:
|
|
print('')
|
|
except:
|
|
print('')
|
|
" 2>/dev/null)
|
|
|
|
if [ -n "$WS_URL" ]; then
|
|
echo -e "${GREEN}🔗 调试地址:${NC}"
|
|
echo -e " 浏览器: ${CYAN}$WS_URL${NC}"
|
|
if [ -n "$PAGE_WS" ]; then
|
|
echo -e " 当前页面: ${CYAN}$PAGE_WS${NC}"
|
|
fi
|
|
echo ""
|
|
echo -e "${YELLOW}💡 VS Code 插件配置示例:${NC}"
|
|
echo " {"
|
|
echo " \"type\": \"chrome\","
|
|
echo " \"request\": \"attach\","
|
|
echo " \"name\": \"Attach to Chromium\","
|
|
echo " \"port\": 9222,"
|
|
echo " \"host\": \"$ROOT_HOST\""
|
|
echo " }"
|
|
else
|
|
echo -e "${RED}❌ 无法获取调试地址${NC}"
|
|
fi
|
|
}
|
|
|
|
cmd_log() {
|
|
# 先看看管理服务能不能返回日志路径
|
|
local LOG_PATH=$(curl -s "http://$ROOT_HOST:9222/json/version" 2>/dev/null | python3 -c "
|
|
import sys,json
|
|
print('ok')
|
|
" 2>/dev/null)
|
|
|
|
if [ $? -ne 0 ] || [ -z "$LOG_PATH" ]; then
|
|
echo -e "${YELLOW}⚠️ 无法直接访问日志文件${NC}"
|
|
echo " root 上的日志目录: ~/debug/logs/chromium/"
|
|
echo " 可以在 root 上用 cat/tail 查看"
|
|
return 1
|
|
fi
|
|
|
|
# 通过 Chromium 的 API 简单确认它在运行
|
|
echo -e "${YELLOW}📄 日志文件在 root 上: ~/debug/logs/chromium/${NC}"
|
|
echo -e " 请在 root 终端查看,或使用 ssh root@localhost 'tail -f ~/debug/logs/chromium/chromium-*.log'"
|
|
}
|
|
|
|
# ==================== 主入口 ====================
|
|
|
|
case "${1:-help}" in
|
|
start)
|
|
cmd_start
|
|
;;
|
|
stop)
|
|
cmd_stop
|
|
;;
|
|
restart)
|
|
cmd_restart
|
|
;;
|
|
status)
|
|
cmd_status
|
|
;;
|
|
debug-url|debug_url|url)
|
|
cmd_debug_url
|
|
;;
|
|
log)
|
|
shift
|
|
cmd_log "$@"
|
|
;;
|
|
help|--help|-h)
|
|
show_help
|
|
;;
|
|
*)
|
|
echo -e "${RED}未知命令: $1${NC}"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|