# 分叉会话

`POST` `/api/session/fork`

对源会话进行深拷贝，创建一个独立的新会话副本。深拷贝范围包括消息、消息片段、上下文和附件（OSS独立副本），沙箱环境不会被复制。可通过forkPointMessageId指定分叉点，仅复制该消息及之前的已完成消息；不传则复制全部已完成消息。前置条件：源会话必须处于空闲状态（IDLE或ERROR），正在处理中的会话会拒绝分叉操作。身份说明：当您通过API访问本系统时，请求头中必须传递 X-Principal-Id 以标识操作主体；当您通过页面访问本系统时，无需传递。

## 请求参数

### 请求头参数

| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| X-Principal-Id | integer | 否 | 身份主体ID（Long类型）。通过API访问时必须传递以标识操作主体；通过页面访问时无需传递。可通过「身份主体」模块的创建接口获取。 |

### 请求体（JSON）

| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| sessionId | integer | 是 | 源会话ID，即需要分叉的原始会话 |
| forkPointMessageId | integer | 否 | 分叉点消息ID（可选）。指定后仅复制该消息及之前的已完成消息；不传则复制源会话全部已完成消息 |
| title | string | 否 | 新会话标题（可选）。不传则使用原标题加" - 副本"后缀 |

## 响应

### 200

| 参数名 | 类型 | 说明 |
|--------|------|------|
| httpStatusCode | integer | HTTP状态码 |
| message | string | 响应消息 |
| data | SessionForkResponse | 响应数据 |
|     sessionId | integer | 新会话ID |
|     principalId | integer | 主体ID |
|     agentId | integer | 智能体ID |
|     title | string | 新会话最终标题 |
|     messageCount | integer | 复制的消息数 |
|     attachmentCount | integer | 复制的附件数 |
| success | boolean | 是否成功 |
| requestId | string | 上游请求ID，用于跨系统链路追踪排查问题 |
| errCode | string | 上游错误码，前端可据此做特殊UI处理 |

### 400

| 参数名 | 类型 | 说明 |
|--------|------|------|
| httpStatusCode | integer | HTTP状态码 |
| message | string | 响应消息 |
| data | object | 响应数据 |
| success | boolean | 是否成功 |
| requestId | string | 上游请求ID，用于跨系统链路追踪排查问题 |
| errCode | string | 上游错误码，前端可据此做特殊UI处理 |

### 500

| 参数名 | 类型 | 说明 |
|--------|------|------|
| httpStatusCode | integer | HTTP状态码 |
| message | string | 响应消息 |
| data | object | 响应数据 |
| success | boolean | 是否成功 |
| requestId | string | 上游请求ID，用于跨系统链路追踪排查问题 |
| errCode | string | 上游错误码，前端可据此做特殊UI处理 |

