1d1618c
android/app/src/main/java/cn/ilapage/goauto/agent/ui/TaskHistoryFragment.kt:497
requireActivity().moveTaskToBack(true)
AgentForegroundService.collectCurrentPage
android/app/src/main/java/cn/ilapage/goauto/agent/automation/CurrentPageCollection.kt:37
backgroundAndLaunch
android/app/src/main/java/cn/ilapage/goauto/agent/automation/GoAutoAccessibilityService.kt:103
restoreRecentPddPage()
grep -rn "getLaunchIntentForPackage\|moveTaskToFront"
PddNavigation.kt:39
由此得到四个失败点:
moveTaskToBack(true)
true
REJECT
CURRENT_PDD_PAGE_NOT_FOUND
BACK_FROM_AGENT
createCurrentPageCollectionTask
AgentForegroundService.kt:317
collectCurrentPage
moveTaskToBack
startForegroundService
ForegroundServiceStartNotAllowedException
publishCurrentPageResult
(以上为提交 1d1618c 上可复核的代码事实;具体到用户这次失败停在哪一阶段,需要 #106 引入的本地诊断记录佐证,本工单不以此为前提。)
AgentForegroundService
packageManager.getLaunchIntentForPackage("com.xunmeng.pinduoduo")
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
FLAG_ACTIVITY_CLEAR_TASK
currentPackage()
restoreRecentPddPage
com.xunmeng.pinduoduo
queries
AgentForegroundService.collectCurrentPage(...)
CurrentPageNavigationPolicy.backgroundAndLaunch
updateNotification
TaskHistoryFragment
./gradlew :app:testDebugUnitTest
待实施(由 Codex 执行)。
已核对 #101、#104、#105、#106 的实现提交与 #107 当前代码事实,按工单最小范围修改 Android:
不修改 Server、数据库、接口、分享点击、剪贴板、采购或支付能力。现有 Wiki 明确写有旧恢复前提,因此本工单同步更新对应长期页面。
cd android && .\gradlew.bat :app:testDebugUnitTest
cd android && .\gradlew.bat :app:assembleDebug
python dev_scripts/harness.py check --strict
git diff --check
NewPageActivity
已按长期事实变化更新线上页面并回读 revision:
7a1281d8873c
fa2a6f6a4129
3dc6c3774b31
python dev_scripts/harness.py sync 与唯一一轮 sync --check 均通过。
python dev_scripts/harness.py sync
sync --check
ea970c755e434af54ca565434e7943d2229dd23e fix(agent): restore PDD before current-page collection (#107)
工单保持打开,等待人工验收。
ea970c7
server/app/goauto/task/current_page.go:262-297
用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。
No dependencies set.
The note is not visible to the blocked user.
所属与来源
当前事实与根因(提交
1d1618c复核)android/app/src/main/java/cn/ilapage/goauto/agent/ui/TaskHistoryFragment.kt:497点击“开始采集”后只调用requireActivity().moveTaskToBack(true),随后调用AgentForegroundService.collectCurrentPage。android/app/src/main/java/cn/ilapage/goauto/agent/automation/CurrentPageCollection.kt:37backgroundAndLaunch的顺序固定为「先退后台、再启动服务」。android/app/src/main/java/cn/ilapage/goauto/agent/automation/GoAutoAccessibilityService.kt:103restoreRecentPddPage()只有 READY / 按一次系统返回键 / 直接拒绝三种结果。grep -rn "getLaunchIntentForPackage\|moveTaskToFront"无结果;PddNavigation.kt:39的 ACTION_VIEW 只用于链接任务路径,当前页面采集不经过它。由此得到四个失败点:
moveTaskToBack(true)只在 Agent 任务恰好压在 PDD 任务之上时才会露出 PDD。用户从桌面图标、最近任务或通知进入 Agent 时,露出的是桌面或其他应用,而该调用仍返回true,UI 不报错;服务端随后restoreRecentPddPage()读到非 PDD 包名走REJECT,任务以CURRENT_PDD_PAGE_NOT_FOUND失败。用户观察到的现象就是“PDD 没上来,也没开始采集”。BACK_FROM_AGENT分支基本不可达:UI 已先退后台,服务判断时前台通常已不是 Agent;且两步之间夹着createCurrentPageCollectionTask网络请求(AgentForegroundService.kt:317),时序不确定。反向竞争下若判断时 PDD 已在前台而状态判定滞后,多按的一次返回键还可能退出商品详情页。collectCurrentPage在moveTaskToBack之后调用startForegroundService。Android 12+ 下若 Agent 前台服务此刻不处于运行中的前台状态,会抛ForegroundServiceStartNotAllowedException,且调用处没有捕获,点击后完全静默。publishCurrentPageResult的失败消息由已退到后台的 Fragment 用 Toast 显示,Android 12+ 后台 Toast 基本不可见,所有失败都表现为“点了没反应”。(以上为提交
1d1618c上可复核的代码事实;具体到用户这次失败停在哪一阶段,需要 #106 引入的本地诊断记录佐证,本工单不以此为前提。)目标
非目标
实施方案
前台切换
AgentForegroundService的当前页面采集流程中,新增“恢复 PDD 前台”步骤,使用packageManager.getLaunchIntentForPackage("com.xunmeng.pinduoduo")加FLAG_ACTIVITY_NEW_TASK启动;不得附加FLAG_ACTIVITY_CLEAR_TOP/FLAG_ACTIVITY_RESET_TASK_IF_NEEDED/FLAG_ACTIVITY_CLEAR_TASK,避免把 PDD 重置到首页而丢失商品详情页。currentPackage(),在超时预算(建议 5 秒,沿用现有restoreRecentPddPage超时口径)内等待前台变为com.xunmeng.pinduoduo;超时仍失败并返回CURRENT_PDD_PAGE_NOT_FOUND。restoreRecentPddPage保留原有 READY 与返回键分支作为兜底:前台已是 PDD 直接返回;前台仍是 Agent 且近期见过 PDD 时可先尝试返回键;两者都不成立时改走上面的显式启动,而不是直接REJECT。queries不生效)时明确失败并给出可读提示,不做任何猜测性跳转。启动顺序与前台服务
AgentForegroundService.collectCurrentPage(...),由服务负责后续的前后台切换;moveTaskToBack只作为兜底(或交由服务侧显式启动 PDD 时自然发生)。collectCurrentPage的startForegroundService调用增加异常保护,捕获后向用户给出明确提示,不再静默。CurrentPageNavigationPolicy.backgroundAndLaunch的契约与单元测试,使“启动失败”和“无法退后台”两种情况可区分。失败反馈
publishCurrentPageResult的消息同时更新前台服务通知内容(沿用现有updateNotification),保证 Agent 处于后台时用户仍能看到失败原因。TaskHistoryFragment提示路径,回到 Agent 时仍展示结果并刷新任务详情。安全边界
验收标准
验证方式
./gradlew :app:testDebugUnitTest(Agent 单元测试)。风险与回退
moveTaskToBack+ 返回键行为,不涉及数据结构与接口变更。文档影响
状态
待实施(由 Codex 执行)。
开始实施(2026-08-27)
已核对 #101、#104、#105、#106 的实现提交与 #107 当前代码事实,按工单最小范围修改 Android:
不修改 Server、数据库、接口、分享点击、剪贴板、采购或支付能力。现有 Wiki 明确写有旧恢复前提,因此本工单同步更新对应长期页面。
实现完成,待验收(2026-08-27)
实现
moveTaskToBack(true);前台服务启动异常会在 Agent 当前界面明确提示。FLAG_ACTIVITY_NEW_TASK拉回现有任务;验证
cd android && .\gradlew.bat :app:testDebugUnitTest:通过。cd android && .\gradlew.bat :app:assembleDebug:通过。python dev_scripts/harness.py check --strict:通过。git diff --check:通过。NewPageActivity;从桌面以 PDD Launcher Intent 拉回后仍停在同一个NewPageActivity,未重置首页。Wiki
已按长期事实变化更新线上页面并回读 revision:
7a1281d8873cfa2a6f6a41293dc6c3774b31python dev_scripts/harness.py sync与唯一一轮sync --check均通过。提交
ea970c755e434af54ca565434e7943d2229dd23e fix(agent): restore PDD before current-page collection (#107)工单保持打开,等待人工验收。
后续关联
ea970c7)实测 PDD 已能切回前台,但当前页面采集仍拿不到 goods_id。经复核,剩余问题不在前台恢复链路,而在商品身份解析链路:服务端短链分支只认 HTTP 3xx、响应正文被丢弃、UA 为自定义标识(server/app/goauto/task/current_page.go:262-297),且真实短链展开无测试覆盖。用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。
ila referenced this issue2026-08-31 08:56:01 +08:00