dsh-mini-remote 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,28 @@
2
2
 
3
3
  本文件记录每个版本改了什么。格式参考 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
4
4
 
5
+ ## [未发布]
6
+
7
+ ### 重画的
8
+
9
+ - **九张动画(18 帧)全部重画,两帧之间不再有"上半身和下半身割裂"。** 起因是老工艺——一张图里并排画两格,模型两格各画一遍同一个角色,裙子上的图案、袜口条纹、腿和发丝都会各差一点;后来靠"把第二帧手臂以下整段取自第一帧"去补,补丁落在腰上、胳膊上,于是又出现"书举起来和举起前割裂"。这版换了工艺:**先出第一帧,再由第一帧改出第二帧**(只喂第一帧、只描述该动的那一处),两帧出自同一张画;九张的形象统一照同一张母版。裙子以下那一段的帧间差异,除跑、冲刺(按设计动腿)外都在 5% 以下,多数 1% 上下。
10
+ - **"跑"那张返工过一次。** 第一版两帧都是"抬起同一条腿"的镜像姿势,外轮廓几乎重合,手机上翻起来像没动(用户报「腿部没有摆动起来」——量出来的下半身帧间差其实有 52.8%,问题在剪影,不在有没有动)。现在一膝抬到大腿近水平、脚提到膝高,另一条腿伸直踩地,第二帧换边。
11
+ - **新增两个出图工具。** `tools/whale-draw.py` 直连 OpenRouter 出图、可带参考图——插件自带的改图接口在 OpenRouter 上用不了(它固定打不存在的 `/images/edits`,实测 404),带参考图得走 `/images/generations` 的 `input_references`。`tools/whale-pair.py` 把两张单人格拼成两格并排的洋红底图再交给原来的切图脚本,两帧共用同一缩放,并自检底色是不是纯洋红。
12
+
13
+ ### 改了的
14
+
15
+ - **手机上终于能看到上下文用到多少了。** 顶栏那句「上下文 42%」一直是空的:原方案是去问 DSH 的 `contextPressure` 投影,实测这一组合里拿不到——接口通、不报错、投影里就是没有那三个数(第 27 轮就担心过这件事,见 `tasks/todo.md`)。现在改成从事件里量:分母取每次请求前 `request/context` 报的窗口大小,分子取每一步 `assistant/message` 带的用量,而且**把缓存读、缓存写一起加上**——三块计数互不重叠,少加一块量出来会偏小,越长的一轮偏得越多。两个数缺任一个就整段不显示,不编、不放占位符。
16
+
17
+ ### 新加的
18
+
19
+ - **图没显示出来时,手机会说一声。** 正文里写错图片地址(文件不在、或者类型不是图片),原来只画一个破图标,用户只看到"图没了"、不知道原因。现在手机弹一句「这张图手机看不到:那个位置没有这张图,或者它不是 PNG/JPG/WEBP/GIF」,图的位置也画一圈虚线标出来。
20
+
21
+ ### 修了的
22
+
23
+ - 构建指纹不再把 `lib/art/out-*.webp`(给手机看图的展示图,不进版本库)算进去。那批文件一增一删指纹就变,重启时"跑的是不是新代码"这条校验会因此白报一次红——2026-09-28 连着踩了两回。
24
+ - **手机上显示图片不再那么挑写法。** 原来正文里只有两种写法能用:完整网址,或者一个裸名字。写全路径(哪怕是 `lib/art/out-demo.webp` 这种本机路径)都只会画一个破图标——2026-09-28 用户为此第三次来问。现在第三种写法也认:电脑上任意一张图的位置(绝对路径,或相对项目根),PNG/JPG/WEBP/GIF 都行,不必先拷进 `lib/art`。这条通道只发图片类型(扩展名是唯一的闸门)、单张不超过 20MB、照旧要 token;地址里没有构建指纹,所以不让浏览器缓存。
25
+ - 两处会把「会话睡着了」说成「这个会话已经结束了,请重新选一个会话」的提示改准:撤回排队时说「队列里排着的也跟着没了——重新发一条吧」,停止时说「现在没在跑,不用停」。会话会醒,手机上还挂着它,说"结束了"会把人引到重选会话上去。
26
+
5
27
  ## [0.1.5] - 2026-09-27
6
28
 
7
29
  ### 新加的
package/README.md CHANGED
@@ -127,7 +127,7 @@ dsh plugin --profile web add <你放源码的目录>
127
127
 
128
128
  **等结论。** 跑的时候上面显示「运行中…」。这期间你可以接着发,指令会排队。任务结束,结论直接出现在页面上,同时响一声、震一下。
129
129
 
130
- **她干活的时候会开口。** 电脑上的模型在步骤之间常会自言自语一句(「我先看一下这个文件」这类),这一句现在由鲸鱼娘念出来——说话的动作是新画的一张立绘,轮播会为它停一下,说完接着从停下的地方往下走。它**只在那只气泡里**,不会混进下面的回答区。气泡里只念**它特意写给人看的那一句**;它自己心里想的那些(常是英文、也常成段)一个字都不上手机。万一那句旁白本身就是英文,就照原样显示、不翻译——翻译等于替它编一句它没说过的话。
130
+ **鲸鱼娘动画。** 电脑上的模型在步骤之间常会自言自语一句(「我先看一下这个文件」这类),这一句现在由鲸鱼娘念出来——说话的动作是新画的一张立绘,轮播会为它停一下,说完接着从停下的地方往下走。
131
131
 
132
132
  **两套外观,随手换。** 设置里有一行「外观」:**深色**(默认)、**浅色**、**跟随系统**。深色是深海墨蓝打底;浅色那套的色是从宣传图那张画上取的——近白的冰蓝地、深宝蓝的字,主按钮也换成同一个宝蓝。选哪套记在手机上,下次打开还是它。
133
133
 
@@ -199,6 +199,13 @@ dsh plugin --profile web add <你放源码的目录>
199
199
 
200
200
  你可以更加自由地支配自己的时间,而不是当你和女儿玩耍时,抑或出游时,被困在那个小小的屏幕里。
201
201
 
202
+ ## 相关文档
203
+
204
+ - [立绘与动画工艺](docs/character.md) —— 三个出图工具、共享提示词块、尺寸与验收口径。
205
+ - [立绘基准帧(2026-09-28 定稿)](docs/art-refs/2026-09-28/) —— 九张帧图、全部提示词原文,
206
+ 以及「以后改动画先对照它们」的规矩。
207
+ - [变更记录](CHANGELOG.md) —— 每版改了什么、为什么。
208
+
202
209
  ---
203
210
 
204
211
  ## 致谢
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/lib/build.js CHANGED
@@ -39,7 +39,10 @@ function sources() {
39
39
  files.push(['client/client.js', join(HERE, '..', 'client', 'client.js')])
40
40
  try {
41
41
  for (const f of readdirSync(join(HERE, 'art')).sort()) {
42
- if (f.endsWith('.webp')) files.push(['art/' + f, join(HERE, 'art', f)])
42
+ // `out-` 开头的是给手机看图用的展示图(.gitignore 里专门让路的那批),随时会增删替换,
43
+ // 不是这份代码的一部分。把它们算进指纹的后果是:每贴一张看图指纹就变一次,重启校验
44
+ // 会因此白报一次红——2026-09-28 连着踩了两回。
45
+ if (f.endsWith('.webp') && !f.startsWith('out-')) files.push(['art/' + f, join(HERE, 'art', f)])
43
46
  }
44
47
  } catch {
45
48
  // 没有 art 目录(比如只拷了 .js 的旧安装)就当没有立绘,照常起。