概览
dsh-whale-maid
README / ZH
插件文档
目录摘要
dsh.pub 核对固定版本的组合包契约、运行时事实与分发语义;完整 README 请查看源仓库。
在 GitHub 阅读完整 READMELIMITATIONS
已知限制
- **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` 复核,两者都应与本地一致。
