Skip to content

feat(minimax-pet): 0.9.0 桌面卡片自动收起与中英文界面 - #131

Merged
MyPrototypeWhat merged 5 commits into
mainfrom
feat/minimax-pet-notice-i18n
Nov 13, 2026
Merged

MyPrototypeWhat merged 5 commits into
mainfrom
feat/minimax-pet-notice-i18n

Conversation

@MyPrototypeWhat

@MyPrototypeWhat MyPrototypeWhat commented Nov 12, 2026 •

Copy link
Copy Markdown
Collaborator

桌面通知卡片现在默认显示 10 秒后自动收起,收起不再需要手动点关闭;同时把界面做成中英双语,默认跟随 MiniMax Code 的语言。两项合成 0.9.0。

任务通知:设置页的数字框调秒数,填 0 表示一直显示。收起只隐藏卡片,不会把任务标记为已读;需要你回答的卡片不会自动收起;鼠标悬停或键盘焦点停在卡片上时暂停计时。

语言:面板和桌面的全部文案走 i18n.mjs,简体中文与英文各 246 个 key。默认跟随 host.ui.subscribe 报告的语言,设置页可以固定。英文按 MiniMax Code 自己的英文文案风格写(sentence case、短句、… 表示进行中、Could not X. Please try again.),不是另起一套。对话标题和 Agent 回复属于数据,保持原文。

本 PR 叠在 #129(0.8.1)之上,包含它的全部提交;#129 的两条评审意见(lockfile 的 rrweb-cssom 版本、.desk 的 overflow)已在 cece029 修好,因此建议合并本 PR 后关闭 #129。

测试环境与结果

  • 单元 / DOM:npm test 260 通过(新增 dev/i18n.test.mjs,其中一条会扫描页面实际用到的 key,缺任何一种语言即失败;dev/desk-interactivity.test.mjs 覆盖点击穿透与卡片不动窗口)。npm run test:smoke 70/70。
  • 仓库检查:npm run check 下 plugins/minimax-ai/minimax-pet: OK;npm run check:package 报告 41 个文件字节一致。
  • 浏览器:在模拟 Host 的桥接下分别用 lang=zh-Hans 和 lang=en 走了一遍面板两个页签、桌面通知卡片、右键菜单和紧凑任务卡,两边控制台均无报错;桌面卡片在 10 秒后确实收起,需要回答的卡片保留。

浏览器检查发现、单测没覆盖的问题(均已修)

  1. 分段控件标签读的是 opt.label,而选项已改成 key,桌面大小和语言两行渲染成空胶囊。
  2. 英文界面里单位仍是「秒」。
  3. 错误原因在英文下套了中文全角括号,出现 (unsupported) . 的多余空格。
  4. 「Try reconnecting.」与「You can reconnect in Settings.」重复。
  5. 任务页签漏了 data-i18n。
  6. 紧凑视图的按钮文案在构造时写死,早于语言确定。
  7. Host 语言可能在偏好加载前到达,会先用错语言画一次。

另外,之前一次 invalid_preferences 是本地旧进程造成的,不是代码问题。

桌面窗口的两个交互问题(用户反馈,已修)

  • 点击宠物会闪一下:desiredAnimation() 在卡片打开时会放弃悬停动画、回落基础行,animationGate 从第 0 帧重播。逐帧采样确认精灵在点击瞬间换了图集行。现在卡片打开不再打断悬停动画;菜单仍然会让宠物回到基础动画。
  • 卡片打开后其余部分点不到底下的窗口:refreshInteractivity() 把 workbenchOpen 当作整窗可交互,而展开窗口 300×488、卡片只有 284×147,卡片上方和两侧的透明区域因此吞掉点击。现在只按卡片与桌宠实际覆盖的像素判定,卡片外恢复 clickThrough: true;拖拽和菜单仍可占用整窗,用键盘打开卡片(尚无指针采样)时保持可点击。

浏览器实测:指针在卡片上 clickThrough: false,移到卡片上方空白与角落变 true,移回卡片恢复 false;关卡片、悬停、拖拽三条路径也都复核过。新增 dev/desk-interactivity.test.mjs(5 条)覆盖这两种判定。

闪烁的真正原因(用户实测反馈后定位)

前两轮的修复都在,但闪烁仍在。用户补充了方向:"点击之后,宠物形象会往左移和往上闪烁"。

用模拟 Host 逐帧测量:窗口从 340 高变为 520 高时,桌宠到底边的距离始终是 4px,页面内没有任何跳动。所以位移不在 CSS,而在原生窗口被移动的那一刻——窗口以右下角为锚点增高,原点上移 180px,内容若晚一帧重排,旧布局就画在新原点,整幅上跳。横向是同一个机制(展开宽度 300 时窗口左边缘也移动 10px)。

要彻底消除,只有一条路:点击时不改变窗口几何。现在窗口只有一个尺寸(280 x deskHeight(scale),即 436 / 488 / 540),本来就放得下展开的卡片;开合卡片只切 DOM。桌宠上方的透明区域会穿透点击,所以常驻的高度不挡桌面。

浏览器实测:点开卡片新增的几何补丁为 NONE,关闭只多一个 clickThrough;桌宠坐标前后完全一致。删除 workbench-window.mjs(不再有任何展开/收起切换);改缩放大小时按右下角锚点同时更新宽高;旧存档的位置格式继续可用。

顺带处理了 #129 的两条评审意见:package-lock.json 里 rrweb-cssom 的版本改回 0.8.0(与 resolved/integrity 一致),.desk 回退为 overflow: hidden(原先那行 overflow: visible 与注释都不成立,html.mode-window body 本就是 hidden)。

未验证

  • 改缩放档位时窗口仍然会真实改变高度(280×436 / 488 / 540)。点击开合卡片已不再动窗口,但拖缩放开关时那条路径没在真窗口里测过;如果那里也介意闪烁,需要把卡片区域改成滚动而不是增高,本次没做。
  • 真实 MiniMax Code 窗口里两种语言的实际显示,以及某个具体安装在 3.1.11+ 上实际报告的语言。
  • Windows 任何界面。
  • 自动收起只在浏览器里按 10 秒实测过一次,没有长时间运行下的漂移数据。

已由维护者在真实客户端确认:点开/关闭桌面卡片不再闪烁(此前是"往左和往上"跳一下)。

新增访问与最低版本

不新增任何 agentAccess / toolAccess / deviceAccess / hostAccess。host.ui.subscribe 沿用 0.6.0 引入的能力检测,无需新权限;旧客户端不报告语言时跟随 navigator.language。支持基线仍是 MiniMax Code 3.1.6。

Written by Claude Opus 5.5

实现要点:

  • preferences.mjs 新增 noticeTimeout(0–3600 整数,默认 10)和 language(auto | zh-Hans | en,默认 auto)。preferences-store.mjs 读取时合并默认值,旧的 preferences.json 不会因为缺 key 而失效。
  • 卡片回收是页面级计时(noticeShownAt / visibleNotices / noticeRemaining),从不调用 reminders.dismiss()。暂停时把每个 shownAt 按暂停时长前移,恢复后剩余时间准确。
  • i18n.mjs:key 形如 domain.context.name,插值 {{var}},缺 key 回退到 key 本身而不是空白。英文文案照 packages/ui/src/i18n/locales/en.json 的实际用词与 .harness/docs/ui-standards.md 的规范写。
  • applyLanguage() 同时重写 data-i18n / data-i18n-attr 与分段控件、紧凑视图这些运行时生成的文案;preferencesReady 保证首屏等偏好读完再画。
  • 新增 dev/i18n.test.mjs:key 覆盖、两语言 key 一致且非空、插值占位符一致、语言解析、监听器释放。

Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.

dazhi added 5 commits November 12, 2026 20:34
- 详情区拆成固定头部、唯一滚动区、固定底部:标题与「返回任务 / 打开对话」不再随内容滚动或溢出卡片。
- 标题改为弹性单行截断(inline 的 strong 之前拿不到 ellipsis,两行标题会把内容区顶下去)。
- 卡片最大高度改用窗口可用空间,展开卡片时回复区真正变高,不再被压成一行。
- 0.8.0 版本号 → 0.8.1,README(中英)补充说明,补一项回归测试。
桌面通知卡片默认显示 10 秒后自动收起,设置页用数字框调整,填 0 表示一直
显示。收起只隐藏卡片,不会把任务标记为已读;需要你回答的卡片不会自动收起,
鼠标悬停或焦点停留时暂停计时。

界面文案全部收进 i18n.mjs,支持简体中文和英文,默认跟随 MiniMax Code 的
界面语言(host.ui.subscribe),也可在设置页固定。对话标题和回复保持原文。
左键点击桌宠时,desiredAnimation 因为 workbenchOpen 变成 true 而立刻放弃
悬停动画,animationGate 从第 0 帧重播基础行,看上去就是闪一下。卡片打开
不再打断悬停动画,菜单仍然会让宠物回到基础动画。

clickThrough 之前把 workbenchOpen 当成整窗可交互,而展开窗口是 300×488、
卡片只有 284×147,卡片上方和两侧的透明区域因此挡住点击。现在只按实际
覆盖的像素判定,拖拽和菜单仍可占用整窗;用键盘打开卡片(尚无指针采样)
时保持可点击。
窗口以右下角为锚点,展开尺寸是 300×488 而紧凑是 280×340,于是窗口左边缘
左移 10px,居中的桌宠在屏幕上跟着平移,收起时再弹回去——用户看到的就是
点一下闪一下。展开宽度改为与紧凑一致的 280,只增高,桌宠屏幕坐标不变。

同时处理 #129 的两条评论:
- package-lock.json 里 cssstyle 依赖的 rrweb-cssom 版本改回 0.8.0,
  与 resolved/integrity 指向的包一致;
- .desk 回退为 overflow: hidden,原先那行 overflow: visible 与注释
  并不成立,因为 html.mode-window body 本身就是 overflow: hidden。
上一版把展开宽度改回 280,横向位移没了,但仍然会闪。用户实测后确认是
"往左和往上"两个方向。用模拟 Host 逐帧量过:窗口 340 高变 520 高时,桌宠
到底边的距离一直是 4px,页面内没有跳动——所以位移来自原生窗口本身被移动
的那一刻。窗口以右下角为锚点增高,原点上移 180px,内容若晚一帧重排,旧
布局就画在新原点,整幅上跳。

现在窗口只有一个尺寸(280 x deskHeight(scale)),本来就放得下展开的卡片:
点开和关闭卡片只切 DOM,不碰窗口几何。桌宠上方的透明区域会穿透点击,所以
常驻的高度不会挡住桌面。

- 删除 workbench-window.mjs 及其测试:不再有任何展开/收起的窗口尺寸切换;
- 改缩放大小时按右下角锚点同时更新宽高,桌宠保持原位;
- 存档位置仍按 280x340 参考窗口记录,旧存档继续可用;
- 测试改为断言 openWorkbench / closeWorkbench 不触碰几何,并检查三个缩放档位
  的固定高度都放得下卡片。
@MyPrototypeWhat
MyPrototypeWhat merged commit 8dac326 into main Nov 13, 2026
1 check passed
July-X pushed a commit to July-X/MiniMax-Code-MiniApps that referenced this pull request Nov 13, 2026
MiniMax-AI#131 合入后 0.9.0 的 pet-app.js 仍在用 screenX 算拖拽目标。桌宠页面跑在宿主的
webview 里,那里的 screenX 是相对 webview 自己的坐标,不是屏幕绝对坐标。旧公式
把窗口内的指针偏移又加回抓取时的窗口原点,形成"窗口跟随指针 → 窗口内位移回缩 →
目标回弹 → 窗口前冲"的振荡环,窗口就在抓取点附近无限往返,宿主旧构建的日志里是
1580 与 1700 交替。每帧 pointermove 都发 win.update,宿主窗口 IPC 一直不空,模式
切换撞上正在切换或重建页面的 tab 就被判 busy。

改成用宿主当前的窗口原点加指针在窗口内的位移算目标位置。目标与原点相同就不再发
win.update,按住不动时一个更新都不发,反馈环没有起点;宿主拒绝移动时把原点回滚
到上一个宿主接受的位置,从那里继续。跑动方向的动画改用同一个目标位置,窗口内
坐标抖动不再让方向来回翻。宿主没有报出窗口位置时仍按指针位移播放跑动动画,只是
窗口不动。

本分支原先基于 0.8.0,与 MiniMax-AI#131(0.9.0)冲突,已重放到 0.9.0 之上:版本 0.9.0 →
0.9.1,两个 README 补 0.9.1 说明。新增 dev/window-drag.test.mjs,8 条断言覆盖按住
不动、跟随指针、被拒后继续、方向动画与激活阈值。

门禁读数:仓库根 npm run check 92/92 通过;包内 npm test 268 项中 267 项通过,1 项
失败是 dev/pet-art-validation.test.mjs 在 Windows 上把 file:// URL 直接交给
execFile 导致的路径拼接问题,涉及文件本次未改动,与本改动无关;npm run
check:package 显示 41 个文件与源码构建逐字节一致。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant