Repository navigation
Releases: IPF-Sinon/DSH-Folk
Release list
DSH-Folk 2.2.1-beta.210
Beta build from 00b14a2 (run #210).
Signed with the release key, so it upgrades a release install in place.
Less tested than a release — report anything odd.
修 Issue #12:安装的目录改名失败时,回退复制会跟随悬空符号链接(真正的原因)
上一版的诊断把原因钉死了:这台设备上整目录 renameTo 会失败(Android 上它只返回 false,不报错),
而我的回退复制跟随了符号链接去读内容 —— rootfs 里到处是悬空链接(motd-news.timer 这类),
读它必然报 ENOENT,15 毫秒就失败。这是我上一版引入的 bug,被自己加的诊断当场抓住。
这一版:
- 复制时先判符号链接、用 Os.symlink 原样重建(目标在不在与复制无关);
- 单条链接建不出来只记日志,不因一个链接废掉整次安装;
- 保留数据与回滚路径也都改用同一套回退(回滚失败会明确记录 —— 那比安装失败更糟)。
如果你再遇到失败:请把「运行日志」整段复制或用发送日志导出 bugreport。
DSH-Folk 2.2.1-beta.209
Beta build from 8322a6d (run #209).
Signed with the release key, so it upgrades a release install in place.
Less tested than a release — report anything odd.
修 Issue #12 追因:安装失败的每一步都会说清,并附上分步诊断文件
上一版加的诊断三联没能打出来 —— 只读排查后确认:不是日志被清(clearLog 是先轮转再清空),
而是安装流程里有 4 个失败分支(保留数据 / 移走旧 rootfs / 切换到新 rootfs / 恢复数据)
此前完全静默,用户只看到一句「rootfs 不完整」。这一版:
- 每个失败分支都记一行,写明败在哪一步;
- 目录改名失败时回退「复制 + 删除」—— Android 上整目录 renameTo 很容易返回 false 而不报错,
800MB、几十万条目的 rootfs 正是这种形状,这很可能就是真正的原因; - 新增 install-diag.txt:每次安装覆盖写、成功后删除,不受日志清空/截断影响;
- 「发送日志」现在会把它一并打包,所以失败时必定拿得到。
如果再遇到失败:请把「运行日志」整段复制,或用发送日志导出 bugreport。
DSH-Folk 2.2.1-beta.208
Beta build from ce1eeff (run #208).
Signed with the release key, so it upgrades a release install in place.
Less tested than a release — report anything odd.
v3.0 收尾三项:回环桥分端点限流、连边即时防成环、解压失败的可诊断性
【回环桥】限流阈值按端点区分(剪贴板 10/分钟、通知与震动 30/分钟;未列出的仍 600/分钟),
窗口也改为按端点各自滚动。仍然只记录不拦截 —— 先观测真实流量再决定是否收紧。
【工作流】连线时即时防成环:会让流程绕回自己的连线被拒绝并提示,不再等到保存才发现。
【运行时安装】修 Issue #12 的可诊断性:解压跳过条目数、必需文件的「存在/大小/可执行」、
chmod 失败数现在都会写进运行日志 —— 以前只报一句「rootfs 不完整」,用户无从判断。
DSH-Folk 2.2.1-beta.207
Beta build from fa9ecd5 (run #207).
Signed with the release key, so it upgrades a release install in place.
Less tested than a release — report anything odd.
重构收尾:运行时常量表拆出、回环桥加限流与审计(默认只记录)、首页阶段名收敛
【工程】
- DshRuntime.kt 2662 → 2519 行:17 个常量与纯数据表(超时/路径片段/pnpm 配置键/预装插件名单)搬到 DshRuntimeConstants.kt。
- DshFsBridge.kt 1387 → 950 行:SAF 路由整族(22 个函数)搬到 DshBridgeSafRoutes.kt;新增 DshBridgeGuard(回环 + token 之后接一层记账/限流/审计)。
- 回环桥限流默认只记录不拦截(60 秒 / 600 次),审计落在 audit/bridge.jsonl,与能力调用审计同目录 —— 先观测真实流量,需要拦截时再打开。
- 首页阶段名收敛成唯一映射:HomeDsh 不再自带一份(两份一旦分叉,同一状态在不同主题会显示不同文案)。
【行为】用户可见行为与 2.2.0 一致;这一版用于确认搬家与桥守卫没有碰坏东西(文件访问尤其值得试)。
DSH-Folk 2.2.1-beta.206
Beta build from 8e754db (run #206).
Signed with the release key, so it upgrades a release install in place.
Less tested than a release — report anything odd.
重构(内部):安装/校验/解压整簇搬到 DshRuntimeInstaller.kt + 新增 DshRuntimeHost 接口
- DshRuntime.kt 3047 → 2715 行;搬走 downloadAndInstall/installMeta/installArchive/保留数据/
ELF 校验/版本落盘等 15 个成员(含私有辅助),调用点写法零改动。 - 行为不变。这一版主要验证三条路径:检查更新、切换版本、导入本地包(都走这条安装链)。
DSH-Folk 2.2.1-beta.205
Beta build from abde1c6 (run #205).
Signed with the release key, so it upgrades a release install in place.
Less tested than a release — report anything odd.
重构(内部):DshRuntime.kt 的 6 个数据模型搬到 DshRuntimeModels.kt(纯搬家,无行为变化)
- DshPhase / PortConflictAction / DshState / DshMeta / RuntimeCheckResult / RuntimeVersion 移出,
同包移动,调用点与 import 零改动;DshRuntime.kt 3256 → 3047 行。 - 这一版与 2.2.1-beta.204 行为一致,主要用来确认搬家没碰坏运行时卡片 / 更新检查那几条路径。
DSH-Folk 2.2.1-beta.204
Beta build from 273241f (run #204).
Signed with the release key, so it upgrades a release install in place.
Less tested than a release — report anything odd.
重构(内部):DshRuntime 的容器环境落地件整簇搬进 DshRuntimeEnv(3255 行,本轮无行为变化)
- 补充组(/etc/group 补 Android 组名)、pnpm allowBuilds 放行、ICU 列表拼接与相关常量整簇搬走;
- 上一轮这两个函数搬不动的原因(没带走它们调用的私有辅助)这次一并处理;
- 公开入口签名不变,纯内部搬家,用户可见行为应与 2.2.0 完全一致 —— 这一版主要用来确认搬家没碰坏东西:
进终端不再刷groups: cannot find name for group ID、装插件时依赖构建脚本仍能放行。
DSH-Folk 2.2.0
更新内容
- 工作流可以自己画了:流程编辑页整页重做成一块画布 —— 节点是卡片(名字与命令/条件写在卡上,运行状态用边框颜色标出),按住就拖(跟手,松手吸附 12dp 网格)、空白处拖动平移整张画布、点卡片弹出参数窗;从卡片右侧的针脚往外拖就能接下一个节点:落在别的卡片上直接连边,落在空白处弹出节点类型菜单,选完就在你松手的位置把节点建好并连上。
- 底部「+ 节点」抽屉:把类型卡往外拖到画布上,松手即在新位置直接建好;点一下则在画布上新建(自动分层摆位)。
- 流程这条线补齐了:AI 创建或修改流程前先给你看流程图与改动差异(危险命令单独标出);执行前缺 Android 权限先弹预检(去授权或跳过);运行详情能看到每一步的状态与输出;条件没走到的分支标成「已跳过」而不是消失;单步超时可配。
- 安全页两处清理:删掉重复的「权限管理」入口卡;共享存储改成整行可点(点按开关、长按进文件访问范围),说明缩短。
- 贡献者修复:应用退到后台时,网页里的定时器会暂停(PR #11,@ygpking)。
这一版的主线是工作流:让它从「AI 会用」变成「你自己也能画」。
版本号 2.2.0(versionCode 220001 / 220002),签名与 2.1.1 一致,可直接覆盖安装。
DSH-Folk 2.1.2-beta.203
Beta build from 9a4c772 (run #203).
Signed with the release key, so it upgrades a release install in place.
Less tested than a release — report anything odd.
修:从针脚拉线、松手落在空白后,选完节点类型新卡片会出现在别处
- 根因:弹「接哪个节点」菜单时把松手坐标丢了,菜单回来后用的是默认网格位。
- 现在画布把松手坐标一起交给宿主,选完类型就按那个位置建节点(px→dp→12dp 吸附),
并且仍然自动连上源节点。抽屉拖出与这条路径共用同一处落点换算。
DSH-Folk 2.1.2-beta.202
Beta build from e4aa850 (run #202).
Signed with the release key, so it upgrades a release install in place.
Less tested than a release — report anything odd.
修:第二次拖动会跳回原位(手势回调的闭包过期)+ 新建流程的卡片位置
- 根因一:手写 pointerInput 的 key 不变时 Compose 不会重启手势块,块里捕获的还是第一次组合的
回调 —— 第二次拖动读到的仍是最初坐标。现在拖动/拉线/空白点击的回调都走 rememberUpdatedState。 - 根因二:新建流程与 AI 生成的定义坐标全是 0,画布显示的是自动布局、模型却还是 0,拖动起点因此
不一致。现在打开编辑页时就把自动布局写进模型,显示与模型一致。 - 差异以这份初始布局为基准:自动布局不算用户改动,取消时不会误弹「放弃改动」。