Skip to content

Releases: yuloong07-star/Luwi

Luwi 2.7.8

Choose a tag to compare

@yuloong07-star yuloong07-star released this 18 Oct 08:45

下载:Luwi-2.7.8.apk(225.6 MiB,随包自带 host 树)—— 装上第一次启动要解压几分钟,那几分钟别让设备息屏。

这一版把「手机上的助手」往自己会做事那边推了一步:技能能自己装与升级,
桌面那一格能直接说话,探索改成每天按点自己开始,自动指令能写「且」和「或」。
插件这一层也落了地:记忆插件随包、一个只注 CSS 的覆盖层把窄屏两处修好、右栏浏览器格放开。

这一版有什么

技能:两页管全,自己装

  • 设置页「技能」那一段分成已装与可用两页:刷新目录、搜一条、装一条、删一条,都在这一页里。
  • 索引带版本号与逐文件摘要,列表每行显示「已装 x.y.z / 远端 a.b.c」,落后的那一行多一颗升级;
    升级只覆盖 .lw-meta.json 记过、摘要也没被改过的文件,本地手改过的一律列出来让你选,不会悄悄盖掉。
  • 模型那一侧也能装:把技能当工具交出去,它自己按名字装一条,装之前过 frontmatter 与名字对目录那道校验。
  • 删除是不可逆的(没有回收站),对话框里把这句话写明;「一键装入」只把随包那份抄回去。

桌面对话组件:桌面那一格能说话

  • 桌面放一格,立绘取当前浮标外观,气泡里是最近几句;点「说一句」右下角浮出输入窗,不跳 Activity。
  • 说出去的那一句进 dsh-ball 那一本 10 分钟的账,回复折回同一场;换外观插件,那一格跟着换。
  • 锁屏下点那一格的表现按实测记进「已知问题」,不夸大。

探索:每天按点自己开始

  • 一天一个时刻,到点自己开一场,落在 Luwi 工作区;任务卡自己演进——这一场结束把下一场的
    nextTask 写回卡片,下一场从它开始。
  • 预算由宿主数:30 分钟 / 60 步,省电模式里不跑;到点没收尾就取消并提醒它交摘要。
  • 走完交五节摘要(已确认事实 / 仍不确定的点 / 下一场建议 / 风险与拦截记录 / 证据引用),落
    $DSH_HOME/lw/explore/<时间>.md。
  • 候选卡那一套下线了(2026-10-18):值得留的东西由探索自己在当场用记忆插件写,报告是它唯一落盘的文件。
    「只读」仍是提示词层的三条红线,宿主不加硬拦,每场按读数如实记。

自动指令:会写「且」和「或」

  • 条件多了组合:{"kind":"all","conds":[…]} 是都成立,{"kind":"any","conds":[…]} 是任一成立;
    判据是新鲜窗口——每个子条件记最近一次为真的时刻,落在窗口里就算成立(time 30 分钟 / 瞬态 120 秒 /
    状态 300 秒,可用 within 覆盖),不是要求同一瞬间为真。
  • 多了两个读数源:解锁(今天第一次解锁 / 任意解锁)与动手(前后台切换、触摸);监测器一共九行。
  • 两件事写规矩:不许嵌套、同一次成立只响一次(命中后清掉这一条所有子条件的新鲜标记,四道闸照旧)。
  • 顺带有了一次性的定时与主动对话:到点那一下球上念一句,会话按自动指令那一跳新开一场。

改进

  • 预设收敛:手机模式与视频模式两棵预设目录删了,已装机器 profile 里那两段声明也真正删掉;
    「自定义模式」在预设里改名 Luwi 并带一句简介(随包,每次激活自己订正一次名字)。
  • 设置页缺省只展开「省电」与「常用」那六段,能力那十四段收起;之后新加的段天然是收起的,
    手动改过的段退出再进仍是那个状态。
  • 球半隐 / 半藏两个开关:5 秒阈值共用,各管各的档;只开半藏是一颗不透明的半藏球,只开半隐是淡着不挪窝。
  • 手机版 webui 抬到 dsh-web-mobile 3.1.0(与 3.0.6 的 peer 逐条相同,多出来的是右栏与插件页那几处修)。
  • dsh 升到 0.2.1-rc.2,{{cwd}} 变量由宿主按原名字补回来,老提示词一个字不用改。

修复

  • 球上说的那句落回 dsh-ball 分组:两条根因一起修——那个目录从前只建不注册成工作区(第一句必进「未分组」),
    以及账本投递成功就无条件改写(在 GUI 那场问一句就把浮标对话改写成那场)。现在账上记 origin 与 cwd,
    只有浮标那一路才写,老账没有 cwd 的一律当没有。
  • 文件面板路径行「427 px 塞进 346 px」:覆盖层让它折两行,头一个字看得见。
  • 探索状态文件串行写:落盘冲突不再丢最后一次状态。
  • 余额只有主人点「看余额」那一下才会查、才会出现(宿主那三条自己起的补刷删了)。
  • 点网页链接之后回不到会话(本版当天重出时补的):手机上那条链接开在右栏那一格,而它是全屏的 ——
    返回键原来只弹「再按一次退出」,第二下把整个应用放到后台,那一页还挂在那儿。现在返回键先问页面一句:
    展开着的那一格当场收掉(不走过退出计数),没东西可收才轮到「再按一次退出」。另外,轨迹页详情预览里的
    链接改成交给手机默认浏览器
    —— 那一处原来会让整个会话界面被那个网站顶掉(日志里是 finished https://…),
    而 dsh 的客户端本来就没有「后退」可走。

插件

  • 记忆插件随包:@modusensus/dsh-mneme 0.9.0 跟 APK 一起装,装完 dsh-home/memory/ 里就有 memory.db,
    左栏多一行「记忆」,面板能开、控制台零报错。
  • 一个只注 CSS 的覆盖层(luwi-ui-fix):记忆面板在 412 dp 上从「两列被裁 89 px」改成叠成一列、
    无横向溢出;文件面板路径行折两行。
  • 右栏浏览器那一格放开:dsh-client-ui-sidebar-browser 真正挂上,iframe 412 × 763,高度链没断。
  • 装法一句话:设置 → 插件 → 浏览插件仓库,主址不通逐条换镜像,装前核索引里的 sha256。

已知问题

  • 组合不支持嵌套:all / any 里只能是叶子条件,写嵌套会被校验拒掉。
  • 探索卡只有一张:同一时刻只跑一场探索,第二场要等这一场收尾。
  • 06:00 与 23:45 那两条真实规则在模拟器上只量到「读得出来、算得对」,按点响的那一读数要等真实时刻或真机。
  • 桌面对话组件在国产桌面(vivo / OriginOS)上的卡片宿主行为只按走法 A 验过;走法 B 是留的退路,未启用。

安装

  • 覆盖安装即可(同一个签名),配置、会话、工作区都留着。
  • 每次重装 APK 都会把无障碍踢掉,装完去设置页重新打开(或用电脑按仓库 README 里那条写回)。
  • 屏幕操作与 Linux 沙盒需要 Shizuku 或 root(KernelSU / Magisk)之一;Linux 沙盒在通道断开时
    状态照读、操作如实拒,恢复后放回自愈。
  • 第一次启动要解压随包的 host 树(几万个文件),那几分钟别让设备息屏。

安全(必读)

  • 装一个插件就是信任它:它拿到的能力就是你勾给它的那些(勾 privileged.shell 等于把特权交给它)。
    卸载插件不会回收它自己那个 APK 已有的系统权限。
  • inline 插件与 Luwi 同 uid:那份代码可以反射拿到 Luwi 的一切,运行时那几道能力检查对它而言是
    体验,不是墙 —— 它只收白名单作者的包。
  • Linux 沙盒是能力通道,不是安全边界:它换来的只是「手机里多了一个 Linux 命令行」,不是更严的一档。
  • 跨设备同步会把你在设置里选中的那些会话与工作区推到你自己填的那个仓库:令牌只落本机(在应用
    私有目录,界面只显示打码形态),仓库地址与节奏就在设置页那一段,关掉即停。
  • 应用自身不收集、不上传任何数据;会联网的只有 dsh 的模型 API、你亲手触发的模型下载、你自愿启用的
    Edge-TTS / API-TTS、你亲手点的「刷新索引 / 装它」,以及你自己配置的同步仓库。

校验

SHA256  BDB7AEC6526D8D47CEE8AA7614D66589007F6116F75507ED90C42C102C048FF2
文件    Luwi-2.7.8.apk
大小    236549726 字节 (225.6 MiB)

干净构建 (:app:clean + 全量 assembleDebug, host 树重打): tools/apk-bytes.py 量出: 最大无归属区间 4,097 字节 / 总计 4,125 字节 —— 与前几版同一个量级。

Luwi 2.7.7

Choose a tag to compare

@yuloong07-star yuloong07-star released this 15 Oct 12:56

下载:Luwi-2.7.7.apk(221.5 MiB,随包自带 host 树)—— 装上第一次启动要解压几分钟,那几分钟别让设备息屏。

这一版把「一台手机上的 dsh」变成两台机器上的同一套:手机与电脑连起来之后,会话在两边跟得住,
对方的工作区会带一个后缀出现在你的列表里,在哪个工作区里说话就由那台机器来答。
手机里还多了一个真正的 Linux(Alpine + proot,能 apk add python3、能编译脚本),
视频模式可以指定用哪一个模型,浮标能放人物立绘、球多大也能自己拖。

这一版有什么

手机与电脑:连成一套

  • 会话跟得住。手机与电脑上的 dsh 通过一个 git 仓库互相镜像:一边说的话另一边看得见,回答折回你
    正看着的那一场。第一次用要填仓库地址(HTTPS + 令牌),这一项默认是关的,不开就一圈都不跑。
  • 对方的工作区出现在你的列表里,名字带一个后缀(例如 DSH(PC)),点进去就是对方那台机器上的
    工作区;谁的工作区谁来跑 —— 归属那条闸认得出"这一句不是本机的活",本机一轮模型都不跑,
    送不出去只落一条本地通知说"这一句没有送到 PC"。
  • 互为远端:每台设备把自己的名片(设备名 / 地址 / 时间戳)写进仓库的 peers/,跟着会话坐同一次
    提交过去,两边就知道对方是谁。
  • 开关有两处:设置页「Luwi-dsh-sync」那一段,与进设置之前顶栏菜单里那一行;关掉时会把远端地址与
    三项节奏(启动拉取 / 每轮结束推送 / 周期拉取)一起存起来再归零
    —— 插件不再按点起来经沙箱跑 git。
  • 顺手修掉一条静默失败:对端刷新失败以前一行日志都不打,现在每次退避都会把那句原因写出来。

手机里的 Linux(Alpine + proot)

  • 随包一份 Alpine minirootfs,装到 /data/local/tmp/lwlinux,经特权通道以 shell uid 起 proot:
    可以 apk add python3、装 build-base 编 C/C++、跑 python 脚本,会话的工作区就是沙盒里的 /work。
  • 设置页多了「Linux 沙盒」一段:状态 / 占用 / 在跑读数 / 装入(重装)/ 删掉它,模型那一侧的入口是
    lw_linux 工具(status / run / install / reset 四个动词)。
  • 它不是安全沙盒,这句话写在设置页那一段与提示词里:沙盒里看得到工作区、网络是通的,唯一那道
    边界是 uid(沙盒读不到应用沙盒里的 dsh 配置与凭据)。工作区是 noexec,编出来要执行的二进制别
    留在工作区里跑,落进沙盒自己的 /tmp 再跑。
  • 数字:单条命令额外延迟约 50 ms,首装约 1.5 s;apk add 由网络主导(整套工具链约 300 MB,装之前
    先看一眼 /data 余量)。清理要么在设置页删掉它,要么删掉应用重装;通道断开时连删除都够不着。

能力沙盒:两条能力真的接通了

  • files.read:<前缀> 与 net.http:<域名> 从"声明可装、调用即如实拒"变成接通:前缀按 canonical
    路径判范围(..、软链跳出、兄弟目录撞名都拒,Luwi 私有目录整棵不在范围里),域名逐字匹配、
    只走 https、重定向每一跳重查、单次响应有上限。
  • 装包时那两条参数各过一道语法闸;每次调用(含被拒的)都记一条账,可以撤销、可以拉黑发布者公钥。
  • 其余能力仍是"声明可装、调用时如实回一句这一版还没接通",不会假装成功。

插件那一层

  • 能被 dsh 设置面板改的那几行换了个住法:从命令行覆盖层挪进 profile 自己的 cordis.patch.yml
    (覆盖层是最上面一层,面板的写入命中不了它),而且盘上的插件名写成 file:// 形态。两件事缺一件,
    面板保存就会报"被覆盖层覆盖" —— 应用内「生图保存」必失败就是这个根因,现在自愈(旧安装的那一行
    每启一次 host 会对一次账)。
  • 插件页能浏览插件仓库、刷新索引、直接装它;下载多了几条镜像地址,主址不通就逐条换。
  • .lwp 包只在 yuloong07-star/luwi-plugins 仓库里,Luwi 仓库里那份 plugins/ 只留一页指路。

视频模式:用哪一个模型说话

  • 设置页那一段从「视频识别」改名成**「视频模式」,最上面一行就是用哪一个模型说话**:缺省「跟随
    当前模型」,也可以指定另一个。切进视频模式时按你选的那一对换模型,退出那一刻当场还原,
    不会再出现"退出之后第一句还用视频模型回"。
  • 候选模型列表来自宿主,与 dsh 自己的模型选择器同源;取不到就如实说取不到,不假装这台机器没有模型。

浮标与球

  • 浮标外观能放人物立绘了:外观包里多一档 fit,contain 那一档不裁圆 —— 全身立绘的头和脚都留着。
  • 球多大自己拖:设置页一条滑条,48 到 72 dp;外观插件能声明一个最小尺寸,两个取大的那个。
    球大了那圈涟漪的窗口跟着从 96 dp 到 132 dp。
  • 外观包现在能给「正在想 / 失败 / 完成」三档各配一份素材。

其它

  • 余额查询扩到 11 家(DeepSeek、Moonshot、OpenRouter、智谱、MiniMax 等),订阅制那几家给的是
    "还剩百分之多少",与金额档分开显示;查不到的模型如实回一句"不支持",绝不编一个数出来。
  • 设置页右上角多了一颗刷新:只读一次的设置不用再退出去重进。

修复

  • 球上「正在想」有时候不亮:会话事件是带载体派发的,插件挂在 profile 上 —— 订阅必须显式带
    global 才收得到;同一批还修掉一处让五条会话钩子一起哑掉的名字错误(异常被宿主 contain 掉,
    日志里干净得像没事),以及影子会话路径的两种拼法。
  • 应用内「生图保存」必失败(见上)—— 层序与名字形态两处一起修。
  • 退出视频模式后第一句仍走视频模型:改成退出那一刻就按记下来的那几场当场还原;判据也从
    running 改成 agentAvailable(退出那一刻那一轮已经结束,按 running 判一场都还不了)。
  • 余额那一处时序:上一拍答"不支持"、下一拍就有数的模型,现在会自己补一拍。

安装

  • 覆盖安装即可(同一个签名),配置、会话、工作区都留着。
  • 每次重装 APK 都会把无障碍踢掉,装完去设置页重新打开(或用电脑按仓库 README 里那条写回)。
  • 屏幕操作与 Linux 沙盒需要 Shizuku 或 root(KernelSU / Magisk)之一;Linux 沙盒在通道断开时
    状态照读、操作如实拒,恢复后放回自愈。
  • 第一次启动要解压随包的 host 树(几万个文件),那几分钟别让设备息屏。

安全(必读)

  • 装一个插件就是信任它:它拿到的能力就是你勾给它的那些(勾 privileged.shell 等于把特权交给它)。
    卸载插件不会回收它自己那个 APK 已有的系统权限。
  • inline 插件与 Luwi 同 uid:那份代码可以反射拿到 Luwi 的一切,运行时那几道能力检查对它而言是
    体验,不是墙 —— 它只收白名单作者的包。
  • Linux 沙盒是能力通道,不是安全边界:它换来的只是"手机里多了一个 Linux 命令行",不是更严的一档。
  • 跨设备同步会把你在设置里选中的那些会话与工作区推到你自己填的那个仓库:令牌只落本机(在应用
    私有目录,界面只显示打码形态),仓库地址与节奏就在设置页那一段,关掉即停。
  • 应用自身不收集、不上传任何数据;会联网的只有 dsh 的模型 API、你亲手触发的模型下载、你自愿启用的
    Edge-TTS / API-TTS、你亲手点的「刷新索引 / 装它」,以及你自己配置的同步仓库。

校验

SHA256  06b1e871a76a19416fb7be5fa43583d0064ab175706368dd93975d8b005d7bfb
文件    Luwi-2.7.7.apk
大小    232288517 字节 (221.5 MiB)

干净构建 (:app:clean + 全量 assembleDebug, host 树重打): tools/apk-bytes.py 量出最大无归属区间
4,097 字节 / 总计 4,121 字节 —— 与 2.6.0 / 2.6.5 / 2.7.4 / 2.7.6 那几份干净包同一个量级。

DSH-LW 2.7.6

Choose a tag to compare

@yuloong07-star yuloong07-star released this 11 Oct 08:52

下载:DSH-LW-2.7.6.apk(215.9 MiB),自带 host 树 —— 装上第一次启动要解压几分钟,那几分钟别让设备息屏。

这一版把插件那一层重建了一遍:装一份 .lwp 就完了,桌面上不再多一个应用。桌面组件改由主 APK
自己声明成"宿主槽",插件只往里填内容;同时多了 art(一包资源,零代码)与 inline(一份 dex 跑在
本应用的 :plugin 进程里)两档,伴侣 APK 收窄成"碰到主 APK 清单里没有的权限与组件"才用的例外。
另外收了几处会话与取景上的不一致。

这一版有什么

插件:安装即用

  • 桌面组件不再需要第二个 APK。桌面上那两格(「Luwi 动画组件」/「Luwi 图文组件」)由主 APK 的清单
    自己声明成宿主槽,插件只写一份 widget/widget.json 往里填内容:帧序列 / 图文卡片(图 + 标题 +
    正文 + 最多两颗按钮,按钮能直接调插件自己的工具)。一个槽同一时刻只挂一只插件(同槽互斥),
    换一只只重画、不用重装任何东西。
  • kind: art:一包资源,零代码,零第二次安装。可以带浮标外观(theme/ball.json)、桌面组件内容、
    面板与设置声明;不许带工具、不许声明任何能力。包里所有指向自己的相对路径装的时候与读的那一刻
    各查一遍(不许绝对路径 / .. / 反斜杠,解出来必须在插件目录里)。
  • kind: inline(原来的 dex 当别名收):一份 dex 在 Luwi 自己的 :plugin 进程里跑,能加新工具、
    新监测器、会自己变的桌面组件(ui.widget 往宿主槽推内容)。它抛异常会被转成一条工具错误文本,
    卡死由主进程超时如实报。这一档与 Luwi 同一个 uid,所以只对白名单作者开放:与 Luwi 同签名,或者
    把公钥指纹写进 $DSH_HOME/plugins/.inline-allow.json;不在名单里的包装的时候就拒(话术是
    "这个作者不在白名单里")。开发者模式不开这个口子。
  • companion 收窄成例外:只有"要主 APK 清单里没有的权限 / 特殊清单组件 / 自己的进程"才该用伴侣,
    而且它不许带启动器图标(界面入口改由插件详情里那颗「打开」用显式组件拉起)。
  • 装完即用那一条链:零能力(或声明的能力全勾上)的包装完自动启用;声明了桌面上那一格而槽正好
    空着,就顺手挂上并弹系统那张「添加到主屏幕」的卡(requestPinAppWidget)。能力有没勾上的那一种
    仍然不自动启用,等你勾完再点。
  • 浮标外观(ui.theme)也接通了:多份主题插件可以同时装着,设置页「浮标外观」那一行挑一个;
    读不到(插件被删 / 目录被改坏)一律回内置画法。
  • 设置页那一段收口:插件列表后面是「桌面组件」两行与「浮标外观」一行;「打开它自带的界面」只在
    伴侣插件上出现;原来那行「安装伴侣 APK」撤掉了 —— 新包把地址写在 entry.apk 里,装完顺手就装上。
  • 发布者指纹的口径改了:从"公钥 SPKI 原字节的 sha256"改成规范化的公钥身份(曲线 OID + 定长
    未压缩点)的 sha256,白名单 / 发布者目录 / 插件页 / 签名工具四处同一串 —— 换一种 SPKI 编码签同一把
    公钥不会再被误判成"不在名单里"。
  • 顺手修掉一个真缺陷:debug 包开着 R8,而 ILwPluginContext.Companion.asInterface 这类"只有插件
    会调"的 API 在应用这一侧没有调用者 —— 被剪掉了,插件在设备上撞 NoSuchMethodError(:plugin
    进程直接崩在 attach,而 describe() 那一步好好的)。现在整包保住这份对外 API。
  • .lwp 里可以写伴侣 APK 的地址(entry.apk):装完顺手把那另一半也装上(有 root / Shizuku 时
    静默装,没有时把文件交给系统安装器让你点一下);下载链换成 OkHttp 并自己看 302,双栈设备上不再
    卡在那个连不上的 IPv6 上。

会话那两处

  • "同一场对话"的窗口从 20 分钟收到 10 分钟:点球、喊唤醒词、回复框投出去的话,10 分钟内都接在
    同一场;超了才开新的。
  • 「返回应用」与「双击回复框」两扇门的落点分开了:菜单那行「返回应用」与常驻通知走正在想的那
    一场
    (没有就回一场新对话),而通知那条 intent 里那个"抄在通知上的会话 id"不再作数 —— 它以此刻
    那条账为准(那条 id 是通知重建那一刻定死的,之后回复落进框、输入投给另一场它就过时了);双击
    回复框那一扇一个字没改
    ,照旧回到"这块框跟哪一场打过交道"。

取景

  • "一次取景拼成一张网格"时那批图交得出去:lw_look 拼出来的网格是手里的字节(从没落过盘),
    而插件那一侧只认盘上的路径 —— 于是整批图一张都没交出去,看起来就是"视频模式识别不了"。现在两种
    形状都认,顺手去掉了同一句回执念两遍。

怎么试插件那两条

设置 → 插件 → 从链接装入,粘一条就行(装完它们会自己挂到桌面上那一格)。三份包都在
yuloong07-star/luwi-plugins 的 packages/ 下(Luwi 这个仓库不放 .lwp),链接钉在内容 tag 上:

包 它是什么 链接
art-whale-widget-2.0.0.lwp 鲸鱼娘(art):两套帧、占动画槽,点一下换下一套 https://cdn.jsdelivr.net/gh/yuloong07-star/luwi-plugins@plugins-2.7.6/packages/art-whale-widget-2.0.0.lwp
art-ball-theme-1.0.0.lwp 浮标外观:五个状态五张图,装完在「浮标外观」那一行挑 https://cdn.jsdelivr.net/gh/yuloong07-star/luwi-plugins@plugins-2.7.6/packages/art-ball-theme-1.0.0.lwp
inline-timer-1.0.0.lwp 番茄钟(inline):一份 dex,会把状态推到图文槽。要先把这个作者的指纹写进 .inline-allow.json https://cdn.jsdelivr.net/gh/yuloong07-star/luwi-plugins@plugins-2.7.6/packages/inline-timer-1.0.0.lwp

cdn.jsdelivr.net 不通时换成 fastly.jsdelivr.net / gcore.jsdelivr.net / testingcf.jsdelivr.net 任一个。

安装

  • 覆盖安装即可(同一个签名),配置、会话、工作区都留着。
  • 每次重装 APK 都会把无障碍踢掉,装完去设置页重新打开(或按仓库 README 里的说明用电脑写回)。
  • 屏幕操作需要 Shizuku 或 root(KernelSU / Magisk)之一。
  • 第一次启动要解压随包的 host 树(几万个文件),那几分钟别让设备息屏。
  • 这一版起,.lwp 装上就能用:零能力的包连一次问答都没有。老那台装过鲸鱼娘 1.1.x 的机器,
    升级到 2.0.0 之后伴侣 APK 可以卸掉(插件详情里会提一句,不自动卸)。

安全(必读)

  • 装一个插件就是信任它:它拿到的能力就是你勾给它的那些(勾 privileged.shell 就等于把特权交给它)。
    卸载插件不会回收它自己那个 APK 已有的系统权限,那要去系统设置里删它。每次能力调用都记一条账
    (含被拒的),可以撤销、可以拉黑发布者公钥。
  • inline 与 Luwi 同 uid:那份代码可以反射拿到 Luwi 的一切,运行时那几道能力检查对它而言是体验,
    不是墙
    —— 所以它只收白名单作者的包,第三方未经审核的提交不要走这条路。
  • 这一版多了一条窄的 BOOT_COMPLETED 接收:它只做一件事 —— 开机 / 解锁 / 覆盖安装之后把桌面那
    几格的帧图读权限补还回去并重画。它不起 host,也不做开机自启;有些 ROM 的「自启动」那一页会把它
    列出来,对,为的就是桌面上那几格。
  • 审批是全部放行的,而且主屏没有任何应用层刹车(虚拟屏那两道用户自己开的闸还在)。别装在别人
    也要用的机器上。
  • 应用自身不收集、不上传任何数据;会联网的只有 dsh 的模型 API、你亲手触发的模型下载、生图那条通道,
    以及你自愿启用的 Edge-TTS / API-TTS。

校验

SHA256  406C63B3383E0C94E55534141566392A83B82420F58CE832D8DBBCE662A594B5
文件    DSH-LW-2.7.6.apk
大小    226616833 字节 (216.1 MiB)

DSH-LW 2.7.5

Choose a tag to compare

@yuloong07-star yuloong07-star released this 10 Oct 16:36

下载:DSH-LW-2.7.5.apk(215.9 MiB),自带 host 树 —— 装上第一次启动要解压几分钟,那几分钟别让设备息屏。

这一版是接在 2.7.4 后面的一小批收口:六条只在真机上才看得见的事 —— 取景"拍到了却报零帧"、技能不再只认随包那份、说完话切模式就听不了话、她自己的回答被录回去、视频模式那块预览窗被压扁,以及一条会把整个 host 拖下水的语音准备失败。从 v2.7.4 装上来的,这些都在里面。

这一版有什么

  • 取景:拍到了却报"零帧"的根因修掉了(lw_look)。应用那一侧回的 paths 是一条逗号连成的字符串,而插件只认数组 —— 于是同一秒磁盘上落了四张 cam-*.jpg,回执却写着 0 frame(s),模型因此以为什么都没拍到。现在两种形状都认:图到手没到手,从此按盘上真有的文件说话。
  • 「技能」那一段:来源改认 yuloong07-star/app-skills,并多了「刷新技能目录」与删除。技能正文优先从那个仓库取(取不到就退回本机缓存、再退回随包那份);那颗「刷新技能目录」把根下的 index.json 取回来存在本机 —— 目录里加了什么技能,刷新一下就看得见。点一条已经在的技能会先问一句,确认后删掉 $DSH_HOME/skills/<名字>/ 那一份;没有回收站,你手改过的内容回不来,「一键装入」只能把随包那份抄回去。
  • 说的时候,麦克风真的关掉了(全部模式生效),说时关麦的收尾也修了。原来帧级那道半双工闸只丢帧、麦克风还开着,助手自己的声音仍可能进切段器;更要命的是系统 TTS 引擎常常在"合成完了"就报 onDone,而喇叭里还在放 —— 于是麦被提前 2.6 s 拉起来,她自己的整句回答被录了回去。现在"在说"由 LwSpeak.talking 说了算:引擎自己的标记之外,再算一份按字数的时长预算,并看媒体流是不是真的还在放,三条同时成立才算"还在响"。
  • 唤醒词自愈:说完话切模式之后又听不了话,修掉了。病根是"一句话的窗口"正好落在切模式那一下 —— 链子已经开着,但它是"只说一句"那一档,尾巴一到就自己收了,之后再没有人拉回来,球上还按记号写着「正在听」。现在切模式那一刻链子若已开着就当场转常驻,看门狗再加一条电平兜底:任何一次意外收麦都会在 500 ms 内自己拉回来。
  • 球上的显示收紧(视频模式那一档)。视频模式里球上永远写「正在听」(常驻那枚记号在、又不在省电模式时),压过「正在想」与「失败」,只让「正在说」盖一下 —— 这样"接着说话不用再喊唤醒词"才有意义。单击它连视频模式一起收掉(与设备上那几个脚本、lw_mode 是同一次切换),视频模式下双击打断显式关掉(要打断先退出视频模式)。另外三击不再"先开麦、再收麦" —— 开麦改走一个确认窗,主线程上那几百毫秒的卡顿随之消失。
  • 相机自愈,外加一条现场日志。视频模式那块预览小窗原来拿传感器坐标里的尺寸开窗,而这一路的帧是相机自己转成显示方向的 —— 竖着拿手机时画面是竖的、窗口是横的,被压扁 1.78 倍;现在窗口按显示方向摆,内容一个像素都不转,屏幕转了当场重摆。另一条"一帧也不给"的毛病当场没能复现(六组全 0 帧,而状态读数一切正常),所以先留现场:取帧超时那一刻把会话 / 预览 / 镜头 / reader / 误差六项打出来,下次再撞上能一眼看出是哪一处不一致。
  • 插件:语音模型准备失败不再拖垮整个 host。真机上取模型失败(fetch failed)时,那个没被接住的 rejection 会被 app-boot 当成致命错误 —— host 直接退出,界面只剩 ERR_CONNECTION_REFUSED。现在这一条自己吞掉、只记一行日志,失败原因与下载诊断仍写进界面那张卡。

安装

  • 覆盖安装即可(同一个签名),配置、会话、工作区都留着。
  • 每次重装 APK 都会把无障碍踢掉,装完去设置页重新打开(或按仓库 README 里的说明用电脑写回)。
  • 屏幕操作需要 Shizuku 或 root(KernelSU / Magisk)之一。
  • 第一次启动要解压随包的 host 树(几万个文件),那几分钟别让设备息屏。
  • 想用鲸鱼娘桌面小组件:先装那份伴侣 APK(在插件包的 Release 里),再从链接装 .lwp —— 同桌面的组件由伴侣声明,缺了它那一格只会显示"无法加载"。

安全(必读)

  • 装一个插件就是信任它:它拿到的能力就是你勾给它的那些(勾 privileged.shell 就等于把特权交给它)。卸载插件不会回收它自己那个 APK 已有的系统权限,那要去系统设置里删它。每次能力调用都记一条账(含被拒的),可以撤销、可以拉黑发布者公钥。
  • 审批是全部放行的,而且主屏没有任何应用层刹车(虚拟屏那两道用户自己开的闸还在)。别装在别人也要用的机器上。
  • 技能与插件是两码事:技能只是提示词材料(SKILL.md),不碰任何权限;插件才碰得到能力。
  • 应用自身不收集、不上传任何数据;会联网的只有 dsh 的模型 API、你亲手触发的模型下载、生图那条通道,以及你自愿启用的 Edge-TTS / API-TTS。

校验

SHA256  7F12CB286EA120611DF2B4BAB5FF7C634B5280F1441AFA8BE5DD3DEC70FB000A
文件    DSH-LW-2.7.5.apk
大小    226399216 字节 (215.9 MiB)

DSH-LW 2.7.4

Choose a tag to compare

@yuloong07-star yuloong07-star released this 10 Oct 10:36

下载:DSH-LW-2.7.4.apk(215.9 MiB),自带 host 树 —— 装上第一次启动要解压几分钟,那几分钟别让设备息屏。

这一版把 2.7.0 / 2.7.1 / 2.7.2 / 2.7.3 四笔(LW 插件第二批与它的三处修正 —— 之前只单独发过鲸鱼娘那三个插件包 Release)连同图标全换一起带上来了。从 v2.6.7 装上来的,这些都在里面。

这一版有什么

  • 插件:别人写的包,给这台手机加能力(协议 lw-plugin/1,伴侣 APK 那一档)。设置页多了一段「插件」:
    装入插件包(本地 .lwp 或解开的目录)、从链接装入、开发者模式(只收未签名本地包,界面常驻红字)。
    装一份包要过五道 —— 验发布者签名与逐文件哈希 → 查 protocol / minLw / 工具前缀冲突 / 未知能力 → 把能力逐条摆给你勾 → 落地 → 启用;敏感能力默认全不勾,勾了才给。每个插件的工具在模型眼里与内置的 lw_* 长得一样,所以"装上 → 下一轮就看得见"不靠重启。它跑起来之后能做的事就是你勾给它的那些:装一个插件就是信任它。
  • install from a link:从任意 https 地址装一份包(协议第 13 节)。只收 https(每一跳都重查,跳到 http 就地中止)、边读边数 32 MB 上限,下下来那一份走的是与本地包完全同一条校验链。明确不做自动更新 —— 换一份代码在跑,得人点一下。
  • 鲸鱼娘桌面小组件(协议 10.4 那条"桌面组件只能由伴侣 APK 声明"的实物)。装上伴侣 APK,再从链接装那份 .lwp(https://cdn.jsdelivr.net/gh/yuloong07-star/Luwi@main/plugins/whale-widget-1.1.2.lwp),长按桌面 → 小组件 → 找「Luwi 鲸鱼娘」拖上去。点桌面上的她一下 = 换下一套;伴侣界面里那颗「导入一份 GIF」能把你自己那份动图抄进 app 私有目录并当场解析成逐帧图(原文件一个字节不动),桌面上立刻跟着换。模型那侧也有三条工具(whale_list / whale_next / whale_set)。这一份一条能力都不要,装上就能用。
  • 「技能」那一段:这台手机装了哪个应用,就把那个应用的技能装进 dsh。随包带一份「应用 → 技能」目录(微信、支付宝、淘宝、高德、抖音、B站),设置页那一段会先扫一遍告诉你命中了哪几条、各自装了没有(只读),底部那颗按钮才真装 —— 落在 $DSH_HOME/skills/,dsh 下一轮就看得见。只加不改:已经在的那一份一个字节都不动,你自己改过的技能不会被"一键"盖回去。这也是手动的一步:装应用不会自动往 dsh 家里塞东西。
  • 全仓图标换成 Luwi 自己的标记:启动器图标(含自适应图标的前景与单色层、mipmap-*dpi 那几档回退位图)、通知栏白模、以及浮标球上那一圈标记(水花环里一只鲸尾)。图标那几处的墨迹占比一个数没动;只有球那处放大了 —— 从 0.378 个球体直径到 0.65(实机量到 0.658),原因是球只有 48 dp,"在球上看得清"与"在图标里留白好看"本来就是两个数。

安装

  • 覆盖安装即可(同一个签名),配置、会话、工作区都留着。
  • 每次重装 APK 都会把无障碍踢掉,装完去设置页重新打开(或按仓库 README 里的说明用电脑写回)。
  • 屏幕操作需要 Shizuku 或 root(KernelSU / Magisk)之一。
  • 第一次启动要解压随包的 host 树(几万个文件),那几分钟别让设备息屏。
  • 想用鲸鱼娘桌面小组件:先装那份伴侣 APK(在插件包的 Release 里),再从链接装 .lwp —— 同桌面的组件由伴侣声明,缺了它那一格只会显示"无法加载"。

安全(必读)

  • 装一个插件就是信任它:它拿到的能力就是你勾给它的那些(勾 privileged.shell 就等于把特权交给它)。卸载插件不会回收它自己那个 APK 已有的系统权限,那要去系统设置里删它。每次能力调用都记一条账(含被拒的),可以撤销、可以拉黑发布者公钥。
  • 审批是全部放行的,而且主屏没有任何应用层刹车(虚拟屏那两道用户自己开的闸还在)。别装在别人也要用的机器上。
  • 技能与插件是两码事:技能只是提示词材料(SKILL.md),不碰任何权限;插件才碰得到能力。
  • 应用自身不收集、不上传任何数据;会联网的只有 dsh 的模型 API、你亲手触发的模型下载、生图那条通道,以及你自愿启用的 Edge-TTS / API-TTS。

校验

SHA256  723b6298000f506945334187f7dd8f90f3441a000f86c47c8f13a65ce46799d8
文件    DSH-LW-2.7.4.apk
大小    226357300 字节 (215.9 MiB)

鲸鱼娘桌面小组件 1.1.3 (LW 插件)

Choose a tag to compare

这一版跟着 LW 的「一个地址装完即用」走: 那份 .lwp 里现在写着这个伴侣 APK 自己的 https 地址
(协议第 8.1 节的 entry.apk), 于是在 Luwi 的设置页粘一条 .lwp 链接就把两半都装上 —— 不用
再自己去找这个 APK。装那一步优先走特权通道 (root / Shizuku) 静默装, 没有特权时把文件交给系统
安装器让你点一下。

两份资产要一起用: whale-widget-1.1.3.lwp 是装进 Luwi 的那一份, sample-whale-widget-debug.apk
是它要绑的伴侣 (versionCode 5 / versionName 1.1.3), 工具、桌面组件与它自己的界面都在里面。

从链接装 (Luwi → 设置 → 插件 → 从链接装入):
https://github.com/yuloong07-star/Luwi/releases/download/lw-plugin-whale-widget-1.1.3/whale-widget-1.1.3.lwp

这一份一条能力都不要, 装上就能用。已经在桌面上的那只: 点她一下 = 换下一套; 伴侣界面里那颗
「导入一份 GIF」能把你自己的动图抄进来并当场解析成逐帧图。

鲸鱼娘桌面小组件 1.1.2 (LW 插件)

Choose a tag to compare

把伴侣界面里那句"随包那三套"改成"随包那一套" (随包只剩主人给的那一份, 其余由使用者自己导入)。装法见 plugins/README.md; 链接安装用 https://cdn.jsdelivr.net/gh/yuloong07-star/Luwi@main/plugins/whale-widget-1.1.2.lwp

鲸鱼娘桌面小组件 1.1.1 (LW 插件)

Choose a tag to compare

修一处实测出来的毛病: 链接安装那一侧的 zip 魔数只比对了第一个字节 (第二个字节写成 P 而不是 K), 一份好端端的包被说成"不像 zip"。同时把三句工具说明改对 (随包只剩那一套, 不再是"随包那三套")。

装法见 plugins/README.md: 先装伴侣 APK, 再在 Luwi 的设置页 → 插件 → 从链接装入里粘
https://cdn.jsdelivr.net/gh/yuloong07-star/Luwi@main/plugins/whale-widget-1.1.1.lwp。

DSH-LW 2.6.7

Choose a tag to compare

@yuloong07-star yuloong07-star released this 09 Oct 15:45

下载:DSH-LW-2.6.7.apk(215.8 MiB),自带 host 树 —— 装上第一次启动要解压几分钟,那几分钟别让设备息屏。

这一版把 2.6.6(锁屏注入解锁,本地提交过、没单独发)一起带上来了:从 v2.6.5 装上来的,两批都在里面。

这一版有什么

  • 球念回答的时候会呼吸,外面还有一圈圈涟漪 —— 念(「正在说」)时球外那一圈圈同心环往外扩、越扩越淡,描边
    跟着当前环色在亮与半亮之间 1.2 s 一个来回(球上那三个字不跟着闪,一直读得清)。「正在听」是反过来的那一套
    —— 环从最外圈往球收。涟漪比球大,所以它住在自己那块浮窗里,而那块窗是非触摸的(球"只吃自己那 48 dp"
    的规矩没变);不念不听的时候整块窗摘掉,屏上不留看不见的常驻窗。
  • 球上那三个字的优先级改了:念最上,想与听之间"谁最近变得谁上" —— 正在念的时候球上写「正在说」,点一下
    就是"别念了",一眼看得出该点哪儿(以前"正在想"会把它盖住);在想着点一下球开麦之后,球上改写成「正在听」
    (那一轮照跑不误);开着麦时新一轮又起来,球上写回「正在想」。手势一个都没改:双击打断仍然只在球上写着
    「正在想」时成立,显示怎么切都不取消任何任务。
  • 同一场起了新的一轮,正在念的那一句会被掐掉 —— "这一句念的是哪一场的回答"由宿主推回复时带的会话 id 认,
    这一场又跑起来就把这一句播报停了(别的会话跑起来不碰这一句)。那一笔账是空的时候(比如手动让它念一句)
    不猜、不掐,宁可让它念完。
  • 新一轮出现时「正在听」会被收回来 —— 麦克风那条窗口与上面那个输入条一起收,与三击那条走同一个入口。
    代价说清楚:人说到一半时被新一轮收掉,那下半句就丢了(这一条与"人还在说就继续听"是有冲突面的,
    按现在这套口径收)。
  • 「锁屏」多了「注入解锁」与「注入密码」(2.6.6 那一批)—— 开着注入解锁时不再重放录制的那条手势序列,
    只做"亮屏 → 注入密码 → 回车",省掉的不只是滑动与图案,还有每一步之间那 140 ms 的等待,解锁明显更快。
    「注入密码」那一行让这条路不必先录手势就能用,密码按 Android Keystore 的 AES-GCM 加密保存
    (落盘只有 iv:密文),留空保存 = 连密钥一起删。录制的那一条是退路,只被绕过、没有被删;「测试一次」
    现在会先真的锁屏再走一遍(手机开着锁的时候,那一趟一步都走不到,测出来的"成功"是假的)。

安装

  • 覆盖安装即可(同一个签名),配置、会话、插件与工作区都留着。
  • 每次重装 APK 都会把无障碍踢掉,装完去设置页重新打开(或按仓库 README 里的说明用电脑写回)。
  • 屏幕操作需要 Shizuku 或 root(KernelSU / Magisk)之一。
  • 第一次启动要解压随包的 host 树(几万个文件),那几分钟别让设备息屏。

安全(必读)

  • 装一个插件就是信任它:它拿到的能力就是你勾给它的那些。卸载插件不会回收它自己那个 APK 已有的系统
    权限,那要去系统设置里删它。
  • 审批是全部放行的,而且主屏没有任何应用层刹车(虚拟屏那两道用户自己开的闸还在)。别装在别人也要用的
    机器上。
  • 应用自身不收集、不上传任何数据;会联网的只有 dsh 的模型 API、你亲手触发的模型下载、生图那条通道,以及
    你自愿启用的 Edge-TTS / API-TTS。

校验

SHA256  6d75634978fc666ffdfa0b694e6cf74711b995a9cb8f840a6f0ba910b8d36eba
文件    DSH-LW-2.6.7.apk
大小    226298718 字节 (215.8 MiB)

DSH-LW 2.6.5

Choose a tag to compare

@yuloong07-star yuloong07-star released this 09 Oct 11:26

下载:DSH-LW-2.6.5.apk(215.8 MiB),自带 host 树 —— 装上第一次启动要解压几分钟,那几分钟别让设备息屏。

这一版有什么

  • 新机开箱就有「自定义模式」(语音开不了新会话那条修了) —— 内置 dsh-custom-mode(MIT,vendored)与
    三份默认预设声明(自定义 / 手机模式 / 视频模式)在首启随包安装:耐久副本、profile 的
    dependencies 与 dsh.profile.bundles 登记、profiles/node_modules 那条链、.agent-presets/custom/
    那五个文件(已有的一律不动,prompt.md 是你自己那份就保留)。另外语音那一句要开新会话时,如果选中的
    预设没注册,会按「当前默认 → standard → 注册表里其他候选」逐级回退,并把「用了哪一个、为什么换」写进
    lw_voice op=status;以前那一条会直接以 agent-preset/not-found 失败。
  • 唤醒召回(漏唤醒那一摊) —— 四个 KWS 参数集中到一份表里并调成
    threshold 0.01 / score 3.0 / num_trailing_blanks 1 / max_active_paths 16。其中最容易搞反的是
    num_trailing_blanks:它要求关键词之后还要挂够这么多帧空白才肯收(越大越难唤醒),上一版按"连续 2-3 帧"
    抬到 3 等于要喊完停 160 ms —— 而"喊完紧接一句指令"根本没有那个空档。命中之后另加一层去抖:冷却窗 1.5 s +
    「命令尾」静默(第一段出字即收回,上限 2 s),lw_wakeword op=status 多报一个 suppressed(被去抖吃掉的
    次数)与正在跑的那四个参数。
  • 唤醒到开麦更快 —— 命中那一串动作改成"先把耳朵打开(切段器 + 认字线程),再去震动 / 通知 / 点亮屏幕";
    点亮与解锁整段挪到自己的线程(原来熄屏时最多 600 ms 卡在采集线程上,那段时间麦克风没人读,喊完紧接说的头
    几个字就是这样丢的)。每次唤醒都会在日志里写一行"从命中到耳朵打开多少毫秒"。
  • 在线引擎念回答时不再自录 —— 半双工那道闸原来只有系统引擎与自带引擎会合上,在线那两条(Edge / API)
    一个字节都没写:用它们念回答时麦克风照开着,喇叭里念的那句被录回去、又当成一句话投进会话。现在三条引擎
    整段都合闸,判据也换成 VoiceState.speaking || LwSpeak.speakingNow(后加的引擎忘了写标记也关得住)。
  • 球的状态改成"互相打断" —— 优先级是 在想 > 在念 > 在听 > 失败:麦克风开着而有一轮在跑时写「正在想」
    (双击打断打的就是它)、在念而麦克风也开着时写「正在念」、一轮在跑而同时还在念上一轮回答时仍写「正在想」。
    它只改显示与双击打断打谁,不取消任何任务;而点球那一下仍按"念 > 想 > 听"(球写着在想而喇叭在念时,
    单点是"别念了"、双击才是打断那一轮)。
  • 说完一句就收窗 —— 一句话出字投出去之后,闲置上限从 10 s 掉到 0.3 s,而且不再因为"它正在想 /
    正在念"而挂起;人声照样续期(还在说就继续听,不会被从中间收掉),一停下来就收。看门狗节拍同时从 2 s
    收到 0.5 s。代价写在文档里:一句话中间停顿超过 0.8 s 被切成两段时,后半句要重新喊一次唤醒词。
  • 自动指令的冷却由你定 —— 「新建一条自动指令」多一栏冷却分钟(随那句话交给模型写进 cooldownMinutes,
    提示词里点名不许改成 30),「删掉或改一改一条」里多一行「改冷却时间」,那一条不经过模型(只替换
    cooldownMinutes 一个键,再走同一道校验),改完立刻生效;规则那一行的摘要上也印着冷却(0 = 不冷却)。

安装

  • 覆盖安装即可(同一个签名),配置、会话、插件与工作区都留着。
  • 每次重装 APK 都会把无障碍踢掉,装完去设置页重新打开(或按仓库 README 里的说明用电脑写回)。
  • 屏幕操作需要 Shizuku 或 root(KernelSU / Magisk)之一。
  • 第一次启动要解压随包的 host 树(几万个文件),那几分钟别让设备息屏。

安全(必读)

  • 装一个插件就是信任它:它拿到的能力就是你勾给它的那些。卸载插件不会回收它自己那个 APK 已有的系统
    权限,那要去系统设置里删它。
  • 审批是全部放行的,而且主屏没有任何应用层刹车(虚拟屏那两道用户自己开的闸还在)。别装在别人也要用的
    机器上。
  • 应用自身不收集、不上传任何数据;会联网的只有 dsh 的模型 API、你亲手触发的模型下载、生图那条通道,以及
    你自愿启用的 Edge-TTS / API-TTS。

校验

SHA256  2b89e2c8d870d8b33bad724fedfce564fbe3b6d0af88acaa48bede907e8569e7
文件    DSH-LW-2.6.5.apk
大小    226243234 字节 (215.8 MiB)