Skip to content

fix: 修复会话同步、商品发布限流与搜索字段契约 - #36

Merged
fancyboi999 merged 2 commits into
mainfrom
fix/recent-conversations
Oct 10, 2026
Merged

fancyboi999 merged 2 commits into
mainfrom
fix/recent-conversations

Conversation

@fancyboi999

Copy link
Copy Markdown
Owner

改动描述

修复真实闲鱼操作中的最新会话遗漏、多图发布自耗限流预算、搜索字段错位与推荐混入命中,并统一 CLI/MCP 的失败和部分结果契约。

动机 / 关联 issue

真实用户路径暴露的问题来自三个边界:

  • HTTP 会话基线不包含部分最近会话;WS 骨架缺少最近消息时间,历史解析又丢失消息 ID/时间。默认结合有界 WS 发现、复用历史页读取器补齐摘要,按活动时间合并排序,并核对当前账号与对端角色。
  • 发布对上传及最终提交重复占用商品预算。媒体上传独立使用账号的 media.write(默认 9 次/分钟),发布/下架共用 item.write(默认 1 次/分钟);稳定文件锁和原子替换保护跨进程状态,损坏状态拒绝写入。上传收据、确认类目和地址可复用,失败保留准备信息并区分未提交、拒绝与结果未知。
  • 搜索把标签位置、关注人数、卖家昵称当作属性、原价、地域,并收集无命中页的推荐卡片。现在观察网页真实响应,按查询词、页码和请求代次关联;明确语义才填字段,未知为 null,标签保留。分页失败保留部分结果,同时 CLI 非零退出、MCP ok=false。

商品详情读取 itemDO/sellerDO,保留价格和状态码 0;类目分数匹配分类卡的复合身份;发布采用 selected 地址 DTO。MCP 输出 schema 描述统一包装对象。CLI/MCP 参数、skills、架构文档和 Unreleased 说明同步更新。

改动类型

  • bug 修复
  • 新功能
  • 重构(不改变外部行为)
  • 文档
  • CI / 构建

验证

验收提交:0f690d25776f473357261ebd6aa689b7e1ade219。真实业务验证执行于 2026-10-09;下列仓库检查于 2026-10-10 重跑。

  • pytest 全绿:238 passed
  • ruff check src tests 无告警
  • 真实 CLI 跑通:会话列表/历史、搜索、鉴权、详情、双图发布/回读/下架
  • npm test:3 passed;npm run pack:check 通过
  • python scripts/check_sensitive_identifiers.py、git diff --check 通过
  • sdist/wheel 构建;Python 3.11 干净 wheel 环境的真实 CLI/MCP 握手和读取通过
  • OpenClaw 2026.7.1 隔离 link 安装:inspect 识别 skills/mcpServers,loaded,diagnostics=[]

真实入口与脱敏结果摘要(实时商品数量可能变化):

goofish message list-chats --format json
# 已知最近会话位于第 1 条;最近正文、活动时间和对端身份与历史一致。
goofish message history <已确认CID> --limit 3 --limit-per-page 2 --format json
# 正好 3 条;保留 CID/message_id/created_at。完整历史与原始唯一 ID 对照无遗漏。

goofish search items '键盘' --pages 2 --limit 60 --format json
# 源码环境 2 页 59 条去重;干净 wheel 环境 2 页 60 条,complete=true。
goofish search items 'cc kyc' --limit 3 --format json
# 平台 hasItems=false、numFound=0;total=0,result_kind=empty,不混入推荐。

goofish item get <已知商品ID> --format json
goofish item view <同一商品ID> --format json
# 同一商品标题一致,金额为 59/¥59,状态码均为 0。
goofish category recommend '二手狼派有线机械键盘' --format json
# confidence 来自分类卡选中项 score,不再默认 0。

goofish item publish '已确认测试标题' '电子素材,测试请勿购买' ./a.png ./b.png 9999 --format json
# accepted、商品 ID、2 张收据;详情回读确认标题/价格/2 图。
# 等默认商品预算自然冷却,仅下架本次返回的测试 ID:
goofish item delete <本次返回商品ID> --format json
goofish item list --limit 100 --format json
# 下架 ACK 成功,在售列表没有测试商品。

真实 MCP stdio 复用两张上传收据发布、回读、下架成功,媒体预算未增加。试验商品均已下架;上传图片保留在 CDN,未操作既有商品。

异常与消融验证:

  • 第二页真实浏览器请求注入 connectionreset,不返回伪造响应:CLI 退出 1,保留第一页 30 条、complete=false;MCP ok=false,保留同样数据并报告 search_response_timeout/target_page=2。
  • 两个实际 Python 进程争用同账号经营预算,仅一个获准;状态保存一次尝试。损坏状态拒绝写入且不清空。
  • 实际预算耗尽时 CLI 退出 75、MCP ok=false,两入口保留图片/类目/地址,未发上传或发布请求。
  • 实际目录写权限故障保留 RiskControlError/退出码 76,并报告熔断保存失败。
  • 捕获的真实 DTO 消融:去除埋点、重排/移除分类卡分数、将非选中地址置于首项,确认字段来源、未知分数和选中地址不依赖顺序。数据层消融不代替网络验收。
  • 会话消融分别关闭 WS 发现、摘要补齐、排序和账号角色判断,使用真实服务确认各环节必要;真实连接拒绝、分页超时、恢复、无认证与 TTY 呈现已验证。
  • Astra 完成方案与独立源码复审。未新增单测或网络 mock;删除 4 个仅模拟 DOM 的完整搜索假浏览器测试,保留既有纯分页状态机测试。完整入口通过上述真实 CLI/MCP 验收。

未验证及发布边界:

  • 未重跑 OpenClaw embedded-agent trajectory 的工具过滤与 gateway 模型业务会话;inspect 不能替代这些验证。隔离宿主安装提示 4 个依赖安装脚本未获 allowScripts 执行,但上述 inspect 成功。
  • 本轮未人为触发平台验证码或重跑搜索登录过期分支;图片消息、watch 远端新消息事件未验收。
  • location_default 按经纬度输入返回 selectedPoi,未证明等于 App 保存的发货地址;业务地址应显式传确认的 location_json。详情 API 未暴露发布地址 DTO,因此未声称保存地址已经回读确认。
  • 分类身份缺失时自动发布明确中止并保留收据,不猜造 ID;有限 WS 同步不代表全部历史会话枚举。
  • 原始网络材料、任务脚本和账号凭证仅保留在本地,不上传仓库或 PR。
  • 版本保持 0.4.0,改动列于 Unreleased;本 PR 不发包或创建 tag。发布须统一新版本,先 PyPI 并验证对应版本 MCP,再发布同版本 ClawHub bundle;ClawHub 发布前补宿主工具过滤验收。

合规

  • 没有将 cookie / _m_h5_tk / 账号敏感信息提交到代码、测试 fixture 或 PR
  • 本次代码与验收用于正常商品操作,不包含欺诈、刷单或规避平台封禁机制

@fancyboi999
fancyboi999 merged commit 3113bfa into main Oct 10, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant