联网短口令 · 收尾记录(2026-10-19)¶
历史记录 / Historical record:本文保留当时的计划、研究或验收证据,不代表 0.11 当前能力全集。现行说明见 文档入口;英文入口见 English overview。
最后更新:2026-10-19 12:17
接手 codex 的未提交工作(先整笔留档 026a3f1b:shortCode/cloudExchange 主体 + 各入口改造,类型检查已过但未验收),按用户反馈收尾。本目录是本轮的证据与截图。
用户原话与对应处理¶
| 用户反馈 | 根因 | 处理 |
|---|---|---|
| 「网盘仓库里存了一堆口令重复生成,一个个人名片无数口令」 | 每次分享都新建 manifest + 新分享链接 | 发布去重 + 稳定分享位:内容没变复用旧短码;名片/组织就地覆盖同一个目录 |
| 「还一个都识别不了」 | ① 用户跑的是 10-11 安装包,缺 seafile_share_read 命令(10-18 才注册);② 「导入口令」只认 ONV1/ONV2;③ 重复收名片被通讯录去重误报成失败 |
① 需 dev 应用/重打包;② 统一接收入口按类型分发;③ 明确回报「本地已有」 |
| 「名片更新的时候考虑到了吗」 | 旧设计每次更新=新口令+新目录,旧口令指向旧内容 | 稳定分享位:口令不变,manifest 就地覆盖,对方读到的永远是最新名片 |
| 「暂存箱那两个小形态也得能直接粘贴口令或者扫码」 | 雷达/抽屉只有复制口令和 NFC | 两个小形态都加「收口令 / 扫码」 |
| 「电脑上却是手机排版」「1256×596 也被判手机」 | isPhoneViewport 只看短边 <600,桌面窗压矮即误判 |
改为「宽<600 算手机;高<600 且宽≤960(横屏手机上限)才算手机」 |
这一轮改了什么¶
1. 短码编解码(lib/shortCode.ts)¶
20 位十六进制分享凭据 ↔ 16 位 Base32 无损互转,四位分组加 ON- 前缀共 22 字符,长度与内容大小无关(大头像不再缩图,内容走云盘 manifest)。大小写/空格/连写容错,Crockford 形近字符(O→0、I/L→1)自动纠正;非标准凭据走 ONX.<token> 全量保留不截断随机性。目录分享被云盘策略拒绝时退化为分享 manifest.json 文件(/f/ 链接),两种形态都能短写。
2. 发布去重与稳定分享位(state/cloudExchange.ts)¶
publishExchangeCode(code, contentKey, slotName) 两层机制:内容摘要没变且旧口令仍可匿名读 → 直接复用;名片/组织按 slot 复用同一个云盘目录、就地覆盖 manifest(vaultCloud.updateExchangeManifest)——口令不变、内容永远最新,改一次名片也不多一个目录。暂存箱/碰一碰组合是快照语义,只用内容摘要缓存;箱子复用 lastShareCode(任何变更都会清掉它,见 vault.ts)。
3. 统一接收入口(lib/contentExchange.ts)¶
receiveExchangeCode(text, vaultTarget) 认所有口令类型:暂存箱(ONV1/ONV2/短码)、名片与碰一碰组合(ONTOUCH1)、组织邀请(ONORG1)。vaultTarget 区分两个老入口的行为:current = 替换当前箱(导入口令/收碰一碰的老行为),new = 收到进新箱、原箱保留(扫码/NFC/雷达/抽屉/直接交换)。导入入口、收碰一碰、扫码、NFC 接收、雷达、抽屉全部走它。
4. 小形态可收(lib/useVaultReceive.ts)¶
共用的「收口令 / 扫码」hook:粘贴口令走表单弹窗,扫码走系统选图 + BarcodeDetector。雷达面板(VaultDropTarget)与暂存箱抽屉(VaultSheet)都挂上,和整页口径一致。
5. 平台判定修正(state/platform.ts)¶
isPhoneViewport() 从「短边 <600」改为「宽 <600,或高 <600 且宽 ≤960」。前者会把 1256×596 这种压矮的桌面窗判成手机;后者只放横屏手机(844×390 / 932×430)进来。pnpm platform-test 补 11 例钉住边界。
验证¶
pnpm --filter @onethu/desktop typecheck✓、pnpm guard全绿 ✓(含 ui-copy / onegui 棘轮 / css 配平 / 文档纪律)。tools/short-code-test.mjs— 57 例(编解码往返、定长 22、大小写/分隔符/形近字符容错、旧前缀不误判、500 抽样无碰撞、链接形态校验)。tools/short-share-browser-test.mjs— 50 例,report.json。假云盘上跑两个独立客户端:发送方 A 已连接云盘,接收方 B 全新本地状态且完全没有云盘登录(同一 BrowserContext 两个页面,只共享假云盘里的分享内容)。覆盖:短码生成与二维码、箱子没改复用同一口令、名片更新口令不变且读到新内容、组织重复邀请复用、文件分享兜底路径、B 匿名导入(跨独立客户端读取)、导入口令贴上名片短码、重复收名片、大小写/空格容错、旧 ONV1/ONV2/ONTOUCH1/ONORG1、未连接云盘的双层防护、过期、撤销、篡改、垃圾文本、雷达新入口走通。- 既有五个浏览器测试同步改造并通过:
vault-browser-test(含长按 400ms 拾取的手时序修正)、org-browser-test(11 例,组织已搬到通讯录页)、namecard-browser-test(7 例)、mobile-vault-browser-test(14 例)、feedback-round2-browser-test(67 例口径,大头像改为走 manifest)。
明确未完成 / 下一步¶
- 真实云盘互传未闭环:用户此前跑的是 10-11 安装包,缺
seafile_share_read命令。需用 dev 应用(pnpm tauri dev)或重新打包后,两台设备/两个账号实测「发送方生成 → 接收方不连云盘匿名读取」。 - NFC 真实互传仍需两台 NFC 手机(浏览器侧只有桥接夹具)。
- 云盘里现存 6 个历史 exchange manifest 是旧构建重复上传的产物,随 7 天过期自动清理,不用管。
- 清小搭技能广场接 OH 技能注册管理,仍是用户明确暂缓的大任务。
截图:sender-vault-short-code.png(发送方口令区,22 字符 + 二维码)、receiver-anonymous-import.png(接收方未连云盘,导入口令成功)、radar-receive-entries.png(雷达新增「收口令 / 扫码」)。