一系列问题 #1

Open
opened 2026-10-11 12:21:31 +00:00 by gjz010 · 2 comments
Owner
  1. image 可选的文本有点多了,请你看着修复
  2. image 右边这个bar最好有一点“idle时消失”的功能?此外现在上边的titlebar也被scroll挡住了
  3. image 网络组ID这么长的东西不应该放进这种tag容器,请你排查并修复类似的问题
  4. “已枚举设备”是什么?我该如何把一个设备纳入iroh-usb的管辖下?我的建议是加一个ui,允许把“一个设备”纳入到“会被iroh-usb发现的列表”。
  5. 我注意到现在所有的东西都是神秘字符串。请你允许节点:给本节点起名(顺带替换掉左下角的“节点ID展示”)。此外,请你给首次启动加一个引导向导。
  6. 现在“导出邀请”image是个json,这似乎和iroh philosophy不太一致。请你改成一长串iroh风格的一长串hex?(还是iroh的凭据不是这个)
  7. 请你实现“离开网络组”和“解散网络组”
  8. image 网络组ID被压了
  9. 请你做一个小功能:让节点和网络组都可以给自己选定图标。图标选定可以用“自选底色+一组前景图标里选一个”(我记得android有个很酷的icon constructor,请你找找有没有类似哲学的现成方案给我们用)。
  10. image 这个按钮是什么鬼?
  11. image这里我反而建议搞一个列表,并且允许踢人。
  12. 语言切换用一个下拉菜单,因为我们可能有多语言
  13. image 这里加上unix socket地址展示。
1. ![image](/attachments/3e8facaf-4540-4d39-92b2-3eb437124e02) 可选的文本有点多了,请你看着修复 2. ![image](/attachments/7f5a2d34-4989-4cc8-a081-8f22b191999d) 右边这个bar最好有一点“idle时消失”的功能?此外现在上边的titlebar也被scroll挡住了 3. ![image](/attachments/8d109337-4e03-48c6-9be3-e4a33765e05b) 网络组ID这么长的东西不应该放进这种tag容器,请你排查并修复类似的问题 4. “已枚举设备”是什么?我该如何把一个设备纳入iroh-usb的管辖下?我的建议是加一个ui,允许把“一个设备”纳入到“会被iroh-usb发现的列表”。 5. 我注意到现在所有的东西都是神秘字符串。请你允许节点:给本节点起名(顺带替换掉左下角的“节点ID展示”)。此外,请你给首次启动加一个引导向导。 6. 现在“导出邀请”![image](/attachments/fa87132e-211f-4504-bd3e-1b2fb0f19342)是个json,这似乎和iroh philosophy不太一致。请你改成一长串iroh风格的一长串hex?(还是iroh的凭据不是这个) 7. 请你实现“离开网络组”和“解散网络组” 8. ![image](/attachments/688edf84-f7c7-4b0c-b5ac-8a44a6f51338) 网络组ID被压了 9. 请你做一个小功能:让节点和网络组都可以给自己选定图标。图标选定可以用“自选底色+一组前景图标里选一个”(我记得android有个很酷的icon constructor,请你找找有没有类似哲学的现成方案给我们用)。 10. ![image](/attachments/965c7bdf-346d-4fa1-aece-8a1584545120) 这个按钮是什么鬼? 11. ![image](/attachments/2ac630f1-733f-4b32-ab2b-7ce627741ae5)这里我反而建议搞一个列表,并且允许踢人。 12. 语言切换用一个下拉菜单,因为我们可能有多语言 13. ![image](/attachments/cdf6bc18-74a3-499d-b55d-c2bd7dc27fc7) 这里加上unix socket地址展示。
Collaborator

已逐项读取这 13 项反馈,正在修复。此评论先解答问题并说明实现方向,尚不是完成报告。

问题解答

  • 第 4 项:已枚举设备就是 Linux 检测到的 USB 设备,并不代表已共享。当前实现会自动把枚举结果收进本地列表,确实缺少明确的纳管步骤。正在改成“添加设备 → 纳入管理 → 分享到网络组”,保留现有已管理设备和共享设置。
  • USB 后端是什么? 项目的 crates/usb 是硬件适配层。提供端通过 rusb/libusb 使用 Linux usbfs,按授权请求占用选定设备,再由用户态 USB/IP 实现通过 iroh 连接传输;不依赖提供端 usbip_host。接收端仍使用 Linux vhci_hcd,将远端设备接入本机。当前人工验收 daemon 使用 --disable-usb,因此不会发现或连接宿主真实 USB。
  • 第 6 项:iroh 邀请形式通常是类型前缀加 Base32 编码,不是 hex。邀请提供组和管理者的寻址信息,并非直接授予权限的密码。将改为单串文本,并保留管理者审批和旧 JSON 输入兼容。
  • 第 9 项:图标组合会复用现有 MUI Avatar 与 Lucide 图标,提供预设底色和前景图标选择,不额外引入头像服务。节点名称及外观随 daemon 设置保存;网络组外观按现有组名称一样作为本地展示设置保存。
  • 第 10 项:推送设备到网络组原意是向组内某个明确接收节点发起设备推送,且需要本地 USB 后端与接收方授权;它并不是向整个组广播连接。当前按钮和禁用提示不清楚,将改为以具体设备和接收节点为入口,并明确不可用原因。

本轮修复范围

将处理装饰文本选择、滚动区域与滚动条淡出、长 ID 展示、显式添加设备、节点命名与首次引导、单串邀请、离开与解散网络组、图标选择、成员列表与踢人、语言下拉菜单,以及实际 Unix socket 地址展示。完整 ID 和复制能力保留。普通成员可离开,管理者可解散;相关共享和会话需要同步清理。

完成后会在这里补充逐项结果与实际验证证据。硬件自动验收仍限定在获准的 QEMU TCG guest 内,不会为了修复界面去操作宿主 USB。

已逐项读取这 13 项反馈,正在修复。此评论先解答问题并说明实现方向,尚不是完成报告。 ### 问题解答 - **第 4 项:已枚举设备**就是 Linux 检测到的 USB 设备,并不代表已共享。当前实现会自动把枚举结果收进本地列表,确实缺少明确的纳管步骤。正在改成“添加设备 → 纳入管理 → 分享到网络组”,保留现有已管理设备和共享设置。 - **USB 后端是什么?** 项目的 `crates/usb` 是硬件适配层。提供端通过 `rusb/libusb` 使用 Linux `usbfs`,按授权请求占用选定设备,再由用户态 USB/IP 实现通过 iroh 连接传输;不依赖提供端 `usbip_host`。接收端仍使用 Linux `vhci_hcd`,将远端设备接入本机。当前人工验收 daemon 使用 `--disable-usb`,因此不会发现或连接宿主真实 USB。 - **第 6 项:iroh 邀请形式**通常是类型前缀加 Base32 编码,不是 hex。邀请提供组和管理者的寻址信息,并非直接授予权限的密码。将改为单串文本,并保留管理者审批和旧 JSON 输入兼容。 - **第 9 项:图标组合**会复用现有 MUI Avatar 与 Lucide 图标,提供预设底色和前景图标选择,不额外引入头像服务。节点名称及外观随 daemon 设置保存;网络组外观按现有组名称一样作为本地展示设置保存。 - **第 10 项:推送设备到网络组**原意是向组内某个明确接收节点发起设备推送,且需要本地 USB 后端与接收方授权;它并不是向整个组广播连接。当前按钮和禁用提示不清楚,将改为以具体设备和接收节点为入口,并明确不可用原因。 ### 本轮修复范围 将处理装饰文本选择、滚动区域与滚动条淡出、长 ID 展示、显式添加设备、节点命名与首次引导、单串邀请、离开与解散网络组、图标选择、成员列表与踢人、语言下拉菜单,以及实际 Unix socket 地址展示。完整 ID 和复制能力保留。普通成员可离开,管理者可解散;相关共享和会话需要同步清理。 完成后会在这里补充逐项结果与实际验证证据。硬件自动验收仍限定在获准的 QEMU TCG guest 内,不会为了修复界面去操作宿主 USB。
Collaborator

本轮修复已签名提交并推送到 main:f576dc8。

逐项结果

项目 处理结果
1. 可选文本过多 装饰性标题、导航和按钮不再可选;输入框、ID、邀请及错误信息保留选择能力。
2. 滚动条与标题栏 主内容独立滚动,滚动区域从固定标题栏下方开始;滚动条默认透明,滚动、悬停或焦点交互时显示。
3、8. 长 ID 标签和挤压 网络组 ID 改为次级文本,保留完整值查看与复制入口;390 px 与 1100 px 布局已实测。
4. 设备纳管 增加“添加设备”界面:系统发现的候选设备须显式添加,才进入管理列表;分享是后续独立操作。现有设备及共享设置保留,重启和重新插入不丢失纳管状态。USB 关闭时明确显示原因和启用说明。
5. 节点名称与引导 首次设置提供语言、节点名和图标选择;侧栏显示本机名,设置页保留完整节点 ID。名称和图标由 daemon 持久化。
6. 单串邀请 导出 irohusb 前缀的单串 Base32 邀请,加入与预览兼容原 JSON。它是本应用的 ticket,不是官方 EndpointTicket 的二进制格式。
7. 离开与解散 普通成员可以离开,管理者可以解散,均有确认。离开需要管理者确认;管理者不可达时返回错误并保留本地组。解散清理该组共享和会话,离线成员下次联系管理者时获知删除。其他组和设备保留。
9. 图标选择 复用现有 MUI Avatar 与 Lucide 图标,实现底色加前景图标选择;不增加头像服务或依赖。网络组图标按本地展示设置保存。
10. 推送按钮 移除含糊的组级推送入口,改为在具体设备上选择组内某个接收成员;显示不可用原因。不是向全组广播连接。
11. 成员列表 展示自己、管理者和成员角色,提供完整 ID 查看/复制;管理者可批准加入或确认移除成员,不能通过该界面移除自己。
12. 语言切换 顶栏改为语言下拉菜单。
13. Unix socket 设置页展示 daemon 实际绑定的 socket 路径并可复制。

新增 CLI 包括 devices discovered、devices add <DEVICE_ID>、settings node-profile、settings group-appearance、groups leave 和 groups dissolve。完整契约见 docs/API.md。

两个概念的解答

**“已枚举设备”**就是系统检测到的 USB,原文案混淆了发现与管理。本轮已明确区分“发现 → 添加到管理列表 → 分享到网络组”,添加本身不会自动共享或建立会话。

USB 后端位于 crates/usb。提供端通过 rusb/libusb 使用 Linux usbfs,由用户态 USB/IP 实现经 iroh 传输,不依赖提供端 usbip_host;接收端仍使用 Linux vhci_hcd,把远端 USB 接入本机。--disable-usb 会关闭这层硬件能力,不影响组和界面管理。

iroh 风格的 ticket 通常使用类型前缀与 Base32,而不是 hex。此邀请携带寻址信息,不是直接授予权限的密码,加入仍需管理者审批。

验证

  • Rust 工作区 196 项、Web 70 项、Desktop 21 项测试通过;严格 Clippy、Rust 格式和相关类型检查通过。
  • daemon、CLI、Web、Desktop 四个 Nix 发行包构建通过。
  • 根 flake 的真实 TCG guest 检查 product-usb、relay-product、fido-iroh 全部重跑通过,包含显式 CLI 纳管、实际 USB 数据传输及既有生命周期检查。
  • 单窗口 Electron 实测通过首次设置、名称/图标保存、邀请预览、解散确认、添加设备、独立分享、接收成员选择、批准/移除成员和成员离开;相关窄屏视图无横向溢出。设备界面测试使用注入式 USB 测试后端和真实本地 iroh 连接,没有接触宿主 USB。
  • 独立复核补上了迟到成员响应重新创建已删除组的防护,以及删除失败回滚、保留其他组传输的测试。

详细证据和边界见 docs/evidence/issue-1.md。

**保留的测试限制:**组 ID 和邀请的完整剪贴板回环受自动化窗口焦点限制,未计作实测通过;完整值仍可查看,复制工具测试及实际 socket 复制通过。管理者离线的界面报错未单独实测,但后端回归覆盖。原生拖拽沿用此前你的人工确认,本轮没有重新做物理指针验收。

所有本轮测试窗口和进程已清理,你原来的人工验收 daemon 与组状态保持不变。更新程序后请重启新版 daemon 再使用新增功能。Issue 保持打开,供你复验。

本轮修复已签名提交并推送到 `main`:[`f576dc8`](https://git.gjz010.com/gjz010/iroh-usb-manager/commit/f576dc88af5d6fbc7f59623f5160ecac5fac1b7f)。 ## 逐项结果 | 项目 | 处理结果 | | --- | --- | | 1. 可选文本过多 | 装饰性标题、导航和按钮不再可选;输入框、ID、邀请及错误信息保留选择能力。 | | 2. 滚动条与标题栏 | 主内容独立滚动,滚动区域从固定标题栏下方开始;滚动条默认透明,滚动、悬停或焦点交互时显示。 | | 3、8. 长 ID 标签和挤压 | 网络组 ID 改为次级文本,保留完整值查看与复制入口;390 px 与 1100 px 布局已实测。 | | 4. 设备纳管 | 增加“添加设备”界面:系统发现的候选设备须显式添加,才进入管理列表;分享是后续独立操作。现有设备及共享设置保留,重启和重新插入不丢失纳管状态。USB 关闭时明确显示原因和启用说明。 | | 5. 节点名称与引导 | 首次设置提供语言、节点名和图标选择;侧栏显示本机名,设置页保留完整节点 ID。名称和图标由 daemon 持久化。 | | 6. 单串邀请 | 导出 `irohusb` 前缀的单串 Base32 邀请,加入与预览兼容原 JSON。它是本应用的 ticket,不是官方 EndpointTicket 的二进制格式。 | | 7. 离开与解散 | 普通成员可以离开,管理者可以解散,均有确认。离开需要管理者确认;管理者不可达时返回错误并保留本地组。解散清理该组共享和会话,离线成员下次联系管理者时获知删除。其他组和设备保留。 | | 9. 图标选择 | 复用现有 MUI Avatar 与 Lucide 图标,实现底色加前景图标选择;不增加头像服务或依赖。网络组图标按本地展示设置保存。 | | 10. 推送按钮 | 移除含糊的组级推送入口,改为在具体设备上选择组内某个接收成员;显示不可用原因。不是向全组广播连接。 | | 11. 成员列表 | 展示自己、管理者和成员角色,提供完整 ID 查看/复制;管理者可批准加入或确认移除成员,不能通过该界面移除自己。 | | 12. 语言切换 | 顶栏改为语言下拉菜单。 | | 13. Unix socket | 设置页展示 daemon 实际绑定的 socket 路径并可复制。 | 新增 CLI 包括 `devices discovered`、`devices add <DEVICE_ID>`、`settings node-profile`、`settings group-appearance`、`groups leave` 和 `groups dissolve`。完整契约见 [`docs/API.md`](https://git.gjz010.com/gjz010/iroh-usb-manager/src/branch/main/docs/API.md)。 ## 两个概念的解答 **“已枚举设备”**就是系统检测到的 USB,原文案混淆了发现与管理。本轮已明确区分“发现 → 添加到管理列表 → 分享到网络组”,添加本身不会自动共享或建立会话。 **USB 后端**位于 `crates/usb`。提供端通过 `rusb/libusb` 使用 Linux `usbfs`,由用户态 USB/IP 实现经 iroh 传输,不依赖提供端 `usbip_host`;接收端仍使用 Linux `vhci_hcd`,把远端 USB 接入本机。`--disable-usb` 会关闭这层硬件能力,不影响组和界面管理。 iroh 风格的 ticket 通常使用类型前缀与 Base32,而不是 hex。此邀请携带寻址信息,不是直接授予权限的密码,加入仍需管理者审批。 ## 验证 - Rust 工作区 **196 项**、Web **70 项**、Desktop **21 项**测试通过;严格 Clippy、Rust 格式和相关类型检查通过。 - daemon、CLI、Web、Desktop 四个 Nix 发行包构建通过。 - 根 flake 的真实 TCG guest 检查 `product-usb`、`relay-product`、`fido-iroh` 全部重跑通过,包含显式 CLI 纳管、实际 USB 数据传输及既有生命周期检查。 - 单窗口 Electron 实测通过首次设置、名称/图标保存、邀请预览、解散确认、添加设备、独立分享、接收成员选择、批准/移除成员和成员离开;相关窄屏视图无横向溢出。设备界面测试使用注入式 USB 测试后端和真实本地 iroh 连接,没有接触宿主 USB。 - 独立复核补上了迟到成员响应重新创建已删除组的防护,以及删除失败回滚、保留其他组传输的测试。 详细证据和边界见 [`docs/evidence/issue-1.md`](https://git.gjz010.com/gjz010/iroh-usb-manager/src/branch/main/docs/evidence/issue-1.md)。 **保留的测试限制:**组 ID 和邀请的完整剪贴板回环受自动化窗口焦点限制,未计作实测通过;完整值仍可查看,复制工具测试及实际 socket 复制通过。管理者离线的界面报错未单独实测,但后端回归覆盖。原生拖拽沿用此前你的人工确认,本轮没有重新做物理指针验收。 所有本轮测试窗口和进程已清理,你原来的人工验收 daemon 与组状态保持不变。更新程序后请重启新版 daemon 再使用新增功能。Issue 保持打开,供你复验。
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
gjz010/riftbus#1
No description provided.