{"record":{"id":"425803ed537eb7f0","repo":"github/copilot-sdk","slug":"session-create-response-did-not-include-a-sessioni-425803","errorCode":null,"errorMessage":"session.create response did not include a sessionId","messagePattern":"session\\.create response did not include a sessionId","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"java/sdk/src/main/java/com/github/copilot/CopilotClient.java","lineNumber":1015,"sourceCode":"                    ? null\n                    : gitHubTokenProviders.register(config.getGitHubTokenProvider());\n            if (tokenRegistration != null) {\n                request.setGitHubTokenProviderRegistrationId(tokenRegistration.id());\n                if (preRegisteredSessionHolder[0] != null) {\n                    preRegisteredSessionHolder[0].setGitHubTokenProviderRegistration(tokenRegistration);\n                }\n            }\n\n            long rpcNanos = System.nanoTime();\n            return connection.rpc.invoke(\"session.create\", request, CreateSessionResponse.class)\n                    .thenCompose(response -> {\n                        String returnedId = response.sessionId();\n                        LoggingHelpers.logTiming(LOG, Level.FINE,\n                                \"CopilotClient.createSession session creation request completed. Elapsed={Elapsed}, SessionId=\"\n                                        + (returnedId != null ? returnedId : localSessionId),\n                                rpcNanos);\n                        if (returnedId == null || returnedId.isEmpty()) {\n                            throw new RuntimeException(\"session.create response did not include a sessionId\");\n                        }\n                        if (localSessionId != null && !localSessionId.equals(returnedId)) {\n                            throw new RuntimeException(\"session.create returned sessionId \" + returnedId\n                                    + \" but the caller requested \" + localSessionId);\n                        }\n                        CopilotSession session = preRegisteredSessionHolder[0] != null\n                                ? preRegisteredSessionHolder[0]\n                                : initializeSession.apply(returnedId);\n                        preRegisteredSessionHolder[0] = session;\n                        if (tokenRegistration != null) {\n                            session.setGitHubTokenProviderRegistration(tokenRegistration);\n                        }\n                        registeredIdHolder[0] = returnedId;\n                        CompletableFuture<?> interest = config.getOnMcpAuthRequest() != null\n                                ? session.getRpc().eventLog.registerInterest(\n                                        new SessionEventLogRegisterInterestParams(returnedId, \"mcp.oauth_required\"))\n                                : CompletableFuture.completedFuture(null);\n                        session.setWorkspacePath(response.workspacePath());","sourceCodeStart":997,"sourceCodeEnd":1033,"githubUrl":"https://github.com/github/copilot-sdk/blob/cd8cf15dc3f9e762615790aaed0a771a0f392755/java/sdk/src/main/java/com/github/copilot/CopilotClient.java#L997-L1033","documentation":"CopilotClient.createSession sends a session.create RPC and requires the server response to carry a sessionId. If the response's sessionId field is null or empty, the client cannot register or look up the session, so it throws immediately rather than returning a broken CopilotSession.","triggerScenarios":"The session.create RPC completes but response.sessionId() returns null or \"\" — e.g. a misbehaving or incompatible Copilot server/extension version that omits the sessionId field, or a proxy mangling the response payload.","commonSituations":"Running against an outdated or third-party Copilot agent binary whose session.create response schema differs; network middleware stripping fields; testing against a mock/stub RPC server that returns an incomplete response.","solutions":["Upgrade the Copilot agent/server to a version matching the SDK's expected session.create response schema","Verify no proxy or interceptor is stripping the sessionId field from RPC responses","Log the raw session.create response (enable FINE logging via LoggingHelpers) to confirm what the server returned","If using a stub server, make it return a non-empty sessionId"],"exampleFix":"// before (stub server)\nserver.on(\"session.create\", (req, resp) -> resp.send(Map.of()));\n// after\nserver.on(\"session.create\", (req, resp) -> resp.send(Map.of(\"sessionId\", UUID.randomUUID().toString())));","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    CopilotSession s = client.createSession(options);\n} catch (RuntimeException e) {\n    if (e.getMessage().contains(\"did not include a sessionId\")) {\n        // check server/agent version compatibility; retry with a fresh server\n    }\n}","preventionTips":["Pin the Copilot agent/server version tested against this SDK version","Enable FINE logging on session creation to capture raw responses","Validate stub/mock servers return complete session.create payloads"],"tags":["rpc","session","protocol-mismatch"],"backgroundTag":"unexpected-api-response-shape","analyzedSha":"cd8cf15dc3f9e762615790aaed0a771a0f392755","analyzedAt":"2026-09-09T18:32:31.973Z","contentChangedAt":"2026-09-09T18:32:31.973Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}