跳到主要内容

通知中心

通知中心将 Agent 的状态变更推送到你常用的通讯工具或设备,让你随时随地掌握项目进展。支持外部通知渠道和应用内通知两种方式。

外部通知渠道

飞书(Lark)

通过飞书 Bot 推送通知:

  1. 在飞书开放平台创建应用,获取 App ID 和 App Secret
  2. 在「Robot 账号」Tab 添加飞书账号(表单输入 name + appId + appSecret),或在项目设置中选择已有 Robot Account
  3. 在飞书客户端给 Bot 发送任意消息后,后端会记录 chat_idnotificationSettings.lark.chatIds,用于后续推送
  4. Agent 状态变更会自动推送到飞书会话(格式化为 message card)

企业微信(WeChat Work)

通过企业微信 Bot 推送通知:

  1. 在「Robot 账号」Tab 点击「添加微信账号」,QR 扫码登录后系统自动创建 Robot Account
  2. 在项目设置中选择该 Robot Account
  3. 在企业微信给 Bot 发送任意消息后,后端记录 userIds,用于后续推送
  4. 通知自动推送到企业微信

Native 通知

支持 Tauri 桌面客户端和浏览器的原生通知:

  • Tauri — 使用系统原生通知 API,支持 macOS、Windows、Linux
  • Browser — 使用 Web Notification API,需用户授权

Native 通知无需额外配置,开箱即用。

应用内通知

Agent Spaces 内置应用内通知系统,在工作空间内直接接收通知:

通知类型

应用内通知由后端 persistInAppNotification() 根据内部 WS 事件自动生成。当前支持的通知类型:

通知类型触发场景
issue_completedIssue 状态变更为 completed
issue_failedIssue 状态变更为 error
task_completedTask 状态变更为 done
task_failedTask 状态变更为 failed
channel_agent_completed频道 Agent 回复完成(仅当频道开启 notifyOnComplete 且执行成功)

通知操作

  • 在侧边栏通知图标查看未读通知数量
  • 点击打开通知中心对话框,查看所有通知
  • 标记单条通知为已读
  • 一键标记全部已读
  • 清空所有通知

WebSocket 推送

通知通过 WebSocket 实时推送:

  • notification.created — 新通知创建
  • notification.cleared — 通知被清空

通知内容

外部渠道通知事件由 WorkspaceNotificationSettings.events 配置,可选类型(NotificationEventKey):

  • issue_started — 议题开始执行
  • issue_completed — 议题完成
  • issue_task_completed — 议题下的 Task 完成
  • channel_agent_completed — 频道 Agent 回复完成(仅当频道开启 notifyOnComplete

内部 WS 事件会映射成外部通知事件(notification-hub/events.ts):

issue.status_changed -> issuse_status_change(兼容历史 typo)
task.status_changed running -> issue_task_start
task.status_changed done/failed/cancelled -> issue_task_done

为了避免刷屏,外部平台不会推送 task.outputagent.outputtool_call / tool_result 等中间输出,只接收状态类消息和 Task 最终结果。飞书格式化为 message card,内容包括 Event / Workspace / Issue / Task / Status / Message 以及 Task 结果摘要,不再附带 slash commands。

Bot 斜杠命令

在飞书或企业微信中与 Bot 对话时,以 / 开头的消息会被识别为内置命令,不会进入 Bot Agent。命令实现在 notification-hub/bot-commands.ts/help 返回的命令清单共 20 项(含 /workspac 别名和 /issue 子命令);实际有 15 个顶级命令分支,下表按用法展开列出:

命令说明
/workspace查看当前工作空间信息,支持 /workspace [id/name] 切换
/workspaces列出所有工作空间的简略信息
/workspac [id/name]切换到指定工作空间(/workspace 的切换别名)
/agents查看当前工作空间的 Agent 预设列表
/issues查看当前工作空间的所有议题
/issue查看当前议题详情(含标题、注释、状态、tasks、成员)
/issue [id/index]进入指定议题
/issue new [title] [desc]创建新议题
/issue start将当前议题切换为 planned 并触发自动化
/issue close将当前议题标记为失败/关闭
/issue [id/index] agent agent_id,agent_id,...设置议题成员
/task查看当前 Bot Agent 的任务
/comment [msg]在当前议题发表评论
/comments查看当前议题的评论
/markdown [on/off]切换 Bot 回复的 Markdown 渲染
/help查看所有可用命令

此外 Git 相关命令支持远程仓库操作:

命令说明
/changes查看当前 diff 文件列表
/commit [desc/auto]提交 commit;参数为 auto 时走 commit-agent 自动生成提交信息
/push推送到远程 Git
/pull从远程 Git 拉取

普通用户消息(非 / 开头)会交给 Bot Agent 处理。Bot Agent 支持自然语言对话,未配置时会回复「请先设置 agent」。需要维护会话上下文的命令(如 /workspac/issue [id]/task)会记住当前所在的工作空间、议题和 Agent 选择。

配置方式

通知配置在工作空间的「项目设置」面板中:

  1. 进入工作空间
  2. 打开项目设置
  3. 切换到「通知配置」标签
  4. 选择通知渠道并填写凭证
  5. 配置需要通知的事件类型
  6. 绑定 Bot Agent(用于处理外部消息)
  7. 保存配置

系统支持后端重启后自动恢复通知服务(通过 serviceRunning 配置项)。

Robot Account 凭证管理

Robot Account 是全局的 Bot 凭证(飞书 appId/appSecret 或企微 token/accountId),集中存储避免在每个工作空间中重复配置。类型定义在 RobotAccount,存储在 ~/.agent-spaces-data/robot-accounts.json

凭证管理入口

在全局 Settings 对话框的「Robot 账号」Tab 管理(components/sidebar/settings/robot-accounts-tab.tsx):

  • 添加飞书账号:表单输入 name + appId + appSecret
  • 添加企微账号:QR 扫码登录,自动创建账号
  • 编辑、删除已有账号
  • 每个 Robot Account 的 type'lark' | 'wechat'

工作空间引用

工作空间的通知设置(notification-settings-tab.tsx)中,飞书/企微 Tab 改为 select 下拉选择已有的 Robot Account,选择后调用 patchNotifications({ robotAccountId: account.id })。工作空间只引用 ID,不直接存储敏感信息。

企业微信 QR Code 登录

支持全局企业微信 QR Code 扫码登录(services/global-wechat-qr.ts,不绑定 workspace):

  1. 在「Robot 账号」Tab 点击「添加微信账号」
  2. 扫描二维码完成授权(轮询 POST /api/robot-accounts/wechat/qr/poll 获取扫码状态)
  3. 系统自动创建包含凭证的 Robot Account
  4. 工作空间可直接引用该凭证

凭证解析逻辑

resolveCredentials(settings)services/robot-account.ts 中按以下优先级返回凭证:

  1. settings.robotAccountId 存在,从 robot-accounts.json 查找对应账号返回凭证
  2. 否则 fallback 到 settings.lark / settings.wechat 内嵌凭证(兼容旧数据)

优势

  • 凭证隔离 — 敏感凭证集中存储,工作空间只引用 ID
  • 复用 — 多个工作空间可共享同一个 Robot Account
  • 安全 — 修改凭证只需更新一处,所有引用自动生效