Skip to content

Task Open(对话里开任务 / 看任务) ​

平台助手 platform-assistant 的两个工具:把直聊开成任务(open_task)、 读用户自己的任务清单(list_tasks)。数据模型见 数据模型 §6。


两个 agent 的分工 ​

platform-assistant(助手)platform-demand-intake(受理器)
谁看得见用户默认入口(侧栏第一条)只在任务对话里回复
会话类型kind=relationkind=task
工具open_task / list_tasksbuild_plan / submit_request / submit_input_fact
目的回答问题、介绍平台、把需求开成任务把需求收敛成结构化输入并出计划

两者不是同一个 agent 的两个名字:一个既要"可以只聊天"又要"替用户开工", 提示词与工具白名单只能互相妥协。分开之后边界是结构性的,不靠 prompt 自律。


open_task ​

open_task({ title, description })
  → { ok, status: 'created' | 'already_created', taskId, title }
闸门规则
通道只在 metadata.channel === 'dialogue'
身份owner 面不可用(维护 agent 的人不能替客户开任务)
agent只属于 platform-assistant
任务上下文必须没有 taskId:已有任务时该走受理器的 build_plan
幂等一轮只开一个(metadata.taskCreated),重复调用返回同一个 taskId

产物:tasks 文档(dialogId=null,status=created,metadata.createdFrom='assistant-dialogue'

  • openedFromSessionId)+ 一条 task.created 日志(actor=agent,幂等键 task.created:<taskId>)。turn 结果额外带 taskCreated,前端据此刷新任务列表并跳到新任务。

list_tasks ​

list_tasks({ limit?: 1-20, status?: string })
  → { ok, count, tasks: [{ taskId, title, status, createdAt }], hint }
  • 只读:不建、不改、不推进任何任务;
  • 只属于平台助手,且只在对话通道可用;
  • 只能读自己的任务:userId 来自服务端会话 metadata,模型无法指定别人的;
  • 读失败只降级(返回 list_failed),不让整轮对话失败。

存在理由:用户进来问的第一类问题往往不是"帮我做事",而是"我上次那个还在跑吗"。 没有这个工具,助手只能含糊其辞,用户就得自己去翻侧栏 —— 那它就只是个聊天窗口。


不变量 ​

  1. tasks.dialogId 允许为 null(没有 legacy Dialog),任务对话走 agent_dialogues;
  2. 日志写失败只降级:任务已建出来,不因为少一条审计把整轮对话判失败;
  3. 模块只依赖 TaskStoreModule / JournalModule 两个叶子模块 —— TaskModule 已经 import AgentGatewayModule(主动播报要用对话服务), 反向依赖会成环。

代码落点 ​

位置说明
libs/modules/src/task-open/open-task.tool.ts开任务工具与四道闸
libs/modules/src/task-open/list-tasks.tool.ts只读的任务清单
libs/modules/src/task-open/services/task-open.service.ts建任务 + 写 task.created
libs/modules/src/agent-gateway/services/agent-dialogue.service.tscanOpenTask / canListTasks 装配 + turn 结果 taskCreated
frontend/src/pages/workspace/index.tsx收到 taskCreated → 重拉列表并跳转;助手视图 URL 保持 /workspace

测试证据 ​

bash
npx jest libs/modules/src/task-open          # 开任务 + 清单(20 例:闸门/幂等/文档形态/降级)
npx jest libs/modules/src/agent-gateway/services/agent-dialogue.service.spec.ts
                                             # 助手挂 open_task+list_tasks;受理器只挂 build_plan

已知边界 ​

  • 任务从直聊开出来后,任务会话是空的:需求正文在 description 与 task.created 日志里。刻意不做消息搬运——同一句话不该在两条会话里各出现一次;
  • open_task 只建任务,不建计划。计划要等用户在任务里(或对话里)触发 build_plan,走既有 prepare 链路;
  • list_tasks 只回状态,不解释原因:为什么卡住要看任务的发展日志(task_journal)。

Released under the MIT License.