# 添加运行时补充输入

`POST` `/api/agent/run/addSupplementaryInput`

在智能体运行过程中提交补充输入，内容会在下一个步骤边界被注入到对话上下文中

**迁移进来的历史运行不支持本操作**：通过定时任务「迁移历史运行记录」接口登记的运行（triggerSource 为 imported）只是历史留痕，没有真实的执行过程，对其调用本接口会返回 409 冲突。这类运行仅支持查询和随任务删除。原生运行的行为不受影响。

## 请求参数

### 请求头参数

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

### 请求体（JSON）

| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| requestId | string | 否 | - |
| content | string | 否 | - |
| attachmentIds | array | 否 | - |

## 响应

### 200

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

### 400

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

### 409

| 参数名 | 类型 | 说明 |
|--------|------|------|
| httpStatusCode | integer | - |
| success | boolean | - |
| errCode | string | - |
| message | string | - |
| data | object | - |
| requestId | string | 业务错误可能返回；入口解密错误不保证存在 |

### 413

| 参数名 | 类型 | 说明 |
|--------|------|------|
| httpStatusCode | integer | - |
| success | boolean | - |
| errCode | string | - |
| message | string | - |
| data | object | - |
| requestId | string | 业务错误可能返回；入口解密错误不保证存在 |

### 415

| 参数名 | 类型 | 说明 |
|--------|------|------|
| httpStatusCode | integer | - |
| success | boolean | - |
| errCode | string | - |
| message | string | - |
| data | object | - |
| requestId | string | 业务错误可能返回；入口解密错误不保证存在 |

### 500

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

### 503

| 参数名 | 类型 | 说明 |
|--------|------|------|
| httpStatusCode | integer | - |
| success | boolean | - |
| errCode | string | - |
| message | string | - |
| data | object | - |
| requestId | string | 业务错误可能返回；入口解密错误不保证存在 |

## 加密请求（application/jose）

可选请求格式：`Content-Type: application/jose`，`Accept: application/json`。
仍使用 `Authorization: Bearer <APPLICATION_API_KEY>` 和 `X-Principal-Id: <PRINCIPAL_ID>`，加密不替代认证。
将本接口原 JSON 请求对象整体加密（字段、校验和含义不变），发送 JWE Compact 五段字符串；不要添加 JSON 引号或外层对象。
使用平台交付的租户 RSA 公钥（至少 3072 位）及配套 kid；公钥指纹是 SPKI DER 字节的 SHA-256 十六进制摘要。
协议 `dj-jwe-v1`：`alg=RSA-OAEP-256`（OAEP/MGF1 均为 SHA-256），`enc=A256GCM`。
每次重新生成 32 字节 CEK 和 12 字节 IV；RSA 加密原始 CEK；Tag 为 16 字节；AAD 是第一段 Base64URL 字符串的 ASCII 字节。
五段均使用无填充 Base64URL。下面受保护头中的身份、公钥标识、受众和时间必须替换为实际值：

```json
{"alg":"RSA-OAEP-256","enc":"A256GCM","kid":"<KID>","typ":"JOSE","cty":"application/json","dj":{"v":1,"tenant":"<TENANT_ID>","caller":"<APP_ID>","principal":"<PRINCIPAL_ID>","aud":"<AUDIENCE>","op":"agent.run.supplement","iat":1793232000,"exp":1793232300,"jti":"44df537b-8097-4a3a-901c-07ba405c14c5"}}
```

`dj.principal` 必须与请求身份一致；`dj.caller`、`dj.tenant` 必须匹配 API Key 所属应用、租户；`dj.op` 必须匹配本接口。
iat/exp 为 Unix 秒，exp > iat 且间隔不超过 300 秒，允许 60 秒时钟偏差；jti 每次唯一，建议 UUID v4。
头字段集合固定，不允许额外字段、重复 JSON 键、zip 或 crit。密文整体上限 6 MiB，解密 JSON 上限 4 MiB，受保护头上限 4096 字节。
不发送 Content-Encoding（包括 identity）；不支持 application/jose+json。
普通会话允许下一轮通过 JOSE 升级；已加密会话必须继续使用 JOSE。补充输入须与对应 requestId 的运行模式一致，content 最多 10000 字符。
成功响应仍使用原 JSON 结构；SSE 订阅方式和事件格式不变，不需要解密响应。

错误响应沿用 ApiResponse：success=false，errCode、message 为错误标识；普通媒体类型错误仍为 HTTP 400 / message=Media type not supported（沿用原响应，不额外设置 errCode）。
JOSE 格式、解密或上下文校验失败：HTTP 400 / CRYPTO_INVALID_MESSAGE。
补充输入模式不一致：HTTP 400 / errCode=400 / message=SUPPLEMENTARY_INPUT_TRANSPORT_MISMATCH。
新增的 409/413/415/503 说明见本接口响应列表。下方五段示例仅展示格式，须替换为实际加密结果。

```bash
curl 'https://router.fis.aliyuncs.com/finx/api/agent/run/addSupplementaryInput' \
  -H 'Authorization: Bearer <APPLICATION_API_KEY>' \
  -H 'X-Principal-Id: <PRINCIPAL_ID>' \
  -H 'Content-Type: application/jose' -H 'Accept: application/json' \
  --data-binary '<protected>.<encryptedKey>.<iv>.<ciphertext>.<tag>'
```


```text
<protected>.<encryptedKey>.<iv>.<ciphertext>.<tag>
```

### 加密相关错误响应

#### HTTP 400

Bad Request

#### HTTP 409

CRYPTO_REPLAY：同一 jti 重复提交。原业务 409 冲突语义保持不变。

```json
{
  "errCode": "CRYPTO_REPLAY",
  "success": false,
  "httpStatusCode": 409,
  "message": "CRYPTO_REPLAY"
}
```

#### HTTP 413

CRYPTO_PAYLOAD_TOO_LARGE：JOSE 请求体超过 6 MiB 或解密后的 JSON 超过 4 MiB。

```json
{
  "errCode": "CRYPTO_PAYLOAD_TOO_LARGE",
  "success": false,
  "httpStatusCode": 413,
  "message": "CRYPTO_PAYLOAD_TOO_LARGE"
}
```

#### HTTP 415

CRYPTO_UNSUPPORTED_MEDIA_TYPE：application/jose 请求携带不支持的 Content-Encoding（包括 identity）。text/plain、application/jose+json 等不支持的 Content-Type 仍返回 HTTP 400 / Media type not supported。

```json
{
  "errCode": "CRYPTO_UNSUPPORTED_MEDIA_TYPE",
  "success": false,
  "httpStatusCode": 415,
  "message": "CRYPTO_UNSUPPORTED_MEDIA_TYPE"
}
```

#### HTTP 500

Internal Server Error

#### HTTP 503

CRYPTO_UNAVAILABLE：入口加密暂不可用，请稍后使用新的 jti 和密文重试；不要自动改发明文。

```json
{
  "errCode": "CRYPTO_UNAVAILABLE",
  "success": false,
  "httpStatusCode": 503,
  "message": "CRYPTO_UNAVAILABLE"
}
```

