Conversation
3f94767 to
fe1fef8
Compare
|
@tt-a1i 上次 review 提到的标签页 controller 隔离和与 #561 的合并冲突都已处理,已推送到 复制标签页继承 另外,实际使用时发现了 Plan 模式和设置页主题切换之间的一个矛盾,想和你确认一下处理方向。这部分目前完成了定位,还没有修改:
如果继续沿用当前配置约定,我打算这样处理:Plan 处于 planning/ready 时,设置页先明确提示“退出 Plan 后才能修改配置”,阻止提交这类请求,并提供显式退出入口;运行中则先要求停止,不替用户自动退出。退出后,在下一次模型请求里明确提供当前状态,说明历史 Plan 限制已失效,但退出不代表批准实施旧计划。用户再选择主题,仍通过 Setup 修改,失败原因直接显示在设置页。这样可以避免发出注定被拦截的请求,同时保留现有权限边界和配置入口。 还有一个体验上的疑问:现在点击主题选项,Web 会代用户提交 我理解你在 #561 中要求保留 这会调整现有入口边界,所以先在这里讨论,不会直接把这条写入路径混进本 PR。如果你有更合适的方案,也想听听你的建议。 |
tt-a1i
left a comment
There was a problem hiding this comment.
审查提交:96a3b5e560b6959c926e6096cd9bee04f7b807c7。
本轮未发现新的阻断问题。以下结论仅覆盖所列验证范围,不是合并批准。
验证范围
审阅完整生产代码差异及问答、计划控制、异步命令来源和身份隔离相关测试。152 个 Node 测试及 202 个 UI 单元测试通过。
旧标签页控制身份问题已改为 Web Locks 独占加重复身份轮换;问答提交用固定请求身份和终态回执去重,未知提交结果不冒充未提交。Plan 状态修改复用原生 Session 控制并校验空闲状态/版本。
限制与后续
本轮未执行原生 provider 浏览器 E2E、真实模型请求或 TUI 验收。UI 单测通过不能代替这些验收。
设计草稿 WEB_STRUCTURED_QUESTIONS.md 的 future Composer control 段落未完全同步已实现的控制栏,属文档收尾。
tt-a1i
left a comment
There was a problem hiding this comment.
复审提交 c1891a9b2f9f37b6432f2e5f465fad702dc14be9。
本次新增提交只修正 WEB_STRUCTURED_QUESTIONS.md 的 Plan 控制描述;它与已审过的实现一致,新增的设计文档链接也有效。此前代码审查结论仍适用于未改动的功能代码,当前 PR 分支的远端检查全部通过。
仍需修改:与当前 main(6132d997)合并时,tests/web/web-host.test.ts、web/ui/src/protocol/client.ts 和生成的 web/dist/app.js 有内容冲突。特别是 WebClient.prompt() 的请求体:main 加入了 sessionPath,此 PR 加入了 controllerId,解决冲突必须同时保留两者,避免丢失当前 Session 绑定或问答标签页控制身份。请合并当前 main、手动处理测试夹具和客户端请求,并从最终源码重新构建 web/dist/app.js;然后在合并结果上重跑 Web、Host 和浏览器相关检查。分支现有绿灯不能覆盖这个集成结果。
Problem
Refs #562,关联 #343、#348。
部分 OpenPI 工具和扩展命令已经可以在 Web 中执行,但浏览器缺少对应交互:
ask_user等待答案时没有提交入口,plan_ready的完整计划藏在工具结果里,human_handoff没有反馈卡片,部分命令执行后也没有可见结果。命令菜单统一标为“不支持”,与手动提交后仍可能执行的行为不一致。验收中还复现了计划生成期间消息反复消失,以及停止等待中的问答时,实际已取消却显示失败的问题。
Value
用户可以在 Web 中完成提问、复核答案、阅读计划和反馈人工操作,也能明确看到当前模式、命令结果和停止状态。继续使用 Pi 原有的工具、Session、命令分派与取消流程,不增加另一套代理或权限系统。
Approach
ask_user卡片,支持选项、自定义答案和复核提交。待回答的问题绑定到发起标签页、Session 和轮次;支持刷新恢复、过期、取消和重复提交回执。关闭卡片不提交草稿,也不扩大工具原有的 Plan/Setup 使用范围。sessionStorage身份则重新生成。普通刷新可恢复原身份;不支持 Web Locks 时使用新身份,安全降级但不保证刷新恢复。此机制隔离问答控制权,不隔离同一 Session 的历史消息,也不是新的登录体系。plan_ready成功返回的 Markdown 计划,支持收起、复制和刷新恢复。卡片不代表批准实施;本次不实现 bug(web): Plan Ready 后实施命令被静默处理,工具门仍关闭 #470 的实施交接,也不把未完成的流式参数显示成已就绪计划。human_handoff增加操作说明和复核提交。“已完成”只是用户报告,模型仍需验证完成信号。本次不包含主题选择器、主题直接写入接口或首屏主题处理,相关改动保留在独立本地分支继续打磨。
实现与边界说明:Web structured questions、Web interaction UI。
Validation
已基于上游
main的45f12a4(已合并 #561)完成冲突处理和重新验证。以下是整合后的结果,使用 Node 24.16.0:bun run check:通过,包含配置/文档合同、生产构建、格式、lint 和类型检查。bun run test:Node 1,712 passed / 2 failed / 1 skipped。两个失败是已有的 TUI Plan Markdown 渲染断言;用未修改的上游45f12a4和同一套依赖单独运行该文件,也得到 22 passed / 2 failed。不宣称全量测试通过。.spec.ts(--maxWorkers=2):22 files / 318 passed。默认高并发曾导致已有设置页和侧栏测试超时,限制并发后通过,没有放宽断言或超时时间。playwright test --config tests/web/playwright.config.ts:50 passed。playwright test --config tests/web/playwright.provider.config.ts:12 passed。使用隔离 Pi 目录、本地合成 Provider 和真实 Host/Pi/浏览器,不读取用户凭据。window.open继承存储,验证新标签页换身份、无法取得待答卡片、提交取消得到 403,原页刷新仍可回答。该用例在修复前已复现失败。新增设置窗口内完成问答和 Stop 取消的整合测试。aborted状态,以及随后能否继续对话。git diff --check:通过。未覆盖 Safari 真机、手机软键盘和长期断网恢复。真实断线后的快照恢复仍可能暂时丢失未完成消息,本次修复的是正常有界数据突发造成的主动断线。
Impact
本次仅引用 #562,不关闭其中尚未推进的提案。没有提交私人会话、录屏或现场调查草稿。