Overview
dsh-whale-maid
README / EN
Package documentation
Registry summary
dsh.pub verifies the pinned bundle contract, runtime facts, and distribution semantics. The complete README remains in the source repository.
Read the full README on GitHubLIMITATIONS
Known limitations
- **locale 表是静态生成的**:`locale/*.json` 由源码里的 `label(中文, English)` 对生成,改了文案要重新生成一次,否则翻译表会和界面不同步。 - **姿态按场合轮换**:`src/pose-map.js` 把 36 条场景规则映射到姿势立绘,未命中时回落到 12 张精灵表的动作态,所以并不是每个场景都会换立绘。 - **天气陪伴需要联网**(Open-Meteo)。请求失败时沿用上次结果,超过 6 小时就不再提天气;完全离线时宠物其余功能不受影响。 - 天气台词**只有中文**(英文界面会回退到中文,不会留空)。 - 天气专属姿态(撑伞/缩脖子/发抖/流汗)与 19 个新姿态立绘**暂缓**,当前用现有姿态代偿。 - 宠物渲染在 `shell.overlay` 层(`z-index: 20`,自成层叠上下文),**DSH 的弹窗与吐司会盖住它**,这是宿主层级决定的。 - 拖到屏幕边缘时会被夹回视口内(留 12px 边距),窗口缩小时也会被夹取。 - `client.js` 约 313 KiB;精灵图与姿势图(3.4 MB)通过 `/api/dsh-whale-maid/assets` 由宿主提供,不再内联进包。 - 系统开启「减少动态效果」时,帧动画与摇摆会自动停用,只保留静态姿态。 - **工作状态联动依赖宿主 DOM 契约**(1.1.0)。探测器读的是 `[data-chat-running]`、`[data-tool][data-state]`、`[data-variant="think"]` 这些属性;宿主改版后可能失效。失效时的表现是「她不再跟着工作换姿态」,其余功能不受影响——用 `dshWhaleMaid.scanNow()` 一看就知道是不是探测不到。探测器只读 DOM,不发请求、不碰 host 总线。 - 探测间隔 1.5 秒(`MutationObserver` 去抖),所以姿态切换有最多 1.5 秒延迟,这是刻意的:轮询太密会让长会话掉帧。 - 成长数据只存在本机 `localStorage`,换机器/清缓存就没了,也没有云端同步。 - 台词是按话题随机挑的,不读对话内容原文——只做关键词与话题的粗分类,不做语义理解。 - 分区命中矩形是按 `idle` 第 0 帧量的,但每个姿势都重画了角色,位置会有几个像素的漂移:`src/zones.js` 里带一张 33 行的配准表(`状态#帧 → [缩放, dx, dy]`),点击时先把坐标映射回参考帧再判定,所以换姿势后仍然准。极端姿势(例如 `drag` 侧身)的边缘部位仍可能落到隔壁区。 - 松手压扁是 320 ms 的一次性动画,连续快速松手不会重新播放。 ### 推送排障(GitHub TLS) 本机到 github.com 的 HTTP/2 连接会被中间设备重置,`git push` 会随机失败并报: ``` fatal: unable to access 'https://github.com/lov0vo/dsh-whale-maid.git/': TLS connect error: error:0A000126:SSL routines::unexpected eof while reading ``` 这不是仓库问题,而且**失败时提交可能已经落地**,所以不能只看 `git push` 的返回值。仓库已做两件事: 1. 仓库级配置(已写入 `.git/config`,克隆后需重设一次):`http.version=HTTP/1.1`、`http.postBuffer=524288000`、`http.lowSpeedLimit=1000`、`http.lowSpeedTime=60`。 2. 新增 `scripts/push.mjs`:构建 → 测试 → 同步两处安装目录 → 提交 → **带退避重试地推送 main 与 tag** → **用 `ls-remote` 回读校验远端 SHA 与 tag**,校验不通过直接非零退出。 ```bash node scripts/push.mjs -m "fix: something" # 提交并推送(含构建与测试) node scripts/push.mjs --no-build # 只推送已提交的内容 npm run push -m "…" # 同上,走 package.json scripts ``` 推送后用 `git ls-remote origin main` 与 `git ls-remote --tags origin` 复核,两者都应与本地一致。
