> ## Documentation Index
> Fetch the complete documentation index at: https://openclaw.zhcndoc.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 菜单栏

## 显示内容

* 当前代理工作状态会显示在菜单栏图标中以及菜单的第一行状态中。
* 当工作处于活动状态时，健康状态会被隐藏；当所有会话都处于空闲状态后，它会恢复显示。
* 根级“Context”项会打开一个子菜单，其中显示最近的会话，而不是在根菜单中展开它们。
* 根菜单中的“Nodes”区块只列出已配对的**设备**（来自 `node.list`），不包含客户端/存在状态条目。
* 当提供程序使用情况快照可用时，根菜单中会在 Context 下方显示根级“Usage”部分；若有成本详情，则其后显示成本详情。
* 当有两个或更多 Gateway 可用时，第一行状态会包含主 Gateway 的名称，并且根级“Gateways”部分会列出每个 Gateway 及其健康状态和主标记。选择某一行可打开或聚焦该 Gateway 的仪表盘；按住 Option 可为符合条件的已保存 Gateway 显示“设为主 Gateway…”
* **Quick Chat** 会打开浮动的主会话撰写器；其当前全局快捷键会显示在该项旁边。

单 Gateway 配置会保持现有菜单不变。当有两个或更多 Gateway 时，应用的主 **Gateways** 菜单还会按目录顺序分配 Command-1 到 Command-9。其勾选标记会跟随最前面的仪表盘窗口，选择某个项目会在原窗口中切换到该窗口，或者在没有仪表盘窗口时打开所选的 Gateway。

## 状态模型

* 来源：`WorkActivityStore`（`apps/macos/Sources/OpenClaw/WorkActivityStore.swift`）。
* 事件作为带有 `runId` 的 `ControlAgentEvent` 到达；处理器（`ControlChannel.routeWorkActivity`）从事件负载中读取 `sessionKey`，如果没有则默认使用 `"main"`。
* 优先级：主会话（默认 `sessionKey == "main"`）始终优先。如果主会话处于活动状态，会立即显示其状态。如果主会话处于空闲状态，则改为显示最近活跃的非主会话。存储不会在活动过程中切换；它只会在当前会话变为空闲或主会话变为活动时切换。
* 活动类型：
  * `job`：高层命令执行（`state: started|streaming|done|error|...`）。
  * `tool`：`phase: start|result`，包含 `name`，以及可选的 `meta`/`args`。

## IconState 枚举（Swift）

* `idle`
* `workingMain(ActivityKind)`
* `workingOther(ActivityKind)`
* `overridden(ActivityKind)`（调试覆盖）

### ActivityKind -> 徽标符号

`ActivityKind` 封装了一个 `ToolKind`（`bash`、`read`、`write`、`edit`、`attach`、`other`）或一个裸 `job`。每种都会映射为绘制在小动物图标上的一个 SF Symbol 徽标（`IconState.badgeSymbolName`）：

| Kind            | Symbol                             |
| --------------- | ---------------------------------- |
| `bash`          | `chevron.left.slash.chevron.right` |
| `read`          | `doc`                              |
| `write`         | `pencil`                           |
| `edit`          | `pencil.tip`                       |
| `attach`        | `paperclip`                        |
| `other` / `job` | `gearshape.fill`                   |

### 视觉映射

* `idle`：普通小动物，无徽标。
* `workingMain`：带符号的徽标，完整色调（`.primary` prominence），腿部“工作中”动画。
* `workingOther`：带符号的徽标，弱化色调（`.secondary` prominence），不奔跑。
* `overridden`：无论真实活动如何，都使用所选符号/色调。

## Context 子菜单

* 根菜单显示一行“Context”，带有会话数量/状态；点击后会打开一个子菜单（`MenuSessionsInjector`）。
* 子菜单标题显示过去 24 小时内的活跃会话数量。
* 每个会话行都保留其 token 条、时长、预览、thinking/verbose 切换、重置、压缩和删除操作。
* 加载中、断开连接以及会话加载错误消息会显示在 Context 子菜单内。
* Usage 和 cost 部分仍然保留在 Context 下方的根级别，这样无需打开子菜单也能一眼查看。

## 状态行文本（菜单）

* 当有两个或更多网关时，连接标签会附加主网关的目录显示名称，例如 `OpenClaw Active — Mac Studio`。
* 在工作进行时：`<Session role> · <activity label>`（在 `MenuContentView` 中为 `"\(roleLabel) · \(activity.label)"`），其中角色标签为 `Main` 或 `Other`。
* 在空闲时：回退为健康摘要。

## 事件接入

* 来源：control-channel 的 `agent` 事件，通过 `ControlChannel.routeWorkActivity(from:)` 路由。
* 解析字段：
  * `stream: "job"`，使用 `data.state` 表示开始/停止。
  * `stream: "tool"`，使用 `data.phase`、`data.name`，以及可选的 `data.meta`/`data.args`。
* 工具标签来自 `ToolDisplayRegistry.resolve(name:args:meta:)`；无法解析的名称将回退为原始工具名。

## 调试覆盖

* 设置 > 调试 > “图标覆盖” 选择器：
  * `系统（自动）`（默认）
  * `工作中：main` / `工作中：other`（按工具类型：bash、read、write、edit、other）
  * `空闲`
* 存储在 `UserDefaults` 键 `openclaw.iconOverride` 下；映射到 `IconState.overridden`。

## 测试清单

* 触发主会话任务：图标立即切换，状态行显示主标签。
* 在主会话空闲时触发非主会话任务：图标/状态显示非主会话；在其完成前保持稳定。
* 当另一个会话处于活动状态时启动主会话：图标会立即切换到主会话。
* 快速工具突发：徽标不会闪烁（在清除已完成工具前有 2 秒宽限窗口，`WorkActivityStore.toolResultGrace`）。
* 当所有会话都空闲后，健康状态行会重新出现。

## 相关

* [macOS 应用](/platforms/macos)
* [菜单栏图标](/platforms/macos/icon)
