Repository navigation
feat(minimax-pet): 0.9.0 桌面卡片自动收起与中英文界面 - #131
Merged
Merged
Conversation
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 不触碰几何,并检查三个缩放档位 的固定高度都放得下卡片。
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 个文件与源码构建逐字节一致。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
桌面通知卡片现在默认显示 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。测试环境与结果
npm test260 通过(新增dev/i18n.test.mjs,其中一条会扫描页面实际用到的 key,缺任何一种语言即失败;dev/desk-interactivity.test.mjs覆盖点击穿透与卡片不动窗口)。npm run test:smoke70/70。npm run check下plugins/minimax-ai/minimax-pet: OK;npm run check:package报告 41 个文件字节一致。lang=zh-Hans和lang=en走了一遍面板两个页签、桌面通知卡片、右键菜单和紧凑任务卡,两边控制台均无报错;桌面卡片在 10 秒后确实收起,需要回答的卡片保留。浏览器检查发现、单测没覆盖的问题(均已修)
opt.label,而选项已改成key,桌面大小和语言两行渲染成空胶囊。(unsupported) .的多余空格。data-i18n。另外,之前一次
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)。未验证
已由维护者在真实客户端确认:点开/关闭桌面卡片不再闪烁(此前是"往左和往上"跳一下)。
新增访问与最低版本
不新增任何
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 一致且非空、插值占位符一致、语言解析、监听器释放。Open in [code]smith · Need help on this PR? Tag
@codesmith-botwith what you need.