+ * Note: the {@code sessionId} field in the params record is overridden
+ * by the session-scoped wrapper; any value provided is ignored.
+ * @since 1.0.0
+ */
+ public CompletableFuture
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionCommandsInvokeParams.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionCommandsInvokeParams.java
new file mode 100644
index 0000000000..141ec9524d
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionCommandsInvokeParams.java
@@ -0,0 +1,31 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.sdk.generated.rpc;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Request parameters for the {@code session.commands.invoke} RPC method.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record SessionCommandsInvokeParams(
+ /** Target session identifier */
+ @JsonProperty("sessionId") String sessionId,
+ /** Command name. Leading slashes are stripped and the name is matched case-insensitively. */
+ @JsonProperty("name") String name,
+ /** Raw input after the command name */
+ @JsonProperty("input") String input
+) {
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionCommandsListParams.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionCommandsListParams.java
new file mode 100644
index 0000000000..dd51f0e768
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionCommandsListParams.java
@@ -0,0 +1,27 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.sdk.generated.rpc;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Request parameters for the {@code session.commands.list} RPC method.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record SessionCommandsListParams(
+ /** Target session identifier */
+ @JsonProperty("sessionId") String sessionId
+) {
+}
diff --git a/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionCommandsListResult.java b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionCommandsListResult.java
new file mode 100644
index 0000000000..e819ba64c1
--- /dev/null
+++ b/src/generated/java/com/github/copilot/sdk/generated/rpc/SessionCommandsListResult.java
@@ -0,0 +1,28 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.sdk.generated.rpc;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.List;
+import javax.annotation.processing.Generated;
+
+/**
+ * Result for the {@code session.commands.list} RPC method.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record SessionCommandsListResult(
+ /** Commands available in this session */
+ @JsonProperty("commands") List
+ * Note: the {@code sessionId} field in the params record is overridden
+ * by the session-scoped wrapper; any value provided is ignored.
*
* @apiNote This method is experimental and may change in a future version.
* @since 1.0.0
*/
- public CompletableFuture
+ * See {@link SessionConfig#getRemoteSession()} for details on possible values.
+ *
+ * @return the remote session mode, or {@code null} if not set
+ * @since 1.4.0
+ */
+ public String getRemoteSession() {
+ return remoteSession;
+ }
+
+ /**
+ * Sets the per-session remote behavior control.
+ *
+ * See {@link SessionConfig#setRemoteSession(String)} for details on possible
+ * values.
+ *
+ * @param remoteSession
+ * the remote session mode
+ * @return this config for method chaining
+ * @since 1.4.0
+ */
+ public ResumeSessionConfig setRemoteSession(String remoteSession) {
+ this.remoteSession = remoteSession;
+ return this;
+ }
+
/**
* Creates a shallow clone of this {@code ResumeSessionConfig} instance.
*
@@ -935,6 +964,7 @@ public ResumeSessionConfig clone() {
copy.onExitPlanMode = this.onExitPlanMode;
copy.onAutoModeSwitch = this.onAutoModeSwitch;
copy.gitHubToken = this.gitHubToken;
+ copy.remoteSession = this.remoteSession;
return copy;
}
}
diff --git a/src/main/java/com/github/copilot/sdk/json/ResumeSessionRequest.java b/src/main/java/com/github/copilot/sdk/json/ResumeSessionRequest.java
index 054fc8fba9..8aca77b7d2 100644
--- a/src/main/java/com/github/copilot/sdk/json/ResumeSessionRequest.java
+++ b/src/main/java/com/github/copilot/sdk/json/ResumeSessionRequest.java
@@ -128,6 +128,9 @@ public final class ResumeSessionRequest {
@JsonProperty("gitHubToken")
private String gitHubToken;
+ @JsonProperty("remoteSession")
+ private String remoteSession;
+
/** Gets the session ID. @return the session ID */
public String getSessionId() {
return sessionId;
@@ -555,4 +558,16 @@ public String getGitHubToken() {
public void setGitHubToken(String gitHubToken) {
this.gitHubToken = gitHubToken;
}
+
+ /** Gets the remote session mode. @return the remote session mode */
+ public String getRemoteSession() {
+ return remoteSession;
+ }
+
+ /**
+ * Sets the remote session mode. @param remoteSession the remote session mode
+ */
+ public void setRemoteSession(String remoteSession) {
+ this.remoteSession = remoteSession;
+ }
}
diff --git a/src/main/java/com/github/copilot/sdk/json/SessionConfig.java b/src/main/java/com/github/copilot/sdk/json/SessionConfig.java
index 53a84aa721..f1a383402f 100644
--- a/src/main/java/com/github/copilot/sdk/json/SessionConfig.java
+++ b/src/main/java/com/github/copilot/sdk/json/SessionConfig.java
@@ -71,6 +71,7 @@ public class SessionConfig {
private ExitPlanModeHandler onExitPlanMode;
private AutoModeSwitchHandler onAutoModeSwitch;
private String gitHubToken;
+ private String remoteSession;
/**
* Gets the custom session ID.
@@ -939,6 +940,45 @@ public SessionConfig setGitHubToken(String gitHubToken) {
return this;
}
+ /**
+ * Gets the per-session remote behavior control.
+ *
+ * Possible values:
+ *
+ * Possible values:
+ *
@@ -988,6 +1028,7 @@ public SessionConfig clone() {
copy.onExitPlanMode = this.onExitPlanMode;
copy.onAutoModeSwitch = this.onAutoModeSwitch;
copy.gitHubToken = this.gitHubToken;
+ copy.remoteSession = this.remoteSession;
return copy;
}
}
diff --git a/src/test/java/com/github/copilot/sdk/RemoteSessionTest.java b/src/test/java/com/github/copilot/sdk/RemoteSessionTest.java
new file mode 100644
index 0000000000..6e093db6ca
--- /dev/null
+++ b/src/test/java/com/github/copilot/sdk/RemoteSessionTest.java
@@ -0,0 +1,399 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+package com.github.copilot.sdk;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+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;
+
+/**
+ * Tests for the {@code remoteSession} feature across all session config types.
+ *
+ * Validates the complete lifecycle of the remote session mode:
+ *
+ *
+ *
+ * @return the remote session mode, or {@code null} if not set
+ * @since 1.4.0
+ */
+ public String getRemoteSession() {
+ return remoteSession;
+ }
+
+ /**
+ * Sets the per-session remote behavior control.
+ *
+ *
+ *
+ * @param remoteSession
+ * the remote session mode
+ * @return this config instance for method chaining
+ * @since 1.4.0
+ */
+ public SessionConfig setRemoteSession(String remoteSession) {
+ this.remoteSession = remoteSession;
+ return this;
+ }
+
/**
* Creates a shallow clone of this {@code SessionConfig} instance.
*
+ *
+ */
+class RemoteSessionTest {
+
+ private static final ObjectMapper MAPPER = JsonRpcClient.getObjectMapper();
+
+ // =========================================================================
+ // SessionConfig getter/setter/copy
+ // =========================================================================
+
+ @Test
+ void sessionConfig_remoteSessionDefaultsToNull() {
+ var cfg = new SessionConfig();
+ assertNull(cfg.getRemoteSession(), "remoteSession should be null when not set");
+ }
+
+ @ParameterizedTest
+ @ValueSource(strings = {"off", "export", "on"})
+ void sessionConfig_setRemoteSessionReturnsSelf(String mode) {
+ var cfg = new SessionConfig();
+ SessionConfig result = cfg.setRemoteSession(mode);
+ assertSame(cfg, result, "setRemoteSession should return the same instance for chaining");
+ assertEquals(mode, cfg.getRemoteSession());
+ }
+
+ @Test
+ void sessionConfig_copyPreservesRemoteSession() {
+ var original = new SessionConfig().setRemoteSession("export");
+ var copy = original.clone();
+ assertEquals("export", copy.getRemoteSession());
+ }
+
+ @Test
+ void sessionConfig_copyPreservesNullRemoteSession() {
+ var original = new SessionConfig();
+ var copy = original.clone();
+ assertNull(copy.getRemoteSession());
+ }
+
+ @Test
+ void sessionConfig_setRemoteSessionToNullClearsValue() {
+ var cfg = new SessionConfig().setRemoteSession("on");
+ cfg.setRemoteSession(null);
+ assertNull(cfg.getRemoteSession());
+ }
+
+ // =========================================================================
+ // ResumeSessionConfig getter/setter/copy
+ // =========================================================================
+
+ @Test
+ void resumeSessionConfig_remoteSessionDefaultsToNull() {
+ var cfg = new ResumeSessionConfig();
+ assertNull(cfg.getRemoteSession(), "remoteSession should be null when not set");
+ }
+
+ @ParameterizedTest
+ @ValueSource(strings = {"off", "export", "on"})
+ void resumeSessionConfig_setRemoteSessionReturnsSelf(String mode) {
+ var cfg = new ResumeSessionConfig();
+ ResumeSessionConfig result = cfg.setRemoteSession(mode);
+ assertSame(cfg, result, "setRemoteSession should return the same instance for chaining");
+ assertEquals(mode, cfg.getRemoteSession());
+ }
+
+ @Test
+ void resumeSessionConfig_copyPreservesRemoteSession() {
+ var original = new ResumeSessionConfig().setRemoteSession("on");
+ var copy = original.clone();
+ assertEquals("on", copy.getRemoteSession());
+ }
+
+ // =========================================================================
+ // SessionRequestBuilder – CreateSessionRequest wiring
+ // =========================================================================
+
+ @ParameterizedTest
+ @ValueSource(strings = {"off", "export", "on"})
+ void buildCreateRequest_propagatesRemoteSession(String mode) {
+ var config = new SessionConfig().setRemoteSession(mode);
+ CreateSessionRequest request = SessionRequestBuilder.buildCreateRequest(config);
+ assertEquals(mode, request.getRemoteSession());
+ }
+
+ @Test
+ void buildCreateRequest_nullConfig_remoteSessionIsNull() {
+ CreateSessionRequest request = SessionRequestBuilder.buildCreateRequest(null);
+ assertNull(request.getRemoteSession());
+ }
+
+ @Test
+ void buildCreateRequest_unsetRemoteSession_isNull() {
+ var config = new SessionConfig();
+ CreateSessionRequest request = SessionRequestBuilder.buildCreateRequest(config);
+ assertNull(request.getRemoteSession());
+ }
+
+ // =========================================================================
+ // SessionRequestBuilder – ResumeSessionRequest wiring
+ // =========================================================================
+
+ @ParameterizedTest
+ @ValueSource(strings = {"off", "export", "on"})
+ void buildResumeRequest_propagatesRemoteSession(String mode) {
+ var config = new ResumeSessionConfig().setRemoteSession(mode);
+ ResumeSessionRequest request = SessionRequestBuilder.buildResumeRequest("sid-1", config);
+ assertEquals(mode, request.getRemoteSession());
+ }
+
+ @Test
+ void buildResumeRequest_nullConfig_remoteSessionIsNull() {
+ ResumeSessionRequest request = SessionRequestBuilder.buildResumeRequest("sid-1", null);
+ assertNull(request.getRemoteSession());
+ }
+
+ @Test
+ void buildResumeRequest_unsetRemoteSession_isNull() {
+ var config = new ResumeSessionConfig();
+ ResumeSessionRequest request = SessionRequestBuilder.buildResumeRequest("sid-1", config);
+ assertNull(request.getRemoteSession());
+ }
+
+ // =========================================================================
+ // JSON wire-format: CreateSessionRequest
+ // =========================================================================
+
+ @ParameterizedTest
+ @ValueSource(strings = {"off", "export", "on"})
+ void createRequest_serializesRemoteSessionCorrectly(String mode) throws Exception {
+ var config = new SessionConfig().setRemoteSession(mode);
+ CreateSessionRequest request = SessionRequestBuilder.buildCreateRequest(config);
+
+ String json = MAPPER.writeValueAsString(request);
+ JsonNode tree = MAPPER.readTree(json);
+
+ assertTrue(tree.has("remoteSession"), "Serialized JSON should contain 'remoteSession' field for mode: " + mode);
+ assertEquals(mode, tree.get("remoteSession").asText());
+ }
+
+ @Test
+ void createRequest_omitsRemoteSessionWhenNull() throws Exception {
+ var config = new SessionConfig();
+ CreateSessionRequest request = SessionRequestBuilder.buildCreateRequest(config);
+
+ String json = MAPPER.writeValueAsString(request);
+ JsonNode tree = MAPPER.readTree(json);
+
+ assertFalse(tree.has("remoteSession"), "Serialized JSON should omit 'remoteSession' when not set");
+ }
+
+ // =========================================================================
+ // JSON wire-format: ResumeSessionRequest
+ // =========================================================================
+
+ @ParameterizedTest
+ @ValueSource(strings = {"off", "export", "on"})
+ void resumeRequest_serializesRemoteSessionCorrectly(String mode) throws Exception {
+ var config = new ResumeSessionConfig().setRemoteSession(mode);
+ ResumeSessionRequest request = SessionRequestBuilder.buildResumeRequest("sid-1", config);
+
+ String json = MAPPER.writeValueAsString(request);
+ JsonNode tree = MAPPER.readTree(json);
+
+ assertTrue(tree.has("remoteSession"), "Serialized JSON should contain 'remoteSession' field for mode: " + mode);
+ assertEquals(mode, tree.get("remoteSession").asText());
+ }
+
+ @Test
+ void resumeRequest_omitsRemoteSessionWhenNull() throws Exception {
+ var config = new ResumeSessionConfig();
+ ResumeSessionRequest request = SessionRequestBuilder.buildResumeRequest("sid-1", config);
+
+ String json = MAPPER.writeValueAsString(request);
+ JsonNode tree = MAPPER.readTree(json);
+
+ assertFalse(tree.has("remoteSession"), "Serialized JSON should omit 'remoteSession' when not set");
+ }
+
+ // =========================================================================
+ // JSON round-trip: CreateSessionRequest
+ // =========================================================================
+
+ @ParameterizedTest
+ @ValueSource(strings = {"off", "export", "on"})
+ void createRequest_roundTripsRemoteSession(String mode) throws Exception {
+ var config = new SessionConfig().setRemoteSession(mode);
+ CreateSessionRequest request = SessionRequestBuilder.buildCreateRequest(config);
+
+ String json = MAPPER.writeValueAsString(request);
+ CreateSessionRequest deserialized = MAPPER.readValue(json, CreateSessionRequest.class);
+ assertEquals(mode, deserialized.getRemoteSession());
+ }
+
+ @Test
+ void createRequest_roundTripsNullRemoteSession() throws Exception {
+ var config = new SessionConfig();
+ CreateSessionRequest request = SessionRequestBuilder.buildCreateRequest(config);
+
+ String json = MAPPER.writeValueAsString(request);
+ CreateSessionRequest deserialized = MAPPER.readValue(json, CreateSessionRequest.class);
+ assertNull(deserialized.getRemoteSession());
+ }
+
+ // =========================================================================
+ // JSON round-trip: ResumeSessionRequest
+ // =========================================================================
+
+ @ParameterizedTest
+ @ValueSource(strings = {"off", "export", "on"})
+ void resumeRequest_roundTripsRemoteSession(String mode) throws Exception {
+ var config = new ResumeSessionConfig().setRemoteSession(mode);
+ ResumeSessionRequest request = SessionRequestBuilder.buildResumeRequest("sid-1", config);
+
+ String json = MAPPER.writeValueAsString(request);
+ ResumeSessionRequest deserialized = MAPPER.readValue(json, ResumeSessionRequest.class);
+ assertEquals(mode, deserialized.getRemoteSession());
+ }
+
+ // =========================================================================
+ // Fluent chaining: remoteSession composes with other config options
+ // =========================================================================
+
+ @Test
+ void sessionConfig_remoteSessionComposesWithOtherFields() {
+ var config = new SessionConfig().setModel("gpt-4o").setRemoteSession("export").setReasoningEffort("high");
+
+ assertEquals("gpt-4o", config.getModel());
+ assertEquals("export", config.getRemoteSession());
+ assertEquals("high", config.getReasoningEffort());
+ }
+
+ @Test
+ void resumeSessionConfig_remoteSessionComposesWithOtherFields() {
+ var config = new ResumeSessionConfig().setModel("gpt-4o").setRemoteSession("on").setReasoningEffort("medium");
+
+ assertEquals("gpt-4o", config.getModel());
+ assertEquals("on", config.getRemoteSession());
+ assertEquals("medium", config.getReasoningEffort());
+ }
+
+ @Test
+ void createRequest_remoteSessionDoesNotAffectOtherFields() throws Exception {
+ var config = new SessionConfig().setModel("gpt-4o").setRemoteSession("export").setReasoningEffort("high")
+ .setGitHubToken("ghp_test");
+
+ CreateSessionRequest request = SessionRequestBuilder.buildCreateRequest(config);
+ String json = MAPPER.writeValueAsString(request);
+ JsonNode tree = MAPPER.readTree(json);
+
+ assertEquals("export", tree.get("remoteSession").asText());
+ assertEquals("gpt-4o", tree.get("model").asText());
+ assertEquals("high", tree.get("reasoningEffort").asText());
+ assertEquals("ghp_test", tree.get("gitHubToken").asText());
+ }
+
+ @Test
+ void resumeRequest_remoteSessionDoesNotAffectOtherFields() throws Exception {
+ var config = new ResumeSessionConfig().setModel("gpt-4o").setRemoteSession("on").setReasoningEffort("medium")
+ .setGitHubToken("ghp_test");
+
+ ResumeSessionRequest request = SessionRequestBuilder.buildResumeRequest("sid-1", config);
+ String json = MAPPER.writeValueAsString(request);
+ JsonNode tree = MAPPER.readTree(json);
+
+ assertEquals("on", tree.get("remoteSession").asText());
+ assertEquals("gpt-4o", tree.get("model").asText());
+ assertEquals("medium", tree.get("reasoningEffort").asText());
+ assertEquals("ghp_test", tree.get("gitHubToken").asText());
+ }
+
+ // =========================================================================
+ // Deserialization from raw JSON (simulates CLI response ingestion)
+ // =========================================================================
+
+ @Test
+ void createRequest_deserializesRemoteSessionFromRawJson() throws Exception {
+ String json = """
+ {
+ "sessionId": "test-session",
+ "remoteSession": "export",
+ "model": "gpt-4o"
+ }
+ """;
+ CreateSessionRequest request = MAPPER.readValue(json, CreateSessionRequest.class);
+ assertEquals("export", request.getRemoteSession());
+ assertEquals("test-session", request.getSessionId());
+ }
+
+ @Test
+ void resumeRequest_deserializesRemoteSessionFromRawJson() throws Exception {
+ String json = """
+ {
+ "sessionId": "resume-session",
+ "remoteSession": "on",
+ "model": "gpt-4o"
+ }
+ """;
+ ResumeSessionRequest request = MAPPER.readValue(json, ResumeSessionRequest.class);
+ assertEquals("on", request.getRemoteSession());
+ assertEquals("resume-session", request.getSessionId());
+ }
+
+ @Test
+ void createRequest_deserializesWithMissingRemoteSession() throws Exception {
+ String json = """
+ {
+ "sessionId": "test-session",
+ "model": "gpt-4o"
+ }
+ """;
+ CreateSessionRequest request = MAPPER.readValue(json, CreateSessionRequest.class);
+ assertNull(request.getRemoteSession());
+ }
+
+ // =========================================================================
+ // Handoff event with remoteSessionId (remote session lifecycle)
+ // =========================================================================
+
+ @Test
+ void handoffEvent_withRemoteSourceType_containsRemoteSessionId() throws Exception {
+ String json = """
+ {
+ "type": "session.handoff",
+ "data": {
+ "handoffTime": "2025-06-01T12:00:00Z",
+ "sourceType": "remote",
+ "remoteSessionId": "remote-sess-42",
+ "summary": "Session exported for remote execution",
+ "repository": {
+ "owner": "test-org",
+ "name": "test-repo",
+ "branch": "feature-branch"
+ }
+ }
+ }
+ """;
+
+ var event = (com.github.copilot.sdk.generated.SessionHandoffEvent) MAPPER.readValue(json,
+ com.github.copilot.sdk.generated.SessionEvent.class);
+ assertNotNull(event);
+ var data = event.getData();
+ assertEquals("remote-sess-42", data.remoteSessionId());
+ assertEquals(com.github.copilot.sdk.generated.HandoffSourceType.REMOTE, data.sourceType());
+ assertEquals("Session exported for remote execution", data.summary());
+ assertEquals("test-org", data.repository().owner());
+ assertEquals("test-repo", data.repository().name());
+ assertEquals("feature-branch", data.repository().branch());
+ }
+
+ @Test
+ void handoffEvent_withoutRemoteSessionId_fieldIsNull() throws Exception {
+ String json = """
+ {
+ "type": "session.handoff",
+ "data": {
+ "targetAgent": "local-agent"
+ }
+ }
+ """;
+
+ var event = (com.github.copilot.sdk.generated.SessionHandoffEvent) MAPPER.readValue(json,
+ com.github.copilot.sdk.generated.SessionEvent.class);
+ assertNotNull(event);
+ assertNull(event.getData().remoteSessionId());
+ }
+}
diff --git a/src/test/java/com/github/copilot/sdk/generated/rpc/GeneratedRpcApiCoverageTest.java b/src/test/java/com/github/copilot/sdk/generated/rpc/GeneratedRpcApiCoverageTest.java
index 89943e3758..10393abe09 100644
--- a/src/test/java/com/github/copilot/sdk/generated/rpc/GeneratedRpcApiCoverageTest.java
+++ b/src/test/java/com/github/copilot/sdk/generated/rpc/GeneratedRpcApiCoverageTest.java
@@ -71,7 +71,7 @@ void serverRpc_sessions_fork_invokes_correct_method() {
var stub = new StubCaller();
var server = new ServerRpc(stub);
- var params = new SessionsForkParams("parent-session-id", null);
+ var params = new SessionsForkParams("parent-session-id", null, null);
server.sessions.fork(params);
assertEquals(1, stub.calls.size());
@@ -657,7 +657,7 @@ void serverRpc_sessionFs_setProvider_params_record() {
@Test
void sessionsForkParams_record() {
- var params = new SessionsForkParams("parent-id", "event-123");
+ var params = new SessionsForkParams("parent-id", "event-123", null);
assertEquals("parent-id", params.sessionId());
assertEquals("event-123", params.toEventId());
}
diff --git a/src/test/java/com/github/copilot/sdk/generated/rpc/GeneratedRpcRecordsCoverageTest.java b/src/test/java/com/github/copilot/sdk/generated/rpc/GeneratedRpcRecordsCoverageTest.java
index 48ade8ce11..50e65d3779 100644
--- a/src/test/java/com/github/copilot/sdk/generated/rpc/GeneratedRpcRecordsCoverageTest.java
+++ b/src/test/java/com/github/copilot/sdk/generated/rpc/GeneratedRpcRecordsCoverageTest.java
@@ -67,7 +67,7 @@ void toolsListParams_record() {
@Test
void sessionsForkParams_record() {
- var params = new SessionsForkParams("sess-1", "event-abc");
+ var params = new SessionsForkParams("sess-1", "event-abc", null);
assertEquals("sess-1", params.sessionId());
assertEquals("event-abc", params.toEventId());
}
@@ -795,7 +795,7 @@ void sessionSkillsListResult_nested() {
@Test
void sessionSkillsReloadResult_empty() {
- assertNotNull(new SessionSkillsReloadResult());
+ assertNotNull(new SessionSkillsReloadResult(null, null));
}
@Test
@@ -863,7 +863,7 @@ void sessionWorkspaceReadFileResult_record() {
@Test
void sessionsForkResult_record() {
- var result = new SessionsForkResult("forked-sess-id");
+ var result = new SessionsForkResult("forked-sess-id", null);
assertEquals("forked-sess-id", result.sessionId());
}
@@ -917,8 +917,8 @@ void modelsListResult_nested() {
var limits = new ModelCapabilitiesLimits(100000L, 8192L, 128000L, null);
var capabilities = new ModelCapabilities(supports, limits);
var policy = new ModelPolicy("active", null);
- var billing = new ModelBilling(1.0);
- var modelItem = new Model("gpt-5", "GPT-5", capabilities, policy, billing, null, null);
+ var billing = new ModelBilling(1.0, null);
+ var modelItem = new Model("gpt-5", "GPT-5", capabilities, policy, billing, null, null, null, null);
var result = new ModelsListResult(List.of(modelItem));
assertEquals(1, result.models().size());