修复一轮全量代码审查发现的问题。审查由 4 个子代理并行覆盖加速链路、平台与底座、 展示层、领域层与工具,结论逐条经人工复核。 Fixes from a full-codebase review run by four parallel sub-agents across the acceleration path, platform layer, presentation layer, and domain/tooling; every finding was verified by hand before being acted on.

变更 / Changed(原 v6.4.3,未单独发布,并入本版)

  • 删除内置加速通道与内置网络镜像:通道列表不再包含任何内置项,代码里也不再 预置第三方代理地址(原 proxy.344977.xyz、ghproxy.net 规则)。要加速需自行 添加通道地址;不添加则始终直连。
  • 删除降级回退:加速判定现在至多返回一项 —— 加速就是 前缀 + 原址,不加速 就是原址,不再追加直连候选。所依据的判断是:静默降级会让「是否经过通道」无法 从结果判断。
  • 加速适用范围可逐项开关(设置 → 网络 → 加速),共 4 类:Release 附件、 Action 构建产物、仓库文件(下载与预览)、README 仓库内图片。默认全开,可逐项 关闭。Action 运行日志不在此列 —— 它不经由加速判定。
  • 加速协议升版 v3 → v4,需重新同意:正文删去「本应用提供 / 维护通道」的表述, 写明「不预置任何通道、不提供代理服务」,并说明失败时不会静默回落到直连。

修复 / Fixed(用户可感知)

  • README 仓库内图片在私有仓库返回 404:Image.network 没有 headers 参数, 无法携带令牌,而私有 raw 匿名访问返回 404。此前「私有 + 已知情接受」会走到 该分支;现在私有仓库一律回退到 API 取字节(该路径带令牌)。
  • 仓库内图片跨仓库串图:字节缓存只以仓库内相对路径为键,assets/logo.png 这类同名文件在两个仓库间会命中同一份缓存。键改为 仓库@分支:路径。
  • 分页列表在缓存窗口内只显示第一页:缓存命中时只回填响应体、headers 为空, 而翻页依赖 Link 头。现在缓存条目连同 link 一起存储并在命中时回填。
  • 同一文件第二次下载不再导出到 SAF:导出去重表只在失败路径移除 id, 成功导出后 id 常驻;taskId 由 url + 文件名派生,重复下载会命中同一条目。
  • 自定义 DNS / DoH 开关对真实请求不生效:connectionFactory 只在传输层 构造时安装一次,而 DNS 模式的写入发生在模块注册之后。现在每次发送前按当前 策略校正(模式变化才重装,切回系统 DNS 时把 factory 摘掉)。
  • 登录页切换账号不清缓存:只清仓库缓存会留下 DNS 缓存与页面分页快照, 多账号下是「用 B 账号看到 A 账号内容」的来源。现与「我的」页一致,清全部缓存。
  • 版本常量 kOgLAppVersion 停在 6.0.0,与 pubspec.yaml 相差三个小版本; 该常量会写入日志与内核报告。已对齐。

修复 / Fixed(下载器与网络)

  • 分片任务在探测期间被移除后会重新出现在列表:_runRanged 在 await probe 之后无条件写回快照。现在探测返回后先确认任务仍在,否则直接退出。
  • 任务表清理不完整:remove() 与 clearFinished() 漏清 _urlCandidates、 _rangeConnections、_lastSample、_expectedSha256、_exportedToSaf。
  • dispose() 不取消进行中的分片下载:分片任务不等待返回,管理器回收后引擎 仍在下载并调用已释放的通知器。现取消全部令牌并加 _disposed 守卫。
  • ix_presign 在 200 直链分支先读取响应体再注释说明「不能读」:每个直链下载 都会多传输一遍完整内容。已移除。
  • isForbiddenHost 存在绕过形式:原先只识别点分十进制与 fe80: 前缀。 现在先做归一化(整数形式的 IPv4、IPv4-mapped IPv6、方括号与尾点),IPv6 段 按位判断(fc00::/7、fe80::/10),并支持 127.1 这类缩写。
  • 分片合并失败会留下不完整的文件:finally 只删分片,不删目标文件。
  • abs() 未拒绝绝对路径与空串(注释称会拒绝):/etc/passwd 会被静默剥掉 前导斜杠并塞进根目录。现显式拒绝。

修复 / Fixed(界面文案)

  • 19 个界面文案取自错误的语言分片,显示为裸键名:设置页 13 处、仓库页 2 处、 关于页 4 处。取法已改到键实际所在的分片。
  • previewSvg / previewUnknown 两个键在 6 种语言里都不存在(「打开方式」 弹窗的 SVG 与未知类型条目显示裸键)。已补齐。
  • 三处硬编码中文改为 i18n:Gist 详情页的「公开 / N 个文件」、议题列表的 「N 条评论」、评论作者缺失时的「未知用户」(复用已有的 common.unknown)。

变更 / Changed

  • i18n_scan.py 的分类规则收紧:LOG_CONTEXT 原含 log\w*(,该模式会命中 AlertDialog(、showDialog(、catalog( 与 login(,使对话框附近的用户可见 文案被计为开发者日志。现改为只列精确的日志入口。
  • docs/NETWORK.md 更正与代码不符的表述,补入「加速适用范围」与 web 端 CORS 实测表;docs/README.md 补入索引,路径改为可点击链接。
  • 多处注释更正为与实现一致(平台分派范围、私有仓库口径、模块描述、 IxChannel.auto 语义、日志文件名格式、诊断中的并发数文案)。
  • 删除无引用的 IoBootFileSystem;对仅测试使用的 ScriptedTransport 与 无调用方的 DiskPaths 加注说明。

已知限制 / Known limitations

  • docs/ARCHITECTURE.md、BOOT.md、CONSISTENCY.md、DURABILITY.md、 NAMING.md 被代码注释引用,但仓库中并不存在;这些引用尚未清理。
  • Action 运行日志不走加速(直接请求 api.github.com),加速适用范围没有它。
  • web 端:私有仓库的 raw 与「私有 + 加速」均不可用 —— 浏览器预检会拦截 Authorization,而 Release 附件的签名地址不带 CORS 头。
  • Linux 裸放安装包 3 / 6:rpm(arm64)缺少平台定义;AppImage 的 ARCH 环境变量未被接受。三种包在 zip / 7z 里都齐全。
  • macOS / iOS 自 v5.6.0 起弃用。

产物 / Artifacts

Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、 Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z。


下载 / Download

本版本共 23 个构件产物。

Android

文件 大小
OGL-v6.5.0-Android.AAB.7z 59 MB
OGL-v6.5.0-Android.AAB.zip 62 MB
OGL-v6.5.0-Android.arm64-v8a.7z 8.0 MB
OGL-v6.5.0-Android.arm64-v8a.zip 11 MB
OGL-v6.5.0-Android.armeabi-v7a.7z 8.0 MB
OGL-v6.5.0-Android.armeabi-v7a.zip 10 MB
OGL-v6.5.0-Android.universal-APK.7z 20 MB
OGL-v6.5.0-Android.universal-APK.zip 29 MB
OGL-v6.5.0-Android.x86_64.7z 8.5 MB
OGL-v6.5.0-Android.x86_64.zip 11 MB

Windows

文件 大小
OGL-v6.5.0-Windows.arm64.7z 8.3 MB
OGL-v6.5.0-Windows.arm64.zip 13 MB
OGL-v6.5.0-Windows.x64.7z 9.5 MB
OGL-v6.5.0-Windows.x64.zip 14 MB

Linux

文件 大小
OGL-v6.5.0-Linux.arm64.7z 7.3 MB
OGL-v6.5.0-Linux.arm64.zip 12 MB
OGL-v6.5.0-Linux.x64.7z 8.1 MB
OGL-v6.5.0-Linux.x64.zip 12 MB

完整列表与校验信息见 Releases v6.5.0。