agentscope-ai / agentscope-ai/agentscope-java

[bug] `AgentRunDataPlaneHttp` 响应 JSON `data` 信封未解包

Aberta
#1,907 0 comentários 0 reações 0 responsáveis Ver no GitHub
area/ext/integration bug
Linguagem predominante
Java
Estrelas
5.6k
Forks
1.3k
Merge médio
4d 12h
PRs com merge (30d)
77

Descrição

## 版本

- agentscope-java: `2.0.0-RC3`

## 问题描述

AgentRun REST API 的所有 JSON 响应都包裹在 `data` 信封中:

```json
{
"data": {
"sandboxId": "xxx",
"status": "READY",
"templateType": "CodeInterpreter"
}
}
```

但 `AgentRunDataPlaneHttp.textStatus()` 直接从 JSON 根级别查找 `status`/`state` 字段:

```java
private static String textStatus(JsonNode s) {
if (s == null) return null;
JsonNode st = s.get("status"); // ← 始终为 null(status 在 data 内)
if (st != null && st.isTextual()) return st.asText();
JsonNode state = s.get("state"); // ← 也找不到
if (state != null && state.isTextual()) return state.asText();
return null;
}
```

## 影响

`waitUntilReady()` 轮询沙箱状态时,每次 `textStatus()` 都返回 `null`,导致轮询完整运行 300 秒(默认
`START_WAIT_SECONDS = 300`)后超时报错:

```
AgentRun sandbox did not become READY in time (last status=null): DY5FK2VCJDS8FFF6M2GYJADGFW
```

> AgentRun API 测试代码[AgentRunSandboxApiTest](https://github.com/agentscope-ai/agentscope-java/issues/1889#issuecomment-4780452891)使用了自定义的 `unwrap()` 方法来提取 `data`,因此测试不受影响。但框架的生产代码未做此处理。

## 复现步骤

1. 配置 `AgentRunFilesystemSpec` 连接 AgentRun 沙箱平台
2. 触发沙箱创建流程(`SandboxManager.acquire()` → `AgentRunSandboxClient.create()`)
3. `AgentRunSandbox.start()` → `ensureSandbox()` → `waitUntilReady()` 轮询超时

## 预期行为

`getJson()` / `postJson()` 应在返回前解包 `data` 信封,或 `textStatus()` 应兼容嵌套格式。

## 建议修复

在 `getJson()` 和 `postJson()` 中统一解包 `data` 字段:

```java
private JsonNode unwrapData(JsonNode node) {
if (node != null && node.has("data") && !node.get("data").isNull()) {
return node.get("data");
}
return node;
}

private JsonNode postJson(String url, ObjectNode body) throws IOException {
// ... existing code ...
return unwrapData(json.readTree(text));
}

private JsonNode getJson(String url) throws IOException {
// ... existing code ...
return unwrapData(json.readTree(text));
}
```

或者直接修改 `textStatus()` 等方法,在读取字段前先尝试提取 `data`。

## 相关文件

| 文件 | 路径 |
|------|-----------------------------------------------------------------|
| 主要修复 | `agentscope-extensions/.../agentrun/AgentRunDataPlaneHttp.java` |

Guia de contribuição

Abrir o guia de contribuição

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.