菜单栏图标状态¶
适用范围:macOS 应用(apps/macos)。渲染:CritterIconRenderer.makeIcon(...)。动画/状态连接:CritterStatusLabel + CritterStatusLabel+Behavior.swift。
Dock 图标¶
在 Mac 应用的仪表盘中,通过设置 → 本机 → Dock 图标选择 Dock 图标:
- Original(默认):纸片底衬上的原版 Molty 剪影。
- Heritage:旧版 README 中的龙虾,举起螯爪。
- Clawmark:粗壮、立体感强的龙虾螯钳。
- Origami:折叠出多个切面的 Molty。
- Pincer:单一螯钳剪影,腕部圆润流畅。
- Open C:圆形螯爪,带有两个相对的钳尖。
每种设计都有浅色和深色版本。 在 macOS 26 及更高版本中,Original 使用原生图标样式,包括系统设置 → 外观 → 图标与小组件样式中的设置。要自动切换,请在那里选择深色 → 自动;否则默认图标样式即使应用窗口为深色时也可能保持浅色。在较旧的 macOS 版本上,Original 会在应用运行期间跟随浅色/深色外观。
其他设计在 OpenClaw 运行期间跟随 macOS 的浅色/深色外观。
选择会按每个 OpenClaw 配置文件分别保存,并立即生效。 自定义设计会更改正在运行的应用的 Dock 图标;退出后,Finder 和 Dock 磁贴会使用随附的 Original 图标。菜单栏小动物及其动画是独立的。
Original 的源文件是 apps/macos/Icon.icon;其他矢量设计位于 apps/macos/AppIconDesigns。编辑后,使用 bash scripts/generate-mac-app-icons.sh 重新生成成对图标,并使用 bash scripts/generate-mac-app-icons.sh --check 验证。生成器负责自定义深色背景和单色前景颜色,Apple 的资源编译器提供 macOS 蒙版和内边距。打包时还会编译主要的 Icon Composer 文档以支持原生样式。
状态¶
| 状态 | 触发条件 | 视觉效果 |
|---|---|---|
| 空闲 | 默认 | 正常眨眼/摆动动画;睁眼时保持光泽高光 |
| 暂停 | isPaused=true |
触角下垂(“下班”状态),眼睛睁开;无动作 |
| 睡眠 | Gateway 已断开连接/未配置 | 触角下垂,眼睛闭合为 ⌣ ⌣ 眼睑;无动作 |
| 庆祝 | 消息已发送(sendCelebrationTick) |
眼睛闪现快乐的 ∩ ∩ 弧线约 0.9 秒,并踢一下腿 |
| 语音唤醒(大耳朵) | 听到唤醒词 | 触角竖直竖起并变高(earScale=1.9);静音后恢复 |
| 工作 | isWorking=true 或存在活动的 IconState |
腿部摆动加快(legWiggle 最高 1.0),并带轻微水平偏移;与空闲摆动叠加 |
当会话有活动作业或工具时,工具活动徽章(SF Symbol 图形,例如用于 exec 的 chevron.left.slash.chevron.right)可渲染在同一个宠物图标之上。该徽章来自 IconState/ActivityKind;完整状态模型见 菜单栏。
语音唤醒耳朵¶
- 触发:
AppStateStore.shared.triggerVoiceEars(ttl: nil),由语音唤醒采集管道(VoiceWakeRuntime)以及语音唤醒调试/测试工具(VoiceWakeTester、VoiceWakeOverlayController)调用。 - 停止:
stopVoiceEars(),在采集完成时调用。 - 结束前的静音窗口:通常为
2.0s;如果只听到触发词且之后没有后续语音,则为5.0s(VoiceWakeRuntime.silenceWindow/triggerOnlySilenceWindow)。 - 在增强期间,空闲的眨眼/摆动/腿部/耳朵计时器会被暂停(
earBoostActive在CritterStatusLabel+Behavior中作为动画任务的门控)。
形状与尺寸¶
- 画布:18x18pt 模板图像,渲染到 36x36px 位图后备存储(2x),确保图标在 Retina 上保持清晰。
- 耳朵缩放默认为
1.0;语音增强会将earScale设为1.9,且不会改变整体框架。 antennaDroop(0-1)将触角向下折叠,用于暂停和睡眠姿态。- 腿部疾走使用最高
1.0的legWiggle,并伴有轻微水平抖动。
行为说明¶
- 耳朵或工作状态没有外部 CLI/代理切换开关;两者均由应用内部信号驱动(
AppState.setWorking、AppState.triggerVoiceEars),以避免意外抖动。 - 任何新增 TTL 都应保持较短(远低于 10 秒),以便在作业挂起时图标能快速回到默认状态。
相关文档¶
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw