Commit Graph

29 Commits

Author SHA1 Message Date
kurihada 9d0a9c93f4 整合小红书页面:内联扫码登录、用户主页、移除独立登录和内容浏览页
- 新增 XiaohongshuPage:顶部搜索栏、登录用户头像/ID、退出按钮
- 未登录时内联显示二维码,无需跳转独立登录页
- 点击笔记作者可打开用户主页 slide-over(复用 UserCard)
- 修复用户主页关注/粉丝/获赞数为零:选择器从 .data-area .data-item 改为 .user-interactions > div
- 修复用户头像选择器:img.user-image(img 本身带该 class)
- backend LoginStatus 新增 avatar/userId 字段,登录状态接口返回头像和用户 ID
- 删除 LoginPage、BrowserPage,侧边栏精简为小红书单入口
2026-03-02 00:12:24 +08:00
kurihada ee154f990d 登录页面自动检查状态,未登录时才显示二维码区域
- 挂载时先 checkLoginCookie(轻量,不开浏览器)
- 有 cookie 则调 refreshStatus 验证实际状态,完成后标记 initialCheckDone
- 无 cookie 直接标记 initialCheckDone(确定未登录,无需开浏览器)
- 二维码登录卡片仅在 initialCheckDone=true 且未登录时渲染,检查期间不显示
2026-03-01 23:14:41 +08:00
kurihada 56d5a6de96 修复搜索和用户主页的笔记 ID 提取及风控绕过问题
- 搜索页笔记 href 格式为 /search_result/<id>,修正正则以兼容 /explore/ 和 /search_result/
- 用户主页笔记 href 格式为 /user/profile/<userId>/<noteId>,扩展正则并取正确捕获组
- 用户主页访问前先 warm-up 到 /explore,绕过 XHS headless IP 风控(code 300012)
- xsec_source 改为 pc_feed 以匹配用户从 feed 页获取的 token 类型
- 新增 debug-search.ts / debug-qrcode.ts / debug-profile.ts 诊断脚本
2026-03-01 22:44:45 +08:00
kurihada 8b39520ec7 fix(xhs): 登录二维码流程改用非无头浏览器绕过IP风控
XHS对未登录的无头浏览器请求触发风控(code 300012: IP存在风险),
重定向到安全限制页导致二维码选择器永远匹配不到。

- getLoginQRCode 单独启动 headless:false 浏览器,登录弹框可正常加载
- 扫码成功后直接从登录 context 提取 storageState 保存到磁盘
- 调用 browser.clearContext() 让主 BrowserManager 下次重新加载新 cookies
- waitForLoginAndRelease 改为接收 BrowserContext 并关闭登录浏览器
- 修正 qrCodeImage 选择器:'.login-container .qrcode-img' → 'img.qrcode-img'
2026-03-01 17:59:39 +08:00
kurihada 838b244929 fix: 修复登出按钮无效 — 同时清除磁盘 cookie 和浏览器内存 context
- BrowserManager 新增 clearContext() 方法,关闭并丢弃平台 context
- deleteCookies 同时调用 cookieStore.delete + browser.clearContext
- 前端登出后直接 resetStatus,不再触发浏览器请求检查状态
2026-03-01 16:57:24 +08:00
kurihada 69a0f7b24c feat: 界面全部改为中文
- 侧边栏导航:仪表盘、登录、内容浏览、发布、互动、API 测试、设置
- 7 个页面所有按钮、标签、提示、错误信息改为中文
- API 端点列表分类改为中文(登录、内容、发布、互动)
- 组件内文本:展开/收起、复制、点赞、收藏、评论等
- 页面标题改为 Social MCP - 管理后台
2026-03-01 16:52:57 +08:00
kurihada 0e693842a6 fix: Login 页面进入时自动检测登录状态(通过轻量 cookie-check) 2026-03-01 16:37:16 +08:00
kurihada 785ec84e56 feat: API Tester 支持 MCP 模式 + 修复多个 bug
MCP 模式:
- 新增浏览器端 MCP 客户端 (SSE + JSON-RPC + initialize 握手)
- API Tester 页面双模式: REST API tab + MCP Tools tab
- 连接后自动发现 13 个 tools,支持参数编辑和调用
- 与 AI 客户端走完全相同的协议路径

后端修复:
- 每个 SSE 连接创建独立 McpServer 实例,支持多客户端并发
- express.json() 移到 SSE 路由之后,避免消费 MCP 请求体
- 新增 GET /api/xhs/login/cookie-check 轻量接口(不打开浏览器)

前端修复:
- QR 轮询改用 cookie-check 接口,不再重复打开浏览器窗口
- useLoginStatus 默认不自动请求,避免页面加载触发浏览器
- Header 添加 Token 未配置警告横幅
- tsup clean:false 保护 dist/web 不被清除
2026-03-01 16:33:33 +08:00
kurihada f464333a53 fix: 登录状态检查改为手动触发,避免自动请求不断弹出浏览器窗口
- useLoginStatus 默认 auto=false,不再挂载时自动请求
- Dashboard 登录状态卡片改为 "Click to check" 手动触发
- Login 页面初始显示 "Click Refresh to check" 提示
- Header 添加 Token 未配置警告横幅,引导用户去 Settings
2026-03-01 14:51:17 +08:00
kurihada 31329905e2 fix: 修复 SPA fallback 路径匹配,/api-tester 不再被误拦截
- startsWith('/api') 改为 startsWith('/api/'),避免前端路由 /api-tester 被跳过
- 修正 webDir 解析路径,指向 dist/web 而非源码 web/
2026-03-01 14:17:30 +08:00
kurihada c6a8177718 feat: 添加 Admin Dashboard — React 19 SPA,包含 7 个页面
- Dashboard: 健康状态轮询、状态卡片、内存统计、快捷操作
- Login: 二维码展示 + 3 秒自动轮询 + 倒计时 + 登出
- Browser: 探索/搜索/用户三标签页,Feed 网格、详情面板、评论树
- Publish: 图文/视频发布表单,支持标签、可见性、定时发布
- Interactions: 点赞/取消点赞、收藏、评论、回复 + 操作日志
- API Tester: 端点选择器、请求体编辑器、cURL 生成、响应查看、历史记录
- Settings: Token 配置、服务器 URL 设置

后端改动:
- app.ts: 生产环境提供 dist/web/ 静态文件服务 + SPA fallback
- Dockerfile: 添加 web 构建阶段
- package.json: 添加 build:web、build:all、dev:web 脚本

技术栈: React 19 + TypeScript + Vite 6 + Tailwind CSS(暗色主题)
产物: 85.5 KB gzip JS + 4 KB gzip CSS,零重型依赖
2026-03-01 13:58:55 +08:00
kurihada 6d35387e2b fix: 清除运行时代理环境变量(构建时代理不应泄漏到运行时) 2026-03-01 12:03:54 +08:00
kurihada ca26f36f9b fix: playwright 锁定 1.52.0 匹配 rebrowser-playwright 版本 2026-03-01 11:56:34 +08:00
kurihada 2538a19e98 fix: 移除 playwright devDep 解决 Chromium 版本冲突
rebrowser-playwright@1.52 需要 chromium-1169,但 playwright@1.58 的存在
导致 CLI 安装了 chromium-1208,补丁不兼容导致 session closed 崩溃。
移除 playwright,让 rebrowser-playwright 安装正确版本的浏览器。
2026-03-01 11:54:35 +08:00
kurihada a767400400 fix: Chromium 添加 --no-sandbox 等 Docker 必要参数 2026-03-01 00:40:03 +08:00
kurihada 5489c0bb50 fix: 指定 Chromium 路径解决版本不匹配 2026-03-01 00:37:26 +08:00
kurihada d7d3735405 fix: 用 rebrowser-playwright CLI 安装 Chromium(修复版本不匹配) 2026-03-01 00:32:53 +08:00
kurihada e13ace58e5 fix: 移除 DNS rebinding 防御(Bearer token 认证已足够) 2026-03-01 00:29:35 +08:00
kurihada bfb29bfd2a fix: 生产阶段 apt 源换阿里云镜像 2026-03-01 00:15:33 +08:00
kurihada cfe1d54ba2 fix: 生产阶段也接收代理加速 apt-get 2026-03-01 00:13:20 +08:00
kurihada f4b31b303b fix: 代理地址改为 172.17.0.1(Linux Docker 网桥网关) 2026-03-01 00:09:33 +08:00
kurihada c8e9c66f09 fix: Docker 构建走代理加速 Chromium 下载 2026-03-01 00:05:50 +08:00
kurihada 0ac26b5ea3 fix: 去掉 Chromium 国内镜像(npmmirror 未同步该版本) 2026-02-28 23:52:27 +08:00
kurihada 32a5ed52f6 fix: Chromium 下载使用国内镜像加速 2026-02-28 23:49:48 +08:00
kurihada 1188dffc15 refactor: 从 pnpm 切换到 npm
- 去掉 corepack/pnpm,Docker 构建不再卡在下载 pnpm
- Dockerfile 使用 npm ci + npm prune --omit=dev
- 删除 pnpm-lock.yaml,新增 package-lock.json
2026-02-28 23:48:09 +08:00
kurihada ab623d12da fix: Dockerfile 添加国内镜像加速和 Chromium 预装
- npm/pnpm 使用 registry.npmmirror.com 镜像
- 构建阶段预装 Chromium 并复制到生产镜像
2026-02-28 23:39:46 +08:00
kurihada 28d870b158 fix: 添加 playwright 依赖修复 Chromium 安装
rebrowser-playwright CLI 依赖原版 playwright 模块才能安装浏览器
2026-02-28 23:25:59 +08:00
kurihada a6c36442b2 feat: 添加 Jenkins 部署配置
- Jenkinsfile: GenericTrigger webhook 触发,构建镜像并部署
- docker-compose.yml: nginx 外部网络,shm_size 1g
- 宿主机端口映射 3010:3000
2026-02-28 23:11:47 +08:00
kurihada 8da5f40c9f feat: social-mcp 初始实现
多平台社交自动化 MCP 服务,首批支持小红书。

- 13 个 MCP 工具:登录管理、内容浏览、发布、互动
- 13 个 REST API 端点,支持 Bearer token 认证和限流
- BrowserManager:串行队列、背压、崩溃恢复
- Cookie 持久化:原子写入、0600 权限
- 安全:DNS rebinding 防御、错误脱敏、深层日志 redact
- Docker 部署支持
- 28 个单元测试全部通过
2026-02-28 22:57:22 +08:00