OpenClawSkills
GitHub
平台 • 5 分钟阅读

菜单栏

菜单栏状态逻辑及向用户显示的内容

Tutorial.step

显示内容

- 我们在菜单栏图标和菜单的第一状态行中显示当前代理工作状态。

- 工作活动时隐藏健康状态;所有会话空闲时返回。

- 菜单中的 "Nodes" 块仅列出''设备''(通过 ''node.list'' 配对的节点),而不是客户端/在线条目。

- 当提供程序使用快照可用时,"Usage" 部分会出现在 Context 下。

Tutorial.step

状态模型

- 会话:事件随 ''runId''(每次运行)加上负载中的 ''sessionKey'' 到达。"main" 会话是键 ''main'';如果不存在,我们回退到最近更新的会话。

- 优先级:main 始终获胜。如果 main 处于活动状态,则立即显示其状态。如果 main 处于空闲状态,则显示最近活动的非 main 会话。我们在活动期间不会翻转;仅在当前会话变为空闲或 main 变为活动时才切换。

- 活动类型:

- ''job'':高级命令执行(''state: started|streaming|done|error'')。

- ''tool'':''phase: start|result'',带有 ''toolName'' 和 ''meta/args''。

Tutorial.step

IconState 枚举(Swift)

- ''idle''

- ''workingMain(ActivityKind)''

- ''workingOther(ActivityKind)''

- ''overridden(ActivityKind)''(调试覆盖)

Tutorial.step

ActivityKind → 字形

- ''exec'' → 💻

- ''read'' → 📄

- ''write'' → ✍️

- ''edit'' → 📝

- ''attach'' → 📎

- 默认 → 🛠️

Tutorial.step

视觉映射

- ''idle'':正常的小生物。

- ''workingMain'':带有字形、完整色调、腿部 "working" 动画的徽章。

- ''workingOther'':带有字形、静音色调、无急跑的徽章。

- ''overridden'':无论活动如何,都使用所选的字形/色调。

Tutorial.step

状态行文本(菜单)

- 工作活动时:''<Session role> · <activity label>''

- 示例:''Main · exec: pnpm test''、''Other · read: apps/macos/Sources/OpenClaw/AppState.swift''。

- 空闲时:回退到健康摘要。

Tutorial.step

事件摄入

- 源:控制通道 ''agent'' 事件(''ControlChannel.handleAgentEvent'')。

- 解析字段:

- ''stream: "job"'',带有用于开始/停止的 ''data.state''。

- ''stream: "tool"'',带有 ''data.phase''、''name''、可选的 ''meta''/''args''。

- 标签:

- ''exec'':''args.command'' 的第一行。

- ''read''/''write'':缩短的路径。

- ''edit'':路径加上从 ''meta''/diff 计数推断的更改类型。

- 回退:工具名称。

Tutorial.step

调试覆盖

- 设置 ▸ 调试 ▸ "Icon override" 选择器:

- ''System (auto)''(默认)

- ''Working: main''(按工具类型)

- ''Working: other''(按工具类型)

- ''Idle''

- 通过 ''@AppStorage("iconOverride")'' 存储;映射到 ''IconState.overridden''。

Tutorial.step

测试清单

- 触发主会话作业:验证图标立即切换,状态行显示主标签。

- 主空闲时触发非主会话作业:图标/状态显示非主;保持稳定直到完成。

- 其他活动时启动主:图标立即翻转到主。

- 快速工具爆发:确保徽章不会闪烁(工具结果的 TTL 宽限)。

- 所有会话空闲后,健康行重新出现。