---
title: "任务数据流 WebSocket"
method: GET
path: "/api/v1/users/tasks/stream"
tags: ["【用户】任务管理"]
---

# 任务数据流 WebSocket

`GET /api/v1/users/tasks/stream`

功能定位：该接口通过 WebSocket 转发任务运行数据。任务对话继续输入使用 `type=user-input`。
数据格式约定：当前仅支持文本帧透传。服务端将 Agent 的原始文本数据包装为如下结构返回给前端（对应 domain.TaskStream）：
```json
{ "type": "string", "data": "string", "kind": "string", "timestamp": 0 }
```
user-input 上行新格式：
```json
{ "type": "user-input", "data": "{\"content\":\"57un57ut5aSE55CG6L+Z5Liq6Zeu6aKY\",\"attachments\":[{\"url\":\"https://example-bucket.oss-cn-hangzhou.aliyuncs.com/temp/a.txt\",\"filename\":\"a.txt\"}]}" }
```
user-input 上行旧格式仍兼容：
```json
{ "type": "user-input", "data": "继续处理这个问题" }
```
user-input 下行和历史返回统一使用新 JSON payload 字符串：
```json
{ "type": "user-input", "data": "{\"content\":\"57un57ut5aSE55CG6L+Z5Liq6Zeu6aKY\",\"attachments\":[]}", "timestamp": 0 }
```
`attachments` 为可选附件列表，最多 10 个；每项包含 `url` 和 `filename`，URL 需要匹配后端配置的附件白名单前缀。
type 字段说明：
- task-started: 本轮任务启动
- task-ended: 本轮任务结束
- task-error: 本轮任务发生错误
- task-running: 任务正在运行
- task-event: 任务临时事件, 不持久化
- file-change: 文件变动事件
- permission-resp: 用户的权限响应
- auto-approve: 开启自动批准
- disable-auto-approve: 关闭自动批准
- user-input: 用户输入
- user-cancel: 取消当前操作，不会终止任务
- reply-question: 回复 AI 的提问
- cursor: 历史游标，用于通过 /rounds 接口加载更早的轮次

cursor 消息结构：
```json
{ "type": "cursor", "data": { "cursor": "<nextCursor>", "has_more": true }, "timestamp": 0 }
```
- cursor: 当前分页游标，作为 GET /rounds 接口的 cursor 参数向前翻页
- has_more: 是否存在更早的轮次。为 false 时表示当前轮次即为第一轮，无需再翻页

## Query parameters

- `id` string, required
- `mode` string

## Response `200`

成功

- WebResp
  - `code` integer
  - `data` unknown
  - `message` string

## Other responses

- `500` — 服务器内部错误

---

[API](https://skmtc.net/chaitin/apis/untitled-api.md) · [All operations](https://skmtc.net/chaitin/apis/untitled-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/chaitin/untitled-api/versions/5a5929cb17f2/schema)
