/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. *--------------------------------------------------------------------------------------------*/ package com.github.copilot.sdk; import java.util.stream.Collectors; import com.github.copilot.sdk.json.CreateSessionRequest; import com.github.copilot.sdk.json.ResumeSessionConfig; import com.github.copilot.sdk.json.ResumeSessionRequest; import com.github.copilot.sdk.json.SessionConfig; import com.github.copilot.sdk.json.ToolDef; /** * Builds JSON-RPC request objects from session configuration. *

* This class handles the conversion of SDK configuration objects * ({@link SessionConfig}, {@link ResumeSessionConfig}) to JSON-RPC request * objects for session creation and resumption. */ final class SessionRequestBuilder { private SessionRequestBuilder() { // Utility class } /** * Builds a CreateSessionRequest from the given configuration. * * @param config * the session configuration (may be null) * @return the built request object */ static CreateSessionRequest buildCreateRequest(SessionConfig config) { var request = new CreateSessionRequest(); if (config == null) { return request; } request.setModel(config.getModel()); request.setSessionId(config.getSessionId()); request.setReasoningEffort(config.getReasoningEffort()); request.setTools(config.getTools() != null ? config.getTools().stream().map(t -> new ToolDef(t.getName(), t.getDescription(), t.getParameters())) .collect(Collectors.toList()) : null); request.setSystemMessage(config.getSystemMessage()); request.setAvailableTools(config.getAvailableTools()); request.setExcludedTools(config.getExcludedTools()); request.setProvider(config.getProvider()); request.setRequestPermission(config.getOnPermissionRequest() != null ? true : null); request.setRequestUserInput(config.getOnUserInputRequest() != null ? true : null); request.setHooks(config.getHooks() != null && config.getHooks().hasHooks() ? true : null); request.setWorkingDirectory(config.getWorkingDirectory()); request.setStreaming(config.isStreaming() ? true : null); request.setMcpServers(config.getMcpServers()); request.setCustomAgents(config.getCustomAgents()); request.setInfiniteSessions(config.getInfiniteSessions()); request.setSkillDirectories(config.getSkillDirectories()); request.setDisabledSkills(config.getDisabledSkills()); request.setConfigDir(config.getConfigDir()); return request; } /** * Builds a ResumeSessionRequest from the given session ID and configuration. * * @param sessionId * the ID of the session to resume * @param config * the resume configuration (may be null) * @return the built request object */ static ResumeSessionRequest buildResumeRequest(String sessionId, ResumeSessionConfig config) { var request = new ResumeSessionRequest(); request.setSessionId(sessionId); if (config == null) { return request; } request.setModel(config.getModel()); request.setReasoningEffort(config.getReasoningEffort()); request.setTools(config.getTools() != null ? config.getTools().stream().map(t -> new ToolDef(t.getName(), t.getDescription(), t.getParameters())) .collect(Collectors.toList()) : null); request.setSystemMessage(config.getSystemMessage()); request.setAvailableTools(config.getAvailableTools()); request.setExcludedTools(config.getExcludedTools()); request.setProvider(config.getProvider()); request.setRequestPermission(config.getOnPermissionRequest() != null ? true : null); request.setRequestUserInput(config.getOnUserInputRequest() != null ? true : null); request.setHooks(config.getHooks() != null && config.getHooks().hasHooks() ? true : null); request.setWorkingDirectory(config.getWorkingDirectory()); request.setConfigDir(config.getConfigDir()); request.setDisableResume(config.isDisableResume() ? true : null); request.setStreaming(config.isStreaming() ? true : null); request.setMcpServers(config.getMcpServers()); request.setCustomAgents(config.getCustomAgents()); request.setSkillDirectories(config.getSkillDirectories()); request.setDisabledSkills(config.getDisabledSkills()); request.setInfiniteSessions(config.getInfiniteSessions()); return request; } /** * Configures a session with handlers from the given config. * * @param session * the session to configure * @param config * the session configuration */ static void configureSession(CopilotSession session, SessionConfig config) { if (config == null) { return; } if (config.getTools() != null) { session.registerTools(config.getTools()); } if (config.getOnPermissionRequest() != null) { session.registerPermissionHandler(config.getOnPermissionRequest()); } if (config.getOnUserInputRequest() != null) { session.registerUserInputHandler(config.getOnUserInputRequest()); } if (config.getHooks() != null) { session.registerHooks(config.getHooks()); } } /** * Configures a resumed session with handlers from the given config. * * @param session * the session to configure * @param config * the resume session configuration */ static void configureSession(CopilotSession session, ResumeSessionConfig config) { if (config == null) { return; } if (config.getTools() != null) { session.registerTools(config.getTools()); } if (config.getOnPermissionRequest() != null) { session.registerPermissionHandler(config.getOnPermissionRequest()); } if (config.getOnUserInputRequest() != null) { session.registerUserInputHandler(config.getOnUserInputRequest()); } if (config.getHooks() != null) { session.registerHooks(config.getHooks()); } } }