QiuSW and Claude Opus 5
c42e32d49d
fix( #277 ): 首页判定必须由可点相机入口证明
...
真机核对(2026-09-15)发现个人中心 tab 的根节点同样带
content-desc='拍照搜索',覆盖全屏 [0,0][1080,2354] 且 clickable=false;
而 GoAutoAccessibilityService.visibleTexts() 会把 contentDescription 当
文本收集。原实现只按文案判 HOME,于是个人中心被判成首页,找不到可点入口
后走几何兜底,点到该页顶部最靠右的可点节点——实测那是「设置」按钮。
两处收紧:
- classify 增加 hasClickableCameraEntry,HOME 必须由可点入口证明。
- 几何兜底增加搜索栏证据(顶部区域 content-desc='搜索' 的节点),
没有搜索栏就返回 null 而不是交出"最靠右的可点节点"。
补充回归测试:文案存在但无可点节点时必须判为 OTHER_PDD。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01NTDbDcwbDw1TSAcE6wfh2F
2026-09-15 11:04:03 +08:00
QiuSW and Claude Opus 5
95be6e7569
feat(agent): 接入 PDD 图搜自动化状态机 ( #277 )
...
- 新增 PinduoduoImageSearchAutomation:归位状态机(首页/图搜入口/结果页/
重试弹窗/订单确认页/其它页面 -> 拍照搜索/返回/拉起应用),候选卡片挑选
(跳过广告、容忍图片未加载),均以纯函数实现并覆盖单测;订单确认页只
允许按返回归位,不点击任何支付/下单控件。
- 修复 PinduoduoImageSearchAssetStore.isMostRecent 只比较 jpeg 的问题:
相册"最近项目"网格实测同时含图片和视频,现在查询 MediaStore.Files
(图片+视频)交给 ImageSearchMediaRecencyPolicy 判定,若有更新的媒体
排在前面则明确失败,不猜测、不往后找。
- AgentForegroundService 接入完整执行链路:下载参考图 -> 校验/放大 ->
写入相册 -> 复核最新一项 -> 归位入口 -> 选相册第一张 -> 等结果页 ->
跳过广告打开候选 -> 复用现有 CurrentPageIdentityRunner 分享链接识别 +
PddProductDetailCollector 采集;任务结束(成功/失败)都清理写入的图片。
- 新增错误码 IMAGE_SEARCH_ASSET_NOT_LATEST 及对应人话文案。
真机点击序列、重试弹窗分支、结果页广告识别未经真机验证,仅纯判定逻辑
(ImageSearchRecoveryPolicy / ImageSearchCandidatePolicy /
ImageSearchMediaRecencyPolicy)有 JVM 单测覆盖。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01NTDbDcwbDw1TSAcE6wfh2F
2026-09-15 11:01:00 +08:00
QiuSW and Claude Opus 5
c30b8c4624
fix( #277 ): 调度垫底改由服务端排序实现,并记录真机判据核对结果
...
客户端 TaskDispatchPolicy 无法实现「采集 > 图搜」:图搜任务就是
source='image_search' 的普通采集任务,由同一个 /tasks/next 端点下发,
Agent 调用时服务端已经选好了行。原先新增的 hasImageSearchWaiting 参数
和 CHECK_IMAGE_SEARCH 分支从未被传入 true,是不可达的死代码,且注释
声称的优先级与代码顺序相反。
改为在 task.Service.Next 的两处 ORDER BY 加入来源降级:
- 设备专属队列:来源降级作为主键。
- 共享候选池:来源降级排在 device_id 之后——指派设备是人的显式选择,
必须继续优先于来源降级,否则未指派的采集任务会抢在运营明确路由到
本机的图搜任务前面。
另外:
- #280 的批次上限去掉 env 覆盖。确认对话框要在提交前禁用按钮,前端
必然持有同一个数字,env 覆盖只会让两侧静默不一致。
- #277 判据常量按 2026-09-15 真机 dump 核对:首页入口、图搜页四段文案、
最近项目网格几何、结果页判据全部命中;已记录「唯一可点」过滤为必需
(个人中心根节点带同一 content-desc 且覆盖全屏)、取景提示文案与移植
来源不符、相册网格含视频、以及重试弹窗未验证。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01NTDbDcwbDw1TSAcE6wfh2F
2026-09-15 10:51:10 +08:00
QiuSW and Claude Opus 5
51265681c2
feat(android): 图搜任务资产准备、页面判据与调度垫底 #277
...
- PinduoduoImageSearchAssetStore 补全 sha256/大小/mediaType 校验之外的四点:
写入前清理自身历史图片、最小边不足 960 时放大、写入后等待媒体库索引并做
JPEG 头尾标记校验、isMostRecent() 判定自己是否为相册最新一张(不识别图片
内容,只保证相册第一张即是本次图搜参考图)。纯逻辑部分拆到
ImageSearchAssetPolicy,JVM 单测覆盖校验/放大边界。
- 新增 PinduoduoImageSearchCriteria:图搜入口页/结果页/"再试一次"弹窗/四列
最近项目网格的纯文本判据,从同作者已在真机走通的旧项目移植常量,注释标注
"待真机核对",集中存放便于后续按 dump 结果调整。
- TaskDispatchPolicy.decide 新增可选参数 hasImageSearchWaiting 与
CHECK_IMAGE_SEARCH 分支,采购 > 采集 > 图搜;默认值保证既有四条分支行为
逐字节不变,回归测试见 TaskDispatchPolicyTest。
- AgentForegroundService 的 image_search 分支:真实校验相册权限并给出
IMAGE_SEARCH_PERMISSION_REQUIRED 等人话失败文案;点击入口/选图/等待结果页/
打开候选的真实自动化状态机本次未接入执行路径,原因见工单——真机 dump 无
障碍树前置门禁未执行,移植的选择器常量未经核对,不贸然接线。
- TaskHistoryFragment 采集列表行为 source == "image_search" 的任务加一行
"来源:图搜自动匹配" 标记(#279),不改动既有 collection 布尔分叉结构。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01NTDbDcwbDw1TSAcE6wfh2F
2026-09-15 10:39:41 +08:00
QiuSW and Claude Opus 5
c1eb23e9b1
fix(android): 补充相册权限重新授权入口 #276
...
MainActivity.onCreate 里的相册权限申请是唯一入口,用户拒绝(尤其"不再询问")后
没有任何补救路径。新增 MediaPermissionPolicy(状态查询 + 跳转应用详情页),并
在"状态"页加相册权限卡片,显示当前状态并提供重新授权/跳转系统设置的入口,供
#277 图搜执行器复用同一查询。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01NTDbDcwbDw1TSAcE6wfh2F
2026-09-15 10:39:27 +08:00
QiuSW
def0a86f63
fix( #277 ): fail image search tasks explicitly until automation is available
2026-09-15 09:59:56 +08:00
QiuSW
a4874091a8
feat: prepare validated image search media asset ( #277 )
2026-09-15 09:42:25 +08:00
QiuSW
9e0dcc254e
feat: parse image search task metadata in agent ( #277 )
2026-09-15 09:40:51 +08:00
QiuSW
e01fcd9860
feat: request media permission for image search ( #276 )
2026-09-14 16:03:21 +08:00
QiuSW
0cb36b1e73
fix(agent): retain purchase panel recognition after heading scroll ( #231 )
2026-09-07 11:05:24 +08:00
QiuSW
486dff29fd
fix(agent): launch purchase deep links with fresh PDD task ( #232 )
2026-09-07 10:51:24 +08:00
QiuSW
c8e5b99b0c
fix(agent): recognize selected spec panels without summary prefix ( #231 )
2026-09-07 10:40:12 +08:00
QiuSW
666d19ad66
fix(agent): distinguish nested purchase scroll containers ( #230 )
2026-09-07 10:21:36 +08:00
QiuSW
c2c1044dbb
fix(agent): recover vertical size grids after horizontal search failure ( #230 )
2026-09-07 10:07:39 +08:00
QiuSW
4e6afc2d25
fix(agent): search horizontally for exact purchase size ( #230 )
2026-09-07 09:55:07 +08:00
QiuSW
7b9fcfb8c1
fix(agent): search horizontally for exact purchase color ( #230 )
2026-09-07 09:41:54 +08:00
QiuSW
1f40a7fcb1
fix(agent): resolve duplicated semantic address cards ( #229 )
2026-09-05 18:28:47 +08:00
QiuSW
c9aaade6e9
fix(agent): deduplicate address entry nodes ( #229 )
2026-09-05 18:17:54 +08:00
QiuSW
5ee3b62906
fix(agent): retain exact specs across panel transitions ( #228 )
2026-09-05 17:58:52 +08:00
QiuSW
b829a203dc
fix(agent): retain purchase panel after address save ( #227 )
2026-09-05 17:30:40 +08:00
QiuSW
41fe461f94
fix(android): reopen PDD for manual purchase retries ( #226 )
2026-09-05 17:00:25 +08:00
QiuSW
9124e92ed6
fix(agent): retry purchases in place ( #225 )
2026-09-05 16:45:52 +08:00
QiuSW
095dbfacbf
fix(android): retain verified spec selections ( #224 )
2026-09-05 16:33:24 +08:00
QiuSW
cdcb6930d0
fix(android): revalidate offscreen selected specs ( #224 )
2026-09-05 16:21:01 +08:00
QiuSW
f40331189b
fix(android): wait for stable PDD product page ( #222 )
2026-09-05 12:40:19 +08:00
QiuSW
2895f3d72d
fix(purchase): advance past spec confirmation ( #220 )
2026-09-05 10:54:02 +08:00
QiuSW
e4051ed8df
feat(purchase): reuse probed PDD page ( #219 )
2026-09-05 10:34:35 +08:00
QiuSW
5859a819c8
feat(agent): 显示采购结果气泡 ( #218 )
2026-09-05 10:01:21 +08:00
QiuSW
8d2e61bb72
fix(purchase): 重建 Agent 重试任务 ( #217 )
2026-09-05 09:06:41 +08:00
QiuSW
c09ddc8474
feat(purchase): 强制真机探测规格后匹配 ( #215 )
2026-09-04 19:03:16 +08:00
QiuSW
683aa9c671
fix(agent): 验证采购规格点击并锁定面板滚动 ( #214 )
2026-09-04 18:23:47 +08:00
QiuSW
22755e05e3
fix(agent): 有界等待采购规格入口就绪并收紧商品页证据放行 ( #211 )
2026-09-03 17:53:25 +08:00
QiuSW
494969d4f8
fix(android): bound payment transition sampling ( #210 )
...
Allow up to two consecutive evidence-free PayActivity transition samples after the single safe Back; fail on the third post-Back sample (200ms cadence) to preserve a finite no-click payment boundary.
2026-09-03 17:16:20 +08:00
QiuSW and Claude Opus 5
9e800ce023
fix(agent): 区分规格入口点击目标不唯一 ( #209 )
...
解析阶段已收敛到唯一语义候选,点击阶段的歧义来自控件树对该目标的
重复匹配。原文案沿用「候选不唯一」,与同串中 specEntryCandidates=1
的证据自相矛盾,不利于事后排查,改为「点击目标不唯一」。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01NTDbDcwbDw1TSAcE6wfh2F
2026-09-03 16:54:51 +08:00
QiuSW
ac6a57e4f3
fix(agent): 底部规格入口最右优先 ( #209 )
2026-09-03 16:50:29 +08:00
QiuSW
fd013c634b
fix(agent): 兼容嵌套规格入口 ( #208 )
2026-09-03 16:26:17 +08:00
QiuSW
57eaad8414
fix(agent): 识别无初始摘要规格面板 ( #207 )
2026-09-03 16:11:54 +08:00
QiuSW
13b1580fd5
fix(agent): 回传规格面板失败证据 ( #206 )
2026-09-03 16:01:40 +08:00
QiuSW
2d6d244d8a
fix(agent): 读取待付款订单结果 ( #204 )
2026-09-03 14:18:01 +08:00
QiuSW
73cb94e073
fix(agent): 进入订单详情读取结果 ( #203 )
2026-09-03 12:01:38 +08:00
QiuSW
bd4bc5f4f0
fix(agent): 支持不可滚动规格面板 ( #202 )
2026-09-03 11:44:04 +08:00
QiuSW
415d1ff2ad
fix(agent): 自动保存身份恢复 Token ( #201 )
2026-09-03 11:17:57 +08:00
QiuSW
2c263e687e
feat(device): 后台自动恢复设备身份 ( #201 )
2026-09-03 11:16:03 +08:00
QiuSW
379a83fe94
feat(device): 安全恢复原设备身份 ( #201 )
2026-09-03 10:41:20 +08:00
QiuSW
4f64c074dd
fix(android): read folded PDD order details ( #196 )
2026-09-02 09:55:41 +08:00
QiuSW
37dea33b06
fix(android): lock horizontal spec swipes ( #189 )
2026-09-01 16:49:35 +08:00
QiuSW
b5a08bfa1f
fix(android): block PDD size advice navigation ( #189 )
2026-09-01 16:41:43 +08:00
QiuSW
3aab1f013d
feat(goauto): 完善替代采集与颜色图片详情 ( #184 #185 )
2026-09-01 09:55:27 +08:00
QiuSW
7be57bfe6b
feat(agent): allow configured HTTP transport ( #181 )
2026-09-01 00:12:43 +08:00
QiuSW
9cdb6bb962
feat(purchase): allow absolute price ceiling ( #180 )
2026-08-31 21:27:50 +08:00