37 lines
3.9 KiB
Markdown
37 lines
3.9 KiB
Markdown
---
|
||
id: T-404
|
||
title: 代理名称、独立默认目录与实例列表代理列
|
||
phase: 4
|
||
deps: [T-304, T-306, T-309, T-403]
|
||
status: DOING
|
||
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` 若为用户未跟踪文件,不纳入本任务提交。
|
||
|
||
## 执行记录
|
||
|
||
- 状态:DOING
|
||
- 变更:已完成需求、架构、API、用户故事、交互清单、任务路线与 UI 评审场景更新。
|
||
- UI/UX:依据 Gio 表单/列表适配约束,确认本次是已有两页工作区的局部字段和列调整,不改变导航、模态流程或已确认结构,故不新增 HTML 原型;实现保留现有持久 widget、稳定 ID、键盘与窄窗口重排契约。
|
||
- 验证:文档链接、Git diff 检查和文档提交待完成。
|
||
- 阻塞:无。
|