From bc35bb0f3d63610193f94be4b93e62fac43ceca8 Mon Sep 17 00:00:00 2001 From: QiuSW <105186638@qq.com> Date: Mon, 27 Jul 2026 22:35:59 +0800 Subject: [PATCH] docs: define executable picker feedback repair --- docs/02-requirements.md | 2 ++ docs/04-architecture.md | 2 ++ docs/06-tasks.md | 1 + docs/07-user-stories.md | 5 +++++ docs/08-interaction-checklist.md | 2 ++ docs/api.md | 10 ++++++++++ docs/current-state.md | 5 +++-- docs/tasks/T-405.md | 33 ++++++++++++++++++++++++++++++++ docs/ui/README.md | 6 +++--- 9 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 docs/tasks/T-405.md diff --git a/docs/02-requirements.md b/docs/02-requirements.md index 96f2092..b69770f 100644 --- a/docs/02-requirements.md +++ b/docs/02-requirements.md @@ -22,6 +22,7 @@ | BR-018 | Chub 运行时提供一个 Windows 通知区域图标,允许显示主窗口、刷新已保存实例状态和显式退出应用;图标及菜单不得绕过实例授权边界或泄露实例路径、URL、代理等敏感信息。 | P1 | | BR-019 | Chub 默认将本地 `config.json` 保存到正在执行的 `chub.exe` 同级目录;首次使用新位置时安全迁移旧 `%APPDATA%\\chub\\config.json`,新位置既有配置永不被旧配置覆盖。 | P1 | | BR-020 | 用户可为无认证代理维护必填、唯一的代理名称;新建实例默认使用实际 `chub.exe` 同级 `user_data_dirs\\<稳定实例 ID>`,实例列表在用户数据目录与调试端口之间显示代理名称。 | P1 | +| BR-021 | 设置中的 Chrome 与 Edge 可执行文件路径必须支持 Windows 原生 `.exe` 文件选择;标准安装路径搜索必须在对应字段旁可感知地报告搜索、取消、确认当前路径、更新路径或失败,且不丢失已有输入。 | P1 | ## 验收标准 @@ -51,6 +52,7 @@ - 通知区域仅显示一个 Chub 图标;Tooltip 仅含非敏感汇总状态。双击或默认菜单项显示并置前主窗口,刷新命令仍只检查已保存实例,退出命令走明确的应用退出协调流程。 - 图标创建失败、Explorer 重启、菜单关闭和应用退出不会阻塞 UI 帧,也不会导致浏览器启动、关闭、接管或按进程名枚举。退出时必须移除图标;外部 Chrome/Edge 永远不因通知区域命令被停止。 - 默认配置路径必须由实际可执行文件路径解析,而非当前工作目录;迁移只在新位置不存在且旧配置存在、可读取、可校验时执行。迁移使用现有原子写入并保留旧配置恢复备份;目标目录不可写或旧配置畸形时,不创建半成品配置、不静默回退或混合两个配置来源,并给出可恢复诊断。 +- 设置页的 Chrome/Edge“选择”必须打开仅允许现有 `.exe` 的 Windows 原生文件选择器;取消、选择失败或不合规结果必须保留原输入。搜索标准安装路径时,结果即使与当前路径相同,也必须在同一字段旁明确表示“已确认当前路径可用”;搜索、取消、成功和失败不得依赖页面下方的全局反馈。 ## 不做 diff --git a/docs/04-architecture.md b/docs/04-architecture.md index 78de7ab..d6425c9 100644 --- a/docs/04-architecture.md +++ b/docs/04-architecture.md @@ -17,6 +17,7 @@ Platform Windows ├─ remote-debug port allocator ├─ instance status refresher ├─ portable config path resolver / legacy migrator + ├─ Windows executable file picker └─ notification-area adapter (Windows Shell) ↓ Chrome / Edge processes @@ -49,6 +50,7 @@ UI/CLI 不直接操作 `exec.Cmd`、Win32 handle 或数据库。Application 层 - CDP 页面目标查看:UI 仅将当前已保存实例快照交给后台 adapter;adapter 只接受“运行中”或“外部已关联”的有效实际端口,先复核对应 browser kind 的 loopback `/json/version`,再读取同一端口的 `/json/list`。结果 DTO 仅含 target ID、标题、类型和脱敏 URL;UI 以实例 ID、端口和请求代次丢弃过期结果。该链路不建立 WebSocket、不开启页面控制,也不提供物理窗口 ID。 - 通知区域:Windows platform adapter 在独立原生消息循环中管理一个图标、Tooltip 和原生菜单,向 `cmd/chub` 发送仅含“显示主窗口 / 刷新状态 / 退出应用”的 typed command。应用 coordinator 决定如何显示 Gio 窗口、发起既有刷新或执行退出清理;adapter 不持有浏览器进程句柄,不调用浏览器启动/停止接口。图标状态仅来自非敏感实例计数;Explorer 重启后重新注册,应用结束前删除图标。首版不拦截 Gio 的窗口关闭消息,也不隐藏主窗口。 - 配置定位与迁移:`config.OpenDefault()` 先用 `os.Executable()` 的目录解析目标 `config.json`,不依赖工作目录。目标文件已存在时直接使用它;目标不存在时仅尝试读取旧 `%APPDATA%\\chub\\config.json`,通过现有 decode/normalize 校验后以 Store 原子写入目标,并把旧文件保留为只读恢复备份。迁移失败不会写入目标、不会删除旧文件、不会回退到 AppData 继续运行;应用层只显示可恢复的启动诊断,不显示配置内容。CLI 与 GUI 共用该入口,避免出现不同配置来源。 +- 浏览器可执行文件选择:`internal/platform/files.ExecutablePicker` 仅负责通过 Windows 原生 `OpenFileDialog` 返回已存在的绝对 `.exe` 路径;Gio shell 通过后台 adapter 调用并以字段和请求代次接收结果,不在 UI frame 中打开对话框或执行系统 I/O。Chrome 与 Edge 各自保存选择中状态和字段级反馈;取消、失败和不合规结果不改写 editor。标准路径搜索沿用独立可取消任务,但成功结果(包括与当前输入相同的确认结果)必须显示在发起字段旁,避免被页面下方的无关状态区遮蔽。 Chrome 和 Edge 共用大部分 Chromium 参数,但 executable 默认路径、进程名称和安装方式不同,通过 `BrowserDefinition` 封装差异。CDP 端点只绑定 `127.0.0.1`;端口号和 `/json/version` 是诊断数据,WebSocket URL 不进入持久化、事件或普通 UI 文案。`/json/list` 仅用于只读页面目标信息;URL 在 DTO 边界移除 userinfo、query 和 fragment。 diff --git a/docs/06-tasks.md b/docs/06-tasks.md index 15d663d..f86d2bd 100644 --- a/docs/06-tasks.md +++ b/docs/06-tasks.md @@ -55,6 +55,7 @@ | T-402 | Windows 通知区域入口与显式退出协调 | T-303,T-305,T-307 | TODO | | T-403 | 便携配置路径与安全 legacy 迁移 | T-202,T-309 | DONE | | T-404 | 代理名称、独立默认目录与实例列表代理列 | T-304,T-306,T-309,T-403 | DONE | +| T-405 | 设置浏览器 executable 选择与可感知搜索反馈 | T-205,T-206,T-207 | DOING | ## Backlog diff --git a/docs/07-user-stories.md b/docs/07-user-stories.md index 0950e53..be45475 100644 --- a/docs/07-user-stories.md +++ b/docs/07-user-stories.md @@ -17,6 +17,7 @@ | US-013 | 用户可以从 Windows 通知区域快速显示 Chub、刷新已保存实例状态或明确退出应用,而不会在菜单中误操作浏览器实例。 | P1 | | US-014 | 用户复制或升级 Chub 后,实例配置与程序一同保存在可执行文件目录;首次升级会安全带入旧 AppData 配置且不丢失已有新配置。 | P1 | | US-015 | 用户可以用易读名称维护代理,并在实例列表快速确认每个实例使用的代理;新建实例会得到程序目录内独立的默认 User Data Dir。 | P1 | +| US-016 | 用户可以从设置页选择 Chrome 或 Edge 的本机可执行文件,或搜索标准安装位置,并立即知道当前路径是否已确认或被更新。 | P1 | ## 验收场景 @@ -67,3 +68,7 @@ CLI/API 返回稳定错误码和结构化数据;未知 PID、身份不匹配 ### US-015 代理名称与独立默认目录 给定用户在设置中选择已有代理,Chub 回填代理名称和完整无认证地址;用户保存时必须同时通过名称必填/不区分大小写唯一和地址格式/重复校验。给定已有实例选择该代理,用户修改其名称或地址后,实例保留相同 `proxyId`,列表立即显示最新名称,后续启动使用最新地址,已运行浏览器不被修改。给定用户打开新建实例表单,Chub 先分配稳定实例 ID,再填入实际 `chub.exe` 同级 `user_data_dirs\\<实例 ID>`;每次新建得到不同子目录。目录不可写或被用户改为空/非法路径时,保留表单输入并提供可恢复提示,不创建目录、不回退到当前工作目录,也不影响已有实例。 + +### US-016 浏览器 executable 选择与搜索反馈 + +给定用户位于设置页,点击 Chrome 或 Edge 路径旁的“选择”后,Chub 在后台打开 Windows 原生文件选择器,并只接受已有的绝对 `.exe` 文件。成功选择只更新对应输入框并在字段旁说明已选择;取消、错误或不合规路径保留原输入并给出可恢复说明。点击“搜索”后,按钮在任务进行期间显示“取消”;搜索发现标准安装路径时,即使结果与当前值相同,也在同一字段旁显示“已确认当前路径可用”。切换到实例页再返回后,输入、选择/搜索状态和字段反馈保持,不执行全盘扫描或任何浏览器进程操作。 diff --git a/docs/08-interaction-checklist.md b/docs/08-interaction-checklist.md index b5c7ced..186082a 100644 --- a/docs/08-interaction-checklist.md +++ b/docs/08-interaction-checklist.md @@ -17,6 +17,7 @@ | IX-013 | Windows 通知区域 | 图标双击/默认显示、原生菜单刷新与退出 | 图标创建失败、Explorer 重启、窗口最小化、菜单关闭、刷新中、应用退出 | P1 | | IX-014 | 配置启动与迁移 | exe 同级配置解析、legacy 配置迁移和可恢复失败反馈 | 新配置、合法 legacy、目标优先、畸形 legacy、目标目录不可写、重复启动 | P1 | | IX-015 | 代理名称、默认目录与列表列 | 代理名称/地址保存、下拉回填、实例默认目录、代理名称展示 | 新建、编辑、重名/重复地址、无代理、长名称、窄窗口、目录权限失败 | P1 | +| IX-016 | 设置浏览器 executable 路径 | Chrome/Edge 选择本机 `.exe`、搜索标准安装位置与取消 | 选择中、用户取消、选择失败、非法结果、搜索中、取消、路径更新、确认当前路径、未找到、切换页面 | P1 | ## 通用规则 @@ -38,3 +39,4 @@ - CDP 页面目标查看是只读、可关闭的临时对话框:入口仅对已有实际已验证端口的“运行中”或“外部已关联”实例可用;打开后焦点位于关闭按钮,Escape 关闭并回到“查看标签页”入口。读取中、空列表和错误均用文字表达,错误不丢失编辑输入;结果只含标题、类型和脱敏 URL,不能把目标 ID、WebSocket URL 或物理窗口 ID当作控制授权。 - 通知区域图标是 Windows 原生的辅助入口,不替代页面内可键盘访问的实例操作。图标默认项为“显示 Chub”,双击同效;右键菜单顺序固定为显示、刷新、分隔线、退出。刷新复用页面刷新命令并在进行中禁用重复项;退出是应用级命令,不能伪装为关闭单个浏览器。Tooltip 使用文字汇总,不含实例名称或敏感字段。菜单关闭不改变状态;图标失效或 Explorer 重启后后台重建,不抢焦点。首版不提供“关闭时隐藏到通知区域”。 - 配置迁移不是用户可编辑表单:应用启动时在 platform 层完成,GUI frame 不读取或写入文件。成功迁移仅以不打扰操作的文本说明来源已更新;失败时保留实例列表输入与当前可见页面,给出“程序目录中的 config.json 无法使用;请检查目录权限或恢复旧配置”的可恢复提示,不能显示完整配置、代理地址或用户路径。无需 HTML 原型,因为不新增可操作控件;需以真实 Windows 文件权限和 CLI/GUI 启动验证。 +- 浏览器 executable 路径的“选择”和“搜索”是字段级异步操作:选择中禁止同一字段重复打开,搜索中按钮显示“取消”。每个结果都紧邻其 Chrome/Edge 路径字段显示,不能只写到需滚动才能看见的页面底部。用户取消、系统错误、空结果或不为绝对 `.exe` 的结果均保留原输入;搜索命中当前值时显示明确确认而不是静默完成。两个字段、页面切换和迟到结果彼此隔离;键盘与触控均可触发“选择”和“搜索/取消”。本次是既有控件的局部行为修复,不新增信息架构或视觉模式,因此无需改动 HTML 原型;须以真实 Windows 文件对话框 smoke 验收。 diff --git a/docs/api.md b/docs/api.md index 2810e08..9ca744f 100644 --- a/docs/api.md +++ b/docs/api.md @@ -49,6 +49,16 @@ GUI 将优雅停止封装为异步 `InstanceStopper(ctx, InstanceRow) error` ada 状态刷新、受管进程退出、目录选择和 CDP 页面目标读取必须通过后台 adapter 回到 UI 结果通道;UI frame 不直接做进程、文件或 CDP I/O。受管退出结果至少包含实例 ID、启动代次、受管 PID、退出码和是否为 Chub 请求停止;UI 以实例 ID、代次和 PID 丢弃过期结果。刷新和页面目标读取都不构成外部实例接管授权。 +设置页浏览器 executable 选择使用 platform 文件选择契约;它不发现、启动、关闭或检查浏览器进程: + +```go +type ExecutablePicker interface { + ChooseExecutable(ctx context.Context) (string, error) +} +``` + +Windows 实现只返回绝对 `.exe` 路径;用户取消返回可识别的取消错误。UI 在后台调用该契约,并以 `PathField` 和请求代次丢弃过期结果。选择成功才改写对应 Chrome/Edge 字段;同字段的搜索/选择状态和文字反馈必须独立保存,不能依赖页面底部的全局消息。 + Windows 通知区域使用仅限 platform 的内部 DTO;Gio shell 不直接调用 Shell API: ```go diff --git a/docs/current-state.md b/docs/current-state.md index 4d5bfc8..07a69f6 100644 --- a/docs/current-state.md +++ b/docs/current-state.md @@ -3,7 +3,7 @@ ## 快照 - 日期:2026-07-27 -- 阶段:Phase 4 CDP 只读观察与后台入口(T-301 至 T-310、T-201 至 T-208、T-401、T-403、T-404 已完成;T-402 已规划) +- 阶段:Phase 4 CDP 只读观察与后台入口(T-301 至 T-310、T-201 至 T-208、T-401、T-403、T-404 已完成;T-402 已规划;T-405 进行中) - 代码:已建立 Go module `chub`、`cmd/chub` 入口、logging 测试基座、浏览器 domain/application 合约、Chrome/Edge 参数/发现模块、启动 registry、Windows 身份/占用检查、loopback CDP 端口分配与端点校验、受限 CDP 目标读取、exe 同级 JSON 配置与 legacy 安全迁移、优雅关闭、Job Object、真实 Chrome/Edge smoke、启动恢复、CLI JSON 合约、应用内事件总线、UI 状态测试和 Windows smoke 脚本,T-001 至 T-003、T-101 至 T-104、T-201 至 T-208、T-301 至 T-310、T-401、T-403 已完成 - UI:Gio 双页 Shell 使用左侧“实例/设置”导航;实例页以等宽“新建实例 / 刷新实例状态”命令区开始,窄内容区自动堆叠。列表固定显示实例名称、浏览器类型、用户数据目录、代理名称、调试端口、状态和带边框的操作列;代理列只由稳定 `ProxyID` 解析当前名称(无代理时显示“无代理”),长名称省略且不挤压操作列。端口列在未启动/已退出时显示“建议 {端口}”、启动中显示“准备 {端口}”、托管运行显示“实际 {端口}”、外部关联显示“外部 {端口}”,避免将持久首选端口误作监听事实。新建表单从设置的起始端口推荐最低未冲突端口,并从实际 exe 同级 `user_data_dirs\\<实例 ID>` 预填一个独立、可编辑的 User Data Dir;ID 先分配,UI 不做目录 I/O,无法取得 exe 根目录时保留手动输入入口。编辑停止实例可修改首选端口;启动后台优先该端口并避开其他实例的首选/实际端口,成功回退后才保存新的首选值。操作顺序固定为启动/停止(或重新检测)、编辑、删除,删除与相邻操作保持更大间距以降低误点。主操作在已退出时启动,在 Chub 托管运行或调试不可用时显示停止,在启动/停止中禁用,在外部关联、外部占用或未知占用时仅重新检测;优雅停止通过后台 adapter 验证 registry 的 PID/profile 身份并等待其释放,绝不按进程名关闭或接管外部 Chrome/Edge。刷新通过后台回调只检查已保存实例,以配置快照丢弃编辑或删除后的过期结果;它结合 Chub registry、指定 profile 的外部占用证据和 loopback CDP 端点更新状态,但不扫描、接管或关闭其他 Chrome/Edge。双击、Enter 或编辑图标打开实例编辑弹层,支持名称、浏览器类型、User Data Dir、启动 URL、首选端口、以“名称 · 地址”显示的代理选择和只读实际端口;保存保留未公开启动选项,Escape 对脏表单先请求确认,活跃/外部关联实例锁定身份约束字段。设置页使用完整代理地址选择器、代理名称与地址输入及保存/删除操作;选择会回填名称和地址,保存按稳定 `proxyId` 新增或更新并校验名称/地址唯一性,删除未引用代理前必须确认,仍被实例引用的代理会被拒绝。启动通过异步回调接到 Windows 浏览器启动器:未占用目录从已保存的起始端口(空值默认 9666)选择 loopback CDP 端口,并在启动时按已选代理 ID 解析最新的 `--proxy-server` 参数;同目录外部浏览器只有在 `DevToolsActivePort` 与 CDP 端点可验证时才显示“外部已关联”,且不会接管其生命周期。删除使用确认弹层,只删除 Chub 实例配置而不删除 User Data Dir。新建、编辑和删除实例会保存到本地配置;四个设置路径有独立异步可取消搜索,切换页面后输入和任务状态保留;新建实例表单使用 Label、Windows 原生目录选择器和 Chrome/Edge RadioButton;CLI `list/events` 已可用,`start/stop/restart` 等待 BrowserManager adapter - T-307:本应用会话启动的受管 Chrome/Edge 根进程由单实例后台 `Wait` 监控;意外退出按 ID、启动代次和 PID 验证后立即变为“已退出”,清空运行时 PID/端口,并以可关闭、可合并的提示告知用户。提示关闭后焦点回到启动操作;Chub 请求停止、外部实例、过期事件和应用关闭取消监控均不提示。 @@ -15,7 +15,8 @@ - T-402:已规划 Windows 通知区域图标、显示主窗口、刷新已保存实例状态和显式退出协调。首版不在托盘菜单中直接操作浏览器,不改变窗口关闭语义,也不实现关闭窗口后隐藏;Windows 原生 Shell adapter、Explorer 重启恢复、图标资源与退出清理将在实施阶段完成。 - T-403:默认配置已改为实际 `chub.exe` 同级 `config.json`,不受当前工作目录影响。目标缺失时会校验并原子复制旧 AppData 配置,旧文件保持恢复副本;目标优先且不会自动合并、切回 AppData 或迁移浏览器 User Data Dir。CLI 与 GUI 共用 `OpenDefault()`;配置不可用时 CLI 返回无敏感细节的稳定错误,GUI 显示恢复提示。 - T-404:已完成代理名称/地址同次显式保存、名称与端点唯一性校验、选择回填、列表代理名称列以及独立默认 profile 目录。新建实例先分配稳定 ID,再由实际 exe 目录生成 `user_data_dirs\\<实例 ID>`;代理名称按 ProxyID 推导而不复制到实例配置,UI 不进行文件 I/O。已通过单元测试、竞态检测、vet、无控制台 GUI 打包和 Windows smoke。 -- blocker:无;下一任务为 T-402。 +- T-405:进行中。已定位设置页 Chrome/Edge“选择”按钮只写提示、未调用文件选择器;标准路径搜索虽可返回默认已填路径,但成功反馈仅位于页面下方而不可感知。将接入后台 Windows `.exe` 文件选择器,并将选择/搜索的取消、成功、确认当前路径及失败反馈固定在相应字段旁。 +- blocker:无;当前任务为 T-405,随后恢复 T-402。 ## 当前目录 diff --git a/docs/tasks/T-405.md b/docs/tasks/T-405.md new file mode 100644 index 0000000..4cf8103 --- /dev/null +++ b/docs/tasks/T-405.md @@ -0,0 +1,33 @@ +--- +id: T-405 +title: 设置浏览器 executable 选择与可感知搜索反馈 +phase: 4 +deps: [T-205, T-206, T-207] +status: DOING +created: 2026-07-27 +owner: codex +--- + +## 需求与背景 + +设置页的 Chrome 与 Edge executable 路径已经展示“选择”和“搜索”操作,但 Chrome/Edge 的“选择”点击后只写入一条全局提示,没有调用任何文件选择器。标准安装路径搜索能够在后台发现本机浏览器,不过默认路径通常已预填为相同值,成功提示又位于需要滚动才可见的页面下方,用户会误以为两个操作都没有反应。 + +## 方案与边界 + +- 在 `internal/platform/files` 新增 `ExecutablePicker`,Windows 实现使用原生 `OpenFileDialog`,只允许已有的绝对 `.exe` 结果;非 Windows 实现返回明确的不支持错误。它不发现、启动、检查、接管或关闭浏览器进程。 +- Gio shell 通过后台 `ExecutableChooser` adapter 调用选择器,并按 Chrome/Edge `PathField`、请求代次和取消上下文收取结果;UI frame 与点击回调不得执行系统 I/O。选择成功才覆盖相应 editor;取消、失败或非法结果保留原输入。 +- Chrome 与 Edge 路径各自维护选择/搜索状态与字段级反馈。搜索开始、取消、更新、未找到和失败均在发起字段旁显示;搜索结果与当前值一致时明确显示“已确认当前路径可用”。页面底部的运行行为反馈不再承担路径操作的唯一可见反馈。 +- 这是已确认 Gio 页面局部行为修复,不改变导航、布局信息架构或视觉组件体系;按 `windows-ui-ux` 评审无需新 HTML 原型。仍需在真实 Windows GUI 中验证文件对话框、取消和同路径搜索反馈。 + +## 验收要点 + +- 自动化:为 Windows executable picker、无效/取消结果、Shell 选择结果及同路径搜索反馈新增单元测试;`go test ./...`、`go test -race ./cmd/chub ./internal/ui ./internal/platform/files`、`go vet ./...`、`go build -o build/chub.exe ./cmd/chub` 通过。 +- Windows smoke:设置页 Chrome 与 Edge 的“选择”均打开原生文件选择器;选取 `.exe` 后仅更新对应字段;取消、错误与非 `.exe` 结果保留字段输入。搜索标准安装路径时按钮短暂显示“取消”,命中默认路径也会在该字段旁显示确认文字;切换到实例页再返回后输入和反馈仍在。 +- 安全与交互:不做全盘扫描,不记录完整路径以外的系统诊断,不进行浏览器进程枚举、启动、停止或接管;同字段重复点击不能并发打开多个对话框,迟到结果不能覆盖较新的同字段操作。 + +## 执行记录 + +- 状态:DOING +- 变更:已完成根因分析和需求、架构、API、用户故事、交互清单、原型验收说明的更新;待文档提交后实现。 +- 验证:待执行。 +- 阻塞:无。 diff --git a/docs/ui/README.md b/docs/ui/README.md index 6a4c863..7044de6 100644 --- a/docs/ui/README.md +++ b/docs/ui/README.md @@ -15,7 +15,7 @@ 5. 点击“关闭实例”:确认对话框默认提供优雅关闭;重启需要先等待旧实例退出。 6. 使用搜索、浏览器筛选、状态筛选和刷新状态。 7. 切换深色主题,并在窄窗口查看导航和表单重排。 -8. 点击“设置”:检查四个路径的 Label、选择/搜索按钮;搜索期间按钮显示“取消”,再次点击取消当前搜索,切换页面后状态保持。 +8. 点击“设置”:检查四个路径的 Label、选择/搜索按钮;Chrome/Edge 的“选择”必须打开 Windows 原生 `.exe` 文件选择器,取消后保留输入。搜索期间按钮显示“取消”,再次点击取消当前搜索;搜索命中当前路径时在同一字段旁显示已确认反馈,切换页面后状态保持。 9. 双击“运行中”或“外部已关联”实例,点击“查看标签页”:检查读取中、目标列表、只读边界文案与 Escape/关闭后回到入口。未启动或没有实际端口的实例应禁用入口。 10. 设置代理:检查代理名称和代理地址均有 Label;选择项会回填两项,保存修改后实例列表仅显示最新代理名称。新建实例应默认填入程序目录内不同的 `user_data_dirs\\<实例 ID>` 子目录;窄窗口下代理列不能挤压操作按钮。 @@ -25,7 +25,7 @@ - 详情和新建配置使用右侧抽屉,不创建文档标签。 - 选择实例后,右侧详情同时承载当前状态、操作、配置摘要和最近活动;不要求用户在实例与活动页面之间切换。 - 设置作为独立顶级页面,采用显式提交;取消只恢复本次未保存的表单修改。 -- 路径搜索不进行默认全盘扫描:浏览器搜索标准安装路径,目录搜索验证当前输入;新建实例的 User Data Dir 已接入 Windows 原生选择器。 +- 路径搜索不进行默认全盘扫描:浏览器搜索标准安装路径,目录搜索验证当前输入;Chrome/Edge 路径通过 Windows 原生文件选择器选择既有 `.exe`,新建实例的 User Data Dir 已接入 Windows 原生目录选择器。 - 外部实例显示占用证据,但不提供接管或强制关闭入口。 - “标签页(CDP 页面目标)”只读取已验证 loopback CDP 端点的展示 DTO;不会显示 WebSocket 调试地址,不提供任何页面或浏览器控制。它不是物理窗口管理视图。 - 原型中的“确认”只模拟事件反馈,不启动真实浏览器或改变文件。 @@ -38,7 +38,7 @@ | 实例列表 | 虚拟化列表;实例 ID 而非行号作为身份 | | 实例列契约 | 固定为实例名称、浏览器类型、用户数据目录、代理、调试端口、状态、操作;代理显示名由稳定 ProxyID 推导,行内操作以实例 ID 独立持有状态 | | 启动表单 | 持久 editor/选择状态,显式提交,字段错误保留输入 | -| 路径搜索 | 独立任务 ID、取消函数与结果通道;迟到结果按任务 ID 丢弃 | +| 路径选择与搜索 | 选择和搜索均通过后台 adapter、独立请求 ID、取消函数与结果通道;迟到结果按字段/任务 ID 丢弃,反馈紧邻发起字段 | | 详情抽屉 | 自定义辅助面板,关闭后焦点返回实例行 | | 确认对话框 | 模态层限制背景交互,Escape 取消,危险操作不默认聚焦 | | CDP 页面目标 | 异步只读 DTO、ID/端口/请求快照防过期、Escape 关闭后返回入口焦点 |