Files

37 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: T-404
title: 代理名称、独立默认目录与实例列表代理列
phase: 4
deps: [T-304, T-306, T-309, T-403]
status: DONE
created: 2026-07-27
owner: codex
---
## 需求与背景
现有代理模型已持久化 `ProxyProfile.Name`,但设置页把它覆盖为代理地址,实例列表也无法直接确认实例使用的代理。新建表单的 User Data Dir 未预填可复制部署的独立目录。需要让用户以代理名称维护和确认实例配置,同时为每个新实例生成实际 `chub.exe` 同级 `user_data_dirs\\<稳定实例 ID>` 默认目录。
## 方案与边界
- 设置代理区新增“代理名称”输入。名称和地址采用同一次显式保存:名称必填、去首尾空白、大小写无关唯一;地址继续限制为无认证 `scheme://host:port` 并拒绝重复。选择已保存项会回填名称和地址;保存失败保留所有输入与选择。稳定 `proxyId` 不随改名或改地址变化。
- 创建/编辑实例的代理选择器显示“名称 · 地址”;实例列表新增位于“用户数据目录”与“调试端口”之间的“代理”列,只显示名称或“无代理”。列表按 `ProxyID` 解析当前名称,不将显示名称持久化到实例,改名后立即反映;窄宽度下名称可省略但不得挤压固定操作列或改变按钮、双击、Enter 的语义。
- 打开新建实例表单时,先分配稳定且不与已保存实例冲突的 ID,再由 platform config 从实际 `os.Executable()` 生成 `<exe-dir>\\user_data_dirs\\<instance-id>`。不得使用当前工作目录,也不得把共享根目录作为多个实例的 `user-data-dir`。目录选择和手动输入仍可覆盖默认值。
- 默认目录生成只返回路径字符串,不创建目录或检查权限;Gio UI 不做文件 I/O。既有保存/启动边界负责绝对路径、权限与占用校验;失败时保留输入并给出可恢复提示。程序目录不可写时不得静默切至 AppData 或其他路径。
- 代理名称属于本地显示元数据:不得写入日志、事件、CLI 错误、托盘 Tooltip 或启动参数;代理认证信息继续禁止进入配置、UI 回显、日志和命令行。
## 验收要点
- 自动化:覆盖配置层代理名称的空值、空白、大小写重复与保留稳定 ID;覆盖选择回填、创建/修改代理、列表名称实时解析、无代理、长名称布局权重;覆盖默认目录由注入 executable 目录和稳定实例 ID 生成、绝不依赖当前工作目录且新实例目录不同。
- GUI:代理设置中名称/地址均有可访问 Label;下拉项显示“名称 · 地址”,保存与删除保护沿用既有键盘和确认行为。新建实例首次打开即显示完整、可编辑的独立默认 User Data Dir;取消目录选择或保存失败不清空用户输入。列表列顺序为名称、浏览器、用户数据目录、代理、调试端口、状态、操作。
- 布局与可访问性:验证 600px/960px 窗口、100%–200% 缩放和长中文代理名称。代理列截断不影响操作列;单击行只选择、双击/Enter 编辑、行内命令优先级保持不变;名称、地址、错误反馈均有文字而非仅颜色。
- 回归:`go test ./...`、`go test -race ./cmd/chub ./internal/platform/config ./internal/ui`、`go vet ./...`、`build.bat` 与 `scripts\\smoke-windows.ps1` 均通过。`build.bat`/`run.bat` 若为用户未跟踪文件,不纳入本任务提交。
## 执行记录
- 状态:DONE
- 变更:已完成代理名称输入、名称/地址同次保存与校验、选择回填、稳定 ProxyID 保留、列表代理名称列以及实际 exe 同级 `user_data_dirs\\<实例 ID>` 默认目录。配置层拒绝空白/大小写重复名称和重复端点;默认目录只计算路径且不创建目录。
- UI/UX:依据 Gio 表单/列表适配约束,确认本次是已有两页工作区的局部字段和列调整,不改变导航、模态流程或已确认结构,故不新增 HTML 原型;实现保留现有持久 widget、稳定 ID、键盘与窄窗口重排契约。
- 验证:`go test ./...`、`go test -race ./cmd/chub ./internal/domain ./internal/platform/config ./internal/ui`、`go vet ./...`、`build.bat`、`powershell -ExecutionPolicy Bypass -File scripts\\smoke-windows.ps1` 和 `git diff --check` 均通过;已确认 `build\\chub.exe` 为 Windows GUI 子系统。仅 `build.bat`、`run.bat` 保持未跟踪,未纳入任务提交。
- 阻塞:无。