工单

管理工单

在 Mopheus 中创建、组织和跟踪工单——涵盖状态流转、优先级、子工单、依赖、标签、评论以及 CLI 参考。

管理工单

工单是 Mopheus 中工作的最小单位。每个数据库巡检任务、性能优化需求、备份恢复操作或故障排查都是一张工单。工单按工作区隔离,可以被分组到项目中。

创建工单

在工单视图右上角点击 新建工单,唯一必填项是标题。填写描述、设置优先级、关联项目、添加标签,然后点击 创建

使用 时间 选择器可以暂存计划开始时间和截止时间,再一次性应用两项修改。两者都包含日期、时间和时区;同时设置时,截止时间必须晚于开始时间。创建后也可在工单详情面板中修改。

设置计划开始时间后,工单会保持在「待规划(Backlog)」直到指定时刻,再转为「待办(Todo)」并派发给所选智能体或团队 Leader。开始时间必须至少晚于当前时间一分钟。如果到期时智能体已经没有在线 Runtime,Mopheus 仍会把工单转为待办,在系统评论中记录失败,并且不会自动重试,避免任务在原定运维窗口之外延迟执行。

非终态工单达到截止时间时,Mopheus 会向创建该工单的成员发送一次 Inbox 提醒。若工单由智能体创建,则在其当前 Owner 仍是工作区成员时提醒该 Owner。终态工单不会产生提醒。

状态流转

状态不是一条固定的线性流程。团队可以按实际情况切换状态;下图展示的是推荐的交付闭环和常见的回退路径。

状态含义
待规划(Backlog)已记录但尚未排期。
待办(Todo)已明确范围、负责人和预期结果,可以开始处理。新建工单的默认状态;分配给智能体时会自动创建智能体任务。
进行中(In Progress)有成员或智能体正在执行,或已经开始处理但尚未形成可确认的结果。
审核中(In Review)已有可交付结果,但还需要成员确认验收标准、结果质量、外部影响或下一步决策。智能体运行完成后,若其输出需要人工判断,应将工单转入此状态,而不是直接视为完成。
已完成(Done)验收标准已经满足,结果已被确认,不再需要后续动作。可从「进行中」直接进入,例如结果已由负责人确认;也可由「审核中」确认后进入。
阻塞(Blocked)因依赖、权限、环境故障、缺失信息或等待外部反馈而无法推进。请在评论中记录阻塞原因和解除条件。
已取消(Cancelled)决定不再做。保留用于追溯。
已归档(Archived)已归档,默认视图不显示。用于长期留存。

智能体执行与状态

在工单详情面板的状态选择器中可以直接切换状态。处于「待规划」「已取消」或「已归档」的工单不会自动派发智能体任务;需要自动执行时,应先将工单安排到可执行的状态(通常为「待办」或「进行中」)。

AgentTask 运行期间,可以在 transcript 指导输入框中追加待处理指示。点击「立即处理」会将某一条待处理指示标记为尽快投递,并在 provider 可安全接收的边界发送,不会打断正在执行的 tool call。投递前仍可撤回待处理指示。transcript 顶部的停止按钮会停止整个 AgentTask 及其运行中的工作。

批量更新状态

在工单列表视图中勾选多个工单后,屏幕底部会自动浮现批量操作栏。点击 修改状态 可以一次性将选中的所有工单批量推进或调整到目标状态(例如「已完成」「进行中」或「待办」)。若某张工单存在未完成的强制前置依赖,系统会自动校验并拦截,确保状态流转符合依赖约束。

优先级

优先级适用场景
低(Low)可有可无;有空再做。
普通(Normal)多数工作的默认值。
高(High)本周期内必须完成。
紧急(Urgent)抛下其他事;值班响应级别。

未设置优先级等价于 普通

附加字段

除标题、状态和优先级之外,工单还支持以下字段:

字段说明
开始时间分配给智能体或团队的待规划工单可设置一次性激活时间。
截止日期可选的截止时间;工单届时仍未结束会向创建者发送一次 Inbox 提醒。
验收标准可选的条件清单,标记工单为已完成前需逐项满足。支持 Markdown。
元数据可选的 JSON 键值存储(最多 50 个键,总计 8 KB)。适合集成和智能体挂载结构化数据,而不污染描述字段。

在工单详情面板中编辑这些字段。

子工单

工单可以拥有子工单。子工单本身是完整的工单——有自己的状态、优先级、负责人和评论——但会内联显示在父工单的详情面板里。关闭所有子工单不会自动关闭父工单,父工单的负责人决定整体何时收尾。

在父工单的 子工单 面板中创建。

当 AgentTask 使用 task token 将其绑定的子工单推进到 in_reviewdone 时,Mopheus 会为父工单记录一条待决唤醒,并在该 source AgentTask 进入最终状态后再考虑唤醒父工单负责人。如果本次运行已经通过父工单评论有效触发了同一负责人,待决唤醒会被抑制。本阶段成员手动修改状态不会自动唤醒父工单。

依赖

依赖表达「本工单需要等待另一张完成」。请克制使用,因为依赖往往会暴露真实的协调成本。被阻塞的工单会在列表中标记,并在你尝试开始一张仍有未完成依赖的工单时给出提示。

在工单详情面板的 依赖 区域添加或移除依赖关系。

标签

标签是工作区级的自由标记,适合那些不值得开一个项目、却需要跨工单聚合的概念(如 slow-querycapacity-riskchange-window)。

在工单详情面板或列表行的标签区域直接添加、编辑或移除标签。

评论与时间线

评论触发预检

评论输入框可以显示本条评论可能唤醒的智能体只读快照。评论发送并持久化后 会重新计算路由,因此负责人、运行时、权限或队列状态变化时,预检中的待处理 提示最终变为 queuedcoalesceddeferredblocked 都是正常竞态。 输入框中的跳过选项只影响本条评论,不会修改智能体、工单或团队配置。

每张工单都有一条时间线,混合显示用户评论、状态变更、智能体运行摘要和子工单事件。评论支持 Markdown,是记录进展、讨论方案和交接上下文的主要场所。

在工单详情面板底部的输入框中撰写并提交评论。支持拖拽上传附件。每条根评论和回复都支持直接复制分享链接(通过操作菜单中的「复制链接」或点击评论时间戳锚点 #comment-<id>);打开评论链接会自动展开父评论串、展开已解决折叠块并平滑滚动高亮目标评论。

Markdown 与预览

工单描述、评论和聊天消息使用同一套 Markdown 渲染。工单描述和评论可在富文本和 Markdown 两种模式间切换;Agent、团队和自动任务的指令编辑器也提供相同的源码模式。富文本模式中的任务列表可直接勾选完成。Mermaid 图表可在支持缩放和拖拽的查看器中打开,并下载为 SVG。使用 ==高亮文本== 创建行内高亮。#42 或工作区前缀形式(例如 TSK-42)在目标工单存在时会保存为可点击的工单链接;代码中的引用保持原样。

GFM 任务列表会展示勾选状态,但为只读,不会修改原内容。源码附件使用语法高亮预览,PDF 附件在应用内分页预览。Markdown 附件以富文本渲染(支持代码高亮、Mermaid 图表和表格),可通过下载按钮旁的切换按钮在可视化视图与源码之间切换;HTML 附件以沙箱页面渲染,CSV 附件以表格渲染并支持同样的源码切换。文本和源码附件最多预览 20 MB,超过此大小的文件仍可下载。

交互式决策组件(Ticket Widgets)

[!NOTE] 实验性能力与功能开关: 交互式决策组件(Ticket Widgets)目前作为实验性能力提供,由系统级与工作区级功能开关 widget(Feature Flag)管控。

  • 默认状态:系统默认开启(enabled)。工作区管理员可在 工作区设置 → 功能管理 中单独关闭此能力(选择「强制关闭」)。系统管理员亦可在平台管理端统一管控。
  • 关闭降级:当功能关闭时,智能体将不再输出组件指令,工单内的 widget 代码块将自动降级显示为标准 JSON 语法高亮代码块,底部提交工具栏和个人设置中的主题偏好亦会同步隐藏。

智能体(Agent)可以在工单正文或评论中通过 widget 代码块(```widget ... ```)输出结构化的 JSON 规范,渲染为可交互的卡片组件。成员可以直接在 Web 界面中直观选择方案或审批操作,无需手动输入非结构化文本回复。

支持的组件类型

  • 单选组件(single_select:从多个候选方案中选择唯一一项(例如:技术方案选型或备份恢复目标)。
  • 多选组件(multi_select:支持选择多项,并可通过 minmax 配置约束最小和最大选择项数(例如:选择需要执行灰度升级的目标节点列表)。
  • 二次确认组件(confirm_action:用于高危生产操作的审批确认或拒绝,支持填写操作理由(例如:生产数据库 DDL 变更或主从切换放行)。

组件定义示例

```widget
{
  "v": "1",
  "id": "w_failover_choice",
  "type": "single-select",
  "label": "选择主从切换目标节点",
  "props": {
    "options": [
      { "value": "node-db-02", "label": "Node DB-02 (可用区 A)", "description": "复制延迟: 0ms,NVMe 存储", "intent": "positive" },
      { "value": "node-db-03", "label": "Node DB-03 (可用区 B)", "description": "复制延迟: 12ms,HDD 存储" }
    ],
    "default": "node-db-02"
  }
}
```

交互与提交机制

  • 交互选择与批量提交:在工单中勾选或选择决策项后,屏幕底部会浮出吸顶式的提交工具栏,汇总待提交的选择数量;点击「提交选择」即可完成决策并持久化。
  • 结构化回执评论:提交成功后,系统会自动在工单时间线上发表一条回执评论(包含已确认方案的概览表格与可折叠展开的 <details> 原始 JSON 数据),便于后续审计追踪。
  • 锁定与审计状态:完成决策或组件过期后,组件卡片进入只读锁定态,明确展示决策人头像、姓名、确认时间及选定内容。
  • 5 种专属视觉风格:成员可在 个人设置(Profile Settings)组件风格(Widget Theme) 中选择偏好的渲染外观:
    • 默认(Default):现代极简卡片与标准圆角设计。
    • 紧凑(Compact):紧凑运维风格,行距与边距紧凑,适合信息高密度场景。
    • 醒目(Vibrant):高对比度边框与鲜明状态徽标,强化视觉注意力。
    • 极客终端(Geek Mono):等宽字体排版、终端风格高亮与方括号选框([x])。
    • 温润工业(Warm Industrial):温暖中性灰底色、微倒角机加工边框与实体按键触感。
  • 安全降级:若组件 JSON 语法无效或存在未知字段,系统会自动优雅降级为提示卡片,并保留可一键复制的代码块。

长评论串

当一张工单有超过五个顶层评论串时,详情面板会在桌面端显示评论缩略导航和快速跳转轨道。点击其中一项可滚动到对应评论串,整张评论串卡片会短暂显示浅蓝色后淡出。时间线上方的全部展开和全部收起按钮可一次调整所有评论串。

在评论面板聚焦时使用 Ctrl+F(macOS 使用 Cmd+F)可在面板内查找评论。匹配内容会高亮,并可用上一个/下一个控制项逐条跳转。

任意评论(包括回复)都可以解决所在评论串。被标记解决的评论会显示「已解决」标识。解决顶层评论时,整条评论串会收起为摘要;解决某条回复时,会保留根评论和这条解决回复,其余回复收起,展开评论串后才能查看。清除解决状态后会恢复完整评论串。

质询与追问(Grill Me)

点击 追问(Grill Me) 按钮,可以唤醒智能体基于 grill-me 技能开展最多 10 轮自问自答式的深度推演与审查,并在识别风险的同时给出推荐方案。

  • 指定 Griller 智能体:若工作区中配置了开启 Griller 开关的专家智能体(例如架构质询专家、DBA 质询专家),点击追问按钮右侧的下拉箭头可直接选择指定的专业 Griller;直接点击主按钮则自动派发给默认或首选的 Griller 智能体。
  • 工单质询(Ticket Grill):位于工单详情页右上角主操作栏或工单列表右键菜单。以工单标题与正文描述为事实源,对整张工单的需求定义、技术选型、边界条件与潜在风险进行全局审查,审查报告以一级根评论发表在时间线上。
  • 评论质询(Comment Grill):位于评论卡片的操作区。以当前评论串为事实源,针对该局部方案或具体回复进行针对性审查,审查报告以回复(Reply)形式发表在当前评论串中。

从评论触发智能体

评论可以在不改变工单负责人的情况下唤醒智能体。顶层评论和回复评论走不同的路由规则。

顶层评论:

场景当前负责人评论内容触发谁干活
成员评论并提及另一位成员成员 / 智能体 / 团队 / 未分配@成员不触发智能体。只通知被提及成员。
成员评论并提及智能体任意负责人@智能体被提及的智能体获得一个针对当前工单和评论的任务。
成员评论并提及团队任意负责人@团队触发团队 Leader 智能体评估并按需分派。
成员评论但没有路由型提及智能体普通评论当前负责的智能体获得一个后续任务。
成员评论但没有路由型提及团队普通评论当前负责团队的 Leader 智能体被触发,评估并按需分派。
成员评论但没有路由型提及成员 / 未分配普通评论不触发智能体,只记录到时间线。
智能体在运行过程中发表评论任意负责人总结或进度评论不会因为智能体自己的输出额外触发下一轮,除非它显式提及另一个智能体或团队。
任意顶层评论以 /note 开头任意负责人/note ...不做智能体或团队路由,即使正文里包含智能体或团队提及。

回复已有评论:

场景当前负责人回复对象回复内容触发谁干活
成员回复智能体评论任意负责人智能体评论普通回复被回复的智能体获得一个后续任务。
成员回复并显式提及智能体任意负责人任意评论@智能体被提及的智能体获得任务;显式提及优先于回复对象路由。
成员回复并显式提及团队任意负责人任意评论@团队被提及团队的 Leader 智能体被触发。
成员回复成员发起的评论串智能体成员评论普通回复通常不触发智能体,除非负责人智能体已参与该评论串或被显式提及。
成员回复成员发起的评论串团队成员评论普通回复可作为团队协作信号触发团队 Leader;如果回复只是在 @成员,则不触发智能体。
回复中只提及成员任意负责人任意评论@成员不触发智能体。只通知被提及成员。
任意回复以 /note 开头任意负责人任意评论/note ...不做智能体或团队路由。

当评论或回复确实触发工作时,这条消息会成为本次运行的触发上下文:智能体会看到工单、此前讨论,以及唤醒它的具体消息。回复会继续绑定到所在评论串。如果没有兼容运行时在线,触发出的任务会保持排队,直到运行时连接。

在任务开始运行前,Mopheus 会合并同一智能体在同一工单上的兼容评论触发,避免短时间内产生重复运行:

  • 没有任何子评论的顶层评论会进入同一个待处理的根评论池,因此连续补充多个独立话题时,智能体会在一次运行中看到它们。
  • 成员在存在活跃任务的评论串内追加回复时仍会触发派发。该任务已运行时,回复会创建排队后继任务;后续回复会在后继任务保持 pending 期间合并到它。
  • 根评论池中的任一根评论收到第一条子评论后,该池会绑定并封口到这个评论串。之后新发的顶层评论会开始新的待处理池,不会混入已形成对话的评论串;该评论串中的后续回复仍会继续合并。
  • 合并任务会保留其中最高的优先级,普通补充不会降低已排队任务的优先级。
  • 任务开始运行后,提示词快照不再改写。后续评论会创建后继任务,并在同一智能体和工单范围内按顺序认领。

筛选与搜索

工单列表支持按状态、优先级、负责人、标签、创建时间等条件筛选,也支持全文搜索标题和描述。筛选条件会按用户和工作区保存,并在刷新或切换工单列表页面后恢复;创建时间筛选仍会保留在 URL 中,便于向团队成员分享指定时间范围的视图。

工单默认按创建时间降序排列,最新工作优先显示。打开 排序 菜单后,可按优先级、开始日期、截止日期、创建时间、更新时间或标题排序;再次选择当前排序项即可切换升降序,排序字段和方向会在刷新后继续保留。

命令行参考

以下命令供熟悉 CLI 的用户快速操作:

# 创建工单
mopheus ticket create \
  --title "修复 Payment Webhook 测试偶发失败" \
  --description "CI 上大约 10% 概率失败" \
  --priority high

# 定时开始工单;批量排期时按不同时间重复执行该命令
mopheus ticket create \
  --title "午夜升级数据库" \
  --status backlog \
  --agent-id <智能体-id> \
  --activate-at "2026-12-31T16:00:00Z"

# 清除计划开始时间
mopheus ticket update <工单-id> --activate-at ""

# 修改状态(使用 snake_case:in_progress、in_review)
mopheus ticket status <ticket-id> in_progress

# 批量更新工单状态(支持逗号分隔的工单 ID 或 UUID 列表)
mopheus ticket batch-update --ids <id1,id2,id3> --status done

# 创建子工单
mopheus ticket create --title "子工单示例" --parent-id <父工单-id>

# 更新工单
mopheus ticket update <ticket-id> --title "新标题" --priority urgent

# 分配(成员 / 智能体 / 团队 / 清空)
mopheus ticket assign <ticket-id> --user-id <user-id>
mopheus ticket assign <ticket-id> --agent-id <agent-id>
mopheus ticket assign <ticket-id> --team-id <team-id>
mopheus ticket assign <ticket-id> --unassign

# 管理依赖
mopheus ticket dependency add <ticket-id> <depends-on-ticket-id>
mopheus ticket dependency list <ticket-id>
mopheus ticket dependency remove <dependency-id>

# 管理标签(单次传入一个标签名或 UUID;要添加多个请重复执行命令)
mopheus ticket label add <ticket-id> bug
mopheus ticket label list <ticket-id>
mopheus ticket label remove <ticket-id> urgent

# 工单元数据(结构化键值存储)
mopheus ticket metadata list <ticket-id>
mopheus ticket metadata get <ticket-id> --key <key>
mopheus ticket metadata set <ticket-id> --key <key> --value <value>
mopheus ticket metadata delete <ticket-id> --key <key>

# 关注者
mopheus ticket subscriber list <ticket-id>
mopheus ticket subscriber add <ticket-id> --user-id <user-id>
mopheus ticket subscriber remove <ticket-id> --user-id <user-id>

# 评论(正文通过 --content 传入)
mopheus ticket comment add <ticket-id> --content "PR 已提交:github.com/acme/payments/pull/482"
mopheus ticket comment list <ticket-id>
mopheus ticket comment update <comment-id> --content "更新后的内容"
mopheus ticket comment delete <comment-id>

# 评论追问质询(对指定评论发起 Grill Me,可选指定 Griller 智能体)
mopheus ticket comment grill <comment-id>
mopheus ticket comment grill <comment-id> --agent-id <griller-id>

# 工单追问质询(对整张工单发起 Grill Me,可选指定 Griller 智能体)
mopheus ticket grill <ticket-id>
mopheus ticket grill <ticket-id> --agent-id <griller-id>

# 创建工单或添加评论时附加文件
mopheus ticket create --title "日志" --attachment ./logs.tar.gz
mopheus ticket comment add <ticket-id> --content "见附件" --attachment ./screenshot.png

# 筛选与查看
mopheus ticket list --status in_progress --priority high
mopheus ticket list --search "payment retry" --status todo
mopheus ticket search "webhook"
mopheus ticket get <ticket-id>

# 取消工单
mopheus ticket cancel <ticket-id>

# 重跑或取消智能体任务(传入的是 agent-task id,不是工单 id)
mopheus ticket rerun <agent-task-id>
mopheus ticket cancel-agent-task <agent-task-id>
mopheus ticket run-messages <agent-task-id>

mopheus ticket list --search <关键词> 会搜索工单标题和描述;可与 --status--priority--project 等列表筛选条件组合使用,以缩小结果范围。

ticket create / ticket update 的常用参数:

运行记录详情中的交互输入仅对运行中的 AgentTask 展示。权限按任务触发者/任务 owner、工作区 owner 和 RBAC 顺序判断;消息按序进入 daemon 队列,撤回只允许尚未开始投递的本人消息或具备管理权限的 owner。状态变化由 WebSocket 实时刷新。WebSocket 只用于唤醒调度器;daemon 重连或重试后会从服务端恢复待处理消息,仍有未投递交互时任务完成会被延后。

参数说明
--title创建时必填。简短的标题。
--description详细描述,支持 Markdown。
--priority优先级名称:lownormalhighurgent
--status初始状态。默认为 todo
--project关联项目的 UUID。
--parent-id父工单 UUID(用于创建子工单)。
--assignee-id负责人 UUID(成员、智能体或团队)。需配合 --assignee-type0=成员、1=智能体、3=团队),或对智能体直接使用 --agent-id 简写。
--due-date截止日期,RFC3339 格式(如 2026-12-31T00:00:00Z)。
--attachment要上传并附加的文件路径。可重复传入。