菜单栏图标状态
Scope: macOS app (apps/macos). Rendering: CritterIconRenderer.makeIcon(...). Animation/state wiring: CritterStatusLabel + CritterStatusLabel+Behavior.swift.
状态
当会话有活动任务或工具时,可以在同一个小生物图标上方渲染一个工具活动徽标(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 秒),这样如果任务卡住,图标就能快速恢复到基线状态。