mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-04-30 20:50:34 +00:00
refactor structure
This commit is contained in:
parent
3c46278fad
commit
0128f65fe8
198 changed files with 12718 additions and 5 deletions
|
|
@ -0,0 +1,31 @@
|
|||
package com.alibaba.acp.sdk.protocol.client.session;
|
||||
|
||||
import com.alibaba.acp.sdk.protocol.domain.permission.PermissionOptionKind;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PermissionOptionKindTest {
|
||||
|
||||
@Test
|
||||
public void testJson() {
|
||||
PermissionOptionKind kind = PermissionOptionKind.ALLOW_ONCE;
|
||||
assertEquals("\"allow_once\"", JSON.toJSONString(kind));
|
||||
assertEquals(PermissionOptionKind.ALLOW_ONCE, JSON.parseObject("\"allow_once\"", PermissionOptionKind.class));
|
||||
|
||||
kind = PermissionOptionKind.ALLOW_ALWAYS;
|
||||
assertEquals("\"allow_always\"", JSON.toJSONString(kind));
|
||||
assertEquals(PermissionOptionKind.ALLOW_ALWAYS, JSON.parseObject("\"allow_always\"", PermissionOptionKind.class));
|
||||
|
||||
kind = PermissionOptionKind.REJECT_ONCE;
|
||||
assertEquals("\"reject_once\"", JSON.toJSONString(kind));
|
||||
assertEquals(PermissionOptionKind.REJECT_ONCE, JSON.parseObject("\"reject_once\"", PermissionOptionKind.class));
|
||||
|
||||
kind = PermissionOptionKind.REJECT_ALWAYS;
|
||||
assertEquals("\"reject_always\"", JSON.toJSONString(kind));
|
||||
assertEquals(PermissionOptionKind.REJECT_ALWAYS, JSON.parseObject("\"reject_always\"", PermissionOptionKind.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.alibaba.acp.sdk.protocol.client.session;
|
||||
|
||||
import com.alibaba.acp.sdk.protocol.domain.plan.PlanEntryPriority;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PlanEntryPriorityTest {
|
||||
|
||||
@Test
|
||||
public void testJson() {
|
||||
PlanEntryPriority priority = PlanEntryPriority.HIGH;
|
||||
assertEquals("\"high\"", JSON.toJSONString(priority));
|
||||
assertEquals(PlanEntryPriority.HIGH, JSON.parseObject("\"high\"", PlanEntryPriority.class));
|
||||
|
||||
priority = PlanEntryPriority.MEDIUM;
|
||||
assertEquals("\"medium\"", JSON.toJSONString(priority));
|
||||
assertEquals(PlanEntryPriority.MEDIUM, JSON.parseObject("\"medium\"", PlanEntryPriority.class));
|
||||
|
||||
priority = PlanEntryPriority.LOW;
|
||||
assertEquals("\"low\"", JSON.toJSONString(priority));
|
||||
assertEquals(PlanEntryPriority.LOW, JSON.parseObject("\"low\"", PlanEntryPriority.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.alibaba.acp.sdk.protocol.client.session;
|
||||
|
||||
import com.alibaba.acp.sdk.protocol.domain.plan.PlanEntryStatus;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PlanEntryStatusTest {
|
||||
|
||||
@Test
|
||||
public void testJson() {
|
||||
PlanEntryStatus status = PlanEntryStatus.PENDING;
|
||||
assertEquals("\"pending\"", JSON.toJSONString(status));
|
||||
assertEquals(PlanEntryStatus.PENDING, JSON.parseObject("\"pending\"", PlanEntryStatus.class));
|
||||
|
||||
status = PlanEntryStatus.IN_PROGRESS;
|
||||
assertEquals("\"in_progress\"", JSON.toJSONString(status));
|
||||
assertEquals(PlanEntryStatus.IN_PROGRESS, JSON.parseObject("\"in_progress\"", PlanEntryStatus.class));
|
||||
|
||||
status = PlanEntryStatus.COMPLETED;
|
||||
assertEquals("\"completed\"", JSON.toJSONString(status));
|
||||
assertEquals(PlanEntryStatus.COMPLETED, JSON.parseObject("\"completed\"", PlanEntryStatus.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
package com.alibaba.acp.sdk.protocol.client.session;
|
||||
|
||||
import com.alibaba.acp.sdk.protocol.domain.session.StopReason;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class StopReasonTest {
|
||||
|
||||
@Test
|
||||
public void testJson() {
|
||||
StopReason reason = StopReason.END_TURN;
|
||||
assertEquals("\"end_turn\"", JSON.toJSONString(reason));
|
||||
assertEquals(StopReason.END_TURN, JSON.parseObject("\"end_turn\"", StopReason.class));
|
||||
|
||||
reason = StopReason.MAX_TOKENS;
|
||||
assertEquals("\"max_tokens\"", JSON.toJSONString(reason));
|
||||
assertEquals(StopReason.MAX_TOKENS, JSON.parseObject("\"max_tokens\"", StopReason.class));
|
||||
|
||||
reason = StopReason.MAX_TURN_REQUESTS;
|
||||
assertEquals("\"max_turn_requests\"", JSON.toJSONString(reason));
|
||||
assertEquals(StopReason.MAX_TURN_REQUESTS, JSON.parseObject("\"max_turn_requests\"", StopReason.class));
|
||||
|
||||
reason = StopReason.REFUSAL;
|
||||
assertEquals("\"refusal\"", JSON.toJSONString(reason));
|
||||
assertEquals(StopReason.REFUSAL, JSON.parseObject("\"refusal\"", StopReason.class));
|
||||
|
||||
reason = StopReason.CANCELLED;
|
||||
assertEquals("\"cancelled\"", JSON.toJSONString(reason));
|
||||
assertEquals(StopReason.CANCELLED, JSON.parseObject("\"cancelled\"", StopReason.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
package com.alibaba.acp.sdk.protocol.client.session;
|
||||
|
||||
import com.alibaba.acp.sdk.protocol.domain.tool.ToolCallStatus;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class ToolCallStatusTest {
|
||||
|
||||
@Test
|
||||
public void testJson() {
|
||||
ToolCallStatus status = ToolCallStatus.PENDING;
|
||||
assertEquals("\"pending\"", JSON.toJSONString(status));
|
||||
assertEquals(ToolCallStatus.PENDING, JSON.parseObject("\"pending\"", ToolCallStatus.class));
|
||||
|
||||
status = ToolCallStatus.IN_PROGRESS;
|
||||
assertEquals("\"in_progress\"", JSON.toJSONString(status));
|
||||
assertEquals(ToolCallStatus.IN_PROGRESS, JSON.parseObject("\"in_progress\"", ToolCallStatus.class));
|
||||
|
||||
status = ToolCallStatus.COMPLETED;
|
||||
assertEquals("\"completed\"", JSON.toJSONString(status));
|
||||
assertEquals(ToolCallStatus.COMPLETED, JSON.parseObject("\"completed\"", ToolCallStatus.class));
|
||||
|
||||
status = ToolCallStatus.FAILED;
|
||||
assertEquals("\"failed\"", JSON.toJSONString(status));
|
||||
assertEquals(ToolCallStatus.FAILED, JSON.parseObject("\"failed\"", ToolCallStatus.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
package com.alibaba.acp.sdk.protocol.client.session;
|
||||
|
||||
import com.alibaba.acp.sdk.protocol.domain.tool.ToolKind;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class ToolKindTest {
|
||||
|
||||
@Test
|
||||
public void testJson() {
|
||||
ToolKind kind = ToolKind.READ;
|
||||
assertEquals("\"read\"", JSON.toJSONString(kind));
|
||||
assertEquals(ToolKind.READ, JSON.parseObject("\"read\"", ToolKind.class));
|
||||
|
||||
kind = ToolKind.EDIT;
|
||||
assertEquals("\"edit\"", JSON.toJSONString(kind));
|
||||
assertEquals(ToolKind.EDIT, JSON.parseObject("\"edit\"", ToolKind.class));
|
||||
|
||||
kind = ToolKind.DELETE;
|
||||
assertEquals("\"delete\"", JSON.toJSONString(kind));
|
||||
assertEquals(ToolKind.DELETE, JSON.parseObject("\"delete\"", ToolKind.class));
|
||||
|
||||
kind = ToolKind.MOVE;
|
||||
assertEquals("\"move\"", JSON.toJSONString(kind));
|
||||
assertEquals(ToolKind.MOVE, JSON.parseObject("\"move\"", ToolKind.class));
|
||||
|
||||
kind = ToolKind.SEARCH;
|
||||
assertEquals("\"search\"", JSON.toJSONString(kind));
|
||||
assertEquals(ToolKind.SEARCH, JSON.parseObject("\"search\"", ToolKind.class));
|
||||
|
||||
kind = ToolKind.EXECUTE;
|
||||
assertEquals("\"execute\"", JSON.toJSONString(kind));
|
||||
assertEquals(ToolKind.EXECUTE, JSON.parseObject("\"execute\"", ToolKind.class));
|
||||
|
||||
kind = ToolKind.THINK;
|
||||
assertEquals("\"think\"", JSON.toJSONString(kind));
|
||||
assertEquals(ToolKind.THINK, JSON.parseObject("\"think\"", ToolKind.class));
|
||||
|
||||
kind = ToolKind.FETCH;
|
||||
assertEquals("\"fetch\"", JSON.toJSONString(kind));
|
||||
assertEquals(ToolKind.FETCH, JSON.parseObject("\"fetch\"", ToolKind.class));
|
||||
|
||||
kind = ToolKind.SWITCH_MODE;
|
||||
assertEquals("\"switch_mode\"", JSON.toJSONString(kind));
|
||||
assertEquals(ToolKind.SWITCH_MODE, JSON.parseObject("\"switch_mode\"", ToolKind.class));
|
||||
|
||||
kind = ToolKind.OTHER;
|
||||
assertEquals("\"other\"", JSON.toJSONString(kind));
|
||||
assertEquals(ToolKind.OTHER, JSON.parseObject("\"other\"", ToolKind.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,128 @@
|
|||
package com.alibaba.acp.sdk.session;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.alibaba.acp.sdk.AcpClient;
|
||||
import com.alibaba.acp.sdk.protocol.domain.client.ClientCapabilities;
|
||||
import com.alibaba.acp.sdk.protocol.domain.client.ClientCapabilities.FileSystemCapability;
|
||||
import com.alibaba.acp.sdk.protocol.domain.content.block.TextContent;
|
||||
import com.alibaba.acp.sdk.protocol.domain.permission.PermissionOption;
|
||||
import com.alibaba.acp.sdk.protocol.domain.permission.RequestPermissionOutcome;
|
||||
import com.alibaba.acp.sdk.protocol.domain.session.update.AgentMessageChunkSessionUpdate;
|
||||
import com.alibaba.acp.sdk.protocol.domain.session.update.AvailableCommandsUpdateSessionUpdate;
|
||||
import com.alibaba.acp.sdk.protocol.domain.session.update.CurrentModeUpdateSessionUpdate;
|
||||
import com.alibaba.acp.sdk.protocol.domain.session.update.PlanSessionUpdate;
|
||||
import com.alibaba.acp.sdk.protocol.domain.session.update.ToolCallSessionUpdate;
|
||||
import com.alibaba.acp.sdk.protocol.domain.session.update.ToolCallUpdateSessionUpdate;
|
||||
import com.alibaba.acp.sdk.session.event.consumer.ContentEventSimpleConsumer;
|
||||
import com.alibaba.acp.sdk.session.event.consumer.FileEventSimpleConsumer;
|
||||
import com.alibaba.acp.sdk.utils.AgentInitializeException;
|
||||
import com.alibaba.acp.sdk.protocol.agent.request.RequestPermissionRequest;
|
||||
import com.alibaba.acp.sdk.protocol.agent.request.RequestPermissionRequest.RequestPermissionRequestParams;
|
||||
import com.alibaba.acp.sdk.protocol.client.request.InitializeRequest.InitializeRequestParams;
|
||||
import com.alibaba.acp.sdk.protocol.client.request.NewSessionRequest.NewSessionRequestParams;
|
||||
import com.alibaba.acp.sdk.protocol.client.response.RequestPermissionResponse.RequestPermissionResponseResult;
|
||||
import com.alibaba.acp.sdk.protocol.domain.permission.PermissionOutcomeKind;
|
||||
import com.alibaba.acp.sdk.protocol.jsonrpc.MethodMessage;
|
||||
import com.alibaba.acp.sdk.session.event.consumer.AgentEventConsumer;
|
||||
import com.alibaba.acp.sdk.session.event.consumer.PermissionEventConsumer;
|
||||
import com.alibaba.acp.sdk.session.event.consumer.exception.EventConsumeException;
|
||||
import com.alibaba.acp.sdk.session.exception.SessionNewException;
|
||||
import com.alibaba.acp.sdk.transport.Transport;
|
||||
import com.alibaba.acp.sdk.transport.process.ProcessTransport;
|
||||
import com.alibaba.acp.sdk.transport.process.ProcessTransportOptions;
|
||||
import com.alibaba.acp.sdk.utils.Timeout;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import static com.alibaba.acp.sdk.protocol.domain.permission.PermissionOptionKind.ALLOW_ALWAYS;
|
||||
|
||||
class SessionTest {
|
||||
private static final Logger logger = LoggerFactory.getLogger(SessionTest.class);
|
||||
@Test
|
||||
public void testSession() throws AgentInitializeException, SessionNewException, IOException {
|
||||
AcpClient acpClient = new AcpClient(new ProcessTransport(new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "--experimental-skills", "-y"})));
|
||||
try {
|
||||
acpClient.sendPrompt(Collections.singletonList(new TextContent("你是谁")), new AgentEventConsumer().setContentEventConsumer(new ContentEventSimpleConsumer(){
|
||||
@Override
|
||||
public void onAgentMessageChunkSessionUpdate(AgentMessageChunkSessionUpdate sessionUpdate) {
|
||||
logger.info(sessionUpdate.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAvailableCommandsUpdateSessionUpdate(AvailableCommandsUpdateSessionUpdate sessionUpdate) {
|
||||
logger.info(sessionUpdate.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCurrentModeUpdateSessionUpdate(CurrentModeUpdateSessionUpdate sessionUpdate) {
|
||||
logger.info(sessionUpdate.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlanSessionUpdate(PlanSessionUpdate sessionUpdate) {
|
||||
logger.info(sessionUpdate.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onToolCallUpdateSessionUpdate(ToolCallUpdateSessionUpdate sessionUpdate) {
|
||||
logger.info(sessionUpdate.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onToolCallSessionUpdate(ToolCallSessionUpdate sessionUpdate) {
|
||||
logger.info(sessionUpdate.toString());
|
||||
}
|
||||
}));
|
||||
} finally {
|
||||
acpClient.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void test() throws SessionNewException, AgentInitializeException, IOException {
|
||||
Transport transport = new ProcessTransport(
|
||||
new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "--experimental-skills", "-y"}));
|
||||
AcpClient acpClient = new AcpClient(transport, new InitializeRequestParams().setClientCapabilities(
|
||||
new ClientCapabilities()
|
||||
.setTerminal(true)
|
||||
.setFs(new FileSystemCapability().setReadTextFile(true).setWriteTextFile(true))));
|
||||
Session session = acpClient.newSession(new NewSessionRequestParams());
|
||||
session.sendPrompt(Collections.singletonList(new TextContent("你是谁")), new AgentEventConsumer());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testPermission() throws AgentInitializeException, SessionNewException, IOException {
|
||||
Transport transport = new ProcessTransport(
|
||||
new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "--experimental-skills"}));
|
||||
AcpClient acpClient = new AcpClient(transport, new InitializeRequestParams().setClientCapabilities(
|
||||
new ClientCapabilities()
|
||||
.setTerminal(false)
|
||||
.setFs(new FileSystemCapability(true, true))));
|
||||
Session session = acpClient.newSession(new NewSessionRequestParams());
|
||||
session.sendPrompt(Collections.singletonList(new TextContent("创建一个test.touch文件"))
|
||||
, new AgentEventConsumer().setFileEventConsumer(new FileEventSimpleConsumer()).setPermissionEventConsumer(new PermissionEventConsumer() {
|
||||
@Override
|
||||
public RequestPermissionResponseResult onRequestPermissionRequest(RequestPermissionRequest request) throws EventConsumeException {
|
||||
return new RequestPermissionResponseResult(new RequestPermissionOutcome().
|
||||
setOptionId(Optional.of(request)
|
||||
.map(MethodMessage::getParams)
|
||||
.map(RequestPermissionRequestParams::getOptions)
|
||||
.flatMap(options -> options.stream()
|
||||
.filter(option -> ALLOW_ALWAYS.equals(option.getKind()))
|
||||
.findFirst())
|
||||
.map(PermissionOption::getOptionId).orElse(null))
|
||||
.setOutcome(PermissionOutcomeKind.SELECTED));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Timeout onRequestPermissionRequestTimeout(RequestPermissionRequest request) {
|
||||
return Timeout.TIMEOUT_60_SECONDS;
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package com.alibaba.acp.sdk.test;
|
||||
|
||||
import com.alibaba.acp.sdk.protocol.domain.plan.PlanEntryStatus;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
|
||||
public class EnumTest {
|
||||
public static void main(String[] args) {
|
||||
// Test PlanEntryStatus enum
|
||||
PlanEntryStatus status = PlanEntryStatus.PENDING;
|
||||
String json = JSON.toJSONString(status);
|
||||
System.out.println("JSON output: " + json);
|
||||
|
||||
PlanEntryStatus parsed = JSON.parseObject("\"pending\"", PlanEntryStatus.class);
|
||||
System.out.println("Parsed enum: " + parsed);
|
||||
|
||||
if ("\"pending\"".equals(json) && PlanEntryStatus.PENDING == parsed) {
|
||||
System.out.println("SUCCESS: PlanEntryStatus enum works correctly!");
|
||||
} else {
|
||||
System.out.println("FAILURE: PlanEntryStatus enum not working properly");
|
||||
}
|
||||
}
|
||||
}
|
||||
3105
packages/sdk-java/client/src/test/resources/schema/schema.json
Normal file
3105
packages/sdk-java/client/src/test/resources/schema/schema.json
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue