kurihada
|
2cbd6b28b2
|
重构为Monorepo:拆分xhs/xhh应用与core包并完成双服务部署改造
|
2026-03-03 16:06:16 +08:00 |
|
kurihada
|
ed7fbdd5c2
|
增强详情与评论MCP:支持URL自动解析并为子评论引入Keyset分页
|
2026-03-03 13:10:14 +08:00 |
|
kurihada
|
68f42a9fd4
|
优化通知与评论MCP:评论返回ID并将通知分页升级为Keyset游标
|
2026-03-03 13:02:35 +08:00 |
|
kurihada
|
ceaad6f15b
|
优化运营MCP:新增状态型点赞收藏、评论幂等与通知游标分页
|
2026-03-03 12:27:31 +08:00 |
|
kurihada
|
a7672d0430
|
修复类型检查:补充DOM类型库并消除feed-detail严格模式告警
|
2026-03-03 12:19:16 +08:00 |
|
kurihada
|
892e76f7ed
|
优化小红书MCP:统一返回结构并增强分页、批量与幂等能力
|
2026-03-03 12:14:33 +08:00 |
|
kurihada
|
5e0543668e
|
新增通知任务运营MCP:手动标记、失败列表与失败重试
|
2026-03-03 11:57:27 +08:00 |
|
kurihada
|
237b528f08
|
实现通知自动化闭环:SQLite任务状态、定时同步、未处理查询与回复状态回写;下线MCP对外未读通知工具
|
2026-03-03 11:49:25 +08:00 |
|
kurihada
|
d2d96de857
|
更新 README:同步最新功能并新增中文文档
|
2026-03-03 11:29:34 +08:00 |
|
kurihada
|
eddc8718d0
|
优化通知工具描述:引导AI回复前先获取文章上下文
|
2026-03-02 19:26:38 +08:00 |
|
kurihada
|
64dbc45265
|
新增评论通知功能:MCP工具 + REST端点 + 前端通知面板
- 新增 xhs_get_comment_notifications / xhs_reply_notification MCP工具
- 通知获取前先读取首页未读小红点数字,无未读则直接返回空,避免重复处理
- 新增 REST 端点 GET /notifications/comments 和 POST /notifications/reply
- 前端小红书页面新增「通知」按钮和 NotificationPanel slide-over 组件
- 通知面板支持查看评论通知列表和行内回复
|
2026-03-02 18:46:52 +08:00 |
|
kurihada
|
54a3d9708a
|
xhs_get_comments → xhs_get_sub_comments:针对单条评论加载子评论
getFeedDetail 已返回首屏一级评论(含 1-2 条子评论预览),不再需要独立的
评论加载工具。新增 xhs_get_sub_comments 针对指定一级评论加载完整子评论,
支持 max_count 参数(默认 20)控制加载量,避免超时和上下文溢出。
后端:
- schemas: GetFeedCommentsSchema → GetSubCommentsSchema (feed_id, xsec_token, comment_id, max_count)
- types: 删除 CommentsResult
- feed-detail: 删除 getFeedComments/scrapeComments/CommentSort/parseCommentElement,
新增 getSubComments(导航→store就绪→定位评论→点击展开→读store)
- selectors: 删除 commentSort* 选择器
- index/routes: 注册新工具和路由,超时改用 feed_detail(60s)
前端:
- types/endpoints: 删除 CommentsResult,新增 getSubComments API
- FeedDetail: 删除独立评论加载逻辑,评论随详情显示,新增 handleLoadSubComments
- CommentTree: "还有 X 条回复" 改为可点击按钮,带加载状态
|
2026-03-02 17:52:35 +08:00 |
|
kurihada
|
a0f3a3cbac
|
xhs_get_comments 增加 sort + max_count 控制,评论随详情一起返回
- Comment 新增 subCommentCount,新增 CommentsResult 接口
- GetFeedCommentsSchema 替换 load_all 为 sort (default/newest/most_liked) + max_count (1-100)
- getFeedDetail 不再清空评论,从 Vue store 异步提取首屏评论(轮询 firstRequestFinish)
- getFeedComments 重写:支持排序切换、按 maxCount 加载、返回 hasMore/totalCount
- 前端详情加载后直接显示评论,无需单独请求;底部显示"加载更多评论"按钮
- CommentTree 显示"还有 X 条回复"提示
- 修复 formatTime 对空字符串和无效日期的处理
|
2026-03-02 17:30:11 +08:00 |
|
kurihada
|
e252310f23
|
移除不准确的 feedCount 和 shareCount 字段,新增用户主页入口
- 删除 UserProfile.feedCount(tab 选择器已失效,改用 feeds.length 展示)
- 删除 FeedDetail.shareCount(实际无法获取分享数)
- 用户信息栏新增"主页"按钮,点击查看当前登录用户主页
- extractInitialState 补充 userProfile/homeFeed/explore key 提取
|
2026-03-02 15:00:49 +08:00 |
|
kurihada
|
5a1f88de95
|
集成互动功能到帖子详情,删除独立互动页面
- 点赞/收藏改为纯 toggle,移除 unlike/unfavorite 参数
- 帖子详情 API 返回 isLiked/isFavorited 状态(SVG xlink:href 检测)
- 前端两个切换按钮替代原四个独立按钮
- 修复 __INITIAL_STATE__ Vue 响应式代理序列化(structuredClone + fallback)
- 修复 overlay 场景下点赞按钮误点 feed 列表元素(.last() 定位)
- 删除 InteractionsPage 及相关路由/导航
|
2026-03-02 14:39:15 +08:00 |
|
kurihada
|
def0828815
|
改进MCP发布体验:URL媒体下载、内容限制校验、发布返回笔记链接、新增查看已发布笔记工具;整合发布入口至小红书页面modal;端口统一改为9527;新增pnpm run restart脚本
|
2026-03-02 10:48:30 +08:00 |
|
kurihada
|
7661a723ea
|
修复图文发布:创作中心导航、图文标签切换及表单选择器
- 发布前先访问主站建立 session,再跳转创作中心(直接导航会 401)
- 切换「上传图文」标签:跳过 style.left=-9999px 的隐藏副本,不用 getBoundingClientRect
- 修复上传缩略图选择器:.upload-item img → .img-upload-area .img-container
- 修复标题输入框:#note-title → input.d-text[placeholder*="标题"]
- 修复内容编辑器:#note-content → .tiptap.ProseMirror
- 修复发布按钮:.publishBtn → button.d-button:has-text("发布")
- 新增 debug-publish.ts 调试脚本
|
2026-03-02 01:08:03 +08:00 |
|
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 |
|