Repository navigation
Releases: yingo-server/OhGithubLost
Release list
v7.2.2
v7.2.2(2026-10-09 · 正式版)
Fixes from a UI and interaction review.
主题:修复一轮界面与交互审查发现的问题。
修复 · Fixed
- 打开含代码文件的 Gist 详情页会触发布局断言(编辑器组件在无界高度的列表里);
现为每个文件给定确定高度。 - 代码编辑器内打字时,键盘会遮住编辑区底部(自绘输入未纳入键盘避让判定)。
- 首页与仓库页的「下拉刷新 / 加载更多 / 切换筛选」存在竞态:快速操作会丢失第一页、
重复条目或显示与筛选不符的数据。相关列表改为排队刷新或丢弃过期响应。 - 代码编辑器退出时无条件回写草稿:「保存成功」或「放弃修改」后草稿仍会残留,
与操作语义相反。现在这两种情况不再回写,「放弃」会真正删除草稿。 - 文件预览页加载失败后,「重试」成功仍显示错误页(错误状态未复位)。
- 手动触发工作流时快速切换目标,表单参数可能与所选工作流不符(请求无序)。
- 搜索与仓库页在控制器释放后仍可能收到通知(debug 下触发断言)。
- 新建 Gist / 议题 / 仓库 / 发布 / 工作流参数 / 仓库设置等表单,
返回时不再静默丢弃已输入内容(与代码编辑器一致的「放弃确认」)。 - 删除仓库后,首页与搜索结果不再保留已删除的仓库。
- 授予「所有文件访问」权限后,提示文案误显示为 DNS 相关(文案串用)。
- 二进制 / 图片文件可经「打开方式 → 编辑器」进入并保存乱码内容覆盖原文件;
现按文件类型禁用该入口。 - 设置页账户行在页面重建时反复闪「读取中」(Future 在 build 中创建)。
- 法律文本页快速切换语言时,正文可能与所选语言不一致。
- 布局与动效:加速范围开关组与标题错位、条件内容无过渡、弹窗与折叠动画未接动效档位、
协议弹窗勾选框位置、错误卡片边距、若干对齐与触控目标过小、
两处缺失的无障碍语义、关于页硬编码颜色、字号滑块整页重建等。
v7.2.1
OhGithubLost v7.2.1
调整平台架构兼容性。
变更 / Changed
- Web 与原生拆分为两个独立系统:本分支为原生版,只构建 Android / Windows / Linux;
Web 在独立分支维护,产物发布到该分支的app/<版本数字>/,不产生 GitHub Release。
产物 / Artifacts
Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z。
v7.0.0
OhGithubLost v7.0.0
新增 Web 版(浏览器),并把它作为正式平台之一。
Adds a Web build and treats it as one of the supported platforms.
新增 / Added
- Web 版(PWA):可在浏览器中使用,并可「添加到桌面 / 主屏幕」作为独立窗口打开。
- 入口
app/index.html用 iframe 包裹当前版本,地址长期不变;各版本产物在
app/v<版本号去点>/(本版为v700),app/versions.json为清单。 - 图标与三端同源(
assets/icon/ogl_icon.svg光栅化)。
- 入口
- 「添加到桌面」提示:Chromium(含 macOS)走标准流程,每次打开提示一次;
iOS Safari 不支持beforeinstallprompt(平台限制),iOS 上给出
「共享 → 添加到主屏幕」的引导。已安装后不再提示;可在 设置 → Web 版 关闭。 - Web 首次打开对话框:提示可配置加速服务,并写明不配置也能正常使用(下载走直连)。
tool/web_publish.py:按版本发布到app/并重写入口页与清单。
变更 / Changed
- 平台差异改用条件导入:此前 18 个文件直接
import 'dart:io'(浏览器无该库),
现改为import 'x_io.dart' if (dart.library.js_interop) 'x_web.dart';。 - 新增依赖
http: ^1.2.2(自带浏览器实现)。 web.yml在 main 与 web 两条分支构建 Web;其成败不阻塞五平台发布。
Web 与桌面不同的部分(均在界面与日志中如实标注)
- 磁盘:无文件系统。键值走
localStorage;文件类存储仅会话内有效;
令牌保险库仅内存持有,刷新需重新登录(避免长期令牌明文留在localStorage)。 - 网络:传输层用
BrowserClient。自定义 DNS / DoH 不可用(浏览器不提供裸 socket)。 - 网络自检:Web 上为有限自检,只测 HTTP 可达性。
- 下载:
background_downloader无 Web 实现,下载交给浏览器。因此暂停、续传、
多连接分片、进度、文件大小、保存路径、sha256 校验均不可用 —— 如实标注,不做假动作。 - 带
Authorization头的下载会明确失败(浏览器不允许页面设置跨域鉴权头)。 - 预签名不可用:
fetch读不到跨域 302 的Location;实现如实返回「解不出签名」,
不会改成跟随重定向(那会绕过「令牌只用于第一跳」的设计)。 - 日志不落盘:Web 上
OgLLogFile.isEnabled == false,保留控制台输出。
已知限制 / Known limitations
- Web 不提供:自定义 DNS / DoH、多连接分片、后台下载与续传、下载进度与校验、
导出到 SAF、TLS / DNS 级网络自检。 - iOS 需按引导手动「添加到主屏幕」(Safari 不提供安装接口)。
docs/ARCHITECTURE.md等 5 份被注释引用的文档仍不存在(已逐处标注「以源码为准」)。- Linux 裸放安装包 3 / 6:rpm(arm64)缺平台定义;AppImage 的
ARCH
环境变量未被接受。三种包在 zip / 7z 里都齐全。 - macOS / iOS 原生应用自 v5.6.0 起弃用(Web 版在 iOS 浏览器可用,但不是原生应用)。
产物 / Artifacts
Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z;
Web 产物按版本发布在分支的 app/ 目录下。
v6.5.0
OhGithubLost v6.5.0
修复一轮全量代码审查发现的问题。审查由 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。
质量审计 20261009-0632(+8)
每小时质量审计报告(Agnes · 逐文件审查 lib/)。
Quality audit report (Agnes, per-file review of lib/).
报告文件:quality_audit.txt
v6.4.2
OhGithubLost v6.4.2
图标终于真的来自 assets/icon —— 顺手挖出两个一直在出厂的缺陷。
Icons now genuinely derive from assets/icon — which surfaced two shipped bugs.
修复 / Fixed
1. Windows 与 Linux 的图标自 v5.6.0 起一直是空白的
desktop_icon.render_rgba 解析出的图层里存的是 url(#bodyGrad) 这样的引用串,
而渐变表的键是 bodyGrad;查表写成 grads.get(layer["fill"].strip()),
永远查不到,于是每个图层都被跳过,输出是一张全透明的图。
症状不是报错,而是一个看不见的图标;构建全程"成功"。
现在:正确解析引用,并且渲染结果若全透明就直接报错 —— 不允许再交出空白图。
2. Android 图标从来没有跟过源图
注入器里是一段硬编码的矢量前景(盾牌 + 蓝色三角),与
assets/icon/ogl_icon.svg(深色多边形 + 金色双眼)完全不同。所谓"唯一事实来源"
名不副实。现在改为真实转换。
3. 自适应图标纵向偏移 3%
居中只按 X 算了横向平移,Y 套用了同一个值;源图重心是 (256, 272),于是图形在
安全区里整体下移。已改为 X/Y 分别计算。
变更 / Changed
- 图标全平台统一从同一份 SVG 派生:
- Android:矢量(VectorDrawable,自适应前景收在安全区内)
- Windows:256 ICO;Linux:2048 PNG 母版
- 传统启动图标放
mipmap-anydpi/:优先级高于具体密度,会盖过模板生成的 PNG,
因此 API < 26 也不会残留 Flutter 默认图标。
新增 / Added
tool/svg_vector.py:SVG → VectorDrawable(纯标准库,渐变按
objectBoundingBox语义换算成绝对坐标)。- 注入器自检新增「图标管线」一节共 13 项断言:渲染非空白、全透明必须报错、
矢量含真实几何与渐变、安全区生效、五个 Android 图标文件均写出。
已知限制 / Known limitations
- 图标转换器只认
polygon+linearGradient(当前源图恰好只用这两者);
源图若引入path/circle/径向渐变,转换会明确报错而不是静默画错。 - 私有仓库的 raw 无法像 Release 附件那样「先签名再加速」:GitHub 没给 raw
提供签名机制,这是硬约束(详见 v6.4.1)。 - 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。
v6.4.1
OhGithubLost v6.4.1
私有仓库也可以加速了 —— 但必须先过一道知情警告。
Private repos can now be accelerated — but only after an explicit warning.
变更 / Changed
- 私有仓库加速的知情开关(
accelPrivateRepoAccepted,默认关闭):- 位于设置 → 网络 → 加速通道;
- 开启必须先过警告弹窗,且强制展示 3 秒后才可操作,按钮显示剩余秒数
(防手滑连点 —— 这是「令牌离开设备」的唯一一道闸门); - 关闭不弹窗,语义是「不再询问且不再加速」,退回 API 直取。
本项目不留「别再问我、但照旧送令牌」这种选项 —— 那等于把一次性的知情
同意悄悄变成永久授权。
- 公开仓库不受影响:加速行为与之前一致。
为什么要有这道闸门(都是实测结论)
- 私有仓库的 raw 匿名 404,
?token=形式早已废弃,只有带
Authorization头才 200; - 内置通道会原样转发该头给 GitHub(带令牌 200 / 不带 404)
—— 所以「令牌离开设备」是实测事实,不是理论风险; - 令牌进入第三方服务器后,其留存与用途不在本项目控制范围内。
新增 / Added
docs/NETWORK.md:全仓库网络连接清单 —— 出口主机 × 资源类型 ×
取法 × 公私差异 × 复现命令。
修复 / Fixed
- 补回
ogLAccelCandidates在上一笔提交中被误删的repoPrivate参数
(改签名时替换掉了,函数体却仍在引用它),该项曾导致 9 条构建腿与质量门全红。 - 私有 + 已接受加速时必须带令牌:旧判据
proxied || !repoPrivate
在此情形给出空头,代理拿到一个取不到内容的地址,必然 404。
已知限制 / Known limitations
- 音频不做内置播放:Contents API 对超过 1 MB 的文件不返回内容。
- 私有仓库的 raw 无法像 Release 附件那样「先签名再加速」 —— GitHub 没有
给 raw 提供签名机制,这是硬约束。 - 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。
v6.4.0
OhGithubLost v6.4.0
把界面语言从 15 种收敛到 6 种 —— 只留下真的能读的那 6 种。
Interface languages narrowed from 15 to 6: only those that were genuinely translated.
垂直切片 / Vertical slices
切片一 · 语言不再自欺 Language honesty
上一版埋着一个隐患:15 种语言里有 12 种的法律类正文实际是英文占位 ——
键在、目录在、值与英文一字不差。用户切到自己的语言,看到的仍是看不懂的
法律说明。而这方面恰恰最不容含糊:本项目对数据收集、令牌存储、
加速责任的承诺都写在这些文本里。
与其让 9 种语言挂个名,不如把留下的每一种都做到能读。保留的是:
zh简体中文(原始表述)zh_TW繁體中文enEnglishdeDeutschfrFrançaisruРусский
移除 ja ko es pt ar hi th vi id。
加回某个语种的前提是全部键都是真译文,不是把英文复制一遍。
OgLI18n.locales 的注释里写明了这条规矩。
切片二 · 三处语言清单必须一致 Consistency guard
这版真正的根因在这里。语言清单散在三处,任两处不同步都会出事,
而且两种故障方向相反、都很难在排查时想到根源:
OgLI18n.locales(Dart 运行时清单)assets/i18n/下的目录pubspec.yaml的assets声明
pubspec 多声明 → 构建期「资源不存在」直接失败;
pubspec 少声明 → 构建通过,运行时该语言全是裸键名。
后者尤其险:打出来的包能装能用,只是某个语言下满屏 settings.theme。
v6.4.0 删了 9 个语言目录,若不同步 pubspec,踩的就是第一种。
tool/i18n_scan.py --check 新增该项检查。负向验证:故意在 pubspec 加一个
不存在的语言目录 → 报「pubspec.yaml 声明但目录不存在(构建必失败)」,
退出码 1。
新增 / Added
- 语言清单三处一致成为 CI 门禁:
OgLI18n.locales×assets/i18n/目录 ×
pubspec.yaml的assets声明,逐项比对,不一致即失败(退出码 1,已负向验证)。
变更 / Changed
- 界面语言由 15 种收敛为 6 种:
zh/zh_TW/en/de/fr/ru。
同步更新OgLI18n.locales、pubspec.yaml、README.md、docs/USAGE.md、
docs/I18N.md。 - 仓库页选项卡按语种分别处理(此前各语言混杂、口径不一):
zh/zh_TW:Code/Issues/Pull requests/Actions保留英文,
其余(分支 / 提交 / 设置)照常用中文。de/fr/ru:译为各自语言的对应词。此前这些语言里混着英文残留 ——
例如fr的pulls原是Pull Requests、releases原是Releases,
现已分别改为Demandes de tirage/Versions。- 测试相应更新:语种数 15 → 6,并保留「中文语境下 GitHub 术语必须保持英文」
这条断言。
- 繁体中文修正少量沿用大陆用法的词:
Gist 片段→Gist 程式碼片段、
我的加速→我的加速節點。
修复 / Fixed
OgLProjectInfo.licenseUrl仍指向 AGPL-3.0:v6.3.0 换了许可,
标识(licenseId)与名称(licenseName)都改了,地址漏改,还指向
www.gnu.org/licenses/agpl-3.0.html。该常量目前无引用(死常量),但一旦有人
用它生成「查看许可」链接,就会把用户送到一份与实际许可无关的全文。
已改为https://www.apache.org/licenses/LICENSE-2.0。- 私有仓库大图预览「用了 raw 却不带令牌」:超过 1 MB 改用 raw 链接时,
代码写成headers: proxied || !repoPrivate ? null : const <String, String>{}——
注释说「未走代理且私有仓库才带认证头」,实际给的是空 map,一个头都没带。
私有仓库必然 404,而界面显示成「文件过大,无法在内置预览中加载」,
把认证失败误报成文件过大。现在真的去取一步令牌。 - 私有仓库被「加速已开启 → 不弹窗」规则误伤:raw 族的加速门槛本就是
「内置通道 + 公开仓库」,私有仓库的 raw 永远不加速。旧代码只要检测到加速
开着就不弹窗、直接走 raw,私有仓库用户于是什么都看不到就掉进上面那个必然失败
的分支。现已显式排除私有仓库。 - 私有仓库的音频「播放」按钮点了必然失败:该按钮把 raw 地址交给系统播放器,
而系统播放器没有本应用的令牌。私有仓库现在只给「下载」。 - 法律全文弹窗写死
height: 460:小屏 / 大字体 / 横屏下会溢出。
改为按视口比例给上限。 - 新增键
common.previewLoadFailed(6 语言),把「加载失败」与「文件过大」
区分开 —— 超过 1 MB 已有专门面板处理,走到errorBuilder说明是认证 / 限流 /
网络问题,说成「文件过大」会让人往错的方向排查。
已知限制 / Known limitations
- 音频不做内置播放:Contents API 对超过 1 MB 的文件不返回内容,音频必然超限。
预览页对公开仓库给「播放」(交系统播放器),私有仓库给「下载」。 - Linux 裸放安装包仍缺失:rpm(arm64)因 Ubuntu 的 rpm 缺少 aarch64 平台
定义、无法在 x86_64 宿主上交叉构建;两个 AppImage 因 appimagetool 未接受到
ARCH环境变量而退出码 1。三种包在 zip / 7z 里都齐全,功能不缺,
只是未裸放直传。 - 私有仓库的 raw 内容无法走加速(README 仓库内图片、仓库文件):
raw端点
没有签名机制,交给代理等于送令牌。这是硬约束,不是取舍。 - macOS / iOS 自 v5.6.0 起弃用。
- Linux 需要 glibc ≥ 2.35(Ubuntu 22.04 一代及以上)。
产物 / Artifacts
Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z。
Linux 裸放安装包
与 v6.2.0 / v6.3.0 相同,仍为 3 / 6:
| amd64 / x86_64 | arm64 | |
|---|---|---|
.deb |
✅ | ✅ |
.rpm |
✅ | ❌ Ubuntu 的 rpm 缺少 aarch64 平台定义,无法交叉构建 |
.AppImage |
❌ | ❌ appimagetool 声称未收到 ARCH,退出码 1 |
三种包在 zip / 7z 里都齐全,功能不缺,只是未裸放直传。
v6.3.0
OhGithubLost v6.3.0
无障碍补全 + 恢复 UI 截屏矩阵 + 消除两套「可见性」定义。
Accessibility completed, the UI screenshot matrix restored, and two conflicting definitions of "storage visibility" unified.
新增 / Added
- 无障碍语义标注(4 处):此前全项目
Semantics为 0 —— 50 个图标按钮虽都有
tooltip(Flutter 会自动取作语义标签),但自定义可点击区域没有任何语义标注,
屏幕阅读器只能念出"按钮",用户不知道点了会怎样。- 标题栏窗口控件(最小化 / 最大化 / 关闭)→
Semantics(button: true, label: …) - 代码配色色板 →
Semantics(button: true, selected: …, label: 颜色 #rrggbb) - 通知开关行 →
Semantics(toggled: …, button: true, label: 消息内容) - 仓库页分支选择条 →
Semantics(button: true, label: 选择分支) - 文案 4 键 × 15 语言。
- 标题栏窗口控件(最小化 / 最大化 / 关闭)→
- 恢复 UI 截屏矩阵:从 2 张样本扩回 26 张(5 页面 × 亮/暗 × 横/竖 = 20,
再加 3 平台 × 亮/暗的首页 = 6)。此前退化成冒烟测试后,UI 改动无法自动发现视觉回归。
变更 / Changed
-
「落盘可见性」统一成一套判定。此前有两处定义:
OgLStoragePlan.userVisible:mode != internal(按档位)OgLAppDirs.isUserVisible:tier ∈ {public, desktop}(按路径分级)
两者在「桌面文档目录不可写、最终落到应用支持目录」时会给出相反结论。
今天没露馅纯属侥幸 —— 界面接的是前者、测试锁的是后者,谁也没验证过它们一致。
现统一为路径分级(唯一来源),SAF 档作为例外单列(用户授权过就可见)。
新增测试把「无论什么档位,可见性都等于按路径分级的结论」钉成回归。 -
OgLAppDirs.categoryFolder补上artifact映射。此前漏了 Action 构建产物,
一旦被用到会静默落到other/—— 用户看不到任何异常,只是分类目录不对。
补上映射,并新增测试把底座与中枢两份映射逐枚举比对(新增分类漏改一侧立刻红灯)。
死代码转为防漂移护栏。
修复 / Fixed
window_windows.dart缩进损坏:第 27/29/30 行等顶格,Linux 同位置正常。
应是 v6.0.1 删除注入脚本那次重构的残留。app_dirs.dart注释与代码矛盾:_resolveRoot()② 档注释原说应用外部目录
「文件管理器可见」,而isUserVisible()明确判为不可见(Android 11+ 隐藏
Android/data/)。注释会误导后续维护,已改为准确描述并说明为何仍选它作退路。appTitle三份字面量重复(windows / linux / macos):值上收到
window_capability.dart的kOgLAppTitle,各平台保留同名常量指向它
(不删符号),消除标题悄悄分叉的可能。
已知限制 / Known limitations
- 音频不做内置播放:Contents API 对超过 1 MB 的文件不返回内容,音频必然超限。
预览页给出「下载」动作,之后可在下载管理页交给系统播放器。 - Linux 裸放安装包仅 3 / 6:deb(amd64 / arm64)与 rpm(x86_64)已产出;
rpm(arm64)因 Ubuntu 的 rpm 缺少 aarch64 平台定义、无法在 x86_64 宿主上交叉构建;
两个 AppImage 因 appimagetool 未接受到ARCH环境变量而退出码 1。
三种包在 zip / 7z 里都齐全,功能不缺,只是未裸放直传。详见「产物」一节。 - 14 种语言的加速协议文本仍为旧版(zh 已改,键集合未变故门禁通过)。
法律 / 隐私文本在 15 种语言下不一致是合规风险,需按既定流程补齐。 - 私有仓库的 raw 内容无法走加速(README 仓库内图片、仓库文件):
raw端点
没有签名机制,交给代理等于送令牌。这是硬约束。 - macOS / iOS 自 v5.6.0 起弃用。
- Linux 需要 glibc ≥ 2.35(Ubuntu 22.04 一代及以上)。
产物 / Artifacts
Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z。
Linux 裸放安装包:本版只产出了 3 / 6(如实说明)
| amd64 / x86_64 | arm64 | |
|---|---|---|
.deb |
✅ | ✅ |
.rpm |
✅ | ❌ Ubuntu 的 rpm 缺少 aarch64 平台定义,无法交叉构建 |
.AppImage |
❌ | ❌ appimagetool 声称未收到 ARCH,退出码 1 |
三种包在 zip / 7z 里都齐全,功能不缺,只是未裸放直传。
裸放安装包是 v6.2.0 才开始产出的(此前从未真正发布过),缺失项后续补齐。
v6.2.0
OhGithubLost v6.2.0
下载链路重做(端点 / 路由 / 完整性)+ 文件预览 + 隐私承诺。九条构建腿全绿。
Download pipeline rebuilt (endpoints, routing, integrity), plus file previews and a privacy commitment.
新增 / Added
- 文件预览:图片(可缩放)、SVG(矢量渲染)、XML 与文本(语法高亮)。
在仓库页**长按文件 →「打开方式」**可在「内置预览 / 编辑器 / 浏览器」之间选择。
File previews for images (zoomable), SVG (vector), XML and text; long-press a file
in the repository page and pick "Open with". - Action 构建产物下载控件:运行详情页列出产物(名称 / 大小 / 有效期),
已过期的条目直接禁用。
Build-artifact download control in the run detail page; expired artifacts are disabled. - 编辑器长按菜单:复制 / 剪切 / 粘贴 / 全选(只读态自动裁掉剪切与粘贴)。
Long-press selection menu in the code editor. - 引导页最后一页《开源协议与隐私承诺》(15 语言全文):
保证不收集数据(无遥测 / 分析 / 广告 / 追踪 SDK,令牌只在本机),
并明确排除可选的 Web 浏览器版本 —— 该功能默认关闭,开启前会再次单独提示。
A licence-and-privacy page as the final onboarding step, guaranteeing no data
collection while explicitly excluding the optional Web build.
变更 / Changed
- 内置加速通道改为
https://proxy.344977.xyz/(单前缀转发完整原始链接),
同意协议版本 1 → 2(地址变更属实质修改,需重新征求同意)。
Built-in acceleration channel switched toproxy.344977.xyz; consent version 1 → 2. - 加速路由改为纯函数判定(
ogLAccelCandidates):签名族(Release 附件 /
Action 日志 / 产物)按 500KB 阈值;raw 族仅「内置通道 + 公开仓库」才加速。
Routing is now a pure function: signed assets follow a 500 KB threshold; raw assets
accelerate only on the built-in channel for public repositories. - 仓库文件取法按是否加速分流:不加速走 API
(/repos/{o}/{r}/contents/{path}+Accept: application/vnd.github.raw,
实测支持 Range,多连接分片不退化);加速才把 raw 链接交给代理。
Repository files now use the Contents API with the raw media type when not
accelerating, and only hand raw links to the proxy when accelerating. - README 仓库内图片:内置 + 公开时改走 raw + 代理 —— raw 不限流,而
Contents API 认证后也只有 5000 次/小时,一次 README 几十张图很容易吃配额。
README images use raw through the proxy on the built-in channel: raw is not
rate-limited, unlike the 5 000/hour authenticated Contents API. - 登录页极简化:删掉「怎么拿令牌」引导、「向导进度」四步清单与重复标题,
保留安全说明、输入、显示/隐藏、登录与游客入口(文件缩小 27%)。
Login page simplified; the how-to guide and step checklist are gone. - 下载管理页的状态与分类标签改为走 i18n(此前是域层硬编码中文)。
Download status/category labels are now localised.
修复 / Fixed
- 私有仓库下载完全没带认证头(Release 附件 / Action 产物 / 仓库文件三处都会
401/404)。私有仓库此前实际上无法下载。
Private-repository downloads carried no auth header and failed outright. - 下载后不校验完整性:现在比对 GitHub 提供的 SHA-256;不匹配判为失败且
不导出到 SAF;没有摘要可比对时如实标注「未校验」,绝不谎称已验证。
Downloads are now verified against GitHub's SHA-256 digest; mismatches fail and are
never exported. Resources without a digest are honestly labelled "not verified". - 文件名零净化:新增净化(只取末段、剔控制字符、拒
..、绕开 Windows
保留设备名、限长 120 并保住扩展名)。
Download file names are now sanitised. - 非 http(s) 地址被放行:新增协议白名单,入队与全部降级地址一律校验。
A scheme allow-list now rejects anything that is not http/https. - 跨域重定向的令牌外泄风险:此前依赖 Dart SDK 未文档化的"自动剥离
Authorization"行为;现在显式不跟随重定向,并校验跳转目标(拒绝回环 / 私网 /
链路本地,含云元数据169.254.169.254)。
Redirects are no longer followed implicitly, and redirect targets are validated. - 构建:Windows 两条腿 spec 从未被应用 —— Windows runner 无 PyYAML,注入器
走了手写的兜底解析器,而它几乎解析不出内容,导致编译宏全部未注入。
已重写为缩进驱动解析器,与 PyYAML 结果逐字段一致。
Windows builds never applied the platform spec because the dependency-free YAML
fallback parser was broken; it has been rewritten. - 构建:Android 五条腿未跟进 Kotlin DSL 迁移 —— 模板已生成
build.gradle.kts,spec 仍指向build.gradle,注入被静默跳过,
compileSdk停在 36 且 desugaring 未开。注入器现在缺目标文件即报错退出,
失败点从编译期前移到注入期。
Android legs had not followed the Kotlin DSL migration; the injector now fails
loudly instead of silently skipping. - 发布:Linux 的 deb / rpm / AppImage 从未真正发布过 —— 发布作业没有
actions/checkout,工作目录是空的,tool/linux_packages.py根本找不到;
而该步骤带|| true,把错误整个吞掉。v5.6.0、v6.0.0、v6.2.0 的 Release 里
裸放安装包数量均为 0。已补上签出步骤,并把「脚本不存在」改为响亮失败
(单个格式打包失败仍只告警,不拖垮发布)。
Linux .deb / .rpm / AppImage were never actually published: the release job had no
actions/checkout, so the packaging script was absent, and|| trueswallowed it.
移除 / Removed
- main 上的 Web 残留:
.github/workflows/web.yml(挂在push:[main],每次推 main
都白跑一遍且带contents: write)、tool/web_build.py、docs/WEB.md。 - 5 个已被
platform_spec.yaml+ 统一注入器取代的旧脚本
(inject_android_gradle/inject_android_icon/inject_android_manifest/
inject_desktop_shell/inject_windows_cmake)。 - 2 个零引用僵尸文档(
docs/ANIMATION_PLAN.md、docs/RELEASE_NOTES.md)。
已知限制 / Known limitations
- 私有仓库的 raw 内容无法走加速(README 仓库内图片、仓库文件)。
raw端点
没有签名机制,私有内容必须直接带令牌 —— 交给代理等于泄露令牌。这是硬约束。
Raw content of private repositories cannot be accelerated: the raw endpoint has no
signing mechanism, so delegating it to a proxy would leak the token. - 音频不做内置播放:Contents API 对超过 1 MB 的文件不返回内容,音频必然超限。
请下载后用系统播放器打开。
No in-app audio playback: the Contents API returns no content above 1 MB. - Web 功能不在隐私承诺范围内(见引导页最后一页);该功能默认关闭。
The Web build is excluded from the privacy commitment; it is off by default. - macOS / iOS 自 v5.6.0 起弃用。
- Linux 需要 glibc ≥ 2.35(Ubuntu 22.04 一代及以上)。
- Linux 裸放安装包本版仅 3 / 6:deb(两架构)与 rpm(x86_64)已产出,
rpm(arm64)与两个 AppImage 尚未产出。三种包在 zip / 7z 里都齐全,
详见「产物」一节。
产物 / Artifacts
Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z。
Linux 裸放安装包:本版只产出了 3 / 6(如实说明)
这三种包此前从未真正发布过 —— 本版第一次让它们开始产出,但仍未齐备:
| amd64 / x86_64 | arm64 | |
|---|---|---|
.deb |
✅ | ✅ |
.rpm |
✅ | ❌ Ubuntu 的 rpm 缺少 aarch64 平台定义,无法在 x86_64 宿主上交叉构建 |
.AppImage |
❌ | ❌ appimagetool 未接受到 ARCH 环境变量,退出码 1 |
三种包在 zip / 7z 里都齐全 —— deb / rpm / AppImage 一并打进了
OGL-v6.2.0-Linux.*.zip 与 .7z,所以功能上不缺,只是没有裸放直传。
裸放安装包是本版新增的,缺失项会在后续版本补齐。