From 5f52867ccf797540665ac00f22e82a9e78ed1821 Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Sun, 9 Aug 2026 20:07:18 +0000 Subject: [PATCH 01/12] feat(java): embed Rust CLI runtime as native module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squashed from PR #2295 (branch edburns/…-review-02). Includes Java multi-module Maven restructure, copilot-native submodule for bundling the Rust CLI runtime, codegen updates, and related workflow changes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 90cbda40-cda3-4ecd-b381-9f9ba0573d0a --- .github/workflows/codegen-check.yml | 4 +- .github/workflows/docs-validation.yml | 3 +- ...en-code-to-accept-upgrade-changes.lock.yml | 2 +- ...dwritten-code-to-accept-upgrade-changes.md | 12 +- .github/workflows/java-codegen-check.yml | 4 +- .github/workflows/java-codegen-fix.lock.yml | 2 +- .github/workflows/java-codegen-fix.md | 20 +- .github/workflows/java-sdk-tests.yml | 60 +- .../workflows/sdk-consistency-review.lock.yml | 2 +- .github/workflows/sdk-consistency-review.md | 2 +- .../workflows/update-copilot-dependency.yml | 4 +- java/README.md | 48 +- java/copilot-native/pom.xml | 214 +++++ java/copilot-native/scripts/fetch-native.mjs | 114 +++ .../native/lib/copilot-runtime.properties | 12 + .../adr/adr-007-native-bundling-strategy.md | 116 +-- java/pom.xml | 788 +++-------------- java/scripts/codegen/java.ts | 14 +- .../config/checkstyle/checkstyle.xml | 0 .../config/spotbugs/spotbugs-exclude.xml | 0 java/{ => sdk}/jbang-example.java | 0 java/sdk/pom.xml | 790 ++++++++++++++++++ .../github/copilot/generated/AbortEvent.java | 0 .../github/copilot/generated/AbortReason.java | 0 .../copilot/generated/AssistantIdleEvent.java | 0 .../generated/AssistantIntentEvent.java | 0 .../generated/AssistantMessageDeltaEvent.java | 0 .../generated/AssistantMessageEvent.java | 0 .../AssistantMessageServerTools.java | 0 .../generated/AssistantMessageStartEvent.java | 0 .../AssistantMessageToolRequest.java | 0 .../AssistantMessageToolRequestType.java | 0 .../AssistantReasoningDeltaEvent.java | 0 .../generated/AssistantReasoningEvent.java | 0 .../AssistantServerToolProgressEvent.java | 0 .../AssistantStreamingDeltaEvent.java | 0 .../AssistantToolCallDeltaEvent.java | 0 .../generated/AssistantTurnEndEvent.java | 0 .../generated/AssistantTurnRetryEvent.java | 0 .../generated/AssistantTurnStartEvent.java | 0 .../generated/AssistantUsageApiEndpoint.java | 0 .../generated/AssistantUsageCopilotUsage.java | 0 ...AssistantUsageCopilotUsageTokenDetail.java | 0 .../generated/AssistantUsageEvent.java | 0 .../AssistantUsageQuotaSnapshot.java | 0 .../AutoModeResolvedReasoningBucket.java | 0 .../AutoModeSwitchCompletedEvent.java | 0 .../AutoModeSwitchRequestedEvent.java | 0 .../generated/AutoModeSwitchResponse.java | 0 .../AutopilotObjectiveChangedOperation.java | 0 .../AutopilotObjectiveChangedStatus.java | 0 .../copilot/generated/BinaryAssetType.java | 0 .../CanvasRegistryChangedCanvas.java | 0 .../CanvasRegistryChangedCanvasAction.java | 0 .../generated/CapabilitiesChangedEvent.java | 0 .../generated/CapabilitiesChangedUI.java | 0 .../copilot/generated/CitableSource.java | 0 .../copilot/generated/CitationProvider.java | 0 .../copilot/generated/CitationReference.java | 0 .../copilot/generated/CitationSource.java | 0 .../copilot/generated/CitationSpan.java | 0 .../github/copilot/generated/Citations.java | 0 .../generated/CommandCompletedEvent.java | 0 .../generated/CommandExecuteEvent.java | 0 .../copilot/generated/CommandQueuedEvent.java | 0 .../generated/CommandsChangedCommand.java | 0 .../generated/CommandsChangedEvent.java | 0 ...ompactionCompleteCompactionTokensUsed.java | 0 ...pleteCompactionTokensUsedCopilotUsage.java | 0 ...tionTokensUsedCopilotUsageTokenDetail.java | 0 .../copilot/generated/CompactionTrigger.java | 0 .../github/copilot/generated/ContextTier.java | 0 .../generated/CustomAgentsUpdatedAgent.java | 0 .../generated/ElicitationCompletedAction.java | 0 .../generated/ElicitationCompletedEvent.java | 0 .../generated/ElicitationRequestedEvent.java | 0 .../generated/ElicitationRequestedMode.java | 0 .../generated/ElicitationRequestedSchema.java | 0 .../copilot/generated/ExitPlanModeAction.java | 0 .../generated/ExitPlanModeCompletedEvent.java | 0 .../generated/ExitPlanModeRequestedEvent.java | 0 .../generated/ExtensionsLoadedExtension.java | 0 .../ExtensionsLoadedExtensionSource.java | 0 .../ExtensionsLoadedExtensionStatus.java | 0 .../generated/ExternalToolCompletedEvent.java | 0 .../generated/ExternalToolRequestedEvent.java | 0 .../generated/FactoryRunUpdatedEvent.java | 0 .../generated/GitHubMcpToolConfig.java | 0 .../copilot/generated/HandoffRepository.java | 0 .../copilot/generated/HandoffSourceType.java | 0 .../github/copilot/generated/HeaderEntry.java | 0 .../copilot/generated/HookEndError.java | 0 .../copilot/generated/HookEndEvent.java | 0 .../copilot/generated/HookProgressEvent.java | 0 .../copilot/generated/HookStartEvent.java | 0 .../ManagedSettingsEnforcedAction.java | 0 .../ManagedSettingsEnforcedEscalation.java | 0 .../ManagedSettingsResolvedSource.java | 0 .../McpAppToolCallCompleteError.java | 0 .../McpAppToolCallCompleteEvent.java | 0 .../McpAppToolCallCompleteToolMeta.java | 0 .../McpAppToolCallCompleteToolMetaUI.java | 0 .../McpHeadersRefreshCompletedEvent.java | 0 .../McpHeadersRefreshCompletedOutcome.java | 0 .../McpHeadersRefreshRequiredEvent.java | 0 .../McpHeadersRefreshRequiredReason.java | 0 .../generated/McpOauthCompletedEvent.java | 0 .../generated/McpOauthCompletionOutcome.java | 0 .../generated/McpOauthHttpResponse.java | 0 .../generated/McpOauthRequestReason.java | 0 .../generated/McpOauthRequiredEvent.java | 0 .../McpOauthRequiredStaticClientConfig.java | 0 .../McpOauthWWWAuthenticateParams.java | 0 .../generated/McpPromptsListChangedEvent.java | 0 .../McpResourcesListChangedEvent.java | 0 .../copilot/generated/McpServerSource.java | 0 .../copilot/generated/McpServerStatus.java | 0 .../copilot/generated/McpServerTransport.java | 0 .../generated/McpServersLoadedServer.java | 0 .../generated/McpToolsListChangedEvent.java | 0 .../ModelCallFailureBadRequestKind.java | 0 .../generated/ModelCallFailureEvent.java | 0 .../generated/ModelCallFailureKind.java | 0 .../ModelCallFailureRequestFingerprint.java | 0 .../generated/ModelCallFailureSource.java | 0 .../generated/ModelCallFailureTransport.java | 0 .../generated/ModelCallStartEvent.java | 0 .../PendingMessagesModifiedEvent.java | 0 .../generated/PermissionAllowAllMode.java | 0 .../generated/PermissionCompletedEvent.java | 0 .../generated/PermissionRequestedEvent.java | 0 .../generated/PlanChangedOperation.java | 0 .../copilot/generated/ReasoningSummary.java | 0 .../generated/SamplingCompletedEvent.java | 0 .../generated/SamplingRequestedEvent.java | 0 .../copilot/generated/ScheduleOrigin.java | 0 .../SessionAutoModeResolvedEvent.java | 0 ...SessionAutopilotObjectiveChangedEvent.java | 0 .../SessionBackgroundTasksChangedEvent.java | 0 .../generated/SessionBinaryAssetEvent.java | 0 .../generated/SessionCanvasClosedEvent.java | 0 .../generated/SessionCanvasOpenedEvent.java | 0 .../generated/SessionCanvasRecordedEvent.java | 0 .../SessionCanvasRegistryChangedEvent.java | 0 .../generated/SessionCanvasRemovedEvent.java | 0 .../SessionCanvasUnavailableEvent.java | 0 .../SessionCompactionCompleteEvent.java | 0 .../SessionCompactionStartEvent.java | 0 .../generated/SessionContextChangedEvent.java | 0 .../generated/SessionContextClearedEvent.java | 0 .../SessionCustomAgentsUpdatedEvent.java | 0 .../SessionCustomNotificationEvent.java | 0 .../copilot/generated/SessionErrorEvent.java | 0 .../copilot/generated/SessionEvent.java | 0 ...ssionExtensionsAttachmentsPushedEvent.java | 0 .../SessionExtensionsLoadedEvent.java | 0 .../generated/SessionHandoffEvent.java | 0 .../copilot/generated/SessionIdleEvent.java | 0 .../copilot/generated/SessionInfoEvent.java | 0 .../generated/SessionLimitsConfig.java | 0 .../SessionLimitsExhaustedCompletedEvent.java | 0 .../SessionLimitsExhaustedRequestedEvent.java | 0 .../SessionLimitsExhaustedResponse.java | 0 .../SessionLimitsExhaustedResponseAction.java | 0 .../SessionManagedSettingsEnforcedEvent.java | 0 .../SessionManagedSettingsResolvedEvent.java | 0 .../SessionMcpServerStatusChangedEvent.java | 0 .../SessionMcpServersLoadedEvent.java | 0 .../github/copilot/generated/SessionMode.java | 0 .../generated/SessionModeChangedEvent.java | 0 .../generated/SessionModelChangeEvent.java | 0 .../SessionPermissionsChangedEvent.java | 0 .../generated/SessionPlanChangedEvent.java | 0 .../SessionRemoteSteerableChangedEvent.java | 0 .../copilot/generated/SessionResumeEvent.java | 0 .../SessionScheduleCancelledEvent.java | 0 .../SessionScheduleCreatedEvent.java | 0 .../SessionScheduleRearmedEvent.java | 0 .../SessionSessionLimitsChangedEvent.java | 0 .../generated/SessionShutdownEvent.java | 0 .../generated/SessionSkillsLoadedEvent.java | 0 .../generated/SessionSnapshotRewindEvent.java | 0 .../copilot/generated/SessionStartEvent.java | 0 .../generated/SessionTaskCompleteEvent.java | 0 .../generated/SessionTitleChangedEvent.java | 0 .../generated/SessionTodosChangedEvent.java | 0 .../generated/SessionToolsUpdatedEvent.java | 0 .../generated/SessionTruncationEvent.java | 0 .../SessionUsageCheckpointEvent.java | 0 .../generated/SessionUsageInfoEvent.java | 0 .../generated/SessionWarningEvent.java | 0 .../SessionWorkspaceFileChangedEvent.java | 0 .../generated/ShutdownCodeChanges.java | 0 .../generated/ShutdownModelMetric.java | 0 .../ShutdownModelMetricRequests.java | 0 .../ShutdownModelMetricTokenDetail.java | 0 .../generated/ShutdownModelMetricUsage.java | 0 .../generated/ShutdownTokenDetail.java | 0 .../copilot/generated/ShutdownType.java | 0 .../copilot/generated/SkillInvokedEvent.java | 0 .../generated/SkillInvokedTrigger.java | 0 .../github/copilot/generated/SkillSource.java | 0 .../copilot/generated/SkillsLoadedSkill.java | 0 .../generated/SubagentCompletedEvent.java | 4 +- .../generated/SubagentDeselectedEvent.java | 0 .../generated/SubagentFailedEvent.java | 0 .../generated/SubagentSelectedEvent.java | 0 .../generated/SubagentStartedEvent.java | 0 .../copilot/generated/SystemMessageEvent.java | 0 .../generated/SystemMessageMetadata.java | 0 .../copilot/generated/SystemMessageRole.java | 0 .../generated/SystemNotificationEvent.java | 0 .../generated/TaskCompletionOutcome.java | 0 .../generated/ToolExecutionCompleteError.java | 0 .../generated/ToolExecutionCompleteEvent.java | 0 .../ToolExecutionCompleteResult.java | 0 .../ToolExecutionCompleteToolDescription.java | 0 ...lExecutionCompleteToolDescriptionMeta.java | 0 ...xecutionCompleteToolDescriptionMetaUI.java | 0 ...mpleteToolDescriptionMetaUIVisibility.java | 0 .../ToolExecutionCompleteUIResource.java | 0 .../ToolExecutionCompleteUIResourceMeta.java | 0 ...ToolExecutionCompleteUIResourceMetaUI.java | 0 ...lExecutionCompleteUIResourceMetaUICsp.java | 0 ...onCompleteUIResourceMetaUIPermissions.java | 0 ...leteUIResourceMetaUIPermissionsCamera.java | 0 ...sourceMetaUIPermissionsClipboardWrite.java | 0 ...IResourceMetaUIPermissionsGeolocation.java | 0 ...UIResourceMetaUIPermissionsMicrophone.java | 0 .../ToolExecutionPartialResultEvent.java | 0 .../generated/ToolExecutionProgressEvent.java | 0 .../generated/ToolExecutionStartEvent.java | 0 .../ToolExecutionStartShellToolInfo.java | 0 .../ToolExecutionStartToolDescription.java | 0 ...ToolExecutionStartToolDescriptionMeta.java | 0 ...olExecutionStartToolDescriptionMetaUI.java | 0 ...nStartToolDescriptionMetaUIVisibility.java | 0 .../generated/ToolSearchActivatedEvent.java | 0 .../generated/ToolUserRequestedEvent.java | 0 .../generated/UnknownSessionEvent.java | 0 .../UsageCheckpointModelCacheState.java | 0 .../generated/UserInputCompletedEvent.java | 0 .../generated/UserInputRequestedEvent.java | 0 .../generated/UserMessageAgentMode.java | 0 .../generated/UserMessageDelivery.java | 0 .../copilot/generated/UserMessageEvent.java | 0 .../github/copilot/generated/Verbosity.java | 0 .../generated/WorkingDirectoryContext.java | 0 .../WorkingDirectoryContextHostType.java | 0 .../WorkspaceFileChangedOperation.java | 0 .../copilot/generated/package-info.java | 0 .../copilot/generated/rpc/AbortReason.java | 0 .../generated/rpc/AccountAllUsers.java | 0 .../rpc/AccountGetCurrentAuthResult.java | 0 .../generated/rpc/AccountGetQuotaParams.java | 0 .../generated/rpc/AccountGetQuotaResult.java | 0 .../generated/rpc/AccountLoginParams.java | 0 .../generated/rpc/AccountLoginResult.java | 0 .../generated/rpc/AccountLogoutParams.java | 0 .../generated/rpc/AccountLogoutResult.java | 0 .../generated/rpc/AccountQuotaSnapshot.java | 0 .../rpc/AdaptiveThinkingSupport.java | 0 .../generated/rpc/AgentDiscoveryPath.java | 0 .../rpc/AgentDiscoveryPathScope.java | 0 .../copilot/generated/rpc/AgentInfo.java | 0 .../generated/rpc/AgentInfoSource.java | 0 .../rpc/AgentRegistryLiveTargetEntry.java | 0 ...tRegistryLiveTargetEntryAttentionKind.java | 0 .../rpc/AgentRegistryLiveTargetEntryKind.java | 0 ...istryLiveTargetEntryLastTerminalEvent.java | 0 .../AgentRegistryLiveTargetEntryStatus.java | 0 .../rpc/AgentRegistryLogCapture.java | 0 ...gentRegistryLogCaptureOpenErrorReason.java | 0 .../rpc/AgentRegistrySpawnError.java | 0 .../rpc/AgentRegistrySpawnParams.java | 0 .../rpc/AgentRegistrySpawnPermissionMode.java | 0 .../AgentRegistrySpawnRegistryTimeout.java | 0 .../rpc/AgentRegistrySpawnResult.java | 0 .../rpc/AgentRegistrySpawnSpawned.java | 0 .../AgentRegistrySpawnValidationError.java | 0 ...gentRegistrySpawnValidationErrorField.java | 0 ...entRegistrySpawnValidationErrorReason.java | 0 .../generated/rpc/AgentsDiscoverParams.java | 0 .../generated/rpc/AgentsDiscoverResult.java | 0 .../rpc/AgentsGetDiscoveryPathsParams.java | 0 .../rpc/AgentsGetDiscoveryPathsResult.java | 0 .../copilot/generated/rpc/AuthInfoType.java | 0 .../rpc/BuiltInModelCatalogEntry.java | 0 .../copilot/generated/rpc/CanvasAction.java | 0 .../rpc/CanvasActionInvokeParams.java | 0 .../generated/rpc/CanvasCloseParams.java | 0 .../generated/rpc/CanvasHostContext.java | 0 .../rpc/CanvasHostContextCapabilities.java | 0 .../generated/rpc/CanvasOpenParams.java | 0 .../generated/rpc/CanvasOpenResult.java | 0 .../generated/rpc/CanvasSessionContext.java | 0 .../generated/rpc/CapiSessionOptions.java | 0 .../generated/rpc/CommandsListResult.java | 0 .../copilot/generated/rpc/ConnectParams.java | 0 .../copilot/generated/rpc/ConnectResult.java | 0 .../rpc/ConnectedRemoteSessionMetadata.java | 0 .../ConnectedRemoteSessionMetadataKind.java | 0 ...nectedRemoteSessionMetadataRepository.java | 0 .../rpc/ContentExclusionPathCheck.java | 0 .../generated/rpc/ContextHeaviestMessage.java | 0 .../copilot/generated/rpc/ContextTier.java | 0 .../generated/rpc/CurrentToolMetadata.java | 0 .../rpc/DebugCollectLogsCollectedEntry.java | 0 .../generated/rpc/DebugCollectLogsEntry.java | 0 .../rpc/DebugCollectLogsEntryKind.java | 0 .../rpc/DebugCollectLogsInclude.java | 0 .../rpc/DebugCollectLogsRedaction.java | 0 .../rpc/DebugCollectLogsResultKind.java | 0 .../rpc/DebugCollectLogsSkippedEntry.java | 0 .../generated/rpc/DebugCollectLogsSource.java | 0 .../rpc/DisableBypassPermissionsMode.java | 0 .../generated/rpc/DiscoveredCanvas.java | 0 .../generated/rpc/DiscoveredExtension.java | 0 .../rpc/DiscoveredExtensionMode.java | 0 .../rpc/DiscoveredExtensionPlugin.java | 0 .../rpc/DiscoveredExtensionSource.java | 0 .../generated/rpc/DiscoveredMcpServer.java | 0 .../rpc/DiscoveredMcpServerType.java | 0 .../generated/rpc/EventsAgentScope.java | 0 .../generated/rpc/EventsCursorStatus.java | 0 .../generated/rpc/EventsReadDirection.java | 0 .../copilot/generated/rpc/Extension.java | 0 .../generated/rpc/ExtensionLaunchProfile.java | 0 ...ExtensionLaunchProviderResolveRequest.java | 0 .../ExtensionLaunchProviderResolveResult.java | 0 .../generated/rpc/ExtensionSource.java | 0 .../generated/rpc/ExtensionStatus.java | 0 .../rpc/ExtensionsDisableParams.java | 0 .../rpc/ExtensionsDiscoverResult.java | 0 .../generated/rpc/ExtensionsEnableParams.java | 0 .../generated/rpc/FactoryAbortParams.java | 0 .../generated/rpc/FactoryAgentOptions.java | 8 +- .../generated/rpc/FactoryAgentSummary.java | 0 .../generated/rpc/FactoryCurrentPhase.java | 0 .../generated/rpc/FactoryDeclaredLimits.java | 0 .../generated/rpc/FactoryExecuteParams.java | 0 .../generated/rpc/FactoryExecuteResult.java | 0 .../copilot/generated/rpc/FactoryLogLine.java | 0 .../generated/rpc/FactoryLogLineKind.java | 0 .../rpc/FactoryPhaseObservation.java | 0 .../generated/rpc/FactoryPhaseStatus.java | 0 .../generated/rpc/FactoryProgressLine.java | 0 .../generated/rpc/FactoryProgressPage.java | 0 .../generated/rpc/FactoryRunConsumed.java | 0 .../generated/rpc/FactoryRunLimits.java | 0 .../generated/rpc/FactoryRunResult.java | 0 .../generated/rpc/FactoryRunStatus.java | 0 .../generated/rpc/FactoryRunSummary.java | 0 .../generated/rpc/FactoryRunTerminal.java | 0 .../rpc/GitHubTelemetryClientInfo.java | 0 .../generated/rpc/GitHubTelemetryEvent.java | 0 .../rpc/GitHubTelemetryNotification.java | 0 .../rpc/HistoryCompactContextWindow.java | 0 .../rpc/HistoryFileRestoreSkipReason.java | 0 .../rpc/HistoryRewindChangeType.java | 0 .../rpc/HistoryRewindFilePreview.java | 0 .../generated/rpc/HistoryRewindMode.java | 0 .../generated/rpc/HistoryRewindOutcome.java | 0 .../generated/rpc/HistoryRewindPoint.java | 0 .../rpc/HistoryRewindUnavailableReason.java | 0 .../rpc/HistorySkippedFileRestore.java | 0 .../generated/rpc/HookInvokeRequest.java | 0 .../copilot/generated/rpc/HookType.java | 0 .../generated/rpc/HooksInvokeResult.java | 0 .../generated/rpc/InstalledPlugin.java | 0 .../generated/rpc/InstalledPluginInfo.java | 0 .../rpc/InstructionDiscoveryPath.java | 0 .../rpc/InstructionDiscoveryPathKind.java | 0 .../rpc/InstructionDiscoveryPathLocation.java | 0 .../generated/rpc/InstructionSource.java | 0 .../rpc/InstructionSourceLocation.java | 0 .../generated/rpc/InstructionSourceType.java | 0 .../rpc/InstructionsDiscoverParams.java | 0 .../rpc/InstructionsDiscoverResult.java | 0 .../InstructionsGetDiscoveryPathsParams.java | 0 .../InstructionsGetDiscoveryPathsResult.java | 0 .../LlmInferenceHttpRequestChunkRequest.java | 0 .../LlmInferenceHttpRequestChunkResult.java | 0 .../LlmInferenceHttpRequestStartRequest.java | 0 .../LlmInferenceHttpRequestStartResult.java | 0 ...LlmInferenceHttpRequestStartTransport.java | 0 .../LlmInferenceHttpResponseChunkError.java | 0 .../LlmInferenceHttpResponseChunkParams.java | 0 .../LlmInferenceHttpResponseChunkResult.java | 0 .../LlmInferenceHttpResponseStartParams.java | 0 .../LlmInferenceHttpResponseStartResult.java | 0 .../rpc/LlmInferenceSetProviderResult.java | 0 .../rpc/LocalSessionMetadataValue.java | 0 .../rpc/ManagedSettingsReadResult.java | 0 .../generated/rpc/MarketplaceInfo.java | 0 .../generated/rpc/MarketplacePluginInfo.java | 0 .../rpc/MarketplaceRefreshEntry.java | 0 .../generated/rpc/McpAllowedServer.java | 0 .../rpc/McpAppsDiagnoseCapability.java | 0 .../generated/rpc/McpAppsDiagnoseServer.java | 0 .../rpc/McpAppsHostContextDetails.java | 0 ...ostContextDetailsAvailableDisplayMode.java | 0 .../McpAppsHostContextDetailsDisplayMode.java | 0 .../McpAppsHostContextDetailsPlatform.java | 0 .../rpc/McpAppsHostContextDetailsTheme.java | 0 .../generated/rpc/McpAppsResourceContent.java | 0 .../rpc/McpAppsSetHostContextDetails.java | 0 ...ostContextDetailsAvailableDisplayMode.java | 0 ...pAppsSetHostContextDetailsDisplayMode.java | 0 .../McpAppsSetHostContextDetailsPlatform.java | 0 .../McpAppsSetHostContextDetailsTheme.java | 0 .../generated/rpc/McpConfigAddParams.java | 0 .../generated/rpc/McpConfigDisableParams.java | 0 .../generated/rpc/McpConfigEnableParams.java | 0 .../generated/rpc/McpConfigListResult.java | 0 .../generated/rpc/McpConfigRemoveParams.java | 0 .../generated/rpc/McpConfigUpdateParams.java | 0 .../generated/rpc/McpDiscoverParams.java | 0 .../generated/rpc/McpDiscoverResult.java | 0 .../rpc/McpExecuteSamplingRequest.java | 0 .../rpc/McpExecuteSamplingResult.java | 0 .../generated/rpc/McpFilteredServer.java | 0 .../copilot/generated/rpc/McpHostState.java | 0 .../generated/rpc/McpOauthLoginGrantType.java | 0 .../copilot/generated/rpc/McpResource.java | 0 .../generated/rpc/McpResourceAnnotations.java | 0 .../generated/rpc/McpResourceContent.java | 0 .../generated/rpc/McpResourceIcon.java | 0 .../generated/rpc/McpResourceTemplate.java | 0 .../rpc/McpSamplingExecutionAction.java | 0 .../copilot/generated/rpc/McpServer.java | 0 .../generated/rpc/McpServerFailureInfo.java | 0 .../generated/rpc/McpServerNeedsAuthInfo.java | 0 .../generated/rpc/McpServerSource.java | 0 .../generated/rpc/McpServerStatus.java | 0 .../rpc/McpSetEnvValueModeDetails.java | 0 .../copilot/generated/rpc/McpToolUi.java | 0 .../generated/rpc/McpToolUiVisibility.java | 0 .../copilot/generated/rpc/McpTools.java | 0 .../generated/rpc/MemoryConfiguration.java | 0 .../rpc/MetadataSnapshotCurrentMode.java | 0 .../rpc/MetadataSnapshotRemoteMetadata.java | 0 ...adataSnapshotRemoteMetadataRepository.java | 0 ...etadataSnapshotRemoteMetadataTaskType.java | 0 .../github/copilot/generated/rpc/Model.java | 0 .../copilot/generated/rpc/ModelBilling.java | 0 .../generated/rpc/ModelBillingPromo.java | 0 .../rpc/ModelBillingTokenPrices.java | 0 .../ModelBillingTokenPricesLongContext.java | 0 .../generated/rpc/ModelCapabilities.java | 0 .../rpc/ModelCapabilitiesLimits.java | 0 .../rpc/ModelCapabilitiesLimitsVision.java | 0 .../rpc/ModelCapabilitiesOverride.java | 0 .../rpc/ModelCapabilitiesOverrideLimits.java | 0 ...ModelCapabilitiesOverrideLimitsVision.java | 0 .../ModelCapabilitiesOverrideSupports.java | 0 .../rpc/ModelCapabilitiesSupports.java | 0 .../generated/rpc/ModelPickerCategory.java | 0 .../rpc/ModelPickerPriceCategory.java | 0 .../copilot/generated/rpc/ModelPolicy.java | 0 .../generated/rpc/ModelPolicyState.java | 0 .../rpc/ModelsGetBuiltInCatalogResult.java | 0 .../generated/rpc/ModelsListParams.java | 0 .../generated/rpc/ModelsListResult.java | 0 .../generated/rpc/NamedProviderConfig.java | 0 .../generated/rpc/OpenCanvasInstance.java | 0 ...pdateAdditionalContentExclusionPolicy.java | 0 ...eAdditionalContentExclusionPolicyRule.java | 0 ...ionalContentExclusionPolicyRuleSource.java | 0 ...AdditionalContentExclusionPolicyScope.java | 0 .../rpc/OptionsUpdateContextTier.java | 0 .../rpc/OptionsUpdateEnvValueMode.java | 0 .../rpc/OptionsUpdateReasoningSummary.java | 0 .../OptionsUpdateToolFilterPrecedence.java | 0 .../rpc/PendingPermissionRequest.java | 0 .../rpc/PermissionDecisionContext.java | 0 .../rpc/PermissionDecisionOutcome.java | 0 .../rpc/PermissionDecisionSource.java | 0 .../rpc/PermissionDecisionSurface.java | 0 .../generated/rpc/PermissionLocationType.java | 0 .../generated/rpc/PermissionPathsConfig.java | 0 .../copilot/generated/rpc/PermissionRule.java | 0 .../generated/rpc/PermissionRulesSet.java | 0 .../generated/rpc/PermissionUrlsConfig.java | 0 .../rpc/PermissionsAllowAllMode.java | 0 ...igureAdditionalContentExclusionPolicy.java | 0 ...eAdditionalContentExclusionPolicyRule.java | 0 ...ionalContentExclusionPolicyRuleSource.java | 0 ...AdditionalContentExclusionPolicyScope.java | 0 .../rpc/PermissionsModifyRulesScope.java | 0 .../rpc/PermissionsSetAllowAllSource.java | 0 .../rpc/PermissionsSetApproveAllSource.java | 0 .../copilot/generated/rpc/PingParams.java | 0 .../copilot/generated/rpc/PingResult.java | 0 .../generated/rpc/PlanSqlTodoDependency.java | 0 .../generated/rpc/PlanSqlTodosRow.java | 0 .../github/copilot/generated/rpc/Plugin.java | 0 .../generated/rpc/PluginUpdateAllEntry.java | 0 .../generated/rpc/PluginsDisableParams.java | 0 .../generated/rpc/PluginsEnableParams.java | 0 .../generated/rpc/PluginsInstallParams.java | 0 .../generated/rpc/PluginsInstallResult.java | 0 .../generated/rpc/PluginsListResult.java | 0 .../rpc/PluginsMarketplacesAddParams.java | 0 .../rpc/PluginsMarketplacesAddResult.java | 0 .../rpc/PluginsMarketplacesBrowseParams.java | 0 .../rpc/PluginsMarketplacesBrowseResult.java | 0 .../rpc/PluginsMarketplacesListResult.java | 0 .../rpc/PluginsMarketplacesRefreshParams.java | 0 .../rpc/PluginsMarketplacesRefreshResult.java | 0 .../rpc/PluginsMarketplacesRemoveParams.java | 0 .../rpc/PluginsMarketplacesRemoveResult.java | 0 .../generated/rpc/PluginsUninstallParams.java | 0 .../generated/rpc/PluginsUpdateAllResult.java | 0 .../generated/rpc/PluginsUpdateParams.java | 0 .../generated/rpc/PluginsUpdateResult.java | 0 .../copilot/generated/rpc/ProviderConfig.java | 0 .../generated/rpc/ProviderConfigAzure.java | 0 .../rpc/ProviderConfigTransport.java | 0 .../generated/rpc/ProviderConfigType.java | 0 .../generated/rpc/ProviderConfigWireApi.java | 0 .../rpc/ProviderEndpointTransport.java | 0 .../generated/rpc/ProviderEndpointType.java | 0 .../rpc/ProviderEndpointWireApi.java | 0 .../generated/rpc/ProviderModelConfig.java | 0 .../generated/rpc/ProviderSessionToken.java | 0 .../rpc/ProviderTokenGetTokenParams.java | 0 .../rpc/ProviderTokenGetTokenResult.java | 0 .../generated/rpc/QueueInsertMessage.java | 0 .../generated/rpc/QueuePendingItems.java | 0 .../generated/rpc/QueuePendingItemsKind.java | 0 .../generated/rpc/ReasoningSummary.java | 0 .../generated/rpc/RemoteControlConfig.java | 0 .../RemoteControlConfigExistingMcSession.java | 0 .../rpc/RemoteSessionMetadataRepository.java | 0 .../rpc/RemoteSessionMetadataTaskType.java | 0 .../rpc/RemoteSessionMetadataValue.java | 0 .../generated/rpc/RemoteSessionMode.java | 0 .../rpc/RemoteSessionRepository.java | 0 .../copilot/generated/rpc/RpcCaller.java | 0 .../copilot/generated/rpc/RpcMapper.java | 0 .../copilot/generated/rpc/RunOptions.java | 0 .../copilot/generated/rpc/SandboxConfig.java | 6 +- .../rpc/SandboxConfigUserPolicy.java | 0 .../SandboxConfigUserPolicyExperimental.java | 0 ...xConfigUserPolicyExperimentalSeatbelt.java | 0 .../SandboxConfigUserPolicyFilesystem.java | 0 .../rpc/SandboxConfigUserPolicyNetwork.java | 0 .../SandboxConfigUserPolicyNetworkProxy.java | 0 .../rpc/SandboxConfigUserPolicySeatbelt.java | 0 .../copilot/generated/rpc/ScheduleEntry.java | 0 .../rpc/SecretsAddFilterValuesParams.java | 0 .../rpc/SecretsAddFilterValuesResult.java | 0 .../copilot/generated/rpc/SendAgentMode.java | 0 .../generated/rpc/SendMessageItem.java | 0 .../copilot/generated/rpc/SendMode.java | 0 .../generated/rpc/ServerAccountApi.java | 0 .../generated/rpc/ServerAgentRegistryApi.java | 0 .../generated/rpc/ServerAgentsApi.java | 0 .../generated/rpc/ServerCommandsApi.java | 0 .../generated/rpc/ServerExtensionsApi.java | 0 .../generated/rpc/ServerInstructionsApi.java | 0 .../generated/rpc/ServerLlmInferenceApi.java | 0 .../rpc/ServerManagedSettingsApi.java | 0 .../copilot/generated/rpc/ServerMcpApi.java | 0 .../generated/rpc/ServerMcpConfigApi.java | 0 .../generated/rpc/ServerModelsApi.java | 0 .../generated/rpc/ServerPluginsApi.java | 0 .../rpc/ServerPluginsMarketplacesApi.java | 0 .../copilot/generated/rpc/ServerRpc.java | 0 .../generated/rpc/ServerRuntimeApi.java | 0 .../generated/rpc/ServerSecretsApi.java | 0 .../generated/rpc/ServerSessionFsApi.java | 0 .../generated/rpc/ServerSessionsApi.java | 0 .../copilot/generated/rpc/ServerSkill.java | 0 .../generated/rpc/ServerSkillsApi.java | 0 .../generated/rpc/ServerSkillsConfigApi.java | 0 .../copilot/generated/rpc/ServerToolsApi.java | 0 .../copilot/generated/rpc/ServerUserApi.java | 0 .../generated/rpc/ServerUserSettingsApi.java | 0 .../generated/rpc/SessionAbortParams.java | 0 .../generated/rpc/SessionAbortResult.java | 0 .../generated/rpc/SessionAgentApi.java | 0 .../rpc/SessionAgentDeselectParams.java | 0 .../rpc/SessionAgentGetCurrentParams.java | 0 .../rpc/SessionAgentGetCurrentResult.java | 0 .../generated/rpc/SessionAgentListParams.java | 0 .../generated/rpc/SessionAgentListResult.java | 0 .../rpc/SessionAgentReloadParams.java | 0 .../rpc/SessionAgentReloadResult.java | 0 .../rpc/SessionAgentSelectParams.java | 0 .../rpc/SessionAgentSelectResult.java | 0 .../rpc/SessionAgentSetPromptParams.java | 0 ...essionCancelAllBackgroundAgentsParams.java | 0 .../generated/rpc/SessionCanvasActionApi.java | 0 .../rpc/SessionCanvasActionInvokeParams.java | 0 .../rpc/SessionCanvasActionInvokeResult.java | 0 .../generated/rpc/SessionCanvasApi.java | 0 .../rpc/SessionCanvasCloseParams.java | 0 .../rpc/SessionCanvasListOpenParams.java | 0 .../rpc/SessionCanvasListOpenResult.java | 0 .../rpc/SessionCanvasListParams.java | 0 .../rpc/SessionCanvasListResult.java | 0 .../rpc/SessionCanvasOpenParams.java | 0 .../rpc/SessionCanvasOpenResult.java | 0 .../generated/rpc/SessionCapability.java | 0 .../generated/rpc/SessionCommandsApi.java | 0 .../rpc/SessionCommandsEnqueueParams.java | 0 .../rpc/SessionCommandsEnqueueResult.java | 0 .../rpc/SessionCommandsExecuteParams.java | 0 .../rpc/SessionCommandsExecuteResult.java | 0 ...ionCommandsHandlePendingCommandParams.java | 0 ...ionCommandsHandlePendingCommandResult.java | 0 .../rpc/SessionCommandsInvokeParams.java | 0 .../rpc/SessionCommandsListParams.java | 0 .../rpc/SessionCommandsListResult.java | 0 ...nCommandsRespondToQueuedCommandParams.java | 0 ...nCommandsRespondToQueuedCommandResult.java | 0 .../generated/rpc/SessionCompletionItem.java | 0 .../generated/rpc/SessionCompletionsApi.java | 0 ...CompletionsGetTriggerCharactersParams.java | 0 ...CompletionsGetTriggerCharactersResult.java | 0 .../rpc/SessionCompletionsRequestParams.java | 0 .../rpc/SessionCompletionsRequestResult.java | 0 .../rpc/SessionContentExclusionApi.java | 0 ...ssionContentExclusionCheckPathsParams.java | 0 ...ssionContentExclusionCheckPathsResult.java | 0 .../copilot/generated/rpc/SessionContext.java | 0 .../generated/rpc/SessionContextHostType.java | 0 .../generated/rpc/SessionDebugApi.java | 0 .../rpc/SessionDebugCollectLogsParams.java | 0 .../rpc/SessionDebugCollectLogsResult.java | 0 .../generated/rpc/SessionEventLogApi.java | 0 .../rpc/SessionEventLogReadParams.java | 0 .../rpc/SessionEventLogReadResult.java | 0 ...SessionEventLogRegisterInterestParams.java | 0 ...SessionEventLogRegisterInterestResult.java | 0 .../SessionEventLogReleaseInterestParams.java | 0 .../SessionEventLogReleaseInterestResult.java | 0 .../rpc/SessionEventLogTailParams.java | 0 .../rpc/SessionEventLogTailResult.java | 0 .../generated/rpc/SessionExtensionsApi.java | 0 .../rpc/SessionExtensionsDisableParams.java | 0 .../rpc/SessionExtensionsEnableParams.java | 0 .../rpc/SessionExtensionsListParams.java | 0 .../rpc/SessionExtensionsListResult.java | 0 .../rpc/SessionExtensionsReloadParams.java | 0 ...ensionsSendAttachmentsToMessageParams.java | 0 .../rpc/SessionFactoryAgentParams.java | 0 .../rpc/SessionFactoryAgentResult.java | 0 .../generated/rpc/SessionFactoryApi.java | 11 +- .../rpc/SessionFactoryCancelParams.java | 0 .../rpc/SessionFactoryCancelResult.java | 0 .../rpc/SessionFactoryGetRunDetailParams.java | 0 .../rpc/SessionFactoryGetRunDetailResult.java | 0 .../rpc/SessionFactoryGetRunParams.java | 0 .../SessionFactoryGetRunProgressParams.java | 0 .../SessionFactoryGetRunProgressResult.java | 0 .../rpc/SessionFactoryGetRunResult.java | 0 .../rpc/SessionFactoryJournalApi.java | 0 .../rpc/SessionFactoryJournalGetParams.java | 0 .../rpc/SessionFactoryJournalGetResult.java | 0 .../rpc/SessionFactoryJournalPutParams.java | 0 .../rpc/SessionFactoryListRunsParams.java | 10 +- .../rpc/SessionFactoryListRunsResult.java | 12 +- .../rpc/SessionFactoryLogParams.java | 0 .../rpc/SessionFactoryResumeParams.java | 0 .../rpc/SessionFactoryResumeResult.java | 0 .../rpc/SessionFactoryRunParams.java | 0 .../rpc/SessionFactoryRunResult.java | 0 .../generated/rpc/SessionFleetApi.java | 0 .../rpc/SessionFleetStartParams.java | 0 .../rpc/SessionFleetStartResult.java | 0 .../rpc/SessionFsAppendFileParams.java | 0 .../copilot/generated/rpc/SessionFsError.java | 0 .../generated/rpc/SessionFsErrorCode.java | 0 .../generated/rpc/SessionFsExistsParams.java | 0 .../generated/rpc/SessionFsExistsResult.java | 0 .../generated/rpc/SessionFsMkdirParams.java | 0 .../rpc/SessionFsReadFileParams.java | 0 .../rpc/SessionFsReadFileResult.java | 0 .../generated/rpc/SessionFsReaddirParams.java | 0 .../generated/rpc/SessionFsReaddirResult.java | 0 .../rpc/SessionFsReaddirWithTypesEntry.java | 0 .../SessionFsReaddirWithTypesEntryType.java | 0 .../rpc/SessionFsReaddirWithTypesParams.java | 0 .../rpc/SessionFsReaddirWithTypesResult.java | 0 .../generated/rpc/SessionFsRenameParams.java | 0 .../generated/rpc/SessionFsRmParams.java | 0 .../rpc/SessionFsSetProviderCapabilities.java | 0 .../rpc/SessionFsSetProviderConventions.java | 0 .../rpc/SessionFsSetProviderParams.java | 0 .../rpc/SessionFsSetProviderResult.java | 0 .../rpc/SessionFsSqliteExistsParams.java | 0 .../rpc/SessionFsSqliteExistsResult.java | 0 .../rpc/SessionFsSqliteQueryParams.java | 0 .../rpc/SessionFsSqliteQueryResult.java | 0 .../rpc/SessionFsSqliteQueryType.java | 0 .../rpc/SessionFsSqliteTransactionError.java | 0 .../SessionFsSqliteTransactionErrorClass.java | 0 .../rpc/SessionFsSqliteTransactionParams.java | 0 .../rpc/SessionFsSqliteTransactionResult.java | 0 .../SessionFsSqliteTransactionStatement.java | 0 .../generated/rpc/SessionFsStatParams.java | 0 .../generated/rpc/SessionFsStatResult.java | 0 .../rpc/SessionFsWriteFileParams.java | 0 .../generated/rpc/SessionGitHubAuthApi.java | 0 .../rpc/SessionGitHubAuthGetStatusParams.java | 0 .../rpc/SessionGitHubAuthGetStatusResult.java | 0 ...SessionGitHubAuthSetCredentialsParams.java | 0 ...SessionGitHubAuthSetCredentialsResult.java | 0 ...ionHistoryAbortManualCompactionParams.java | 0 ...ionHistoryAbortManualCompactionResult.java | 0 .../generated/rpc/SessionHistoryApi.java | 0 ...storyCancelBackgroundCompactionParams.java | 0 ...storyCancelBackgroundCompactionResult.java | 0 .../rpc/SessionHistoryClearContextParams.java | 0 .../rpc/SessionHistoryClearContextResult.java | 0 .../rpc/SessionHistoryCompactParams.java | 0 .../rpc/SessionHistoryCompactResult.java | 0 .../SessionHistoryListRewindPointsParams.java | 0 .../SessionHistoryListRewindPointsResult.java | 0 .../SessionHistoryPreviewRewindParams.java | 0 .../SessionHistoryPreviewRewindResult.java | 0 .../rpc/SessionHistoryRewindParams.java | 0 .../rpc/SessionHistoryRewindResult.java | 0 ...ssionHistorySummarizeForHandoffParams.java | 0 ...ssionHistorySummarizeForHandoffResult.java | 0 .../rpc/SessionHistoryTruncateParams.java | 0 .../rpc/SessionHistoryTruncateResult.java | 0 .../generated/rpc/SessionInstalledPlugin.java | 0 .../generated/rpc/SessionInstructionsApi.java | 0 .../SessionInstructionsGetSourcesParams.java | 0 .../SessionInstructionsGetSourcesResult.java | 0 .../rpc/SessionInterruptMainTurnParams.java | 0 .../rpc/SessionInterruptMainTurnResult.java | 0 .../rpc/SessionLimitPredictionApi.java | 0 .../SessionLimitPredictionBaselineData.java | 0 .../rpc/SessionLimitPredictionClientType.java | 0 .../rpc/SessionLimitPredictionDetails.java | 0 .../SessionLimitPredictionPredictParams.java | 0 .../rpc/SessionLimitPredictionResult.java | 0 ...SessionLimitPredictionResultAvailable.java | 0 ...ssionLimitPredictionResultUnavailable.java | 0 .../rpc/SessionLimitPredictionSource.java | 0 .../rpc/SessionLimitPredictionTier.java | 0 .../rpc/SessionLimitPredictionTierOption.java | 0 ...ssionLimitPredictionUnavailableReason.java | 0 .../generated/rpc/SessionLimitsConfig.java | 0 .../generated/rpc/SessionListFilter.java | 0 .../generated/rpc/SessionLogLevel.java | 0 .../generated/rpc/SessionLogParams.java | 0 .../generated/rpc/SessionLogResult.java | 0 .../copilot/generated/rpc/SessionLspApi.java | 0 .../rpc/SessionLspInitializeParams.java | 0 .../rpc/SessionManagedPermissions.java | 0 .../generated/rpc/SessionManagedSettings.java | 0 .../copilot/generated/rpc/SessionMcpApi.java | 0 .../generated/rpc/SessionMcpAppsApi.java | 0 .../rpc/SessionMcpAppsCallToolParams.java | 0 .../rpc/SessionMcpAppsDiagnoseParams.java | 0 .../rpc/SessionMcpAppsDiagnoseResult.java | 0 .../SessionMcpAppsGetHostContextParams.java | 0 .../SessionMcpAppsGetHostContextResult.java | 0 .../rpc/SessionMcpAppsListToolsParams.java | 0 .../rpc/SessionMcpAppsListToolsResult.java | 0 .../rpc/SessionMcpAppsReadResourceParams.java | 0 .../rpc/SessionMcpAppsReadResourceResult.java | 0 .../SessionMcpAppsSetHostContextParams.java | 0 ...ssionMcpCancelSamplingExecutionParams.java | 0 ...ssionMcpCancelSamplingExecutionResult.java | 0 .../rpc/SessionMcpConfigureGitHubParams.java | 0 .../rpc/SessionMcpConfigureGitHubResult.java | 0 .../rpc/SessionMcpDisableParams.java | 0 .../generated/rpc/SessionMcpEnableParams.java | 0 .../rpc/SessionMcpExecuteSamplingParams.java | 0 .../rpc/SessionMcpExecuteSamplingResult.java | 0 .../generated/rpc/SessionMcpHeadersApi.java | 0 ...dlePendingHeadersRefreshRequestParams.java | 0 ...dlePendingHeadersRefreshRequestResult.java | 0 .../rpc/SessionMcpIsServerRunningParams.java | 0 .../rpc/SessionMcpIsServerRunningResult.java | 0 .../generated/rpc/SessionMcpListParams.java | 0 .../generated/rpc/SessionMcpListResult.java | 0 .../rpc/SessionMcpListToolsParams.java | 0 .../rpc/SessionMcpListToolsResult.java | 0 .../generated/rpc/SessionMcpOauthApi.java | 0 ...OauthAuthenticationStateChangedParams.java | 0 ...ionMcpOauthHandlePendingRequestParams.java | 0 ...ionMcpOauthHandlePendingRequestResult.java | 0 .../rpc/SessionMcpOauthLoginParams.java | 0 .../rpc/SessionMcpOauthLoginResult.java | 0 .../rpc/SessionMcpOauthRespondParams.java | 0 .../rpc/SessionMcpOauthRespondResult.java | 0 ...essionMcpRegisterExternalClientParams.java | 0 .../generated/rpc/SessionMcpReloadParams.java | 0 .../rpc/SessionMcpReloadWithConfigParams.java | 0 .../rpc/SessionMcpReloadWithConfigResult.java | 0 .../rpc/SessionMcpRemoveGitHubParams.java | 0 .../rpc/SessionMcpRemoveGitHubResult.java | 0 .../generated/rpc/SessionMcpResourcesApi.java | 0 .../rpc/SessionMcpResourcesListParams.java | 0 .../rpc/SessionMcpResourcesListResult.java | 0 ...essionMcpResourcesListTemplatesParams.java | 0 ...essionMcpResourcesListTemplatesResult.java | 0 .../rpc/SessionMcpResourcesReadParams.java | 0 .../rpc/SessionMcpResourcesReadResult.java | 0 .../rpc/SessionMcpRestartServerParams.java | 0 .../rpc/SessionMcpSetEnvValueModeParams.java | 0 .../rpc/SessionMcpSetEnvValueModeResult.java | 0 .../rpc/SessionMcpStartServerParams.java | 0 .../rpc/SessionMcpStopServerParams.java | 0 ...sionMcpUnregisterExternalClientParams.java | 0 .../rpc/SessionMetadataActivityParams.java | 0 .../rpc/SessionMetadataActivityResult.java | 0 .../generated/rpc/SessionMetadataApi.java | 0 .../rpc/SessionMetadataContextInfoParams.java | 0 .../rpc/SessionMetadataContextInfoResult.java | 0 ...onMetadataGetContextAttributionParams.java | 0 ...onMetadataGetContextAttributionResult.java | 0 ...adataGetContextHeaviestMessagesParams.java | 0 ...adataGetContextHeaviestMessagesResult.java | 0 .../SessionMetadataIsProcessingParams.java | 0 .../SessionMetadataIsProcessingResult.java | 0 ...nMetadataRecomputeContextTokensParams.java | 0 ...nMetadataRecomputeContextTokensResult.java | 0 ...sionMetadataRecordContextChangeParams.java | 0 ...sionMetadataSetWorkingDirectoryParams.java | 0 ...sionMetadataSetWorkingDirectoryResult.java | 0 .../rpc/SessionMetadataSnapshotParams.java | 0 .../rpc/SessionMetadataSnapshotResult.java | 0 .../copilot/generated/rpc/SessionMode.java | 0 .../copilot/generated/rpc/SessionModeApi.java | 0 .../generated/rpc/SessionModeGetParams.java | 0 .../generated/rpc/SessionModeSetParams.java | 0 .../generated/rpc/SessionModelApi.java | 0 .../rpc/SessionModelGetCurrentParams.java | 0 .../rpc/SessionModelGetCurrentResult.java | 0 .../generated/rpc/SessionModelListParams.java | 0 .../generated/rpc/SessionModelListResult.java | 0 .../rpc/SessionModelPriceCategory.java | 0 .../SessionModelSetReasoningEffortParams.java | 0 .../SessionModelSetReasoningEffortResult.java | 0 .../rpc/SessionModelSwitchToParams.java | 0 .../rpc/SessionModelSwitchToResult.java | 0 .../copilot/generated/rpc/SessionNameApi.java | 0 .../generated/rpc/SessionNameGetParams.java | 0 .../generated/rpc/SessionNameGetResult.java | 0 .../rpc/SessionNameSetAutoParams.java | 0 .../rpc/SessionNameSetAutoResult.java | 0 .../generated/rpc/SessionNameSetParams.java | 0 .../generated/rpc/SessionOpenOptions.java | 0 ...tionsAdditionalContentExclusionPolicy.java | 0 ...sAdditionalContentExclusionPolicyRule.java | 0 ...ionalContentExclusionPolicyRuleSource.java | 0 ...AdditionalContentExclusionPolicyScope.java | 0 .../rpc/SessionOpenOptionsEnvValueMode.java | 0 .../SessionOpenOptionsReasoningSummary.java | 0 .../generated/rpc/SessionOptionsApi.java | 0 .../rpc/SessionOptionsUpdateParams.java | 0 .../rpc/SessionOptionsUpdateResult.java | 0 .../generated/rpc/SessionPermissionsApi.java | 0 .../SessionPermissionsConfigureParams.java | 0 .../SessionPermissionsConfigureResult.java | 0 ...ermissionsFolderTrustAddTrustedParams.java | 0 ...ermissionsFolderTrustAddTrustedResult.java | 0 .../rpc/SessionPermissionsFolderTrustApi.java | 0 ...PermissionsFolderTrustIsTrustedParams.java | 0 ...PermissionsFolderTrustIsTrustedResult.java | 0 .../SessionPermissionsGetAllowAllParams.java | 0 .../SessionPermissionsGetAllowAllResult.java | 0 ...sHandlePendingPermissionRequestParams.java | 0 ...sHandlePendingPermissionRequestResult.java | 0 ...issionsLocationsAddToolApprovalParams.java | 0 ...issionsLocationsAddToolApprovalResult.java | 0 .../rpc/SessionPermissionsLocationsApi.java | 0 ...essionPermissionsLocationsApplyParams.java | 0 ...essionPermissionsLocationsApplyResult.java | 0 ...sionPermissionsLocationsResolveParams.java | 0 ...sionPermissionsLocationsResolveResult.java | 0 .../SessionPermissionsModifyRulesParams.java | 0 .../SessionPermissionsModifyRulesResult.java | 0 ...ionPermissionsNotifyPromptShownParams.java | 0 ...ionPermissionsNotifyPromptShownResult.java | 0 .../rpc/SessionPermissionsPathsAddParams.java | 0 .../rpc/SessionPermissionsPathsAddResult.java | 0 .../rpc/SessionPermissionsPathsApi.java | 0 ...sIsPathWithinAllowedDirectoriesParams.java | 0 ...sIsPathWithinAllowedDirectoriesResult.java | 0 ...sionsPathsIsPathWithinWorkspaceParams.java | 0 ...sionsPathsIsPathWithinWorkspaceResult.java | 0 .../SessionPermissionsPathsListParams.java | 0 .../SessionPermissionsPathsListResult.java | 0 ...onPermissionsPathsUpdatePrimaryParams.java | 0 ...onPermissionsPathsUpdatePrimaryResult.java | 0 ...ssionPermissionsPendingRequestsParams.java | 0 ...ssionPermissionsPendingRequestsResult.java | 0 ...ermissionsResetSessionApprovalsParams.java | 0 ...ermissionsResetSessionApprovalsResult.java | 0 .../SessionPermissionsSetAllowAllParams.java | 0 .../SessionPermissionsSetAllowAllResult.java | 0 ...SessionPermissionsSetApproveAllParams.java | 0 ...SessionPermissionsSetApproveAllResult.java | 0 .../SessionPermissionsSetRequiredParams.java | 0 .../SessionPermissionsSetRequiredResult.java | 0 .../rpc/SessionPermissionsUrlsApi.java | 0 ...missionsUrlsSetUnrestrictedModeParams.java | 0 ...missionsUrlsSetUnrestrictedModeResult.java | 0 .../copilot/generated/rpc/SessionPlanApi.java | 0 .../rpc/SessionPlanDeleteParams.java | 0 .../generated/rpc/SessionPlanReadParams.java | 0 .../generated/rpc/SessionPlanReadResult.java | 0 .../rpc/SessionPlanReadSqlTodosParams.java | 0 .../rpc/SessionPlanReadSqlTodosResult.java | 0 ...lanReadSqlTodosWithDependenciesParams.java | 0 ...lanReadSqlTodosWithDependenciesResult.java | 0 .../rpc/SessionPlanUpdateParams.java | 0 .../generated/rpc/SessionPluginsApi.java | 0 .../rpc/SessionPluginsListParams.java | 0 .../rpc/SessionPluginsListResult.java | 0 .../rpc/SessionPluginsReloadParams.java | 0 .../rpc/SessionProviderAddParams.java | 0 .../rpc/SessionProviderAddResult.java | 0 .../generated/rpc/SessionProviderApi.java | 0 .../rpc/SessionProviderGetEndpointParams.java | 0 .../rpc/SessionProviderGetEndpointResult.java | 0 .../generated/rpc/SessionQueueApi.java | 0 ...sionQueueBeginDeferredIdleDrainParams.java | 0 ...sionQueueBeginDeferredIdleDrainResult.java | 0 .../rpc/SessionQueueClearParams.java | 0 ...QueueConsumeSystemNotificationsParams.java | 0 ...QueueConsumeSystemNotificationsResult.java | 0 .../SessionQueueDeferSessionIdleParams.java | 0 .../rpc/SessionQueueDuplicateAtParams.java | 0 .../rpc/SessionQueueDuplicateAtResult.java | 0 ...essionQueueEnqueueResumePendingParams.java | 0 ...essionQueueEnqueueResumePendingResult.java | 0 ...ionQueueFinishDeferredIdleDrainParams.java | 0 ...ionQueueFinishDeferredIdleDrainResult.java | 0 .../rpc/SessionQueueHasPendingParams.java | 0 .../rpc/SessionQueueHasPendingResult.java | 0 .../rpc/SessionQueueInsertAtParams.java | 0 .../rpc/SessionQueueInsertAtResult.java | 0 .../rpc/SessionQueueMoveItemParams.java | 0 .../rpc/SessionQueueMoveItemResult.java | 0 .../rpc/SessionQueuePendingItemsParams.java | 0 .../rpc/SessionQueuePendingItemsResult.java | 0 .../rpc/SessionQueueProcessParams.java | 0 .../rpc/SessionQueueRemoveAtParams.java | 0 .../rpc/SessionQueueRemoveAtResult.java | 0 .../SessionQueueRemoveMostRecentParams.java | 0 .../SessionQueueRemoveMostRecentResult.java | 0 .../rpc/SessionQueueSendNowParams.java | 0 .../rpc/SessionQueueSendNowResult.java | 0 .../rpc/SessionQueueSetDrainPausedParams.java | 0 .../rpc/SessionQueueSnapshotParams.java | 0 .../rpc/SessionQueueSnapshotResult.java | 0 .../rpc/SessionQueueUpdateTextParams.java | 0 .../rpc/SessionQueueUpdateTextResult.java | 0 .../generated/rpc/SessionRemoteApi.java | 0 .../rpc/SessionRemoteDisableParams.java | 0 .../rpc/SessionRemoteEnableParams.java | 0 .../rpc/SessionRemoteEnableResult.java | 0 ...ionRemoteNotifySteerableChangedParams.java | 0 .../copilot/generated/rpc/SessionRpc.java | 0 .../rpc/SessionScheduleAddAtParams.java | 0 .../rpc/SessionScheduleAddAtResult.java | 0 .../rpc/SessionScheduleAddCronParams.java | 0 .../rpc/SessionScheduleAddCronResult.java | 0 .../rpc/SessionScheduleAddParams.java | 0 .../rpc/SessionScheduleAddResult.java | 0 .../SessionScheduleAddSelfPacedParams.java | 0 .../SessionScheduleAddSelfPacedResult.java | 0 .../generated/rpc/SessionScheduleApi.java | 0 .../SessionScheduleHasSelfPacedParams.java | 0 .../SessionScheduleHasSelfPacedResult.java | 0 .../rpc/SessionScheduleHydrateParams.java | 0 .../rpc/SessionScheduleListParams.java | 0 .../rpc/SessionScheduleListResult.java | 0 .../SessionScheduleRearmSelfPacedParams.java | 0 .../SessionScheduleRearmSelfPacedResult.java | 0 .../rpc/SessionScheduleStopParams.java | 0 .../rpc/SessionScheduleStopResult.java | 0 .../rpc/SessionSendMessagesParams.java | 0 .../rpc/SessionSendMessagesResult.java | 0 .../generated/rpc/SessionSendParams.java | 0 .../generated/rpc/SessionSendResult.java | 0 .../SessionSendSystemNotificationParams.java | 0 .../generated/rpc/SessionSettingsApi.java | 0 ...ttingsBuiltInToolAvailabilitySnapshot.java | 0 ...essionSettingsEvaluatePredicateParams.java | 0 ...essionSettingsEvaluatePredicateResult.java | 0 .../rpc/SessionSettingsJobSnapshot.java | 0 .../rpc/SessionSettingsModelSnapshot.java | 0 ...ssionSettingsOnlineEvaluationSnapshot.java | 0 .../rpc/SessionSettingsPredicateName.java | 0 .../rpc/SessionSettingsRepoSnapshot.java | 0 .../rpc/SessionSettingsSnapshotParams.java | 0 .../rpc/SessionSettingsSnapshotResult.java | 0 .../SessionSettingsValidationSnapshot.java | 0 .../generated/rpc/SessionShellApi.java | 0 ...SessionShellCancelUserRequestedParams.java | 0 ...SessionShellCancelUserRequestedResult.java | 0 .../generated/rpc/SessionShellExecParams.java | 0 .../generated/rpc/SessionShellExecResult.java | 0 ...essionShellExecuteUserRequestedParams.java | 0 ...essionShellExecuteUserRequestedResult.java | 0 .../generated/rpc/SessionShellKillParams.java | 0 .../generated/rpc/SessionShellKillResult.java | 0 .../generated/rpc/SessionShutdownParams.java | 0 .../generated/rpc/SessionSkillsApi.java | 0 .../rpc/SessionSkillsDisableParams.java | 0 .../rpc/SessionSkillsEnableParams.java | 0 .../rpc/SessionSkillsEnsureLoadedParams.java | 0 .../rpc/SessionSkillsGetInvokedParams.java | 0 .../rpc/SessionSkillsGetInvokedResult.java | 0 .../rpc/SessionSkillsListParams.java | 0 .../rpc/SessionSkillsListResult.java | 0 .../rpc/SessionSkillsReloadParams.java | 0 .../rpc/SessionSkillsReloadResult.java | 0 .../copilot/generated/rpc/SessionSource.java | 0 .../generated/rpc/SessionSuspendParams.java | 0 .../generated/rpc/SessionTasksApi.java | 0 .../rpc/SessionTasksCancelParams.java | 0 .../rpc/SessionTasksCancelResult.java | 0 ...essionTasksGetCurrentPromotableParams.java | 0 ...essionTasksGetCurrentPromotableResult.java | 0 .../rpc/SessionTasksGetProgressParams.java | 0 .../rpc/SessionTasksGetProgressResult.java | 0 .../generated/rpc/SessionTasksListParams.java | 0 .../generated/rpc/SessionTasksListResult.java | 0 ...TasksPromoteCurrentToBackgroundParams.java | 0 ...TasksPromoteCurrentToBackgroundResult.java | 0 ...SessionTasksPromoteToBackgroundParams.java | 0 ...SessionTasksPromoteToBackgroundResult.java | 0 .../rpc/SessionTasksRefreshParams.java | 0 .../rpc/SessionTasksRemoveParams.java | 0 .../rpc/SessionTasksRemoveResult.java | 0 .../rpc/SessionTasksSendMessageParams.java | 0 .../rpc/SessionTasksSendMessageResult.java | 0 .../rpc/SessionTasksStartAgentParams.java | 0 .../rpc/SessionTasksStartAgentResult.java | 0 .../rpc/SessionTasksWaitForPendingParams.java | 0 .../generated/rpc/SessionTelemetryApi.java | 0 ...SessionTelemetryGetEngagementIdParams.java | 0 ...SessionTelemetryGetEngagementIdResult.java | 0 ...ionTelemetrySetFeatureOverridesParams.java | 0 .../generated/rpc/SessionToolsApi.java | 0 .../SessionToolsGetCurrentMetadataParams.java | 0 .../SessionToolsGetCurrentMetadataResult.java | 0 ...ssionToolsHandlePendingToolCallParams.java | 0 ...ssionToolsHandlePendingToolCallResult.java | 0 ...ssionToolsInitializeAndValidateParams.java | 0 ...sionToolsUpdateSubagentSettingsParams.java | 0 .../copilot/generated/rpc/SessionUiApi.java | 0 .../rpc/SessionUiElicitationParams.java | 0 .../rpc/SessionUiElicitationResult.java | 0 .../rpc/SessionUiEphemeralQueryParams.java | 0 .../rpc/SessionUiEphemeralQueryResult.java | 0 ...onUiHandlePendingAutoModeSwitchParams.java | 0 ...onUiHandlePendingAutoModeSwitchResult.java | 0 ...ssionUiHandlePendingElicitationParams.java | 0 ...ssionUiHandlePendingElicitationResult.java | 0 ...sionUiHandlePendingExitPlanModeParams.java | 0 ...sionUiHandlePendingExitPlanModeResult.java | 0 .../SessionUiHandlePendingSamplingParams.java | 0 .../SessionUiHandlePendingSamplingResult.java | 0 ...lePendingSessionLimitsExhaustedParams.java | 0 ...lePendingSessionLimitsExhaustedResult.java | 0 ...SessionUiHandlePendingUserInputParams.java | 0 ...SessionUiHandlePendingUserInputResult.java | 0 ...sterDirectAutoModeSwitchHandlerParams.java | 0 ...sterDirectAutoModeSwitchHandlerResult.java | 0 ...sterDirectAutoModeSwitchHandlerParams.java | 0 ...sterDirectAutoModeSwitchHandlerResult.java | 0 .../generated/rpc/SessionUsageApi.java | 0 .../rpc/SessionUsageGetMetricsParams.java | 0 .../rpc/SessionUsageGetMetricsResult.java | 0 .../generated/rpc/SessionVisibilityApi.java | 0 .../rpc/SessionVisibilityGetParams.java | 0 .../rpc/SessionVisibilityGetResult.java | 0 .../rpc/SessionVisibilitySetParams.java | 0 .../rpc/SessionVisibilitySetResult.java | 0 .../rpc/SessionVisibilityStatus.java | 0 .../rpc/SessionWorkingDirectoryContext.java | 0 ...essionWorkingDirectoryContextHostType.java | 0 .../SessionWorkspacesAddSummaryParams.java | 0 .../SessionWorkspacesAddSummaryResult.java | 0 .../generated/rpc/SessionWorkspacesApi.java | 0 ...kspacesAutopilotObjectiveExistsParams.java | 0 ...kspacesAutopilotObjectiveExistsResult.java | 0 .../SessionWorkspacesCreateFileParams.java | 0 ...kspacesDeleteAutopilotObjectiveParams.java | 0 ...kspacesDeleteAutopilotObjectiveResult.java | 0 .../rpc/SessionWorkspacesDiffParams.java | 0 .../rpc/SessionWorkspacesDiffResult.java | 0 .../rpc/SessionWorkspacesEnsureParams.java | 0 .../rpc/SessionWorkspacesEnsureResult.java | 0 .../SessionWorkspacesGetWorkspaceParams.java | 0 .../SessionWorkspacesGetWorkspaceResult.java | 0 ...essionWorkspacesListCheckpointsParams.java | 0 ...essionWorkspacesListCheckpointsResult.java | 0 .../rpc/SessionWorkspacesListFilesParams.java | 0 .../rpc/SessionWorkspacesListFilesResult.java | 0 ...orkspacesReadAutopilotObjectiveParams.java | 0 ...orkspacesReadAutopilotObjectiveResult.java | 0 ...SessionWorkspacesReadCheckpointParams.java | 0 ...SessionWorkspacesReadCheckpointResult.java | 0 .../rpc/SessionWorkspacesReadFileParams.java | 0 .../rpc/SessionWorkspacesReadFileResult.java | 0 ...SessionWorkspacesSaveLargePasteParams.java | 0 ...SessionWorkspacesSaveLargePasteResult.java | 0 ...sionWorkspacesTruncateSummariesParams.java | 0 ...sionWorkspacesTruncateSummariesResult.java | 0 ...SessionWorkspacesUpdateMetadataParams.java | 0 ...SessionWorkspacesUpdateMetadataResult.java | 0 ...rkspacesWriteAutopilotObjectiveParams.java | 0 ...rkspacesWriteAutopilotObjectiveResult.java | 0 .../rpc/SessionsBulkDeleteParams.java | 0 .../rpc/SessionsBulkDeleteResult.java | 0 .../rpc/SessionsCheckInUseParams.java | 0 .../rpc/SessionsCheckInUseResult.java | 0 .../generated/rpc/SessionsCloseParams.java | 0 ...sionsConfigureSessionExtensionsParams.java | 0 .../generated/rpc/SessionsConnectParams.java | 0 .../generated/rpc/SessionsConnectResult.java | 0 .../generated/rpc/SessionsDeleteParams.java | 0 .../rpc/SessionsEnrichMetadataParams.java | 0 .../rpc/SessionsEnrichMetadataResult.java | 0 .../rpc/SessionsFindByPrefixParams.java | 0 .../rpc/SessionsFindByPrefixResult.java | 0 .../rpc/SessionsFindByTaskIdParams.java | 0 .../rpc/SessionsFindByTaskIdResult.java | 0 .../generated/rpc/SessionsForkParams.java | 0 .../generated/rpc/SessionsForkResult.java | 0 .../rpc/SessionsGetBoardEntryCountParams.java | 0 .../rpc/SessionsGetBoardEntryCountResult.java | 0 .../rpc/SessionsGetEventFilePathParams.java | 0 .../rpc/SessionsGetEventFilePathResult.java | 0 .../rpc/SessionsGetLastForContextParams.java | 0 .../rpc/SessionsGetLastForContextResult.java | 0 .../rpc/SessionsGetMetadataParams.java | 0 .../rpc/SessionsGetMetadataResult.java | 0 ...ionsGetPersistedRemoteSteerableParams.java | 0 ...ionsGetPersistedRemoteSteerableResult.java | 0 .../SessionsGetRemoteControlStatusResult.java | 0 .../generated/rpc/SessionsGetSizesResult.java | 0 .../SessionsListNonEmptySessionIdsParams.java | 0 .../SessionsListNonEmptySessionIdsResult.java | 0 .../generated/rpc/SessionsListParams.java | 0 .../generated/rpc/SessionsListResult.java | 0 .../SessionsLoadDeferredRepoHooksParams.java | 0 .../SessionsLoadDeferredRepoHooksResult.java | 0 .../generated/rpc/SessionsOpenAttach.java | 0 .../generated/rpc/SessionsOpenCloud.java | 0 .../generated/rpc/SessionsOpenCreate.java | 0 .../generated/rpc/SessionsOpenHandoff.java | 0 .../rpc/SessionsOpenHandoffTaskType.java | 0 .../generated/rpc/SessionsOpenParams.java | 0 .../generated/rpc/SessionsOpenProgress.java | 0 .../rpc/SessionsOpenProgressStatus.java | 0 .../rpc/SessionsOpenProgressStep.java | 0 .../generated/rpc/SessionsOpenRemote.java | 0 .../generated/rpc/SessionsOpenResult.java | 0 .../generated/rpc/SessionsOpenResume.java | 0 .../generated/rpc/SessionsOpenResumeLast.java | 0 .../generated/rpc/SessionsOpenStatus.java | 0 .../generated/rpc/SessionsPruneOldParams.java | 0 .../generated/rpc/SessionsPruneOldResult.java | 0 ...egisterExtensionToolsOnSessionOptions.java | 0 ...RegisterExtensionToolsOnSessionParams.java | 0 ...RegisterExtensionToolsOnSessionResult.java | 0 .../rpc/SessionsReleaseLockParams.java | 0 .../rpc/SessionsReloadPluginHooksParams.java | 0 .../generated/rpc/SessionsSaveParams.java | 0 .../SessionsSetAdditionalPluginsParams.java | 0 ...essionsSetRemoteControlSteeringParams.java | 0 ...essionsSetRemoteControlSteeringResult.java | 0 .../rpc/SessionsStartRemoteControlParams.java | 0 .../rpc/SessionsStartRemoteControlResult.java | 0 .../rpc/SessionsStopRemoteControlParams.java | 0 .../rpc/SessionsStopRemoteControlResult.java | 0 .../SessionsTransferRemoteControlParams.java | 0 .../SessionsTransferRemoteControlResult.java | 0 .../generated/rpc/ShellInitProfile.java | 0 .../generated/rpc/ShellInitScript.java | 0 .../generated/rpc/ShellInitScriptShell.java | 0 .../generated/rpc/ShellKillSignal.java | 0 .../copilot/generated/rpc/ShellOptions.java | 0 .../copilot/generated/rpc/ShutdownType.java | 0 .../github/copilot/generated/rpc/Skill.java | 0 .../generated/rpc/SkillDiscoveryPath.java | 0 .../generated/rpc/SkillDiscoveryScope.java | 0 .../copilot/generated/rpc/SkillSource.java | 0 .../SkillsConfigSetDisabledSkillsParams.java | 0 .../generated/rpc/SkillsDiscoverParams.java | 0 .../generated/rpc/SkillsDiscoverResult.java | 0 .../rpc/SkillsGetDiscoveryPathsParams.java | 0 .../rpc/SkillsGetDiscoveryPathsResult.java | 0 .../generated/rpc/SkillsInvokedSkill.java | 0 .../rpc/SlashCommandAgentPromptResult.java | 0 .../rpc/SlashCommandCompletedResult.java | 0 .../generated/rpc/SlashCommandInfo.java | 0 .../generated/rpc/SlashCommandInput.java | 0 .../rpc/SlashCommandInputChoice.java | 0 .../rpc/SlashCommandInputCompletion.java | 0 .../rpc/SlashCommandInvocationResult.java | 0 .../generated/rpc/SlashCommandKind.java | 0 .../SlashCommandSelectSubcommandOption.java | 0 .../SlashCommandSelectSubcommandResult.java | 0 .../generated/rpc/SlashCommandTextResult.java | 0 .../generated/rpc/SubagentSettingsEntry.java | 0 .../rpc/SubagentSettingsEntryContextTier.java | 0 .../github/copilot/generated/rpc/Tool.java | 0 .../generated/rpc/ToolsListParams.java | 0 .../generated/rpc/ToolsListResult.java | 0 .../rpc/UIAutoModeSwitchResponse.java | 0 .../generated/rpc/UIElicitationResponse.java | 0 .../rpc/UIElicitationResponseAction.java | 0 .../generated/rpc/UIElicitationSchema.java | 0 .../generated/rpc/UIExitPlanModeAction.java | 0 .../generated/rpc/UIExitPlanModeResponse.java | 0 .../rpc/UIHandlePendingSamplingResponse.java | 0 .../rpc/UISessionLimitsExhaustedResponse.java | 0 ...ISessionLimitsExhaustedResponseAction.java | 0 .../generated/rpc/UIUserInputResponse.java | 0 .../rpc/UsageMetricsCodeChanges.java | 0 .../rpc/UsageMetricsModelMetric.java | 0 .../rpc/UsageMetricsModelMetricRequests.java | 0 .../UsageMetricsModelMetricTokenDetail.java | 0 .../rpc/UsageMetricsModelMetricUsage.java | 0 .../rpc/UsageMetricsTokenDetail.java | 0 .../generated/rpc/UserSettingMetadata.java | 0 .../generated/rpc/UserSettingsGetResult.java | 0 .../generated/rpc/UserSettingsSetParams.java | 0 .../generated/rpc/UserSettingsSetResult.java | 0 .../copilot/generated/rpc/Verbosity.java | 0 .../rpc/WorkspaceDiffFileChange.java | 0 .../rpc/WorkspaceDiffFileChangeType.java | 0 .../generated/rpc/WorkspaceDiffMode.java | 0 .../rpc/WorkspaceSummaryHostType.java | 0 .../generated/rpc/WorkspacesCheckpoints.java | 0 .../WorkspacesWorkspaceDetailsHostType.java | 0 .../copilot/generated/rpc/package-info.java | 0 .../copilot/AllowCopilotExperimental.java | 0 .../com/github/copilot/CliServerManager.java | 0 .../com/github/copilot/ConnectionState.java | 0 .../com/github/copilot/CopilotClient.java | 328 +++++++- .../github/copilot/CopilotExperimental.java | 0 .../copilot/CopilotExperimentalProcessor.java | 0 .../github/copilot/CopilotRequestContext.java | 0 .../github/copilot/CopilotRequestHandler.java | 0 .../copilot/CopilotRequestTransport.java | 0 .../com/github/copilot/CopilotSession.java | 0 .../copilot/CopilotWebSocketCloseStatus.java | 0 .../copilot/CopilotWebSocketForwarder.java | 0 .../copilot/CopilotWebSocketHandler.java | 0 .../copilot/CopilotWebSocketMessage.java | 0 .../com/github/copilot/EventErrorHandler.java | 0 .../com/github/copilot/EventErrorPolicy.java | 0 .../github/copilot/ExtractedTransforms.java | 0 .../copilot/GitHubTelemetryAdapter.java | 0 .../copilot/InternalExecutorProvider.java | 0 .../com/github/copilot/JsonRpcClient.java | 42 + .../com/github/copilot/JsonRpcException.java | 0 .../github/copilot/LifecycleEventManager.java | 0 .../github/copilot/LlmInferenceAdapter.java | 0 .../github/copilot/LlmInferenceExchange.java | 0 .../copilot/LlmWebSocketResponseBridge.java | 0 .../com/github/copilot/LoggingHelpers.java | 0 .../github/copilot/RpcHandlerDispatcher.java | 0 .../github/copilot/SdkProtocolVersion.java | 0 .../github/copilot/SessionRequestBuilder.java | 0 .../com/github/copilot/SystemMessageMode.java | 0 .../github/copilot/ffi/FfiOutputStream.java | 63 ++ .../github/copilot/ffi/FfiRuntimeHost.java | 349 ++++++++ .../github/copilot/ffi/JnaNativeBinding.java | 253 ++++++ .../com/github/copilot/ffi/NativeBinding.java | 131 +++ .../copilot/ffi/NativeRuntimeLoader.java | 466 +++++++++++ .../github/copilot/ffi/OutboundCallback.java | 46 + .../github/copilot/ffi/PlatformDetector.java | 303 +++++++ .../github/copilot/ffi/QueueInputStream.java | 119 +++ .../copilot/ffi/ReaderThreadFactory.java | 22 + .../java/com/github/copilot/package-info.java | 0 .../com/github/copilot/rpc/AgentInfo.java | 0 .../com/github/copilot/rpc/AgentMode.java | 0 .../github/copilot/rpc/AgentStopHandler.java | 0 .../copilot/rpc/AgentStopHookInput.java | 0 .../copilot/rpc/AgentStopHookOutput.java | 0 .../com/github/copilot/rpc/Attachment.java | 0 .../copilot/rpc/AutoModeSwitchHandler.java | 0 .../copilot/rpc/AutoModeSwitchInvocation.java | 0 .../copilot/rpc/AutoModeSwitchRequest.java | 0 .../copilot/rpc/AutoModeSwitchResponse.java | 0 .../com/github/copilot/rpc/AzureOptions.java | 0 .../copilot/rpc/BearerTokenProvider.java | 0 .../github/copilot/rpc/BlobAttachment.java | 0 .../com/github/copilot/rpc/BuiltInTools.java | 0 .../copilot/rpc/CapiSessionOptions.java | 0 .../copilot/rpc/CloudSessionOptions.java | 0 .../copilot/rpc/CloudSessionRepository.java | 0 .../github/copilot/rpc/CommandContext.java | 0 .../github/copilot/rpc/CommandDefinition.java | 0 .../github/copilot/rpc/CommandHandler.java | 0 .../copilot/rpc/CommandWireDefinition.java | 0 .../github/copilot/rpc/CopilotClientMode.java | 0 .../copilot/rpc/CopilotClientOptions.java | 43 +- .../rpc/CopilotExpAssignmentResponse.java | 0 .../copilot/rpc/CreateSessionRequest.java | 0 .../copilot/rpc/CreateSessionResponse.java | 0 .../github/copilot/rpc/CustomAgentConfig.java | 0 .../copilot/rpc/DefaultAgentConfig.java | 0 .../copilot/rpc/DeleteSessionResponse.java | 0 .../copilot/rpc/ElicitationContext.java | 0 .../copilot/rpc/ElicitationHandler.java | 0 .../github/copilot/rpc/ElicitationParams.java | 0 .../github/copilot/rpc/ElicitationResult.java | 0 .../copilot/rpc/ElicitationResultAction.java | 0 .../github/copilot/rpc/ElicitationSchema.java | 0 .../copilot/rpc/ExitPlanModeHandler.java | 0 .../copilot/rpc/ExitPlanModeInvocation.java | 0 .../copilot/rpc/ExitPlanModeRequest.java | 0 .../copilot/rpc/ExitPlanModeResult.java | 0 .../github/copilot/rpc/ExpConfigEntry.java | 0 .../copilot/rpc/GetAuthStatusResponse.java | 0 .../rpc/GetForegroundSessionResponse.java | 0 .../copilot/rpc/GetLastSessionIdResponse.java | 0 .../copilot/rpc/GetMessagesResponse.java | 0 .../github/copilot/rpc/GetModelsResponse.java | 0 .../rpc/GetSessionMetadataResponse.java | 0 .../github/copilot/rpc/GetStatusResponse.java | 0 .../copilot/rpc/GitHubMcpToolConfig.java | 0 .../github/copilot/rpc/HookInvocation.java | 0 .../rpc/InProcessRuntimeConnection.java | 27 + .../copilot/rpc/InfiniteSessionConfig.java | 0 .../com/github/copilot/rpc/InputOptions.java | 0 .../com/github/copilot/rpc/JsonRpcError.java | 0 .../github/copilot/rpc/JsonRpcRequest.java | 0 .../github/copilot/rpc/JsonRpcResponse.java | 0 .../copilot/rpc/LargeToolOutputConfig.java | 0 .../copilot/rpc/ListSessionsResponse.java | 0 .../github/copilot/rpc/ManagedSettings.java | 0 .../rpc/ManagedSettingsPermissions.java | 0 .../github/copilot/rpc/McpAuthHandler.java | 0 .../github/copilot/rpc/McpAuthInvocation.java | 0 .../github/copilot/rpc/McpAuthRequest.java | 0 .../com/github/copilot/rpc/McpAuthResult.java | 0 .../com/github/copilot/rpc/McpAuthToken.java | 0 .../copilot/rpc/McpHttpServerConfig.java | 0 .../github/copilot/rpc/McpServerConfig.java | 0 .../copilot/rpc/McpStdioServerConfig.java | 0 .../copilot/rpc/MemoryConfiguration.java | 0 .../github/copilot/rpc/MessageAttachment.java | 0 .../github/copilot/rpc/MessageOptions.java | 0 .../com/github/copilot/rpc/ModelBilling.java | 0 .../github/copilot/rpc/ModelCapabilities.java | 0 .../rpc/ModelCapabilitiesOverride.java | 0 .../com/github/copilot/rpc/ModelInfo.java | 0 .../com/github/copilot/rpc/ModelLimits.java | 0 .../com/github/copilot/rpc/ModelPolicy.java | 0 .../com/github/copilot/rpc/ModelSupports.java | 0 .../github/copilot/rpc/ModelVisionLimits.java | 0 .../copilot/rpc/NamedProviderConfig.java | 0 .../com/github/copilot/rpc/ParamCoercion.java | 0 .../com/github/copilot/rpc/ParamSchema.java | 0 .../github/copilot/rpc/PermissionHandler.java | 0 .../copilot/rpc/PermissionInvocation.java | 0 .../github/copilot/rpc/PermissionRequest.java | 0 .../copilot/rpc/PermissionRequestResult.java | 0 .../rpc/PermissionRequestResultKind.java | 0 .../com/github/copilot/rpc/PingResponse.java | 0 .../rpc/PostToolUseFailureHandler.java | 0 .../rpc/PostToolUseFailureHookInput.java | 0 .../rpc/PostToolUseFailureHookOutput.java | 0 .../copilot/rpc/PostToolUseHandler.java | 0 .../copilot/rpc/PostToolUseHookInput.java | 0 .../copilot/rpc/PostToolUseHookOutput.java | 0 .../copilot/rpc/PreMcpToolCallHandler.java | 0 .../copilot/rpc/PreMcpToolCallHookInput.java | 0 .../copilot/rpc/PreMcpToolCallHookOutput.java | 0 .../github/copilot/rpc/PreToolUseHandler.java | 0 .../copilot/rpc/PreToolUseHookInput.java | 0 .../copilot/rpc/PreToolUseHookOutput.java | 0 .../github/copilot/rpc/ProviderConfig.java | 0 .../copilot/rpc/ProviderModelConfig.java | 0 .../github/copilot/rpc/ProviderTokenArgs.java | 0 .../copilot/rpc/ResumeSessionConfig.java | 0 .../copilot/rpc/ResumeSessionRequest.java | 0 .../copilot/rpc/ResumeSessionResponse.java | 0 .../github/copilot/rpc/RuntimeConnection.java | 94 +++ .../github/copilot/rpc/SectionOverride.java | 0 .../copilot/rpc/SectionOverrideAction.java | 0 .../copilot/rpc/SendMessageRequest.java | 0 .../copilot/rpc/SendMessageResponse.java | 0 .../copilot/rpc/SessionCapabilities.java | 0 .../com/github/copilot/rpc/SessionConfig.java | 0 .../github/copilot/rpc/SessionContext.java | 0 .../github/copilot/rpc/SessionEndHandler.java | 0 .../copilot/rpc/SessionEndHookInput.java | 0 .../copilot/rpc/SessionEndHookOutput.java | 0 .../com/github/copilot/rpc/SessionHooks.java | 0 .../copilot/rpc/SessionLifecycleEvent.java | 0 .../rpc/SessionLifecycleEventMetadata.java | 0 .../rpc/SessionLifecycleEventTypes.java | 0 .../copilot/rpc/SessionLifecycleHandler.java | 0 .../github/copilot/rpc/SessionListFilter.java | 0 .../github/copilot/rpc/SessionMetadata.java | 0 .../copilot/rpc/SessionStartHandler.java | 0 .../copilot/rpc/SessionStartHookInput.java | 0 .../copilot/rpc/SessionStartHookOutput.java | 0 .../com/github/copilot/rpc/SessionUiApi.java | 0 .../copilot/rpc/SessionUiCapabilities.java | 0 .../rpc/SetForegroundSessionRequest.java | 0 .../rpc/SetForegroundSessionResponse.java | 0 .../copilot/rpc/StdioRuntimeConnection.java | 71 ++ .../copilot/rpc/SystemMessageConfig.java | 0 .../copilot/rpc/SystemMessageSections.java | 0 .../copilot/rpc/SystemPromptSections.java | 0 .../copilot/rpc/TcpRuntimeConnection.java | 116 +++ .../github/copilot/rpc/TelemetryConfig.java | 0 .../github/copilot/rpc/ToolBinaryResult.java | 0 .../com/github/copilot/rpc/ToolDefer.java | 0 .../github/copilot/rpc/ToolDefinition.java | 0 .../com/github/copilot/rpc/ToolHandler.java | 0 .../github/copilot/rpc/ToolInvocation.java | 0 .../github/copilot/rpc/ToolResultObject.java | 0 .../github/copilot/rpc/ToolSearchConfig.java | 0 .../java/com/github/copilot/rpc/ToolSet.java | 0 .../copilot/rpc/UriRuntimeConnection.java | 57 ++ .../github/copilot/rpc/UserInputHandler.java | 0 .../copilot/rpc/UserInputInvocation.java | 0 .../github/copilot/rpc/UserInputRequest.java | 0 .../github/copilot/rpc/UserInputResponse.java | 0 .../rpc/UserPromptSubmittedHandler.java | 0 .../rpc/UserPromptSubmittedHookInput.java | 0 .../rpc/UserPromptSubmittedHookOutput.java | 0 .../rpc/UserPromptTransformedHandler.java | 0 .../rpc/UserPromptTransformedHookInput.java | 0 .../rpc/UserPromptTransformedHookOutput.java | 0 .../com/github/copilot/rpc/package-info.java | 0 .../com/github/copilot/tool/CopilotTool.java | 0 .../tool/CopilotToolMetadataProvider.java | 0 .../github/copilot/tool/CopilotToolParam.java | 0 .../copilot/tool/CopilotToolProcessor.java | 0 .../java/com/github/copilot/tool/Param.java | 0 .../github/copilot/tool/SchemaGenerator.java | 0 java/{ => sdk}/src/main/java/module-info.java | 2 + .../copilot/InternalExecutorProvider.java | 0 .../copilot/ffi/ReaderThreadFactory.java | 15 + .../javax.annotation.processing.Processor | 0 .../main/resources/copilot-runtime.properties | 3 + .../com/github/copilot/AgentInfoTest.java | 0 .../com/github/copilot/AgentModeTest.java | 0 .../java/com/github/copilot/AskUserTest.java | 0 .../ByokBearerTokenProviderE2ETest.java | 0 .../java/com/github/copilot/CapiProxy.java | 23 +- .../copilot/CapiSessionOptionsTest.java | 0 .../github/copilot/CliServerManagerTest.java | 4 +- .../github/copilot/ClientOptionsE2ETest.java | 0 .../copilot/ClosedSessionGuardTest.java | 0 .../java/com/github/copilot/CommandsTest.java | 0 .../com/github/copilot/CompactionTest.java | 0 .../com/github/copilot/ConfigCloneTest.java | 9 + .../github/copilot/CopilotClientModeTest.java | 0 .../com/github/copilot/CopilotClientTest.java | 4 +- .../copilot/CopilotClientTransportTest.java | 387 +++++++++ .../CopilotExperimentalProcessorTest.java | 0 .../CopilotRequestCancelErrorE2ETest.java | 0 .../copilot/CopilotRequestHandlerE2ETest.java | 0 .../CopilotRequestSessionIdE2ETest.java | 0 .../copilot/CopilotRequestTestSupport.java | 3 +- .../github/copilot/CopilotSessionTest.java | 0 .../copilot/CreateSessionReKeyEntryTest.java | 5 +- .../copilot/DataObjectCoverageTest.java | 0 .../copilot/DocumentationSamplesTest.java | 2 +- .../com/github/copilot/E2ETestContext.java | 63 +- .../com/github/copilot/ElicitationTest.java | 0 .../com/github/copilot/ErrorHandlingTest.java | 11 +- .../com/github/copilot/EventFidelityTest.java | 0 .../github/copilot/ExecutorWiringTest.java | 15 +- .../github/copilot/FakeUpstreamServer.java | 5 +- .../copilot/ForwardCompatibilityTest.java | 0 .../copilot/GitHubTelemetryForwardingIT.java | 0 .../github/copilot/GitHubTelemetryTest.java | 33 +- .../java/com/github/copilot/HooksTest.java | 0 .../copilot/InternalExecutorProviderIT.java | 0 .../InternalExecutorProviderProbe.java | 0 .../copilot/InternalExecutorProviderTest.java | 0 .../copilot/JsonIncludeNonNullTest.java | 0 .../com/github/copilot/JsonRpcClientTest.java | 4 +- .../copilot/LifecycleEventManagerTest.java | 0 .../copilot/LowLevelToolDefinitionIT.java | 0 .../github/copilot/ManagedSettingsTest.java | 0 .../com/github/copilot/McpAndAgentsTest.java | 0 .../McpAuthInterestRegistrationTest.java | 0 .../com/github/copilot/McpOAuthE2ETest.java | 0 .../github/copilot/McpOAuthResumeE2ETest.java | 0 .../github/copilot/MessageAttachmentTest.java | 0 .../com/github/copilot/MetadataApiTest.java | 0 .../com/github/copilot/ModeHandlersTest.java | 0 .../com/github/copilot/ModelInfoTest.java | 0 .../github/copilot/ModuleDescriptorTest.java | 0 .../copilot/MultiProviderConfigTest.java | 0 .../copilot/MultiProviderRegistryE2ETest.java | 0 .../copilot/OptionalApiAndJacksonTest.java | 0 .../github/copilot/PerSessionAuthTest.java | 0 .../PermissionRequestResultKindTest.java | 0 .../copilot/PermissionRequestResultTest.java | 0 .../com/github/copilot/PermissionsTest.java | 0 .../copilot/PreMcpToolCallHookTest.java | 0 .../github/copilot/ProviderConfigTest.java | 0 .../copilot/ProviderEndpointE2ETest.java | 0 .../com/github/copilot/RemoteSessionTest.java | 0 .../copilot/RpcHandlerDispatcherTest.java | 0 .../com/github/copilot/RpcServerE2ETest.java | 0 .../github/copilot/RpcServerMiscE2ETest.java | 0 .../copilot/RpcSessionStateExtrasE2ETest.java | 0 .../copilot/RpcTasksAndHandlersE2ETest.java | 0 .../com/github/copilot/RpcWrappersTest.java | 0 .../copilot/SchedulerShutdownRaceTest.java | 0 .../copilot/SessionCanvasSnapshotTest.java | 0 .../github/copilot/SessionConfigE2ETest.java | 0 .../SessionEventDeserializationTest.java | 0 .../copilot/SessionEventHandlingTest.java | 0 .../github/copilot/SessionEventsE2ETest.java | 4 + .../github/copilot/SessionHandlerTest.java | 0 .../copilot/SessionRequestBuilderTest.java | 0 .../copilot/SessionTodosChangedTest.java | 0 .../java/com/github/copilot/SkillsTest.java | 0 .../com/github/copilot/SlashCommandsIT.java | 3 + .../github/copilot/StreamingFidelityTest.java | 46 +- .../github/copilot/SubagentHooksE2ETest.java | 0 .../copilot/SystemMessageSectionsIT.java | 0 .../github/copilot/TelemetryConfigTest.java | 0 .../java/com/github/copilot/TestUtil.java | 0 .../github/copilot/TimeoutEdgeCaseTest.java | 0 .../github/copilot/ToolDefinitionTest.java | 0 .../github/copilot/ToolInvocationTest.java | 0 .../ToolResultObjectSerializationTest.java | 0 .../com/github/copilot/ToolResultsTest.java | 0 .../java/com/github/copilot/ToolSetTest.java | 0 .../java/com/github/copilot/ToolsTest.java | 0 .../UpdateSessionOptionsForModeTest.java | 0 .../copilot/ZeroTimeoutContractTest.java | 0 .../ErgonomicTestTools$$CopilotToolMeta.java | 0 .../copilot/e2e/ErgonomicTestTools.java | 0 .../e2e/ErgonomicToolDefinitionIT.java | 0 .../copilot/e2e/InProcessTransportIT.java | 101 +++ .../github/copilot/e2e/RequireInProcess.java | 64 ++ .../com/github/copilot/e2e/SkipInProcess.java | 64 ++ .../copilot/ffi/FfiRuntimeHostTest.java | 452 ++++++++++ .../github/copilot/ffi/InProcessEnvGuard.java | 192 +++++ .../copilot/ffi/JnaNativeBindingTest.java | 521 ++++++++++++ .../copilot/ffi/NativeRuntimeLoaderTest.java | 490 +++++++++++ .../copilot/ffi/PlatformDetectorTest.java | 217 +++++ .../copilot/ffi/QueueInputStreamTest.java | 81 ++ .../GeneratedEventTypesCoverageTest.java | 0 .../GeneratedTypesJacksonRoundTripTest.java | 0 .../rpc/GeneratedRpcApiCoverageTest.java | 0 .../rpc/GeneratedRpcRecordsCoverageTest.java | 0 .../github/copilot/rpc/ParamCoercionTest.java | 0 .../github/copilot/rpc/ParamSchemaTest.java | 0 .../copilot/rpc/RecordInvocationArgs.java | 0 .../rpc/ToolDefinitionFromObjectTest.java | 0 .../rpc/ToolDefinitionIsTerminalTest.java | 0 .../copilot/rpc/ToolDefinitionLambdaTest.java | 0 .../ArgCoercionTools$$CopilotToolMeta.java | 0 .../rpc/fixtures/ArgCoercionTools.java | 0 .../DateTimeTools$$CopilotToolMeta.java | 0 .../copilot/rpc/fixtures/DateTimeTools.java | 0 .../DefaultValueTools$$CopilotToolMeta.java | 0 .../rpc/fixtures/DefaultValueTools.java | 0 ...InvocationAwareTools$$CopilotToolMeta.java | 0 .../rpc/fixtures/InvocationAwareTools.java | 0 .../MultiReturnTools$$CopilotToolMeta.java | 0 .../rpc/fixtures/MultiReturnTools.java | 0 .../OptionalParamTools$$CopilotToolMeta.java | 0 .../rpc/fixtures/OptionalParamTools.java | 0 .../OverrideTools$$CopilotToolMeta.java | 0 .../copilot/rpc/fixtures/OverrideTools.java | 0 .../SimpleTools$$CopilotToolMeta.java | 0 .../copilot/rpc/fixtures/SimpleTools.java | 0 ...taticInvocationTools$$CopilotToolMeta.java | 0 .../rpc/fixtures/StaticInvocationTools.java | 0 .../StaticTools$$CopilotToolMeta.java | 0 .../copilot/rpc/fixtures/StaticTools.java | 0 .../tool/CopilotToolAnnotationTest.java | 0 .../tool/CopilotToolProcessorTest.java | 0 .../com/github/copilot/tool/ParamTest.java | 0 .../copilot/tool/SchemaGeneratorTest.java | 0 .../src/test/prompts/PROMPT-smoke-test.md | 0 .../test/resources/logging-debug.properties | 0 .../src/test/resources/logging.properties | 0 .../generated/rpc/SandboxConfigAuth.java | 29 - 1594 files changed, 6718 insertions(+), 926 deletions(-) create mode 100644 java/copilot-native/pom.xml create mode 100644 java/copilot-native/scripts/fetch-native.mjs create mode 100644 java/copilot-native/src/main/resources/native/lib/copilot-runtime.properties rename java/{ => sdk}/config/checkstyle/checkstyle.xml (100%) rename java/{ => sdk}/config/spotbugs/spotbugs-exclude.xml (100%) rename java/{ => sdk}/jbang-example.java (100%) create mode 100644 java/sdk/pom.xml rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AbortEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AbortReason.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantIdleEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantIntentEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantMessageDeltaEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantMessageEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantMessageServerTools.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantMessageStartEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantMessageToolRequest.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantMessageToolRequestType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantReasoningDeltaEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantReasoningEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantServerToolProgressEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantStreamingDeltaEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantToolCallDeltaEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantTurnEndEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantTurnRetryEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantTurnStartEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantUsageApiEndpoint.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantUsageCopilotUsage.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantUsageCopilotUsageTokenDetail.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantUsageEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AssistantUsageQuotaSnapshot.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AutoModeResolvedReasoningBucket.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AutoModeSwitchCompletedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AutoModeSwitchRequestedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AutoModeSwitchResponse.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AutopilotObjectiveChangedOperation.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/AutopilotObjectiveChangedStatus.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/BinaryAssetType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CanvasRegistryChangedCanvas.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CanvasRegistryChangedCanvasAction.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CapabilitiesChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CapabilitiesChangedUI.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CitableSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CitationProvider.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CitationReference.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CitationSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CitationSpan.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/Citations.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CommandCompletedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CommandExecuteEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CommandQueuedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CommandsChangedCommand.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CommandsChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsed.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsedCopilotUsage.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsedCopilotUsageTokenDetail.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CompactionTrigger.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ContextTier.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/CustomAgentsUpdatedAgent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ElicitationCompletedAction.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ElicitationCompletedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ElicitationRequestedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ElicitationRequestedMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ElicitationRequestedSchema.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ExitPlanModeAction.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ExitPlanModeCompletedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ExitPlanModeRequestedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtension.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtensionSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtensionStatus.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ExternalToolCompletedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ExternalToolRequestedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/FactoryRunUpdatedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/GitHubMcpToolConfig.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/HandoffRepository.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/HandoffSourceType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/HeaderEntry.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/HookEndError.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/HookEndEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/HookProgressEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/HookStartEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedAction.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedEscalation.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ManagedSettingsResolvedSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteError.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteToolMeta.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteToolMetaUI.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpHeadersRefreshCompletedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpHeadersRefreshCompletedOutcome.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpHeadersRefreshRequiredEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpHeadersRefreshRequiredReason.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpOauthCompletedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpOauthCompletionOutcome.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpOauthHttpResponse.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpOauthRequestReason.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpOauthRequiredEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpOauthRequiredStaticClientConfig.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpOauthWWWAuthenticateParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpPromptsListChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpResourcesListChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpServerSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpServerStatus.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpServerTransport.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpServersLoadedServer.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/McpToolsListChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ModelCallFailureBadRequestKind.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ModelCallFailureEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ModelCallFailureKind.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ModelCallFailureRequestFingerprint.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ModelCallFailureSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ModelCallFailureTransport.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ModelCallStartEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/PendingMessagesModifiedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/PermissionAllowAllMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/PermissionCompletedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/PermissionRequestedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/PlanChangedOperation.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ReasoningSummary.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SamplingCompletedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SamplingRequestedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ScheduleOrigin.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionAutoModeResolvedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionAutopilotObjectiveChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionBackgroundTasksChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionBinaryAssetEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionCanvasClosedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionCanvasOpenedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionCanvasRecordedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionCanvasRegistryChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionCanvasRemovedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionCanvasUnavailableEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionCompactionCompleteEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionCompactionStartEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionContextChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionContextClearedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionCustomAgentsUpdatedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionCustomNotificationEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionErrorEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionExtensionsAttachmentsPushedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionExtensionsLoadedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionHandoffEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionIdleEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionInfoEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionLimitsConfig.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedCompletedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedRequestedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedResponse.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedResponseAction.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionManagedSettingsEnforcedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionManagedSettingsResolvedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionMcpServerStatusChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionMcpServersLoadedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionModeChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionModelChangeEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionPermissionsChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionPlanChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionRemoteSteerableChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionResumeEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionScheduleCancelledEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionScheduleCreatedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionScheduleRearmedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionSessionLimitsChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionShutdownEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionSkillsLoadedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionSnapshotRewindEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionStartEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionTaskCompleteEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionTitleChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionTodosChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionToolsUpdatedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionTruncationEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionUsageCheckpointEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionUsageInfoEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionWarningEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SessionWorkspaceFileChangedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ShutdownCodeChanges.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ShutdownModelMetric.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ShutdownModelMetricRequests.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ShutdownModelMetricTokenDetail.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ShutdownModelMetricUsage.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ShutdownTokenDetail.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ShutdownType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SkillInvokedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SkillInvokedTrigger.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SkillSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SkillsLoadedSkill.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SubagentCompletedEvent.java (85%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SubagentDeselectedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SubagentFailedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SubagentSelectedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SubagentStartedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SystemMessageEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SystemMessageMetadata.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SystemMessageRole.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/SystemNotificationEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/TaskCompletionOutcome.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteError.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescription.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMeta.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMetaUI.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMetaUIVisibility.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMeta.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUI.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUICsp.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissions.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsCamera.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsClipboardWrite.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsGeolocation.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsMicrophone.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionPartialResultEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionProgressEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionStartEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionStartShellToolInfo.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescription.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMeta.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMetaUI.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMetaUIVisibility.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolSearchActivatedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/ToolUserRequestedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/UnknownSessionEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/UsageCheckpointModelCacheState.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/UserInputCompletedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/UserInputRequestedEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/UserMessageAgentMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/UserMessageDelivery.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/UserMessageEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/Verbosity.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/WorkingDirectoryContext.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/WorkingDirectoryContextHostType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/WorkspaceFileChangedOperation.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/package-info.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AbortReason.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AccountAllUsers.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AccountGetCurrentAuthResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AccountGetQuotaParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AccountGetQuotaResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AccountLoginParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AccountLoginResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AccountLogoutParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AccountLogoutResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AccountQuotaSnapshot.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AdaptiveThinkingSupport.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentDiscoveryPath.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentDiscoveryPathScope.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentInfo.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentInfoSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntry.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryAttentionKind.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryKind.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryLastTerminalEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryStatus.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLogCapture.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLogCaptureOpenErrorReason.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnError.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnPermissionMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnRegistryTimeout.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnSpawned.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationError.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationErrorField.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationErrorReason.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentsDiscoverParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentsDiscoverResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentsGetDiscoveryPathsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AgentsGetDiscoveryPathsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/AuthInfoType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/BuiltInModelCatalogEntry.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/CanvasAction.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/CanvasActionInvokeParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/CanvasCloseParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/CanvasHostContext.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/CanvasHostContextCapabilities.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/CanvasOpenParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/CanvasOpenResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/CanvasSessionContext.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/CapiSessionOptions.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/CommandsListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ConnectParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ConnectResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadata.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadataKind.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadataRepository.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ContentExclusionPathCheck.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ContextHeaviestMessage.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ContextTier.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/CurrentToolMetadata.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsCollectedEntry.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsEntry.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsEntryKind.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsInclude.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsRedaction.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsResultKind.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsSkippedEntry.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DisableBypassPermissionsMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DiscoveredCanvas.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtension.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionPlugin.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DiscoveredMcpServer.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/DiscoveredMcpServerType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/EventsAgentScope.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/EventsCursorStatus.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/EventsReadDirection.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/Extension.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProfile.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProviderResolveRequest.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProviderResolveResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ExtensionSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ExtensionStatus.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ExtensionsDisableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ExtensionsDiscoverResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ExtensionsEnableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryAbortParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentOptions.java (69%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentSummary.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryCurrentPhase.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryDeclaredLimits.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryExecuteParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryExecuteResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryLogLine.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryLogLineKind.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryPhaseObservation.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryPhaseStatus.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryProgressLine.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryProgressPage.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryRunConsumed.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryRunLimits.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryRunResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryRunStatus.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryRunSummary.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/FactoryRunTerminal.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryClientInfo.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryEvent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryNotification.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/HistoryCompactContextWindow.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/HistoryFileRestoreSkipReason.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindChangeType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindFilePreview.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindOutcome.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindPoint.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindUnavailableReason.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/HistorySkippedFileRestore.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/HookInvokeRequest.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/HookType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/HooksInvokeResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/InstalledPlugin.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/InstalledPluginInfo.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPath.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPathKind.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPathLocation.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/InstructionSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/InstructionSourceLocation.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/InstructionSourceType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/InstructionsDiscoverParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/InstructionsDiscoverResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/InstructionsGetDiscoveryPathsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/InstructionsGetDiscoveryPathsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestChunkRequest.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestChunkResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartRequest.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartTransport.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkError.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseStartParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseStartResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceSetProviderResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/LocalSessionMetadataValue.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ManagedSettingsReadResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/MarketplaceInfo.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/MarketplacePluginInfo.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/MarketplaceRefreshEntry.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAllowedServer.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAppsDiagnoseCapability.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAppsDiagnoseServer.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetails.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsAvailableDisplayMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsDisplayMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsPlatform.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsTheme.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAppsResourceContent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetails.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsAvailableDisplayMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsDisplayMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsPlatform.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsTheme.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpConfigAddParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpConfigDisableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpConfigEnableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpConfigListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpConfigRemoveParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpConfigUpdateParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpDiscoverParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpDiscoverResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpExecuteSamplingRequest.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpExecuteSamplingResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpFilteredServer.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpHostState.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpOauthLoginGrantType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpResource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpResourceAnnotations.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpResourceContent.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpResourceIcon.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpResourceTemplate.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpSamplingExecutionAction.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpServer.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpServerFailureInfo.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpServerNeedsAuthInfo.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpServerSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpServerStatus.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpSetEnvValueModeDetails.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpToolUi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpToolUiVisibility.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/McpTools.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/MemoryConfiguration.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotCurrentMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadata.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadataRepository.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadataTaskType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/Model.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelBilling.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelBillingPromo.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelBillingTokenPrices.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelBillingTokenPricesLongContext.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilities.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesLimits.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesLimitsVision.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverride.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideLimits.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideLimitsVision.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideSupports.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesSupports.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelPickerCategory.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelPickerPriceCategory.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelPolicy.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelPolicyState.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelsGetBuiltInCatalogResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelsListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ModelsListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/NamedProviderConfig.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/OpenCanvasInstance.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicy.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyRule.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyRuleSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyScope.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateContextTier.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateEnvValueMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateReasoningSummary.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateToolFilterPrecedence.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PendingPermissionRequest.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionContext.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionOutcome.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSurface.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionLocationType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionPathsConfig.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionRule.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionRulesSet.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionUrlsConfig.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionsAllowAllMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicy.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyRule.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyRuleSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyScope.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionsModifyRulesScope.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetAllowAllSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetApproveAllSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PingParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PingResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PlanSqlTodoDependency.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PlanSqlTodosRow.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/Plugin.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginUpdateAllEntry.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsDisableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsEnableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsInstallParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsInstallResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesAddParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesAddResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesBrowseParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesBrowseResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRefreshParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRefreshResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRemoveParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRemoveResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsUninstallParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateAllResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ProviderConfig.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigAzure.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigTransport.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigWireApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointTransport.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointWireApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ProviderModelConfig.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ProviderSessionToken.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ProviderTokenGetTokenParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ProviderTokenGetTokenResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/QueueInsertMessage.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/QueuePendingItems.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/QueuePendingItemsKind.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ReasoningSummary.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/RemoteControlConfig.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/RemoteControlConfigExistingMcSession.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataRepository.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataTaskType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataValue.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionRepository.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/RpcCaller.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/RpcMapper.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/RunOptions.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java (79%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicy.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyExperimental.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyExperimentalSeatbelt.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyFilesystem.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyNetwork.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyNetworkProxy.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicySeatbelt.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ScheduleEntry.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SecretsAddFilterValuesParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SecretsAddFilterValuesResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SendAgentMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SendMessageItem.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SendMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerAccountApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerAgentRegistryApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerAgentsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerCommandsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerExtensionsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerInstructionsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerLlmInferenceApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerManagedSettingsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerMcpApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerMcpConfigApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerModelsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerPluginsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerPluginsMarketplacesApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerRpc.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerRuntimeApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerSecretsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerSessionFsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerSessionsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerSkill.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerSkillsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerSkillsConfigApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerToolsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerUserApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ServerUserSettingsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionAbortParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionAbortResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionAgentApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionAgentDeselectParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionAgentGetCurrentParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionAgentGetCurrentResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionAgentListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionAgentListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionAgentReloadParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionAgentReloadResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSelectParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSelectResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSetPromptParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCancelAllBackgroundAgentsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionInvokeParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionInvokeResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasCloseParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListOpenParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListOpenResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasOpenParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasOpenResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCapability.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsEnqueueParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsEnqueueResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsExecuteParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsExecuteResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsHandlePendingCommandParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsHandlePendingCommandResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsInvokeParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsRespondToQueuedCommandParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsRespondToQueuedCommandResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionItem.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsGetTriggerCharactersParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsGetTriggerCharactersResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsRequestParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsRequestResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionCheckPathsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionCheckPathsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionContext.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionContextHostType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionDebugApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogRegisterInterestParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogRegisterInterestResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReleaseInterestParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReleaseInterestResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogTailParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogTailResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsDisableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsEnableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsReloadParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsSendAttachmentsToMessageParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryAgentParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryAgentResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryApi.java (93%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryCancelParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryCancelResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunDetailParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunDetailResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunProgressParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunProgressResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalGetParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalGetResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalPutParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsParams.java (72%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsResult.java (61%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryLogParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryResumeParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryResumeResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryRunParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryRunResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFleetApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFleetStartParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFleetStartResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsAppendFileParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsError.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsErrorCode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsExistsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsExistsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsMkdirParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsReadFileParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsReadFileResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesEntry.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesEntryType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsRenameParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsRmParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderCapabilities.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderConventions.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteExistsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteExistsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionError.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionErrorClass.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionStatement.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsStatParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsStatResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionFsWriteFileParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthGetStatusParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthGetStatusResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthSetCredentialsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthSetCredentialsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryAbortManualCompactionParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryAbortManualCompactionResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCancelBackgroundCompactionParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCancelBackgroundCompactionResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryClearContextParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryClearContextResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCompactParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCompactResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryListRewindPointsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryListRewindPointsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryPreviewRewindParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryPreviewRewindResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryRewindParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryRewindResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistorySummarizeForHandoffParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistorySummarizeForHandoffResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryTruncateParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryTruncateResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionInstalledPlugin.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsGetSourcesParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsGetSourcesResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionInterruptMainTurnParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionInterruptMainTurnResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionBaselineData.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionClientType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionDetails.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionPredictParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResultAvailable.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResultUnavailable.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionTier.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionTierOption.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionUnavailableReason.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLimitsConfig.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionListFilter.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLogLevel.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLogParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLogResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLspApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionLspInitializeParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionManagedPermissions.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionManagedSettings.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsCallToolParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsDiagnoseParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsDiagnoseResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsGetHostContextParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsGetHostContextResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsListToolsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsListToolsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsReadResourceParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsReadResourceResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsSetHostContextParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpCancelSamplingExecutionParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpCancelSamplingExecutionResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpConfigureGitHubParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpConfigureGitHubResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpDisableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpEnableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpExecuteSamplingParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpExecuteSamplingResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersHandlePendingHeadersRefreshRequestParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersHandlePendingHeadersRefreshRequestResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpIsServerRunningParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpIsServerRunningResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListToolsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListToolsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthAuthenticationStateChangedParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthHandlePendingRequestParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthHandlePendingRequestResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthLoginParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthLoginResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthRespondParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthRespondResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRegisterExternalClientParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadWithConfigParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadWithConfigResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRemoveGitHubParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRemoveGitHubResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListTemplatesParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListTemplatesResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesReadParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesReadResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRestartServerParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpSetEnvValueModeParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpSetEnvValueModeResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpStartServerParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpStopServerParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMcpUnregisterExternalClientParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataActivityParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataActivityResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataContextInfoParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataContextInfoResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextAttributionParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextAttributionResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextHeaviestMessagesParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextHeaviestMessagesResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataIsProcessingParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataIsProcessingResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecomputeContextTokensParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecomputeContextTokensResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecordContextChangeParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSetWorkingDirectoryParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSetWorkingDirectoryResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSnapshotParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSnapshotResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionModeApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionModeGetParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionModeSetParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionModelApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionModelGetCurrentParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionModelGetCurrentResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionModelListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionModelListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionModelPriceCategory.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionModelSetReasoningEffortParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionModelSetReasoningEffortResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionModelSwitchToParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionModelSwitchToResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionNameApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionNameGetParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionNameGetResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetAutoParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetAutoResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptions.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicy.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyRule.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyRuleSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyScope.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsEnvValueMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsReasoningSummary.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsUpdateParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsUpdateResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsConfigureParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsConfigureResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustAddTrustedParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustAddTrustedResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustIsTrustedParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustIsTrustedResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsGetAllowAllParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsGetAllowAllResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsHandlePendingPermissionRequestParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsHandlePendingPermissionRequestResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsAddToolApprovalParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsAddToolApprovalResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApplyParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApplyResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsResolveParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsResolveResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsModifyRulesParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsModifyRulesResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsNotifyPromptShownParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsNotifyPromptShownResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinAllowedDirectoriesParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinAllowedDirectoriesResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinWorkspaceParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinWorkspaceResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsUpdatePrimaryParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsUpdatePrimaryResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPendingRequestsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPendingRequestsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsResetSessionApprovalsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsResetSessionApprovalsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetAllowAllParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetAllowAllResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetApproveAllParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetApproveAllResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetRequiredParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetRequiredResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsSetUnrestrictedModeParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsSetUnrestrictedModeResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPlanApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPlanDeleteParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosWithDependenciesParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosWithDependenciesResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPlanUpdateParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsReloadParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionProviderAddParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionProviderAddResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionProviderApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionProviderGetEndpointParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionProviderGetEndpointResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueBeginDeferredIdleDrainParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueBeginDeferredIdleDrainResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueClearParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueConsumeSystemNotificationsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueConsumeSystemNotificationsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDeferSessionIdleParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDuplicateAtParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDuplicateAtResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueEnqueueResumePendingParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueEnqueueResumePendingResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueFinishDeferredIdleDrainParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueFinishDeferredIdleDrainResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueHasPendingParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueHasPendingResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueInsertAtParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueInsertAtResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueMoveItemParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueMoveItemResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueProcessParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveAtParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveAtResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveMostRecentParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveMostRecentResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSendNowParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSendNowResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSetDrainPausedParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSnapshotParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSnapshotResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueUpdateTextParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionQueueUpdateTextResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteDisableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteEnableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteEnableResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteNotifySteerableChangedParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionRpc.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddAtParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddAtResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddCronParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddCronResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddSelfPacedParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddSelfPacedResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHasSelfPacedParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHasSelfPacedResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHydrateParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleRearmSelfPacedParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleRearmSelfPacedResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleStopParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleStopResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSendParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSendResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSendSystemNotificationParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsBuiltInToolAvailabilitySnapshot.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsEvaluatePredicateParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsEvaluatePredicateResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsJobSnapshot.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsModelSnapshot.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsOnlineEvaluationSnapshot.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsPredicateName.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsRepoSnapshot.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsSnapshotParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsSnapshotResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsValidationSnapshot.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionShellApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionShellCancelUserRequestedParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionShellCancelUserRequestedResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecuteUserRequestedParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecuteUserRequestedResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionShellKillParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionShellKillResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionShutdownParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsDisableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsEnableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsEnsureLoadedParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsGetInvokedParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsGetInvokedResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsReloadParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsReloadResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionSuspendParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksCancelParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksCancelResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetCurrentPromotableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetCurrentPromotableResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetProgressParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetProgressResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteCurrentToBackgroundParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteCurrentToBackgroundResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteToBackgroundParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteToBackgroundResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRefreshParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRemoveParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRemoveResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksSendMessageParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksSendMessageResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksStartAgentParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksStartAgentResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTasksWaitForPendingParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryGetEngagementIdParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryGetEngagementIdResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetrySetFeatureOverridesParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionToolsApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionToolsGetCurrentMetadataParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionToolsGetCurrentMetadataResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionToolsHandlePendingToolCallParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionToolsHandlePendingToolCallResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionToolsInitializeAndValidateParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionToolsUpdateSubagentSettingsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiElicitationParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiElicitationResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiEphemeralQueryParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiEphemeralQueryResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingAutoModeSwitchParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingAutoModeSwitchResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingElicitationParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingElicitationResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingExitPlanModeParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingExitPlanModeResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSamplingParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSamplingResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSessionLimitsExhaustedParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSessionLimitsExhaustedResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingUserInputParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingUserInputResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiRegisterDirectAutoModeSwitchHandlerParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiRegisterDirectAutoModeSwitchHandlerResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiUnregisterDirectAutoModeSwitchHandlerParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUiUnregisterDirectAutoModeSwitchHandlerResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUsageApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUsageGetMetricsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionUsageGetMetricsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityGetParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityGetResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilitySetParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilitySetResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityStatus.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkingDirectoryContext.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkingDirectoryContextHostType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAddSummaryParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAddSummaryResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesApi.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAutopilotObjectiveExistsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAutopilotObjectiveExistsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesCreateFileParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDeleteAutopilotObjectiveParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDeleteAutopilotObjectiveResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDiffParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDiffResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesEnsureParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesEnsureResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesGetWorkspaceParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesGetWorkspaceResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListCheckpointsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListCheckpointsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListFilesParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListFilesResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadAutopilotObjectiveParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadAutopilotObjectiveResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadCheckpointParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadCheckpointResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadFileParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadFileResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesSaveLargePasteParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesSaveLargePasteResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesTruncateSummariesParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesTruncateSummariesResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesUpdateMetadataParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesUpdateMetadataResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesWriteAutopilotObjectiveParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesWriteAutopilotObjectiveResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsBulkDeleteParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsBulkDeleteResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsCheckInUseParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsCheckInUseResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsCloseParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsConfigureSessionExtensionsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsConnectParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsConnectResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsDeleteParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsEnrichMetadataParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsEnrichMetadataResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByPrefixParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByPrefixResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByTaskIdParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByTaskIdResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsForkParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsForkResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsGetBoardEntryCountParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsGetBoardEntryCountResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsGetEventFilePathParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsGetEventFilePathResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsGetLastForContextParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsGetLastForContextResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsGetMetadataParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsGetMetadataResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsGetPersistedRemoteSteerableParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsGetPersistedRemoteSteerableResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsGetRemoteControlStatusResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsGetSizesResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsListNonEmptySessionIdsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsListNonEmptySessionIdsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsLoadDeferredRepoHooksParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsLoadDeferredRepoHooksResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenAttach.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenCloud.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenCreate.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenHandoff.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenHandoffTaskType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgress.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgressStatus.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgressStep.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenRemote.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResume.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResumeLast.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenStatus.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsPruneOldParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsPruneOldResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionOptions.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsReleaseLockParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsReloadPluginHooksParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsSaveParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsSetAdditionalPluginsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsSetRemoteControlSteeringParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsSetRemoteControlSteeringResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsStartRemoteControlParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsStartRemoteControlResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsStopRemoteControlParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsStopRemoteControlResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsTransferRemoteControlParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SessionsTransferRemoteControlResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ShellInitProfile.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ShellInitScript.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ShellInitScriptShell.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ShellKillSignal.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ShellOptions.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ShutdownType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/Skill.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SkillDiscoveryPath.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SkillDiscoveryScope.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SkillSource.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SkillsConfigSetDisabledSkillsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SkillsDiscoverParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SkillsDiscoverResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SkillsGetDiscoveryPathsParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SkillsGetDiscoveryPathsResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SkillsInvokedSkill.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SlashCommandAgentPromptResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SlashCommandCompletedResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInfo.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInput.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInputChoice.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInputCompletion.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInvocationResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SlashCommandKind.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SlashCommandSelectSubcommandOption.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SlashCommandSelectSubcommandResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SlashCommandTextResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SubagentSettingsEntry.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/SubagentSettingsEntryContextTier.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/Tool.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ToolsListParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/ToolsListResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UIAutoModeSwitchResponse.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UIElicitationResponse.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UIElicitationResponseAction.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UIElicitationSchema.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UIExitPlanModeAction.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UIExitPlanModeResponse.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UIHandlePendingSamplingResponse.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UISessionLimitsExhaustedResponse.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UISessionLimitsExhaustedResponseAction.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UIUserInputResponse.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsCodeChanges.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetric.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricRequests.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricTokenDetail.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricUsage.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsTokenDetail.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UserSettingMetadata.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UserSettingsGetResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UserSettingsSetParams.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/UserSettingsSetResult.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/Verbosity.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffFileChange.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffFileChangeType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffMode.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/WorkspaceSummaryHostType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/WorkspacesCheckpoints.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/WorkspacesWorkspaceDetailsHostType.java (100%) rename java/{ => sdk}/src/generated/java/com/github/copilot/generated/rpc/package-info.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/AllowCopilotExperimental.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/CliServerManager.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/ConnectionState.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/CopilotClient.java (81%) rename java/{ => sdk}/src/main/java/com/github/copilot/CopilotExperimental.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/CopilotExperimentalProcessor.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/CopilotRequestContext.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/CopilotRequestHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/CopilotRequestTransport.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/CopilotSession.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/CopilotWebSocketCloseStatus.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/CopilotWebSocketForwarder.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/CopilotWebSocketHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/CopilotWebSocketMessage.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/EventErrorHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/EventErrorPolicy.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/ExtractedTransforms.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/GitHubTelemetryAdapter.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/InternalExecutorProvider.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/JsonRpcClient.java (89%) rename java/{ => sdk}/src/main/java/com/github/copilot/JsonRpcException.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/LifecycleEventManager.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/LlmInferenceAdapter.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/LlmInferenceExchange.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/LlmWebSocketResponseBridge.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/LoggingHelpers.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/RpcHandlerDispatcher.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/SdkProtocolVersion.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/SessionRequestBuilder.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/SystemMessageMode.java (100%) create mode 100644 java/sdk/src/main/java/com/github/copilot/ffi/FfiOutputStream.java create mode 100644 java/sdk/src/main/java/com/github/copilot/ffi/FfiRuntimeHost.java create mode 100644 java/sdk/src/main/java/com/github/copilot/ffi/JnaNativeBinding.java create mode 100644 java/sdk/src/main/java/com/github/copilot/ffi/NativeBinding.java create mode 100644 java/sdk/src/main/java/com/github/copilot/ffi/NativeRuntimeLoader.java create mode 100644 java/sdk/src/main/java/com/github/copilot/ffi/OutboundCallback.java create mode 100644 java/sdk/src/main/java/com/github/copilot/ffi/PlatformDetector.java create mode 100644 java/sdk/src/main/java/com/github/copilot/ffi/QueueInputStream.java create mode 100644 java/sdk/src/main/java/com/github/copilot/ffi/ReaderThreadFactory.java rename java/{ => sdk}/src/main/java/com/github/copilot/package-info.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/AgentInfo.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/AgentMode.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/AgentStopHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/AgentStopHookInput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/AgentStopHookOutput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/Attachment.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/AutoModeSwitchHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/AutoModeSwitchInvocation.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/AutoModeSwitchRequest.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/AutoModeSwitchResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/AzureOptions.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/BearerTokenProvider.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/BlobAttachment.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/BuiltInTools.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/CapiSessionOptions.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/CloudSessionOptions.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/CloudSessionRepository.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/CommandContext.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/CommandDefinition.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/CommandHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/CommandWireDefinition.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/CopilotClientMode.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/CopilotClientOptions.java (94%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/CopilotExpAssignmentResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/CreateSessionRequest.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/CreateSessionResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/CustomAgentConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/DefaultAgentConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/DeleteSessionResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ElicitationContext.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ElicitationHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ElicitationParams.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ElicitationResult.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ElicitationResultAction.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ElicitationSchema.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ExitPlanModeHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ExitPlanModeInvocation.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ExitPlanModeRequest.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ExitPlanModeResult.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ExpConfigEntry.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/GetAuthStatusResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/GetForegroundSessionResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/GetLastSessionIdResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/GetMessagesResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/GetModelsResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/GetSessionMetadataResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/GetStatusResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/GitHubMcpToolConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/HookInvocation.java (100%) create mode 100644 java/sdk/src/main/java/com/github/copilot/rpc/InProcessRuntimeConnection.java rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/InfiniteSessionConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/InputOptions.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/JsonRpcError.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/JsonRpcRequest.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/JsonRpcResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/LargeToolOutputConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ListSessionsResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ManagedSettings.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ManagedSettingsPermissions.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/McpAuthHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/McpAuthInvocation.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/McpAuthRequest.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/McpAuthResult.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/McpAuthToken.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/McpHttpServerConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/McpServerConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/McpStdioServerConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/MemoryConfiguration.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/MessageAttachment.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/MessageOptions.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ModelBilling.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ModelCapabilities.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ModelCapabilitiesOverride.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ModelInfo.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ModelLimits.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ModelPolicy.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ModelSupports.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ModelVisionLimits.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/NamedProviderConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ParamCoercion.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ParamSchema.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PermissionHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PermissionInvocation.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PermissionRequest.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PermissionRequestResult.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PermissionRequestResultKind.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PingResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PostToolUseFailureHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PostToolUseFailureHookInput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PostToolUseFailureHookOutput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PostToolUseHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PostToolUseHookInput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PostToolUseHookOutput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PreMcpToolCallHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PreMcpToolCallHookInput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PreMcpToolCallHookOutput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PreToolUseHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PreToolUseHookInput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/PreToolUseHookOutput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ProviderConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ProviderModelConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ProviderTokenArgs.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ResumeSessionConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ResumeSessionRequest.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ResumeSessionResponse.java (100%) create mode 100644 java/sdk/src/main/java/com/github/copilot/rpc/RuntimeConnection.java rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SectionOverride.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SectionOverrideAction.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SendMessageRequest.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SendMessageResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionCapabilities.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionContext.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionEndHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionEndHookInput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionEndHookOutput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionHooks.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionLifecycleEvent.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionLifecycleEventMetadata.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionLifecycleEventTypes.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionLifecycleHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionListFilter.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionMetadata.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionStartHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionStartHookInput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionStartHookOutput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionUiApi.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SessionUiCapabilities.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SetForegroundSessionRequest.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SetForegroundSessionResponse.java (100%) create mode 100644 java/sdk/src/main/java/com/github/copilot/rpc/StdioRuntimeConnection.java rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SystemMessageConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SystemMessageSections.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/SystemPromptSections.java (100%) create mode 100644 java/sdk/src/main/java/com/github/copilot/rpc/TcpRuntimeConnection.java rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/TelemetryConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ToolBinaryResult.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ToolDefer.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ToolDefinition.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ToolHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ToolInvocation.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ToolResultObject.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ToolSearchConfig.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/ToolSet.java (100%) create mode 100644 java/sdk/src/main/java/com/github/copilot/rpc/UriRuntimeConnection.java rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/UserInputHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/UserInputInvocation.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/UserInputRequest.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/UserInputResponse.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHookInput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHookOutput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/UserPromptTransformedHandler.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/UserPromptTransformedHookInput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/UserPromptTransformedHookOutput.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/rpc/package-info.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/tool/CopilotTool.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/tool/CopilotToolMetadataProvider.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/tool/CopilotToolParam.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/tool/CopilotToolProcessor.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/tool/Param.java (100%) rename java/{ => sdk}/src/main/java/com/github/copilot/tool/SchemaGenerator.java (100%) rename java/{ => sdk}/src/main/java/module-info.java (94%) rename java/{ => sdk}/src/main/java25/com/github/copilot/InternalExecutorProvider.java (100%) create mode 100644 java/sdk/src/main/java25/com/github/copilot/ffi/ReaderThreadFactory.java rename java/{ => sdk}/src/main/resources/META-INF/services/javax.annotation.processing.Processor (100%) create mode 100644 java/sdk/src/main/resources/copilot-runtime.properties rename java/{ => sdk}/src/test/java/com/github/copilot/AgentInfoTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/AgentModeTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/AskUserTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ByokBearerTokenProviderE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/CapiProxy.java (95%) rename java/{ => sdk}/src/test/java/com/github/copilot/CapiSessionOptionsTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/CliServerManagerTest.java (98%) rename java/{ => sdk}/src/test/java/com/github/copilot/ClientOptionsE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ClosedSessionGuardTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/CommandsTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/CompactionTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ConfigCloneTest.java (98%) rename java/{ => sdk}/src/test/java/com/github/copilot/CopilotClientModeTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/CopilotClientTest.java (99%) create mode 100644 java/sdk/src/test/java/com/github/copilot/CopilotClientTransportTest.java rename java/{ => sdk}/src/test/java/com/github/copilot/CopilotExperimentalProcessorTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/CopilotRequestCancelErrorE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/CopilotRequestHandlerE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/CopilotRequestSessionIdE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/CopilotRequestTestSupport.java (99%) rename java/{ => sdk}/src/test/java/com/github/copilot/CopilotSessionTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/CreateSessionReKeyEntryTest.java (99%) rename java/{ => sdk}/src/test/java/com/github/copilot/DataObjectCoverageTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/DocumentationSamplesTest.java (99%) rename java/{ => sdk}/src/test/java/com/github/copilot/E2ETestContext.java (90%) rename java/{ => sdk}/src/test/java/com/github/copilot/ElicitationTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ErrorHandlingTest.java (94%) rename java/{ => sdk}/src/test/java/com/github/copilot/EventFidelityTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ExecutorWiringTest.java (95%) rename java/{ => sdk}/src/test/java/com/github/copilot/FakeUpstreamServer.java (97%) rename java/{ => sdk}/src/test/java/com/github/copilot/ForwardCompatibilityTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/GitHubTelemetryForwardingIT.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/GitHubTelemetryTest.java (91%) rename java/{ => sdk}/src/test/java/com/github/copilot/HooksTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/InternalExecutorProviderIT.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/InternalExecutorProviderProbe.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/InternalExecutorProviderTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/JsonIncludeNonNullTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/JsonRpcClientTest.java (99%) rename java/{ => sdk}/src/test/java/com/github/copilot/LifecycleEventManagerTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/LowLevelToolDefinitionIT.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ManagedSettingsTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/McpAndAgentsTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/McpAuthInterestRegistrationTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/McpOAuthE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/McpOAuthResumeE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/MessageAttachmentTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/MetadataApiTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ModeHandlersTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ModelInfoTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ModuleDescriptorTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/MultiProviderConfigTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/MultiProviderRegistryE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/OptionalApiAndJacksonTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/PerSessionAuthTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/PermissionRequestResultKindTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/PermissionRequestResultTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/PermissionsTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/PreMcpToolCallHookTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ProviderConfigTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ProviderEndpointE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/RemoteSessionTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/RpcHandlerDispatcherTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/RpcServerE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/RpcServerMiscE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/RpcSessionStateExtrasE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/RpcTasksAndHandlersE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/RpcWrappersTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/SchedulerShutdownRaceTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/SessionCanvasSnapshotTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/SessionConfigE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/SessionEventDeserializationTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/SessionEventHandlingTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/SessionEventsE2ETest.java (98%) rename java/{ => sdk}/src/test/java/com/github/copilot/SessionHandlerTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/SessionRequestBuilderTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/SessionTodosChangedTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/SkillsTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/SlashCommandsIT.java (98%) rename java/{ => sdk}/src/test/java/com/github/copilot/StreamingFidelityTest.java (86%) rename java/{ => sdk}/src/test/java/com/github/copilot/SubagentHooksE2ETest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/SystemMessageSectionsIT.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/TelemetryConfigTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/TestUtil.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/TimeoutEdgeCaseTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ToolDefinitionTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ToolInvocationTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ToolResultObjectSerializationTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ToolResultsTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ToolSetTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ToolsTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/UpdateSessionOptionsForModeTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/ZeroTimeoutContractTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/e2e/ErgonomicTestTools$$CopilotToolMeta.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/e2e/ErgonomicTestTools.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/e2e/ErgonomicToolDefinitionIT.java (100%) create mode 100644 java/sdk/src/test/java/com/github/copilot/e2e/InProcessTransportIT.java create mode 100644 java/sdk/src/test/java/com/github/copilot/e2e/RequireInProcess.java create mode 100644 java/sdk/src/test/java/com/github/copilot/e2e/SkipInProcess.java create mode 100644 java/sdk/src/test/java/com/github/copilot/ffi/FfiRuntimeHostTest.java create mode 100644 java/sdk/src/test/java/com/github/copilot/ffi/InProcessEnvGuard.java create mode 100644 java/sdk/src/test/java/com/github/copilot/ffi/JnaNativeBindingTest.java create mode 100644 java/sdk/src/test/java/com/github/copilot/ffi/NativeRuntimeLoaderTest.java create mode 100644 java/sdk/src/test/java/com/github/copilot/ffi/PlatformDetectorTest.java create mode 100644 java/sdk/src/test/java/com/github/copilot/ffi/QueueInputStreamTest.java rename java/{ => sdk}/src/test/java/com/github/copilot/generated/GeneratedEventTypesCoverageTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/generated/GeneratedTypesJacksonRoundTripTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcApiCoverageTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/ParamCoercionTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/ParamSchemaTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/RecordInvocationArgs.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/ToolDefinitionFromObjectTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/ToolDefinitionIsTerminalTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/ToolDefinitionLambdaTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/ArgCoercionTools$$CopilotToolMeta.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/ArgCoercionTools.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/DateTimeTools$$CopilotToolMeta.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/DateTimeTools.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/DefaultValueTools$$CopilotToolMeta.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/DefaultValueTools.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/InvocationAwareTools$$CopilotToolMeta.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/InvocationAwareTools.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/MultiReturnTools$$CopilotToolMeta.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/MultiReturnTools.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/OptionalParamTools$$CopilotToolMeta.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/OptionalParamTools.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/OverrideTools$$CopilotToolMeta.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/OverrideTools.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/SimpleTools$$CopilotToolMeta.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/SimpleTools.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/StaticInvocationTools$$CopilotToolMeta.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/StaticInvocationTools.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/StaticTools$$CopilotToolMeta.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/rpc/fixtures/StaticTools.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/tool/CopilotToolAnnotationTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/tool/CopilotToolProcessorTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/tool/ParamTest.java (100%) rename java/{ => sdk}/src/test/java/com/github/copilot/tool/SchemaGeneratorTest.java (100%) rename java/{ => sdk}/src/test/prompts/PROMPT-smoke-test.md (100%) rename java/{ => sdk}/src/test/resources/logging-debug.properties (100%) rename java/{ => sdk}/src/test/resources/logging.properties (100%) delete mode 100644 java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigAuth.java diff --git a/.github/workflows/codegen-check.yml b/.github/workflows/codegen-check.yml index 78927f1600..f37a71e45e 100644 --- a/.github/workflows/codegen-check.yml +++ b/.github/workflows/codegen-check.yml @@ -15,7 +15,7 @@ on: - 'go/rpc/**' - 'rust/src/generated/**' - 'sdk-protocol-version.json' - - 'java/src/main/java/com/github/copilot/SdkProtocolVersion.java' + - 'java/sdk/src/main/java/com/github/copilot/SdkProtocolVersion.java' - '.github/workflows/codegen-check.yml' workflow_dispatch: @@ -84,7 +84,7 @@ jobs: - name: Verify Java protocol version matches run: | EXPECTED=$(jq -r '.version' sdk-protocol-version.json) - ACTUAL=$(grep -oP 'LATEST\(\K[0-9]+' java/src/main/java/com/github/copilot/SdkProtocolVersion.java) + ACTUAL=$(grep -oP 'LATEST\(\K[0-9]+' java/sdk/src/main/java/com/github/copilot/SdkProtocolVersion.java) if [ "$EXPECTED" != "$ACTUAL" ]; then echo "::error::Java SDK protocol version ($ACTUAL) does not match sdk-protocol-version.json ($EXPECTED). Java manages its own SdkProtocolVersion.java via java/scripts/codegen/. Update it to match." exit 1 diff --git a/.github/workflows/docs-validation.yml b/.github/workflows/docs-validation.yml index 4f53b71e4c..dff02f0d26 100644 --- a/.github/workflows/docs-validation.yml +++ b/.github/workflows/docs-validation.yml @@ -9,8 +9,9 @@ on: - 'python/copilot/**' - 'go/**/*.go' - 'dotnet/src/**' - - 'java/src/**' + - 'java/sdk/src/**' - 'java/pom.xml' + - 'java/sdk/pom.xml' - 'scripts/docs-validation/**' - '.github/workflows/docs-validation.yml' workflow_dispatch: diff --git a/.github/workflows/java-adapt-handwritten-code-to-accept-upgrade-changes.lock.yml b/.github/workflows/java-adapt-handwritten-code-to-accept-upgrade-changes.lock.yml index de924a01ae..e94e0775c0 100644 --- a/.github/workflows/java-adapt-handwritten-code-to-accept-upgrade-changes.lock.yml +++ b/.github/workflows/java-adapt-handwritten-code-to-accept-upgrade-changes.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"a5f19a89f89b0693f86ca89ea90e3a633fe19c17bf4d27214fa9124429cdc156","body_hash":"41bc10df4ac9179064417476fbb39fef7423d0998dc0beb7bad42e9eb7ab0494","compiler_version":"v0.83.1","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.73"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"a5f19a89f89b0693f86ca89ea90e3a633fe19c17bf4d27214fa9124429cdc156","body_hash":"8db09798070cbcba22c42c50a316ae45c8e8c650eeb23c556b44fde8d519550a","compiler_version":"v0.83.1","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.73"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"373c709c69115d41ff229c7e5df9f8788daa9553","version":"v9"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"8bdba8075360648fe6802302a5b4e016361dc6ac","version":"v0.83.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.38","digest":"sha256:cb928eb62d9139a013c2d278dab19af232d35a2d83dca71a3d98eb431f786243","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.38@sha256:cb928eb62d9139a013c2d278dab19af232d35a2d83dca71a3d98eb431f786243"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.38","digest":"sha256:cd6145620d96acee46e1ede25180a13aa36002467e663db0caa453a8bc8eb60c","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.38@sha256:cd6145620d96acee46e1ede25180a13aa36002467e663db0caa453a8bc8eb60c"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.38","digest":"sha256:6c19094d95aad5f9f128ad5e583f0f2b894b158aa66c3b86dd9bcc90970a2917","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.38@sha256:6c19094d95aad5f9f128ad5e583f0f2b894b158aa66c3b86dd9bcc90970a2917"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.3","digest":"sha256:3c744710ea275cd5ee65db92a1099e0d980754bd9fafda9ce67704c67004dc83","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.3@sha256:3c744710ea275cd5ee65db92a1099e0d980754bd9fafda9ce67704c67004dc83"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # This file was automatically generated by gh-aw (v0.83.1). DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # diff --git a/.github/workflows/java-adapt-handwritten-code-to-accept-upgrade-changes.md b/.github/workflows/java-adapt-handwritten-code-to-accept-upgrade-changes.md index b1623ff78a..dd1bfe2bbc 100644 --- a/.github/workflows/java-adapt-handwritten-code-to-accept-upgrade-changes.md +++ b/.github/workflows/java-adapt-handwritten-code-to-accept-upgrade-changes.md @@ -51,17 +51,17 @@ You are an automation agent that fixes handwritten Java SDK source and test code - The branch `${{ inputs.branch }}` already has: - Updated `java/scripts/codegen/package.json` with the new version - - Regenerated `java/src/generated/java/` code that compiles successfully + - Regenerated `java/sdk/src/generated/java/` code that compiles successfully - Updated the Java POM CLI/version pin property - Your job is ONLY to fix **handwritten** code, NOT generated code. ## Boundaries -- ❌ Do NOT edit anything under `java/src/generated/java/` +- ❌ Do NOT edit anything under `java/sdk/src/generated/java/` - ❌ Do NOT edit `java/scripts/codegen/java.ts` -- ❌ Do NOT create or modify tests in the `com.github.copilot.generated` test package (`java/src/test/java/com/github/copilot/sdk/generated/`) -- ✅ DO edit `java/src/main/java/com/github/copilot/sdk/**` -- ✅ DO edit `java/src/test/java/com/github/copilot/sdk/**` (excluding the `generated` subpackage) +- ❌ Do NOT create or modify tests in the `com.github.copilot.generated` test package (`java/sdk/src/test/java/com/github/copilot/sdk/generated/`) +- ✅ DO edit `java/sdk/src/main/java/com/github/copilot/sdk/**` +- ✅ DO edit `java/sdk/src/test/java/com/github/copilot/sdk/**` (excluding the `generated` subpackage) - ✅ DO add new test methods or test classes if new user-facing API surface is introduced ## Instructions @@ -146,7 +146,7 @@ mvn verify -Dskip.test.harness=true If this passes, commit and push: ```bash -git add java/src/main/java java/src/test/java +git add java/sdk/src/main/java java/sdk/src/test/java git commit -m "Fix handwritten Java code for @github/copilot schema changes Adapt constructor calls, enum references, and test assertions to match diff --git a/.github/workflows/java-codegen-check.yml b/.github/workflows/java-codegen-check.yml index e1c11cd6da..f2f4527966 100644 --- a/.github/workflows/java-codegen-check.yml +++ b/.github/workflows/java-codegen-check.yml @@ -6,12 +6,12 @@ on: - main paths: - 'java/scripts/codegen/**' - - 'java/src/generated/**' + - 'java/sdk/src/generated/**' - '.github/workflows/java-codegen-check.yml' pull_request: paths: - 'java/scripts/codegen/**' - - 'java/src/generated/**' + - 'java/sdk/src/generated/**' - '.github/workflows/java-codegen-check.yml' workflow_dispatch: diff --git a/.github/workflows/java-codegen-fix.lock.yml b/.github/workflows/java-codegen-fix.lock.yml index 08005d7f7c..1d8d28c439 100644 --- a/.github/workflows/java-codegen-fix.lock.yml +++ b/.github/workflows/java-codegen-fix.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"b0390c9ab9beb0d7e106314299e89e486269ab7f64d8489d5021132d79aa6b9b","body_hash":"fe41f8fe1c12cb585cfaefdd755f58d2a84410d9d819cd706a3192ce052e2545","compiler_version":"v0.83.1","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.73"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"b0390c9ab9beb0d7e106314299e89e486269ab7f64d8489d5021132d79aa6b9b","body_hash":"63d6ce13a5131b158ddffb10a469aa59e0fdc2278eec4d8de7f6763e0b6f2ea2","compiler_version":"v0.83.1","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.73"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"373c709c69115d41ff229c7e5df9f8788daa9553","version":"v9"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"8bdba8075360648fe6802302a5b4e016361dc6ac","version":"v0.83.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.38","digest":"sha256:cb928eb62d9139a013c2d278dab19af232d35a2d83dca71a3d98eb431f786243","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.38@sha256:cb928eb62d9139a013c2d278dab19af232d35a2d83dca71a3d98eb431f786243"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.38","digest":"sha256:cd6145620d96acee46e1ede25180a13aa36002467e663db0caa453a8bc8eb60c","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.38@sha256:cd6145620d96acee46e1ede25180a13aa36002467e663db0caa453a8bc8eb60c"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.38","digest":"sha256:6c19094d95aad5f9f128ad5e583f0f2b894b158aa66c3b86dd9bcc90970a2917","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.38@sha256:6c19094d95aad5f9f128ad5e583f0f2b894b158aa66c3b86dd9bcc90970a2917"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.3","digest":"sha256:3c744710ea275cd5ee65db92a1099e0d980754bd9fafda9ce67704c67004dc83","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.3@sha256:3c744710ea275cd5ee65db92a1099e0d980754bd9fafda9ce67704c67004dc83"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # This file was automatically generated by gh-aw (v0.83.1). DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # diff --git a/.github/workflows/java-codegen-fix.md b/.github/workflows/java-codegen-fix.md index 1fe465f4c5..b1dcb1f636 100644 --- a/.github/workflows/java-codegen-fix.md +++ b/.github/workflows/java-codegen-fix.md @@ -54,7 +54,7 @@ You are an automation agent that fixes Java compilation and test failures caused A Dependabot PR bumped the `@github/copilot` npm dependency in `java/scripts/codegen/package.json`. The `java-codegen-check` workflow ran the code generator (`java/scripts/codegen/java.ts`) against the new schemas and `mvn verify` subsequently failed. Your job is to fix **both** the code generator script (if needed) and the handwritten SDK/test source code so the build passes. -**❌❌❌ YOU MUST NEVER EDIT any of the java source code in `java/src/generated/` directly.** ✅✅Rather, the way to affect changes in these files is to change the code generator script and re-generate the classes in `java/src/generated`. +**❌❌❌ YOU MUST NEVER EDIT any of the java source code in `java/sdk/src/generated/` directly.** ✅✅Rather, the way to affect changes in these files is to change the code generator script and re-generate the classes in `java/sdk/src/generated`. The branch to fix is: `${{ inputs.branch }}` The PR number is: `${{ inputs.pr_number }}` @@ -66,7 +66,7 @@ ${{ inputs.error_summary }} ## Architecture overview -The code generator (`java/scripts/codegen/java.ts`) reads JSON schemas from `node_modules/@github/copilot/schemas/` and produces Java source files under `java/src/generated/java/`. These generated types are consumed by handwritten code in `java/src/main/java/` (primarily `CopilotSession.java`) and tested by handwritten tests in `java/src/test/java/`. +The code generator (`java/scripts/codegen/java.ts`) reads JSON schemas from `node_modules/@github/copilot/schemas/` and produces Java source files under `java/sdk/src/generated/java/`. These generated types are consumed by handwritten code in `java/sdk/src/main/java/` (primarily `CopilotSession.java`) and tested by handwritten tests in `java/sdk/src/test/java/`. When `@github/copilot` is bumped, the schemas may change in ways the code generator does not yet handle. Common schema changes include: @@ -126,7 +126,7 @@ Before making fixes, determine whether the failure is caused by: - New schemas exist but no corresponding Java types were generated **(B) Handwritten code referencing old generated type names/shapes.** Signs: -- Compilation errors in `java/src/main/java/` or `java/src/test/java/` referencing types that no longer exist +- Compilation errors in `java/sdk/src/main/java/` or `java/sdk/src/test/java/` referencing types that no longer exist - Test data using old JSON field names Often **both** (A) and (B) apply: the codegen needs fixing first, then handwritten code needs updating. @@ -162,7 +162,7 @@ If the diagnosis shows the code generator does not handle the new schema format: 4. **Verify the generated output** looks reasonable: ```bash - git diff --stat java/src/generated/java/ + git diff --stat java/sdk/src/generated/java/ ``` **You may ONLY modify `java/scripts/codegen/java.ts`.** Do not modify `package.json`, `package-lock.json`, or any other file under `java/scripts/codegen/`. @@ -179,12 +179,12 @@ For each attempt: 2. **Read the generated types** to understand what changed. Check the generated files that the handwritten code references: ```bash # Example: check what a generated type looks like now - cat java/src/generated/java/com/github/copilot/generated/rpc/.java + cat java/sdk/src/generated/java/com/github/copilot/generated/rpc/.java ``` 3. **Fix the affected source files.** You may modify files under: - - `java/src/main/java/` — handwritten SDK source code - - `java/src/test/java/` — handwritten test code + - `java/sdk/src/main/java/` — handwritten SDK source code + - `java/sdk/src/test/java/` — handwritten test code Common fixes: - Update type references from old nested types to new standalone types (e.g. `SessionMcpListResultServersItem` → `McpServer`) @@ -236,12 +236,12 @@ Do **NOT** push broken code. ## Important constraints -- **NEVER** hand-edit files under `java/src/generated/java/` — these are auto-generated. They are updated by running `cd java/scripts/codegen && npx tsx java.ts`. -- **NEVER** modify `java/pom.xml` — build config is not in scope +- **NEVER** hand-edit files under `java/sdk/src/generated/java/` — these are auto-generated. They are updated by running `cd java/scripts/codegen && npx tsx java.ts`. +- **NEVER** modify `java/sdk/pom.xml` — build config is not in scope - **NEVER** modify `java/scripts/codegen/package.json` or `java/scripts/codegen/package-lock.json` — dependency versions are not in scope - **NEVER** modify files under `.github/` — workflow files are not in scope - You **MAY** modify `java/scripts/codegen/java.ts` to fix the code generator -- You **MAY** modify files under `java/src/main/java/` and `java/src/test/java/` to fix handwritten code +- You **MAY** modify files under `java/sdk/src/main/java/` and `java/sdk/src/test/java/` to fix handwritten code - Always run `cd java && mvn spotless:apply` before committing to ensure code formatting - Maximum 3 fix attempts before reporting failure via `noop` - Only push if `mvn verify` passes \ No newline at end of file diff --git a/.github/workflows/java-sdk-tests.yml b/.github/workflows/java-sdk-tests.yml index 20083749ec..aa1036358d 100644 --- a/.github/workflows/java-sdk-tests.yml +++ b/.github/workflows/java-sdk-tests.yml @@ -17,6 +17,52 @@ permissions: contents: read jobs: + java-sdk-inprocess: + name: "Java SDK InProcess Tests" + if: github.event.repository.fork == false + runs-on: ubuntu-latest + continue-on-error: true + defaults: + run: + shell: bash + working-directory: ./java + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 + with: + java-version: "25" + distribution: "microsoft" + cache: "maven" + + - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 + with: + node-version: 22 + + - name: Run Java SDK tests (InProcess) + env: + CI: "true" + run: mvn clean verify -Pinprocess + + - name: Generate Test Report Summary + if: always() + uses: ./.github/actions/java-test-report + with: + title: "Copilot Java SDK :: Test Results InProcess" + + - name: Upload test results on failure + if: failure() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: java-test-results-inprocess + path: | + java/sdk/target/surefire-reports/ + java/sdk/target/surefire-reports-isolated/ + java/sdk/target/failsafe-reports/ + retention-days: 7 + java-sdk: name: "Java SDK Tests (JDK ${{ matrix.test-jdk }})" if: github.event.repository.fork == false @@ -96,7 +142,7 @@ jobs: run: | echo "Running tests against JDK 25-built classes using JDK 17 runtime..." java -version - mvn jacoco:prepare-agent@wire-up-coverage-instrumentation antrun:run@print-test-jdk-banner surefire:test failsafe:integration-test failsafe:verify jacoco:report@build-coverage-report-from-tests -Denforcer.skip=true + mvn -pl sdk jacoco:prepare-agent@wire-up-coverage-instrumentation antrun:run@print-test-jdk-banner surefire:test failsafe:integration-test failsafe:verify jacoco:report@build-coverage-report-from-tests -Denforcer.skip=true - name: Upload test results for site generation if: success() && github.ref == 'refs/heads/main' && matrix.test-jdk == '25' @@ -104,9 +150,9 @@ jobs: with: name: test-results-for-site path: | - java/target/jacoco-test-results/sdk-tests.exec - java/target/surefire-reports/ - java/target/surefire-reports-isolated/ + java/sdk/target/jacoco-test-results/sdk-tests.exec + java/sdk/target/surefire-reports/ + java/sdk/target/surefire-reports-isolated/ retention-days: 1 - name: Generate Test Report Summary @@ -121,7 +167,7 @@ jobs: with: name: java-test-results-jdk-${{ matrix.test-jdk }} path: | - java/target/surefire-reports/ - java/target/surefire-reports-isolated/ - java/target/failsafe-reports/ + java/sdk/target/surefire-reports/ + java/sdk/target/surefire-reports-isolated/ + java/sdk/target/failsafe-reports/ retention-days: 7 diff --git a/.github/workflows/sdk-consistency-review.lock.yml b/.github/workflows/sdk-consistency-review.lock.yml index 3c1756644d..bc33be9ad1 100644 --- a/.github/workflows/sdk-consistency-review.lock.yml +++ b/.github/workflows/sdk-consistency-review.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"fb73d13f101fc375308576a64180f63934cc9e8306cb6ef6303f1b9788d9df28","body_hash":"478a74e14ae52b64cd38c57a44953fad4d8003a2414912a19de8f0f4a354a92f","compiler_version":"v0.83.1","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.73"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"fb73d13f101fc375308576a64180f63934cc9e8306cb6ef6303f1b9788d9df28","body_hash":"cc60c817de34cdb662ae4c091203c67a5ef240ca0165b0cd26a842f03b22614f","compiler_version":"v0.83.1","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.73"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"373c709c69115d41ff229c7e5df9f8788daa9553","version":"v9"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"8bdba8075360648fe6802302a5b4e016361dc6ac","version":"v0.83.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.38","digest":"sha256:cb928eb62d9139a013c2d278dab19af232d35a2d83dca71a3d98eb431f786243","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.38@sha256:cb928eb62d9139a013c2d278dab19af232d35a2d83dca71a3d98eb431f786243"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.38","digest":"sha256:cd6145620d96acee46e1ede25180a13aa36002467e663db0caa453a8bc8eb60c","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.38@sha256:cd6145620d96acee46e1ede25180a13aa36002467e663db0caa453a8bc8eb60c"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.38","digest":"sha256:6c19094d95aad5f9f128ad5e583f0f2b894b158aa66c3b86dd9bcc90970a2917","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.38@sha256:6c19094d95aad5f9f128ad5e583f0f2b894b158aa66c3b86dd9bcc90970a2917"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.3","digest":"sha256:3c744710ea275cd5ee65db92a1099e0d980754bd9fafda9ce67704c67004dc83","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.3@sha256:3c744710ea275cd5ee65db92a1099e0d980754bd9fafda9ce67704c67004dc83"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}],"has_pull_request":true} # This file was automatically generated by gh-aw (v0.83.1). DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # diff --git a/.github/workflows/sdk-consistency-review.md b/.github/workflows/sdk-consistency-review.md index 8a4ff106a0..550d9349d0 100644 --- a/.github/workflows/sdk-consistency-review.md +++ b/.github/workflows/sdk-consistency-review.md @@ -74,7 +74,7 @@ When a pull request modifies any SDK client code, review it to ensure: - **Python**: `python/copilot/` - **Go**: `go/` - **.NET**: `dotnet/src/` -- **Java**: `java/src/main/java/` +- **Java**: `java/sdk/src/main/java/` - **Rust**: `rust/src/` ## Review Process diff --git a/.github/workflows/update-copilot-dependency.yml b/.github/workflows/update-copilot-dependency.yml index b1a668a7cb..9646366ad5 100644 --- a/.github/workflows/update-copilot-dependency.yml +++ b/.github/workflows/update-copilot-dependency.yml @@ -192,11 +192,11 @@ jobs: - Enum value additions/renames in generated types - New event types requiring handler registration - Removed or renamed generated types - 3. **Fix handwritten source** (`java/src/main/java/com/github/copilot/sdk/`): + 3. **Fix handwritten source** (`java/sdk/src/main/java/com/github/copilot/sdk/`): - Update call sites passing positional constructor args to include new fields (typically `null` for optional new fields). - Update switch/if-else over enum values to handle new cases. - Register handlers for new event types in `CopilotSession.java` if applicable. - 4. **Fix handwritten tests** (`java/src/test/java/com/github/copilot/sdk/`): + 4. **Fix handwritten tests** (`java/sdk/src/test/java/com/github/copilot/sdk/`): - Same constructor/enum fixes as above. - Add new test methods for new functionality if the change adds user-facing API surface. 5. **Validate**: `cd java && mvn clean test-compile jar:jar && mvn verify -Dskip.test.harness=true` diff --git a/java/README.md b/java/README.md index 8001d87d80..16c9db8911 100644 --- a/java/README.md +++ b/java/README.md @@ -70,6 +70,46 @@ Replace `${copilot.sdk.version}` with the latest release from Maven Central. implementation 'com.github:copilot-sdk-java:1.0.11-preview.0-SNAPSHOT' ``` +## In-process mode (experimental) + +The SDK supports running the Copilot runtime **in-process** as a native library instead of spawning a separate CLI process. This eliminates process management overhead and simplifies deployment. In-process mode is currently experimental and only supported on **linux-x64**. + +Because in-process mode is experimental, see the [Using experimental APIs](#using-experimental-apis) section for how to opt in. + +### Additional dependency + +Add both the SDK and the platform-specific native runtime to your project: + +```xml + + + + com.github + copilot-sdk-java + ${copilot.version} + + + + com.github + copilot-sdk-java-runtime + ${copilot.version} + linux-x64 + + +``` + +### Usage + +Configure the client to use the in-process connection: + +```java +CopilotClientOptions options = new CopilotClientOptions() + .setConnection(RuntimeConnection.forInProcess()); + +CopilotClient client = new CopilotClient(options); +client.start().get(); +``` + ## Quick Start ```java @@ -156,7 +196,7 @@ PermissionHandler handler = (request, invocation) -> { You can run the SDK without setting up a full Java project, by using [JBang](https://www.jbang.dev/). -See the full source of [`jbang-example.java`](jbang-example.java) for a complete example with more features like session idle handling and usage info events. +See the full source of [`jbang-example.java`](sdk/jbang-example.java) for a complete example with more features like session idle handling and usage info events. Or run it directly from the repository: @@ -262,7 +302,7 @@ Chain fluent modifiers to set tool options: - `.defer(ToolDefer)` — control deferred execution (`AUTO`, `NEVER`) - `.overridesBuiltInTool(boolean)` — shadow built-in tools -For design context and decision rationale, see [ADR-006](docs/adr/adr-006-tool-definition-inline.md). +For design context and decision rationale, see [ADR-006](sdk/docs/adr/adr-006-tool-definition-inline.md). ## Session Store @@ -386,7 +426,7 @@ The processor uses standard JSR 269 annotation processing APIs for maximum porta | Local variable with experimental type (including `var` inference) | ❌ | Move the usage into a declaration the processor can see, or use the compiler flag | | Cast to experimental type | ❌ | Use the compiler flag for a whole-compilation opt-in | -In practice, these gaps rarely matter: any meaningful use of an experimental SDK type almost always appears in a field declaration, method signature, or type hierarchy — all of which are caught. A purely inline expression with no declaration footprint (e.g., `session.rpc().experimental.foo().join()`) is the only case that would slip through. See [ADR-004](docs/adr/adr-004-copilotexperimental.md) for the design rationale. +In practice, these gaps rarely matter: any meaningful use of an experimental SDK type almost always appears in a field declaration, method signature, or type hierarchy — all of which are caught. A purely inline expression with no declaration footprint (e.g., `session.rpc().experimental.foo().join()`) is the only case that would slip through. See [ADR-004](sdk/docs/adr/adr-004-copilotexperimental.md) for the design rationale. ### Example @@ -443,4 +483,4 @@ mvn jacoco:prepare-agent@wire-up-coverage-instrumentation antrun:run@print-test- ## License -MIT — see [LICENSE](LICENSE) for details. +MIT — see [LICENSE](sdk/LICENSE) for details. diff --git a/java/copilot-native/pom.xml b/java/copilot-native/pom.xml new file mode 100644 index 0000000000..5a60f84403 --- /dev/null +++ b/java/copilot-native/pom.xml @@ -0,0 +1,214 @@ + + + + 4.0.0 + + + com.github + copilot-sdk-java-parent + 1.0.11-preview.0-SNAPSHOT + ../pom.xml + + + com.github + copilot-sdk-java-runtime + jar + + GitHub Copilot SDK :: Java :: Native Runtime + Native runtime binaries for the GitHub Copilot Java SDK, published as per-platform classifier JARs + + + + ${project.basedir}/../.. + + linux-x64 + ${project.build.directory}/native-staging + + false + + + + + + + src/main/resources + true + + + + + + org.codehaus.mojo + exec-maven-plugin + + + fetch-native-linux-x64 + generate-resources + + exec + + + node + + ${project.basedir}/scripts/fetch-native.mjs + ${copilot.sdk.root} + ${copilot.native.staging} + ${copilot.native.classifier} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + jar-linux-x64 + package + + jar + + + ${copilot.native.classifier} + ${copilot.native.staging}/${copilot.native.classifier} + + .version + + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + verify-native-jars + package + + run + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.sonatype.central + central-publishing-maven-plugin + true + + central + true + + + + + + + + + skip-native-download + + + copilot.native.skip.download + true + + + + + + org.codehaus.mojo + exec-maven-plugin + + true + + + + org.apache.maven.plugins + maven-jar-plugin + + + jar-linux-x64 + none + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + verify-native-jars + none + + + + + + + + diff --git a/java/copilot-native/scripts/fetch-native.mjs b/java/copilot-native/scripts/fetch-native.mjs new file mode 100644 index 0000000000..8e00dbfc4d --- /dev/null +++ b/java/copilot-native/scripts/fetch-native.mjs @@ -0,0 +1,114 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +/** + * Downloads the `runtime.node` native binary for a single platform classifier + * and stages it for packaging into a classifier JAR. + * + * Steps: + * 1. Read the pinned version and the SHA-512 `integrity` value for + * `@github/copilot-` from `nodejs/package-lock.json`. + * 2. `npm pack` that exact version into the staging directory. + * 3. Verify the downloaded tarball against the `integrity` value. + * 4. Extract `package/prebuilds//runtime.node` to + * `//native//runtime.node`. + * 5. Extract `package/copilot` (or `package/copilot.exe` on Windows) to + * `//native//copilot`. + * 6. Write `//native//platform.properties`. + * + * Usage: node fetch-native.mjs + */ + +import { createHash } from 'node:crypto'; +import { execFileSync } from 'node:child_process'; +import fs from 'node:fs'; +import path from 'node:path'; + +const [repoRoot, stagingDir, classifier] = process.argv.slice(2); + +if (!repoRoot || !stagingDir || !classifier) { + console.error('Usage: node fetch-native.mjs '); + process.exit(1); +} + +const lockPath = path.join(repoRoot, 'nodejs', 'package-lock.json'); +const packageName = `@github/copilot-${classifier}`; +const lock = JSON.parse(fs.readFileSync(lockPath, 'utf8')); +const entry = lock.packages?.[`node_modules/${packageName}`]; + +if (!entry?.version || !entry?.integrity) { + console.error(`Could not find version/integrity for ${packageName} in ${lockPath}`); + process.exit(1); +} + +const { version, integrity } = entry; +if (!integrity.startsWith('sha512-')) { + console.error(`Unsupported integrity algorithm for ${packageName}: ${integrity}`); + process.exit(1); +} + +const outDir = path.join(stagingDir, classifier); +const resourceDir = path.join(outDir, 'native', classifier); +const runtimePath = path.join(resourceDir, 'runtime.node'); +const stampPath = path.join(outDir, '.version'); + +// Idempotence: skip the download when the staged binary already matches. +// The stamp stores version + integrity + binary digest to ensure a corrupted +// binary or lockfile integrity change is detected. +if (fs.existsSync(runtimePath) && fs.existsSync(stampPath)) { + const stampLines = fs.readFileSync(stampPath, 'utf8').trim().split('\n'); + const stampVersion = stampLines[0] || ''; + const stampIntegrity = stampLines[1] || ''; + const stampBinaryDigest = stampLines[2] || ''; + const currentBinaryDigest = `sha512-${createHash('sha512').update(fs.readFileSync(runtimePath)).digest('base64')}`; + if (stampVersion === version && stampIntegrity === integrity && stampBinaryDigest === currentBinaryDigest) { + console.log(`${packageName}@${version} already staged at ${runtimePath}`); + process.exit(0); + } +} + +fs.rmSync(outDir, { recursive: true, force: true }); +fs.mkdirSync(resourceDir, { recursive: true }); + +console.log(`Downloading ${packageName}@${version} ...`); +const packOutput = execFileSync('npm', ['pack', `${packageName}@${version}`, '--pack-destination', outDir], { + encoding: 'utf8', + shell: process.platform === 'win32', +}); +const tarballName = packOutput.trim().split('\n').pop().trim(); +const tarballPath = path.join(outDir, tarballName); + +const actual = `sha512-${createHash('sha512').update(fs.readFileSync(tarballPath)).digest('base64')}`; +if (actual !== integrity) { + console.error(`Integrity verification failed for ${tarballPath}`); + console.error(` expected: ${integrity}`); + console.error(` actual: ${actual}`); + process.exit(1); +} +console.log(`Integrity verified (${integrity.slice(0, 20)}...).`); + +const memberPath = `package/prebuilds/${classifier}/runtime.node`; +execFileSync('tar', ['-xzf', tarballPath, '-C', outDir, memberPath], { stdio: 'inherit' }); +fs.renameSync(path.join(outDir, memberPath), runtimePath); + +// Extract the copilot CLI executable (necessary-and-sufficient runtime artifact invariant: +// host_start needs both runtime.node and the copilot CLI from the same package version). +const isWindows = classifier.startsWith('win32'); +const cliTarballMember = isWindows ? 'package/copilot.exe' : 'package/copilot'; +const cliFilename = isWindows ? 'copilot.exe' : 'copilot'; +const cliPath = path.join(resourceDir, cliFilename); +execFileSync('tar', ['-xzf', tarballPath, '-C', outDir, cliTarballMember], { stdio: 'inherit' }); +fs.renameSync(path.join(outDir, cliTarballMember), cliPath); +if (!isWindows) { + fs.chmodSync(cliPath, 0o755); +} + +fs.rmSync(path.join(outDir, 'package'), { recursive: true, force: true }); +fs.rmSync(tarballPath, { force: true }); + +fs.writeFileSync(path.join(resourceDir, 'platform.properties'), `classifier=${classifier}\nversion=${version}\n`); +const binaryDigest = `sha512-${createHash('sha512').update(fs.readFileSync(runtimePath)).digest('base64')}`; +fs.writeFileSync(stampPath, `${version}\n${integrity}\n${binaryDigest}\n`); + +console.log(`Staged ${runtimePath}`); diff --git a/java/copilot-native/src/main/resources/native/lib/copilot-runtime.properties b/java/copilot-native/src/main/resources/native/lib/copilot-runtime.properties new file mode 100644 index 0000000000..0f32308984 --- /dev/null +++ b/java/copilot-native/src/main/resources/native/lib/copilot-runtime.properties @@ -0,0 +1,12 @@ +# Placeholder marker for the primary (classifier-less) artifact of +# com.github:copilot-sdk-java-runtime. +# +# The real native binaries ship in per-platform classifier JARs +# (e.g. copilot-sdk-java-runtime--linux-x64.jar) under +# native//runtime.node. This primary JAR exists only to satisfy +# Maven Central's requirement for a main artifact and intentionally contains +# no native binaries. +# +# This file is processed by Maven resource filtering. +placeholder=true +version=${project.version} diff --git a/java/docs/adr/adr-007-native-bundling-strategy.md b/java/docs/adr/adr-007-native-bundling-strategy.md index 1322e199ef..eaf207a19d 100644 --- a/java/docs/adr/adr-007-native-bundling-strategy.md +++ b/java/docs/adr/adr-007-native-bundling-strategy.md @@ -9,7 +9,17 @@ The Copilot SDK for Java currently has no embedded runtime. It depends on an ext The artifact to be embedded is `runtime.node`, a Rust [`cdylib`](#references) produced by the `src/runtime` crate in `github/copilot-agent-runtime` using the [napi-rs](#references) build toolchain. Despite the `.node` file extension (a naming convention of napi-rs), this is an ordinary platform-specific shared library (`.so` on Linux, `.dylib` on macOS, `.dll` on Windows). It exposes two front doors built over the same internal engine: - **[napi](#references) front door** — loaded by a Node.js process as a native addon (current CLI path). -- **[C ABI](#references) front door** — a fixed set of approximately 12 `extern "C"` lifecycle and transport entry points (`copilot_runtime_server_create`, `copilot_runtime_connection_open`, etc.) that any language can call in-process via [FFI](#references) ([JNA](#references) for Java, Python/cffi, C#/`DllImport`, Go/purego) **without a Node.js process**. All API methods travel as JSON-RPC data through this fixed transport; the export list never changes as the method set grows. +- **[C ABI](#references) front door** — a fixed set of 5 `extern "C"` lifecycle and transport entry points that any language can call in-process via [FFI](#references) ([JNA](#references) for Java, Python/cffi, C#/`DllImport`, Go/purego) **without a Node.js process**. All API methods travel as JSON-RPC data through this fixed transport; the export list never changes as the method set grows. The 5 entry points are: + + | Entry point | C signature | Purpose | + | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | `copilot_runtime_host_start` | `(const uint8_t* argv_json, size_t argv_json_len, const uint8_t* env_json, size_t env_json_len) → uint32_t` | Start the runtime host; `argv_json` is a JSON array (e.g., `["copilot","--embedded-host"]`), `env_json` is an optional JSON object of environment overrides. Returns a server handle (0 = failure). | + | `copilot_runtime_host_shutdown` | `(uint32_t server_id) → bool` | Shut down the runtime host identified by `server_id`. | + | `copilot_runtime_connection_open` | `(uint32_t server_id, void(*on_outbound)(void* user_data, const uint8_t* data, size_t len), void* user_data, const uint8_t* ext_source, size_t ext_source_len, const uint8_t* ext_name, size_t ext_name_len, const uint8_t* conn_token, size_t conn_token_len) → uint32_t` | Open a bidirectional connection on the server; registers the `on_outbound` callback for runtime→SDK data delivery. `ext_source`, `ext_name`, and `conn_token` are nullable metadata buffers. Returns a connection handle (0 = failure). | + | `copilot_runtime_connection_write` | `(uint32_t connection_id, const uint8_t* data, size_t len) → bool` | Write a JSON-RPC frame from the SDK into the runtime. The native side copies the buffer synchronously before returning. | + | `copilot_runtime_connection_close` | `(uint32_t connection_id) → bool` | Close a connection. | + + The outbound callback signature: `void on_outbound(void* user_data, const uint8_t* data, size_t len)` — invoked by native code (potentially on native threads) to deliver JSON-RPC responses and notifications back to the SDK. The `cli-native.node` addon — a separate, smaller artifact that provides ICU4X text segmentation, Win32 API wrappers, and terminal UI helpers — is a CLI-only artifact used by the Ink/React terminal interface. It is **not needed** by the Java SDK. @@ -21,16 +31,16 @@ As of 2026-07, the `runtime.node` binary is being built up iteratively as TypeSc The runtime must be built for each unique combination of OS, CPU architecture, and (on Linux) C runtime variant. The build system in `github/copilot-agent-runtime` produces eight Rust target triples: -| Platform label | Rust triple | Constraint | -|---------------|-------------|------------| -| `linux-x64` | `x86_64-unknown-linux-gnu` | [glibc](#references) ≥ 2.28 (Debian 10+, Ubuntu 20.04+, RHEL 8+) | -| `linux-arm64` | `aarch64-unknown-linux-gnu` | glibc ≥ 2.28 | -| `linuxmusl-x64` | `x86_64-unknown-linux-musl` | dynamically links [musl libc](#references) (Alpine Linux) | -| `linuxmusl-arm64` | `aarch64-unknown-linux-musl` | dynamically links musl libc | -| `darwin-x64` | `x86_64-apple-darwin` | macOS, Intel | -| `darwin-arm64` | `aarch64-apple-darwin` | macOS, Apple Silicon | -| `win32-x64` | `x86_64-pc-windows-msvc` | [MSVC CRT](#references) statically linked (`+crt-static`) | -| `win32-arm64` | `aarch64-pc-windows-msvc` | MSVC CRT statically linked (`+crt-static`) | +| Platform label | Rust triple | Constraint | +| ----------------- | ---------------------------- | ---------------------------------------------------------------- | +| `linux-x64` | `x86_64-unknown-linux-gnu` | [glibc](#references) ≥ 2.28 (Debian 10+, Ubuntu 20.04+, RHEL 8+) | +| `linux-arm64` | `aarch64-unknown-linux-gnu` | glibc ≥ 2.28 | +| `linuxmusl-x64` | `x86_64-unknown-linux-musl` | dynamically links [musl libc](#references) (Alpine Linux) | +| `linuxmusl-arm64` | `aarch64-unknown-linux-musl` | dynamically links musl libc | +| `darwin-x64` | `x86_64-apple-darwin` | macOS, Intel | +| `darwin-arm64` | `aarch64-apple-darwin` | macOS, Apple Silicon | +| `win32-x64` | `x86_64-pc-windows-msvc` | [MSVC CRT](#references) statically linked (`+crt-static`) | +| `win32-arm64` | `aarch64-pc-windows-msvc` | MSVC CRT statically linked (`+crt-static`) | The GNU/Linux glibc minimum of 2.28 is enforced at build time via a Microsoft/vscode-linux-build-agent sysroot and verified post-build by `script/linux/verify-glibc-requirements.sh`. The musl binaries are **not** fully statically linked; they dynamically link musl libc (`-C target-feature=-crt-static` is explicitly set at build time). @@ -48,16 +58,16 @@ The correct binary can be selected at runtime without any heuristics, using only Measured from `github/copilot-agent-runtime` release `cli-1.0.69-2` (2026-07-06): -| Platform | `runtime.node` (uncompressed) | Compressed (~40% deflate) | -|----------|------------------------------|--------------------------| -| `linux-x64` | 64.7 MB | ~25.9 MB | -| `linux-arm64` | 55.5 MB | ~22.2 MB | -| `linuxmusl-x64` | 64.4 MB | ~25.8 MB | -| `linuxmusl-arm64` | 55.3 MB | ~22.1 MB | -| `darwin-x64` | 57.3 MB | ~22.9 MB | -| `darwin-arm64` | 48.1 MB | ~19.2 MB | -| `win32-x64` | 55.9 MB | ~22.4 MB | -| `win32-arm64` | 48.4 MB | ~19.4 MB | +| Platform | `runtime.node` (uncompressed) | Compressed (~40% deflate) | +| ----------------- | ----------------------------- | ------------------------- | +| `linux-x64` | 64.7 MB | ~25.9 MB | +| `linux-arm64` | 55.5 MB | ~22.2 MB | +| `linuxmusl-x64` | 64.4 MB | ~25.8 MB | +| `linuxmusl-arm64` | 55.3 MB | ~22.1 MB | +| `darwin-x64` | 57.3 MB | ~22.9 MB | +| `darwin-arm64` | 48.1 MB | ~19.2 MB | +| `win32-x64` | 55.9 MB | ~22.4 MB | +| `win32-arm64` | 48.4 MB | ~19.4 MB | The published Java SDK JAR (`copilot-sdk-java-1.0.6-preview.1.jar`) is currently **1.53 MB**. A monolithic JAR containing all 6 common-case native binaries would be approximately **132 MB** compressed; all 8 including musl would be approximately **180 MB** compressed. @@ -70,10 +80,12 @@ All native dependencies within the runtime (`rustls`/`aws-lc-rs` for TLS, `rusql All 6 (or 8) `runtime.node` binaries are bundled inside the single `copilot-sdk-java` artifact. At runtime the SDK extracts and loads the one matching the current platform; the remaining 5–7 are carried silently. **Advantages:** + - Single `` in `pom.xml`; zero extra configuration for users. - Familiar pattern: [ONNX Runtime](#references) (`onnxruntime-1.21.0.jar`, **130 MB**, all platforms) demonstrates this is an accepted norm in the Java ML ecosystem. **Drawbacks:** + - Every user downloads every platform regardless of their target. A developer on Apple Silicon downloads 105+ MB of Linux and Windows binaries they will never use. - Build tooling (thin Docker layers, incremental CI caches, artifact registries) penalises large JARs. A single 132–180 MB JAR invalidates the entire cache whenever any platform's binary changes. - Maven's dependency resolution has no mechanism to supply platform-appropriate variants automatically; platform selection must happen entirely at runtime inside the JAR. @@ -105,6 +117,7 @@ Build tools can be configured to resolve the correct classifier automatically: - **Uber-jar builds**: include all classifiers; the coordination artifact picks the right one at runtime. **Advantages:** + - Default download is the tiny coordination artifact (~1.5 MB) plus one platform JAR (~20–26 MB compressed) — approximately **22–28 MB total** vs. 132–180 MB for a monolithic JAR. - Each platform JAR changes independently; CI caches and Docker layers for unchanged platforms are preserved across releases. - Users building for a single known platform (most production deployments) pay exactly the cost of that platform. @@ -112,6 +125,7 @@ Build tools can be configured to resolve the correct classifier automatically: - Aligns with DJL's proven distribution strategy for large native ML runtimes. **Drawbacks:** + - Requires publishing 6–8 additional Maven artifacts per release. - Users building portable über-JARs must explicitly include all classifiers they wish to support. - Slightly more complex `pom.xml` / `build.gradle` for users who need cross-platform packaging. @@ -121,10 +135,12 @@ Build tools can be configured to resolve the correct classifier automatically: The SDK ships a minimal placeholder that detects the current platform at runtime and downloads the correct `runtime.node` binary from a distribution endpoint (GitHub Releases or a CDN) on first use, caching it locally (e.g., `~/.copilot/runtime-cache/`). **Advantages:** + - Zero native binary content in any published Maven artifact; total download at `mvn install` is negligible. - Identical user experience to the current "externally provided runtime" model during the download, which most CLI users already accept. **Drawbacks:** + - Requires internet access on first run. Offline environments (air-gapped enterprise, CI without outbound HTTP) break silently or require manual pre-seeding. - Introduces a network dependency into an otherwise pure library artifact, which violates Maven Central's expectations for reproducible builds. - Adds an operational concern: distribution endpoint availability, CDN costs, URL stability across versions. @@ -153,7 +169,7 @@ The SDK ships a minimal placeholder that detects the current platform at runtime ## Binding technology: JNA over Panama FFM -A secondary decision within the scope of this ADR is *how* the coordination artifact calls the C ABI entry points once the correct `runtime.node` binary has been loaded. Two candidates were considered: [JNA](#references) and the [Foreign Function & Memory API](#references) (FFM, the product of [Project Panama](#references), final since Java 22 via [JEP 454](#references)). +A secondary decision within the scope of this ADR is _how_ the coordination artifact calls the C ABI entry points once the correct `runtime.node` binary has been loaded. Two candidates were considered: [JNA](#references) and the [Foreign Function & Memory API](#references) (FFM, the product of [Project Panama](#references), final since Java 22 via [JEP 454](#references)). **Chosen: JNA.** FFM was considered and deliberately deferred, for the following reasons: @@ -267,7 +283,7 @@ CopilotRuntime runtime = Native.load(extractedPath.toString(), CopilotRuntime.cl The beauty is that `getResourceAsStream("native/darwin-arm64/runtime.node")` works identically whether: -- The native lives in a **separate classifier JAR** on the classpath (normal dev dependency), OR +- The native lives in a **separate classifier JAR** on the classpath (normal dev dependency), OR - It's been **merged into an uber-jar** by `maven-assembly-plugin` The classloader doesn't care which JAR file the resource came from — it searches the entire classpath. This means **zero code changes** between the two consumption models. @@ -319,17 +335,16 @@ With all classifier JARs declared as dependencies: ## Why this works cleanly -| Concern | How it's handled | -|---------|-----------------| -| No resource path collisions | Each platform has its own subdirectory (`native//`) | -| Extraction only happens once | Cached to `~/.copilot/runtime-cache///` | -| Works without uber-jar too | Same `getResourceAsStream` call — classloader finds it in the separate JAR | -| Subset selection | Consumer declares only the classifiers they need; missing platforms get a clear error at runtime | -| JNA loading | `NativeLibrary.getInstance(path)` loads from an absolute filesystem path after extraction — no JNA platform-detection magic needed | +| Concern | How it's handled | +| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| No resource path collisions | Each platform has its own subdirectory (`native//`) | +| Extraction only happens once | Cached to `~/.copilot/runtime-cache///` | +| Works without uber-jar too | Same `getResourceAsStream` call — classloader finds it in the separate JAR | +| Subset selection | Consumer declares only the classifiers they need; missing platforms get a clear error at runtime | +| JNA loading | `NativeLibrary.getInstance(path)` loads from an absolute filesystem path after extraction — no JNA platform-detection magic needed | The pattern is identical to how DJL's `LibUtils.loadLibrary()` works — detect platform, construct resource path, extract if needed, load via absolute path. - ## Consequences - A new Maven module (`copilot-sdk-java-runtime` or similar) is introduced to hold the per-platform native JARs. The existing `copilot-sdk-java` coordination artifact depends on it. @@ -352,25 +367,25 @@ The pattern is identical to how DJL's `LibUtils.loadLibrary()` works — detect ### References -| Term | Definition | Link | -|------|------------|------| -| **FFI** (Foreign Function Interface) | A mechanism by which code written in one language can call functions defined in another. In this ADR, Java calls into the Rust runtime shared library via JNA's FFI layer. | https://en.wikipedia.org/wiki/Foreign_function_interface | -| **JNA** (Java Native Access) | A Java library that provides easy access to native shared libraries without requiring the JNI boilerplate. Used here to call the `extern "C"` C ABI entry points exported by `runtime.node`. | https://github.com/java-native-access/jna | -| **napi-rs** | A Rust framework for building native Node.js addons using the Node-API (napi) stable ABI. Produces the `.node` file and generates TypeScript type declarations automatically. | https://napi.rs/ | -| **cdylib** | A Rust `crate-type` that produces a C-compatible dynamic shared library (`.so` / `.dylib` / `.dll`). Distinct from `dylib` (Rust-to-Rust only) and `staticlib`. | https://doc.rust-lang.org/reference/linkage.html | -| **napi (Node-API)** | A stable C ABI provided by Node.js for building native addons that remain binary-compatible across Node.js versions. `napi-rs` generates Rust code against this interface. | https://nodejs.org/api/n-api.html | -| **C ABI** (Application Binary Interface) | The low-level contract between a compiled binary and its callers: calling conventions, data type layouts, symbol naming. An `extern "C"` ABI uses C's conventions, making a library callable from any language that speaks C FFI. | https://en.wikipedia.org/wiki/Application_binary_interface | -| **ELF PT_INTERP** | A segment in an [ELF](https://man7.org/linux/man-pages/man5/elf.5.html) binary (the Linux/Unix executable format) that records the path of the dynamic linker/interpreter. On glibc systems this path is `/lib64/ld-linux-x86-64.so.2`; on musl systems it is `/lib/ld-musl-x86_64.so.1`. Inspecting it is the most reliable way to detect glibc vs. musl at runtime without executing a subprocess. | https://man7.org/linux/man-pages/man5/elf.5.html | -| **glibc** (GNU C Library) | The standard C runtime library on most mainstream Linux distributions (Debian, Ubuntu, RHEL, Fedora, SLES). Binaries linked against glibc require the same version or newer to be present at runtime. The `runtime.node` glibc build requires glibc ≥ 2.28. | https://www.gnu.org/software/libc/ | -| **musl libc** | An alternative C standard library optimised for static linking and used as the default libc on Alpine Linux. Not binary-compatible with glibc; a separate `runtime.node` build is required. | https://musl.libc.org/ | -| **MSVC CRT** (Microsoft Visual C++ Runtime) | The C runtime library shipped with Visual Studio. When compiled with `+crt-static` (as `runtime.node` is on Windows), it is statically linked into the binary and the end-user does not need to install the Visual C++ Redistributable. | https://learn.microsoft.com/en-us/cpp/c-runtime-library/c-run-time-library-reference | -| **Project Panama** | The OpenJDK project that produced the Foreign Function & Memory API as the modern, supported replacement for JNI-based native interop. | https://openjdk.org/projects/panama/ | -| **FFM** (Foreign Function & Memory API) | The `java.lang.foreign` API for calling native functions and managing native memory from Java, finalized in Java 22. Considered and deferred as the binding technology for this SDK; see [Binding technology](#binding-technology-jna-over-panama-ffm). | https://docs.oracle.com/en/java/javase/22/core/foreign-function-and-memory-api.html | -| **JEP 454** | The JDK Enhancement Proposal that finalized the FFM API in Java 22. | https://openjdk.org/jeps/454 | -| **JEP 472** | "Prepare to Restrict the Use of JNI" — part of the JDK's integrity-by-default direction under which native access (via JNI or FFM) requires explicit consumer opt-in (`--enable-native-access`). Drives both the FFM configuration-burden concern and the expectation that JNA itself will eventually require the same opt-in. | https://openjdk.org/jeps/472 | -| **DJL** (Deep Java Library) | Amazon's open-source Java framework for ML inference, used here as a reference for the per-platform classifier JAR distribution pattern. Its PyTorch native artifacts (`pytorch-native-cpu-*-.jar`) are the direct model for the proposed `copilot-sdk-java-runtime:VERSION:` artifacts. | https://djl.ai/ | -| **os-maven-plugin** | A Maven extension that detects the current OS and architecture and exposes them as properties (e.g., `${os.detected.classifier}`) so that `` values can be resolved at build time rather than hardcoded. | https://github.com/trustin/os-maven-plugin | -| **ONNX Runtime** | Microsoft's cross-platform ML inference runtime, used in this ADR as the size comparable for a monolithic all-platform JAR (~130 MB, Option 1). | https://onnxruntime.ai/ | +| Term | Definition | Link | +| ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | +| **FFI** (Foreign Function Interface) | A mechanism by which code written in one language can call functions defined in another. In this ADR, Java calls into the Rust runtime shared library via JNA's FFI layer. | https://en.wikipedia.org/wiki/Foreign_function_interface | +| **JNA** (Java Native Access) | A Java library that provides easy access to native shared libraries without requiring the JNI boilerplate. Used here to call the `extern "C"` C ABI entry points exported by `runtime.node`. | https://github.com/java-native-access/jna | +| **napi-rs** | A Rust framework for building native Node.js addons using the Node-API (napi) stable ABI. Produces the `.node` file and generates TypeScript type declarations automatically. | https://napi.rs/ | +| **cdylib** | A Rust `crate-type` that produces a C-compatible dynamic shared library (`.so` / `.dylib` / `.dll`). Distinct from `dylib` (Rust-to-Rust only) and `staticlib`. | https://doc.rust-lang.org/reference/linkage.html | +| **napi (Node-API)** | A stable C ABI provided by Node.js for building native addons that remain binary-compatible across Node.js versions. `napi-rs` generates Rust code against this interface. | https://nodejs.org/api/n-api.html | +| **C ABI** (Application Binary Interface) | The low-level contract between a compiled binary and its callers: calling conventions, data type layouts, symbol naming. An `extern "C"` ABI uses C's conventions, making a library callable from any language that speaks C FFI. | https://en.wikipedia.org/wiki/Application_binary_interface | +| **ELF PT_INTERP** | A segment in an [ELF](https://man7.org/linux/man-pages/man5/elf.5.html) binary (the Linux/Unix executable format) that records the path of the dynamic linker/interpreter. On glibc systems this path is `/lib64/ld-linux-x86-64.so.2`; on musl systems it is `/lib/ld-musl-x86_64.so.1`. Inspecting it is the most reliable way to detect glibc vs. musl at runtime without executing a subprocess. | https://man7.org/linux/man-pages/man5/elf.5.html | +| **glibc** (GNU C Library) | The standard C runtime library on most mainstream Linux distributions (Debian, Ubuntu, RHEL, Fedora, SLES). Binaries linked against glibc require the same version or newer to be present at runtime. The `runtime.node` glibc build requires glibc ≥ 2.28. | https://www.gnu.org/software/libc/ | +| **musl libc** | An alternative C standard library optimised for static linking and used as the default libc on Alpine Linux. Not binary-compatible with glibc; a separate `runtime.node` build is required. | https://musl.libc.org/ | +| **MSVC CRT** (Microsoft Visual C++ Runtime) | The C runtime library shipped with Visual Studio. When compiled with `+crt-static` (as `runtime.node` is on Windows), it is statically linked into the binary and the end-user does not need to install the Visual C++ Redistributable. | https://learn.microsoft.com/en-us/cpp/c-runtime-library/c-run-time-library-reference | +| **Project Panama** | The OpenJDK project that produced the Foreign Function & Memory API as the modern, supported replacement for JNI-based native interop. | https://openjdk.org/projects/panama/ | +| **FFM** (Foreign Function & Memory API) | The `java.lang.foreign` API for calling native functions and managing native memory from Java, finalized in Java 22. Considered and deferred as the binding technology for this SDK; see [Binding technology](#binding-technology-jna-over-panama-ffm). | https://docs.oracle.com/en/java/javase/22/core/foreign-function-and-memory-api.html | +| **JEP 454** | The JDK Enhancement Proposal that finalized the FFM API in Java 22. | https://openjdk.org/jeps/454 | +| **JEP 472** | "Prepare to Restrict the Use of JNI" — part of the JDK's integrity-by-default direction under which native access (via JNI or FFM) requires explicit consumer opt-in (`--enable-native-access`). Drives both the FFM configuration-burden concern and the expectation that JNA itself will eventually require the same opt-in. | https://openjdk.org/jeps/472 | +| **DJL** (Deep Java Library) | Amazon's open-source Java framework for ML inference, used here as a reference for the per-platform classifier JAR distribution pattern. Its PyTorch native artifacts (`pytorch-native-cpu-*-.jar`) are the direct model for the proposed `copilot-sdk-java-runtime:VERSION:` artifacts. | https://djl.ai/ | +| **os-maven-plugin** | A Maven extension that detects the current OS and architecture and exposes them as properties (e.g., `${os.detected.classifier}`) so that `` values can be resolved at build time rather than hardcoded. | https://github.com/trustin/os-maven-plugin | +| **ONNX Runtime** | Microsoft's cross-platform ML inference runtime, used in this ADR as the size comparable for a monolithic all-platform JAR (~130 MB, Option 1). | https://onnxruntime.ai/ | Additional source references: @@ -381,4 +396,3 @@ Additional source references: - `github/copilot-agent-runtime` build target definitions: `script/build-runtime.ts` - `github/copilot-agent-runtime` glibc sysroot and verification: `script/linux/install-sysroot.cjs`, `script/linux/verify-glibc-requirements.sh` - ONNX Runtime Java on Maven Central (size comparable): https://repo1.maven.org/maven2/com/microsoft/onnxruntime/onnxruntime/1.21.0/ - diff --git a/java/pom.xml b/java/pom.xml index 796051891b..987fccba80 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -6,12 +6,12 @@ 4.0.0 com.github - copilot-sdk-java + copilot-sdk-java-parent 1.0.11-preview.0-SNAPSHOT - jar + pom - GitHub Copilot SDK :: Java - Official SDK for programmatic control of GitHub Copilot CLI + GitHub Copilot SDK :: Java :: Parent + Parent POM for the GitHub Copilot Java SDK multi-module reactor https://github.com/github/copilot-sdk @@ -36,50 +36,25 @@ HEAD - - - central - https://central.sonatype.com/repository/maven-snapshots/ - - + + sdk + copilot-native + + + 17 UTF-8 ${project.basedir}/.. - ${copilot.sdk.root}/test - - ${copilot.sdk.root}/nodejs/node_modules/@github/copilot/npm-loader.js - - false - - ${skip.test.harness} - - notice - - ^1.0.79 - + + true - - - - com.fasterxml.jackson.core - jackson-databind - 2.22.1 - - - com.fasterxml.jackson.core - jackson-annotations - 2.22 - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - 2.22.1 - - - - - com.github.spotbugs - spotbugs-annotations - 4.10.3 - provided - - - - - org.junit.jupiter - junit-jupiter - 5.14.4 - test - - - org.mockito - mockito-core - 5.23.0 - test - - - + + org.apache.maven.plugins + maven-clean-plugin + 3.5.0 + + + org.apache.maven.plugins + maven-compiler-plugin + 3.15.0 + + + org.apache.maven.plugins + maven-jar-plugin + 3.5.0 + org.apache.maven.plugins maven-javadoc-plugin @@ -146,521 +96,81 @@ none + + org.apache.maven.plugins + maven-source-plugin + 3.4.0 + + + org.apache.maven.plugins + maven-surefire-plugin + 3.5.6 + + + org.apache.maven.plugins + maven-failsafe-plugin + 3.5.6 + + + org.apache.maven.plugins + maven-antrun-plugin + 3.2.0 + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.6.3 + + + org.apache.maven.plugins + maven-gpg-plugin + 3.2.8 + + + org.apache.maven.plugins + maven-release-plugin + 3.1.1 + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.6.0 + com.github.spotbugs spotbugs-maven-plugin - 4.10.3.0 - - config/spotbugs/spotbugs-exclude.xml - + 4.10.2.0 + + + com.diffplug.spotless + spotless-maven-plugin + 2.46.1 + + + org.jacoco + jacoco-maven-plugin + 0.8.15 + + + org.codehaus.mojo + exec-maven-plugin + 3.6.3 + + + org.codehaus.mojo + build-helper-maven-plugin + 3.6.1 + + + org.sonatype.central + central-publishing-maven-plugin + 0.10.0 - - - org.apache.maven.plugins - maven-clean-plugin - 3.5.0 - - - org.apache.maven.plugins - maven-compiler-plugin - 3.15.0 - - - -Acopilot.experimental.allowed=true - - none - - - - org.apache.maven.plugins - maven-jar-plugin - 3.5.1 - - - org.apache.maven.plugins - maven-antrun-plugin - 3.2.0 - - - print-test-jdk-banner - process-test-classes - - run - - - - - - - - - - - - org.codehaus.mojo - exec-maven-plugin - 3.6.3 - - - install-harness-dependencies - generate-test-resources - - exec - - - ${skip.test.harness} - npm - ${copilot.sdk.root}/test/harness - - ci - --loglevel - ${npm.loglevel} - - - - - - install-nodejs-cli-dependencies - generate-test-resources - - exec - - - ${skip.cli.install} - npm - ${copilot.sdk.root}/nodejs - - ci - --ignore-scripts - --loglevel - ${npm.loglevel} - - - - - - - - org.apache.maven.plugins - maven-failsafe-plugin - 3.5.6 - - - - integration-test - verify - - - - - - ${project.build.directory} - ${project.build.finalName} - ${project.build.testOutputDirectory} - - - - ${copilot.cli.path} - - - - - org.apache.maven.plugins - maven-surefire-plugin - 3.5.6 - - alphabetical - - ${testExecutionAgentArgs} ${surefire.jvm.args} - - 2 - - ${copilot.tests.dir} - ${copilot.sdk.root} - - - - ${copilot.cli.path} - - - - - - isolated-resume-tests - test - - test - - - isolated-resume - - ${project.build.directory}/surefire-reports-isolated - - - - - default-test - - isolated-resume - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - 3.6.1 - - - add-generated-source - generate-sources - - add-source - - - - ${project.basedir}/src/generated/java - - - - - - - com.diffplug.spotless - spotless-maven-plugin - 2.46.1 - - - - src/generated/java/**/*.java - - - 4.33 - - - - - - true - 4 - - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.15 - - - - wire-up-coverage-instrumentation - - prepare-agent - - - - ${project.build.directory}/jacoco-test-results/sdk-tests.exec - - testExecutionAgentArgs - - - com/github/copilot/** - - - com/github/copilot/E2ETestContext* - com/github/copilot/CapiProxy* - - - - - - build-coverage-report-from-tests - - report - - verify - - ${project.build.directory}/jacoco-test-results/sdk-tests.exec - ${project.reporting.outputDirectory}/jacoco-coverage - - - META-INF/versions/**/*.class - - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 3.6.0 - - config/checkstyle/checkstyle.xml - true - true - false - - - - validate - validate - - check - - - - - - com.puppycrawl.tools - checkstyle - 10.26.1 - - - - - - org.sonatype.central - central-publishing-maven-plugin - 0.11.0 - true - - central - true - - - - org.apache.maven.plugins - maven-enforcer-plugin - 3.6.3 - - - enforce-jdk25 - - enforce - - - - - [25,) - JDK 25+ is required to build the Multi-Release JAR with the virtual-thread overlay. - - - - - - verify-multi-release-overlay - verify - - enforce - - - - - - ${project.build.outputDirectory}/META-INF/versions/25/com/github/copilot/InternalExecutorProvider.class - - Multi-Release JAR overlay missing: META-INF/versions/25/com/github/copilot/InternalExecutorProvider.class was not compiled. Ensure the build runs on JDK 25+. - - - - - - - - - - jdk21+ - - [21,) - - - -XX:+EnableDynamicAgentLoading - - - - java25-multi-release - - [25,) - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - compile-java25 - compile - - compile - - - 25 - false - - ${project.basedir}/src/main/java25 - - true - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - true - - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - verify-java25-overlay - package - - run - - - - - - - - - -JDK 25 multi-release overlay class is missing from the packaged JAR. -Expected entry: META-INF/versions/25/com/github/copilot/InternalExecutorProvider.class -JAR: ${project.build.directory}/${project.build.finalName}.jar - -This usually means the 'java25-multi-release' Maven profile did not activate -(e.g. the build is running on a JDK older than 25) or maven-compiler-plugin -did not produce the multi-release output. Re-build on JDK 25+ and verify the -'compile-java25' execution ran during the 'compile' phase. - - - - - - - - - - - - skip-test-harness - - true - - - - - skip-cli-install-when-tests-skipped - - - skipTests - true - - - - true - - - - - skip-cli-install-when-maven-test-skip - - - maven.test.skip - true - - - - true - - - - - debug - - - - org.apache.maven.plugins - maven-surefire-plugin - - - ${project.basedir}/src/test/resources/logging-debug.properties - - - - - - release @@ -668,7 +178,6 @@ did not produce the multi-release output. Re-build on JDK 25+ and verify the org.apache.maven.plugins maven-source-plugin - 3.4.0 attach-sources @@ -693,7 +202,6 @@ did not produce the multi-release output. Re-build on JDK 25+ and verify the org.apache.maven.plugins maven-gpg-plugin - 3.2.8 sign-artifacts @@ -707,103 +215,5 @@ did not produce the multi-release output. Re-build on JDK 25+ and verify the - - - update-schemas-from-npm-artifact - - - - org.codehaus.mojo - exec-maven-plugin - 3.6.3 - - - update-copilot-schema-version - generate-sources - - exec - - - npm - ${project.basedir}/scripts/codegen - - install - @github/copilot@${copilot.schema.version} - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - 3.6.3 - - - require-schema-version - validate - - enforce - - - - - copilot.schema.version - You must specify -Dcopilot.schema.version=VERSION (e.g. 1.0.25) - - - - - - - - - - - - codegen - - - - org.codehaus.mojo - exec-maven-plugin - 3.6.3 - - - codegen-npm-install - generate-sources - - exec - - - npm - ${project.basedir}/scripts/codegen - - ci - - - - - codegen-generate - generate-sources - - exec - - - npm - ${project.basedir}/scripts/codegen - - run - generate - - - - - - - - diff --git a/java/scripts/codegen/java.ts b/java/scripts/codegen/java.ts index 9f7eb40039..3bdc51d035 100644 --- a/java/scripts/codegen/java.ts +++ b/java/scripts/codegen/java.ts @@ -4,7 +4,7 @@ /** * Java code generator for session-events and RPC types. - * Generates Java source files under src/generated/java/ from JSON Schema files. + * Generates Java source files under sdk/src/generated/java/ from JSON Schema files. */ import fs from "fs/promises"; @@ -779,7 +779,7 @@ async function generateSessionEvents(schemaPath: string): Promise { const variants = extractEventVariants(schema); const packageName = "com.github.copilot.generated"; - const packageDir = `src/generated/java/com/github/copilot/generated`; + const packageDir = `sdk/src/generated/java/com/github/copilot/generated`; // Generate base SessionEvent class await generateSessionEventBaseClass(variants, packageName, packageDir); @@ -1384,7 +1384,7 @@ async function generateRpcTypes(schemaPath: string): Promise { } const packageName = "com.github.copilot.generated.rpc"; - const packageDir = `src/generated/java/com/github/copilot/generated/rpc`; + const packageDir = `sdk/src/generated/java/com/github/copilot/generated/rpc`; // Collect all RPC methods from all sections const sections: [string, Record][] = []; @@ -2224,7 +2224,7 @@ async function generateRpcWrappers(schemaPath: string): Promise { currentDefinitions = (schema.definitions ?? {}) as Record; const packageName = "com.github.copilot.generated.rpc"; - const packageDir = `src/generated/java/com/github/copilot/generated/rpc`; + const packageDir = `sdk/src/generated/java/com/github/copilot/generated/rpc`; // RpcCaller interface and shared ObjectMapper holder await generateRpcCallerInterface(packageName, packageDir); @@ -2347,7 +2347,7 @@ async function main(): Promise { console.log("============================"); // Clean the generated output directory to remove orphaned files from previous runs - const generatedOutputDir = path.join(REPO_ROOT, "src/generated/java/com/github/copilot/generated"); + const generatedOutputDir = path.join(REPO_ROOT, "sdk/src/generated/java/com/github/copilot/generated"); console.log(`🧹 Cleaning output directory: ${generatedOutputDir}`); await fs.rm(generatedOutputDir, { recursive: true, force: true }); await fs.mkdir(generatedOutputDir, { recursive: true }); @@ -2362,8 +2362,8 @@ async function main(): Promise { await generateRpcWrappers(apiSchemaPath); // Generate package-info.java for each generated package - const generatedPkgDir = `src/generated/java/com/github/copilot/generated`; - const rpcPkgDir = `src/generated/java/com/github/copilot/generated/rpc`; + const generatedPkgDir = `sdk/src/generated/java/com/github/copilot/generated`; + const rpcPkgDir = `sdk/src/generated/java/com/github/copilot/generated/rpc`; await generateGeneratedPackageInfo(generatedPkgDir); await generateRpcPackageInfo(rpcPkgDir); diff --git a/java/config/checkstyle/checkstyle.xml b/java/sdk/config/checkstyle/checkstyle.xml similarity index 100% rename from java/config/checkstyle/checkstyle.xml rename to java/sdk/config/checkstyle/checkstyle.xml diff --git a/java/config/spotbugs/spotbugs-exclude.xml b/java/sdk/config/spotbugs/spotbugs-exclude.xml similarity index 100% rename from java/config/spotbugs/spotbugs-exclude.xml rename to java/sdk/config/spotbugs/spotbugs-exclude.xml diff --git a/java/jbang-example.java b/java/sdk/jbang-example.java similarity index 100% rename from java/jbang-example.java rename to java/sdk/jbang-example.java diff --git a/java/sdk/pom.xml b/java/sdk/pom.xml new file mode 100644 index 0000000000..f3c65c4fb3 --- /dev/null +++ b/java/sdk/pom.xml @@ -0,0 +1,790 @@ + + + + 4.0.0 + + + com.github + copilot-sdk-java-parent + 1.0.11-preview.0-SNAPSHOT + ../pom.xml + + + com.github + copilot-sdk-java + jar + + GitHub Copilot SDK :: Java + Official SDK for programmatic control of GitHub Copilot CLI + + + + central + https://central.sonatype.com/repository/maven-snapshots/ + + + + + + ${project.basedir}/../.. + ${copilot.sdk.root}/test + + ${copilot.sdk.root}/nodejs/node_modules/@github/copilot/npm-loader.js + + ${copilot.sdk.root}/nodejs/node_modules/@github/copilot-linux-x64/copilot + + false + + ${skip.test.harness} + + notice + + + + false + + 5.19.1 + + + + + + com.fasterxml.jackson.core + jackson-databind + 2.22.0 + + + com.fasterxml.jackson.core + jackson-annotations + 2.22 + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.22.0 + + + + + com.github.spotbugs + spotbugs-annotations + 4.10.2 + provided + + + + + net.java.dev.jna + jna + ${jna.version} + true + + + + + org.junit.jupiter + junit-jupiter + 5.14.4 + test + + + org.mockito + mockito-core + 5.23.0 + test + + + + + + + src/main/resources + true + + + + + + com.github.spotbugs + spotbugs-maven-plugin + + config/spotbugs/spotbugs-exclude.xml + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + -Acopilot.experimental.allowed=true + + none + + + + org.apache.maven.plugins + maven-antrun-plugin + + + print-test-jdk-banner + process-test-classes + + run + + + + + + + + + + + + org.codehaus.mojo + exec-maven-plugin + + + install-harness-dependencies + generate-test-resources + + exec + + + ${skip.test.harness} + npm + ${copilot.sdk.root}/test/harness + + ci + --loglevel + ${npm.loglevel} + + + + + + install-nodejs-cli-dependencies + generate-test-resources + + exec + + + ${skip.cli.install} + npm + ${copilot.sdk.root}/nodejs + + ci + --ignore-scripts + --loglevel + ${npm.loglevel} + + + + + + + + org.apache.maven.plugins + maven-failsafe-plugin + + + + integration-test + verify + + + + + + + ${project.build.directory} + ${project.build.finalName} + ${project.build.testOutputDirectory} + + + + ${copilot.cli.path} + + + + + org.apache.maven.plugins + maven-surefire-plugin + + alphabetical + + + ${testExecutionAgentArgs} ${surefire.jvm.args} --add-opens com.github.copilot.java/com.github.copilot.e2e=ALL-UNNAMED + + 2 + + ${copilot.tests.dir} + ${copilot.sdk.root} + + + + ${copilot.cli.path} + + + + + + isolated-resume-tests + test + + test + + + isolated-resume + + ${project.build.directory}/surefire-reports-isolated + + + + + default-test + + isolated-resume + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + add-generated-source + generate-sources + + add-source + + + + ${project.basedir}/src/generated/java + + + + + + + com.diffplug.spotless + spotless-maven-plugin + + + + src/generated/java/**/*.java + + + 4.33 + + + + + + true + 4 + + + + + + + org.jacoco + jacoco-maven-plugin + + + + wire-up-coverage-instrumentation + + prepare-agent + + + + ${project.build.directory}/jacoco-test-results/sdk-tests.exec + + testExecutionAgentArgs + + + com/github/copilot/** + + + com/github/copilot/E2ETestContext* + com/github/copilot/CapiProxy* + + + + + + build-coverage-report-from-tests + + report + + verify + + ${project.build.directory}/jacoco-test-results/sdk-tests.exec + ${project.reporting.outputDirectory}/jacoco-coverage + + + META-INF/versions/**/*.class + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + config/checkstyle/checkstyle.xml + true + true + false + + + + validate + validate + + check + + + + + + com.puppycrawl.tools + checkstyle + 10.26.1 + + + + + + org.sonatype.central + central-publishing-maven-plugin + true + + central + true + + + + org.apache.maven.plugins + maven-enforcer-plugin + + + enforce-jdk25 + + enforce + + + + + [25,) + JDK 25+ is required to build the Multi-Release JAR with the virtual-thread overlay. + + + + + + verify-multi-release-overlay + verify + + enforce + + + + + + ${project.build.outputDirectory}/META-INF/versions/25/com/github/copilot/InternalExecutorProvider.class + + Multi-Release JAR overlay missing: META-INF/versions/25/com/github/copilot/InternalExecutorProvider.class was not compiled. Ensure the build runs on JDK 25+. + + + + + + + + + + + + + jdk21+ + + [21,) + + + -XX:+EnableDynamicAgentLoading + + + + java25-multi-release + + [25,) + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + compile-java25 + compile + + compile + + + 25 + false + + ${project.basedir}/src/main/java25 + + true + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + true + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + verify-java25-overlay + package + + run + + + + + + + + + +JDK 25 multi-release overlay class is missing from the packaged JAR. +Expected entry: META-INF/versions/25/com/github/copilot/InternalExecutorProvider.class +JAR: ${project.build.directory}/${project.build.finalName}.jar + +This usually means the 'java25-multi-release' Maven profile did not activate +(e.g. the build is running on a JDK older than 25) or maven-compiler-plugin +did not produce the multi-release output. Re-build on JDK 25+ and verify the +'compile-java25' execution ran during the 'compile' phase. + + + + + + + + + + + + skip-test-harness + + true + + + + + inprocess + + inprocess + + + + + com.github + copilot-sdk-java-runtime + ${project.version} + linux-x64 + test + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + false + 1 + none + + inprocess + + + + + org.apache.maven.plugins + maven-failsafe-plugin + + 1 + none + + ${copilot.inprocess.cli.path} + inprocess + + + + + + + + + skip-cli-install-when-tests-skipped + + + skipTests + true + + + + true + + + + + skip-cli-install-when-maven-test-skip + + + maven.test.skip + true + + + + true + + + + + debug + + + + org.apache.maven.plugins + maven-surefire-plugin + + + ${project.basedir}/src/test/resources/logging-debug.properties + + + + + + + + + update-schemas-from-npm-artifact + + + + org.codehaus.mojo + exec-maven-plugin + + + update-copilot-schema-version + generate-sources + + exec + + + npm + ${project.parent.basedir}/scripts/codegen + + install + @github/copilot@${copilot.schema.version} + + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + + + require-schema-version + validate + + enforce + + + + + copilot.schema.version + You must specify -Dcopilot.schema.version=VERSION (e.g. 1.0.25) + + + + + + + + + + + + codegen + + + + org.codehaus.mojo + exec-maven-plugin + + + codegen-npm-install + generate-sources + + exec + + + npm + ${project.parent.basedir}/scripts/codegen + + ci + + + + + codegen-generate + generate-sources + + exec + + + npm + ${project.parent.basedir}/scripts/codegen + + run + generate + + + + + + + + + + diff --git a/java/src/generated/java/com/github/copilot/generated/AbortEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AbortEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AbortEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AbortEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AbortReason.java b/java/sdk/src/generated/java/com/github/copilot/generated/AbortReason.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AbortReason.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AbortReason.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantIdleEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantIdleEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantIdleEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantIdleEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantIntentEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantIntentEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantIntentEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantIntentEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantMessageDeltaEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantMessageDeltaEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantMessageDeltaEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantMessageDeltaEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantMessageEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantMessageEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantMessageEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantMessageEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantMessageServerTools.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantMessageServerTools.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantMessageServerTools.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantMessageServerTools.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantMessageStartEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantMessageStartEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantMessageStartEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantMessageStartEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantMessageToolRequest.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantMessageToolRequest.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantMessageToolRequest.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantMessageToolRequest.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantMessageToolRequestType.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantMessageToolRequestType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantMessageToolRequestType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantMessageToolRequestType.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantReasoningDeltaEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantReasoningDeltaEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantReasoningDeltaEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantReasoningDeltaEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantReasoningEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantReasoningEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantReasoningEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantReasoningEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantServerToolProgressEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantServerToolProgressEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantServerToolProgressEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantServerToolProgressEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantStreamingDeltaEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantStreamingDeltaEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantStreamingDeltaEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantStreamingDeltaEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantToolCallDeltaEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantToolCallDeltaEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantToolCallDeltaEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantToolCallDeltaEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantTurnEndEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantTurnEndEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantTurnEndEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantTurnEndEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantTurnRetryEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantTurnRetryEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantTurnRetryEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantTurnRetryEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantTurnStartEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantTurnStartEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantTurnStartEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantTurnStartEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantUsageApiEndpoint.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageApiEndpoint.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantUsageApiEndpoint.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageApiEndpoint.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantUsageCopilotUsage.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageCopilotUsage.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantUsageCopilotUsage.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageCopilotUsage.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantUsageCopilotUsageTokenDetail.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageCopilotUsageTokenDetail.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantUsageCopilotUsageTokenDetail.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageCopilotUsageTokenDetail.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantUsageEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantUsageEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AssistantUsageQuotaSnapshot.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageQuotaSnapshot.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AssistantUsageQuotaSnapshot.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageQuotaSnapshot.java diff --git a/java/src/generated/java/com/github/copilot/generated/AutoModeResolvedReasoningBucket.java b/java/sdk/src/generated/java/com/github/copilot/generated/AutoModeResolvedReasoningBucket.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AutoModeResolvedReasoningBucket.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AutoModeResolvedReasoningBucket.java diff --git a/java/src/generated/java/com/github/copilot/generated/AutoModeSwitchCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AutoModeSwitchCompletedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AutoModeSwitchCompletedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AutoModeSwitchCompletedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AutoModeSwitchRequestedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AutoModeSwitchRequestedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AutoModeSwitchRequestedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AutoModeSwitchRequestedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/AutoModeSwitchResponse.java b/java/sdk/src/generated/java/com/github/copilot/generated/AutoModeSwitchResponse.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AutoModeSwitchResponse.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AutoModeSwitchResponse.java diff --git a/java/src/generated/java/com/github/copilot/generated/AutopilotObjectiveChangedOperation.java b/java/sdk/src/generated/java/com/github/copilot/generated/AutopilotObjectiveChangedOperation.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AutopilotObjectiveChangedOperation.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AutopilotObjectiveChangedOperation.java diff --git a/java/src/generated/java/com/github/copilot/generated/AutopilotObjectiveChangedStatus.java b/java/sdk/src/generated/java/com/github/copilot/generated/AutopilotObjectiveChangedStatus.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/AutopilotObjectiveChangedStatus.java rename to java/sdk/src/generated/java/com/github/copilot/generated/AutopilotObjectiveChangedStatus.java diff --git a/java/src/generated/java/com/github/copilot/generated/BinaryAssetType.java b/java/sdk/src/generated/java/com/github/copilot/generated/BinaryAssetType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/BinaryAssetType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/BinaryAssetType.java diff --git a/java/src/generated/java/com/github/copilot/generated/CanvasRegistryChangedCanvas.java b/java/sdk/src/generated/java/com/github/copilot/generated/CanvasRegistryChangedCanvas.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CanvasRegistryChangedCanvas.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CanvasRegistryChangedCanvas.java diff --git a/java/src/generated/java/com/github/copilot/generated/CanvasRegistryChangedCanvasAction.java b/java/sdk/src/generated/java/com/github/copilot/generated/CanvasRegistryChangedCanvasAction.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CanvasRegistryChangedCanvasAction.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CanvasRegistryChangedCanvasAction.java diff --git a/java/src/generated/java/com/github/copilot/generated/CapabilitiesChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/CapabilitiesChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CapabilitiesChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CapabilitiesChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/CapabilitiesChangedUI.java b/java/sdk/src/generated/java/com/github/copilot/generated/CapabilitiesChangedUI.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CapabilitiesChangedUI.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CapabilitiesChangedUI.java diff --git a/java/src/generated/java/com/github/copilot/generated/CitableSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/CitableSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CitableSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CitableSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/CitationProvider.java b/java/sdk/src/generated/java/com/github/copilot/generated/CitationProvider.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CitationProvider.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CitationProvider.java diff --git a/java/src/generated/java/com/github/copilot/generated/CitationReference.java b/java/sdk/src/generated/java/com/github/copilot/generated/CitationReference.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CitationReference.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CitationReference.java diff --git a/java/src/generated/java/com/github/copilot/generated/CitationSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/CitationSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CitationSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CitationSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/CitationSpan.java b/java/sdk/src/generated/java/com/github/copilot/generated/CitationSpan.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CitationSpan.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CitationSpan.java diff --git a/java/src/generated/java/com/github/copilot/generated/Citations.java b/java/sdk/src/generated/java/com/github/copilot/generated/Citations.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/Citations.java rename to java/sdk/src/generated/java/com/github/copilot/generated/Citations.java diff --git a/java/src/generated/java/com/github/copilot/generated/CommandCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/CommandCompletedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CommandCompletedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CommandCompletedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/CommandExecuteEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/CommandExecuteEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CommandExecuteEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CommandExecuteEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/CommandQueuedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/CommandQueuedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CommandQueuedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CommandQueuedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/CommandsChangedCommand.java b/java/sdk/src/generated/java/com/github/copilot/generated/CommandsChangedCommand.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CommandsChangedCommand.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CommandsChangedCommand.java diff --git a/java/src/generated/java/com/github/copilot/generated/CommandsChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/CommandsChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CommandsChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CommandsChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsed.java b/java/sdk/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsed.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsed.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsed.java diff --git a/java/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsedCopilotUsage.java b/java/sdk/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsedCopilotUsage.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsedCopilotUsage.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsedCopilotUsage.java diff --git a/java/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsedCopilotUsageTokenDetail.java b/java/sdk/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsedCopilotUsageTokenDetail.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsedCopilotUsageTokenDetail.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CompactionCompleteCompactionTokensUsedCopilotUsageTokenDetail.java diff --git a/java/src/generated/java/com/github/copilot/generated/CompactionTrigger.java b/java/sdk/src/generated/java/com/github/copilot/generated/CompactionTrigger.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CompactionTrigger.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CompactionTrigger.java diff --git a/java/src/generated/java/com/github/copilot/generated/ContextTier.java b/java/sdk/src/generated/java/com/github/copilot/generated/ContextTier.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ContextTier.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ContextTier.java diff --git a/java/src/generated/java/com/github/copilot/generated/CustomAgentsUpdatedAgent.java b/java/sdk/src/generated/java/com/github/copilot/generated/CustomAgentsUpdatedAgent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/CustomAgentsUpdatedAgent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/CustomAgentsUpdatedAgent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ElicitationCompletedAction.java b/java/sdk/src/generated/java/com/github/copilot/generated/ElicitationCompletedAction.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ElicitationCompletedAction.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ElicitationCompletedAction.java diff --git a/java/src/generated/java/com/github/copilot/generated/ElicitationCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ElicitationCompletedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ElicitationCompletedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ElicitationCompletedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ElicitationRequestedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ElicitationRequestedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ElicitationRequestedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ElicitationRequestedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ElicitationRequestedMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/ElicitationRequestedMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ElicitationRequestedMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ElicitationRequestedMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/ElicitationRequestedSchema.java b/java/sdk/src/generated/java/com/github/copilot/generated/ElicitationRequestedSchema.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ElicitationRequestedSchema.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ElicitationRequestedSchema.java diff --git a/java/src/generated/java/com/github/copilot/generated/ExitPlanModeAction.java b/java/sdk/src/generated/java/com/github/copilot/generated/ExitPlanModeAction.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ExitPlanModeAction.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ExitPlanModeAction.java diff --git a/java/src/generated/java/com/github/copilot/generated/ExitPlanModeCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ExitPlanModeCompletedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ExitPlanModeCompletedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ExitPlanModeCompletedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ExitPlanModeRequestedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ExitPlanModeRequestedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ExitPlanModeRequestedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ExitPlanModeRequestedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtension.java b/java/sdk/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtension.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtension.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtension.java diff --git a/java/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtensionSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtensionSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtensionSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtensionSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtensionStatus.java b/java/sdk/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtensionStatus.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtensionStatus.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ExtensionsLoadedExtensionStatus.java diff --git a/java/src/generated/java/com/github/copilot/generated/ExternalToolCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ExternalToolCompletedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ExternalToolCompletedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ExternalToolCompletedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ExternalToolRequestedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ExternalToolRequestedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ExternalToolRequestedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ExternalToolRequestedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/FactoryRunUpdatedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/FactoryRunUpdatedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/FactoryRunUpdatedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/FactoryRunUpdatedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/GitHubMcpToolConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/GitHubMcpToolConfig.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/GitHubMcpToolConfig.java rename to java/sdk/src/generated/java/com/github/copilot/generated/GitHubMcpToolConfig.java diff --git a/java/src/generated/java/com/github/copilot/generated/HandoffRepository.java b/java/sdk/src/generated/java/com/github/copilot/generated/HandoffRepository.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/HandoffRepository.java rename to java/sdk/src/generated/java/com/github/copilot/generated/HandoffRepository.java diff --git a/java/src/generated/java/com/github/copilot/generated/HandoffSourceType.java b/java/sdk/src/generated/java/com/github/copilot/generated/HandoffSourceType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/HandoffSourceType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/HandoffSourceType.java diff --git a/java/src/generated/java/com/github/copilot/generated/HeaderEntry.java b/java/sdk/src/generated/java/com/github/copilot/generated/HeaderEntry.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/HeaderEntry.java rename to java/sdk/src/generated/java/com/github/copilot/generated/HeaderEntry.java diff --git a/java/src/generated/java/com/github/copilot/generated/HookEndError.java b/java/sdk/src/generated/java/com/github/copilot/generated/HookEndError.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/HookEndError.java rename to java/sdk/src/generated/java/com/github/copilot/generated/HookEndError.java diff --git a/java/src/generated/java/com/github/copilot/generated/HookEndEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/HookEndEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/HookEndEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/HookEndEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/HookProgressEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/HookProgressEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/HookProgressEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/HookProgressEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/HookStartEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/HookStartEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/HookStartEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/HookStartEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedAction.java b/java/sdk/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedAction.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedAction.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedAction.java diff --git a/java/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedEscalation.java b/java/sdk/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedEscalation.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedEscalation.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedEscalation.java diff --git a/java/src/generated/java/com/github/copilot/generated/ManagedSettingsResolvedSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/ManagedSettingsResolvedSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ManagedSettingsResolvedSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ManagedSettingsResolvedSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteError.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteError.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteError.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteError.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteToolMeta.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteToolMeta.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteToolMeta.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteToolMeta.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteToolMetaUI.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteToolMetaUI.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteToolMetaUI.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpAppToolCallCompleteToolMetaUI.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpHeadersRefreshCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpHeadersRefreshCompletedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpHeadersRefreshCompletedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpHeadersRefreshCompletedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpHeadersRefreshCompletedOutcome.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpHeadersRefreshCompletedOutcome.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpHeadersRefreshCompletedOutcome.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpHeadersRefreshCompletedOutcome.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpHeadersRefreshRequiredEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpHeadersRefreshRequiredEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpHeadersRefreshRequiredEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpHeadersRefreshRequiredEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpHeadersRefreshRequiredReason.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpHeadersRefreshRequiredReason.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpHeadersRefreshRequiredReason.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpHeadersRefreshRequiredReason.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpOauthCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpOauthCompletedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpOauthCompletedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpOauthCompletedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpOauthCompletionOutcome.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpOauthCompletionOutcome.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpOauthCompletionOutcome.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpOauthCompletionOutcome.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpOauthHttpResponse.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpOauthHttpResponse.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpOauthHttpResponse.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpOauthHttpResponse.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpOauthRequestReason.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpOauthRequestReason.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpOauthRequestReason.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpOauthRequestReason.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpOauthRequiredEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpOauthRequiredEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpOauthRequiredEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpOauthRequiredEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpOauthRequiredStaticClientConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpOauthRequiredStaticClientConfig.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpOauthRequiredStaticClientConfig.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpOauthRequiredStaticClientConfig.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpOauthWWWAuthenticateParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpOauthWWWAuthenticateParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpOauthWWWAuthenticateParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpOauthWWWAuthenticateParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpPromptsListChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpPromptsListChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpPromptsListChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpPromptsListChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpResourcesListChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpResourcesListChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpResourcesListChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpResourcesListChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpServerSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpServerSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpServerSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpServerSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpServerStatus.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpServerStatus.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpServerStatus.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpServerStatus.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpServerTransport.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpServerTransport.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpServerTransport.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpServerTransport.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpServersLoadedServer.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpServersLoadedServer.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpServersLoadedServer.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpServersLoadedServer.java diff --git a/java/src/generated/java/com/github/copilot/generated/McpToolsListChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/McpToolsListChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/McpToolsListChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/McpToolsListChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ModelCallFailureBadRequestKind.java b/java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFailureBadRequestKind.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ModelCallFailureBadRequestKind.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFailureBadRequestKind.java diff --git a/java/src/generated/java/com/github/copilot/generated/ModelCallFailureEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFailureEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ModelCallFailureEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFailureEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ModelCallFailureKind.java b/java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFailureKind.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ModelCallFailureKind.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFailureKind.java diff --git a/java/src/generated/java/com/github/copilot/generated/ModelCallFailureRequestFingerprint.java b/java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFailureRequestFingerprint.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ModelCallFailureRequestFingerprint.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFailureRequestFingerprint.java diff --git a/java/src/generated/java/com/github/copilot/generated/ModelCallFailureSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFailureSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ModelCallFailureSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFailureSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/ModelCallFailureTransport.java b/java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFailureTransport.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ModelCallFailureTransport.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFailureTransport.java diff --git a/java/src/generated/java/com/github/copilot/generated/ModelCallStartEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ModelCallStartEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ModelCallStartEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ModelCallStartEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/PendingMessagesModifiedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/PendingMessagesModifiedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/PendingMessagesModifiedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/PendingMessagesModifiedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/PermissionAllowAllMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionAllowAllMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/PermissionAllowAllMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/PermissionAllowAllMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/PermissionCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionCompletedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/PermissionCompletedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/PermissionCompletedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/PermissionRequestedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionRequestedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/PermissionRequestedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/PermissionRequestedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/PlanChangedOperation.java b/java/sdk/src/generated/java/com/github/copilot/generated/PlanChangedOperation.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/PlanChangedOperation.java rename to java/sdk/src/generated/java/com/github/copilot/generated/PlanChangedOperation.java diff --git a/java/src/generated/java/com/github/copilot/generated/ReasoningSummary.java b/java/sdk/src/generated/java/com/github/copilot/generated/ReasoningSummary.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ReasoningSummary.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ReasoningSummary.java diff --git a/java/src/generated/java/com/github/copilot/generated/SamplingCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SamplingCompletedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SamplingCompletedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SamplingCompletedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SamplingRequestedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SamplingRequestedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SamplingRequestedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SamplingRequestedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ScheduleOrigin.java b/java/sdk/src/generated/java/com/github/copilot/generated/ScheduleOrigin.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ScheduleOrigin.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ScheduleOrigin.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionAutoModeResolvedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionAutoModeResolvedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionAutoModeResolvedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionAutoModeResolvedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionAutopilotObjectiveChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionAutopilotObjectiveChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionAutopilotObjectiveChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionAutopilotObjectiveChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionBackgroundTasksChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionBackgroundTasksChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionBackgroundTasksChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionBackgroundTasksChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionBinaryAssetEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionBinaryAssetEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionBinaryAssetEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionBinaryAssetEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionCanvasClosedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionCanvasClosedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionCanvasClosedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionCanvasClosedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionCanvasOpenedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionCanvasOpenedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionCanvasOpenedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionCanvasOpenedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionCanvasRecordedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionCanvasRecordedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionCanvasRecordedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionCanvasRecordedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionCanvasRegistryChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionCanvasRegistryChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionCanvasRegistryChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionCanvasRegistryChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionCanvasRemovedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionCanvasRemovedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionCanvasRemovedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionCanvasRemovedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionCanvasUnavailableEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionCanvasUnavailableEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionCanvasUnavailableEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionCanvasUnavailableEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionCompactionCompleteEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionCompactionCompleteEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionCompactionCompleteEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionCompactionCompleteEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionCompactionStartEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionCompactionStartEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionCompactionStartEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionCompactionStartEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionContextChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionContextChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionContextChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionContextChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionContextClearedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionContextClearedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionContextClearedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionContextClearedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionCustomAgentsUpdatedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionCustomAgentsUpdatedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionCustomAgentsUpdatedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionCustomAgentsUpdatedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionCustomNotificationEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionCustomNotificationEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionCustomNotificationEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionCustomNotificationEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionErrorEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionErrorEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionErrorEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionErrorEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionExtensionsAttachmentsPushedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionExtensionsAttachmentsPushedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionExtensionsAttachmentsPushedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionExtensionsAttachmentsPushedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionExtensionsLoadedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionExtensionsLoadedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionExtensionsLoadedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionExtensionsLoadedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionHandoffEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionHandoffEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionHandoffEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionHandoffEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionIdleEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionIdleEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionIdleEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionIdleEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionInfoEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionInfoEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionInfoEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionInfoEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionLimitsConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionLimitsConfig.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionLimitsConfig.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionLimitsConfig.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedCompletedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedCompletedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedCompletedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedRequestedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedRequestedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedRequestedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedRequestedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedResponse.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedResponse.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedResponse.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedResponse.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedResponseAction.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedResponseAction.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedResponseAction.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionLimitsExhaustedResponseAction.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionManagedSettingsEnforcedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionManagedSettingsEnforcedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionManagedSettingsEnforcedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionManagedSettingsEnforcedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionManagedSettingsResolvedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionManagedSettingsResolvedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionManagedSettingsResolvedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionManagedSettingsResolvedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionMcpServerStatusChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionMcpServerStatusChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionMcpServerStatusChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionMcpServerStatusChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionMcpServersLoadedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionMcpServersLoadedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionMcpServersLoadedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionMcpServersLoadedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionModeChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionModeChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionModeChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionModeChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionModelChangeEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionModelChangeEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionModelChangeEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionModelChangeEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionPermissionsChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionPermissionsChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionPermissionsChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionPermissionsChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionPlanChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionPlanChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionPlanChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionPlanChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionRemoteSteerableChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionRemoteSteerableChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionRemoteSteerableChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionRemoteSteerableChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionResumeEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionResumeEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionResumeEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionResumeEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionScheduleCancelledEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionScheduleCancelledEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionScheduleCancelledEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionScheduleCancelledEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionScheduleCreatedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionScheduleCreatedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionScheduleCreatedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionScheduleCreatedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionScheduleRearmedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionScheduleRearmedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionScheduleRearmedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionScheduleRearmedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionSessionLimitsChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionSessionLimitsChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionSessionLimitsChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionSessionLimitsChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionShutdownEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionShutdownEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionShutdownEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionShutdownEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionSkillsLoadedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionSkillsLoadedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionSkillsLoadedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionSkillsLoadedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionSnapshotRewindEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionSnapshotRewindEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionSnapshotRewindEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionSnapshotRewindEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionStartEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionStartEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionStartEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionStartEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionTaskCompleteEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionTaskCompleteEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionTaskCompleteEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionTaskCompleteEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionTitleChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionTitleChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionTitleChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionTitleChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionTodosChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionTodosChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionTodosChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionTodosChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionToolsUpdatedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionToolsUpdatedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionToolsUpdatedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionToolsUpdatedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionTruncationEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionTruncationEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionTruncationEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionTruncationEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionUsageCheckpointEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionUsageCheckpointEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionUsageCheckpointEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionUsageCheckpointEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionUsageInfoEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionUsageInfoEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionUsageInfoEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionUsageInfoEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionWarningEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionWarningEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionWarningEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionWarningEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SessionWorkspaceFileChangedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionWorkspaceFileChangedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SessionWorkspaceFileChangedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SessionWorkspaceFileChangedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ShutdownCodeChanges.java b/java/sdk/src/generated/java/com/github/copilot/generated/ShutdownCodeChanges.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ShutdownCodeChanges.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ShutdownCodeChanges.java diff --git a/java/src/generated/java/com/github/copilot/generated/ShutdownModelMetric.java b/java/sdk/src/generated/java/com/github/copilot/generated/ShutdownModelMetric.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ShutdownModelMetric.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ShutdownModelMetric.java diff --git a/java/src/generated/java/com/github/copilot/generated/ShutdownModelMetricRequests.java b/java/sdk/src/generated/java/com/github/copilot/generated/ShutdownModelMetricRequests.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ShutdownModelMetricRequests.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ShutdownModelMetricRequests.java diff --git a/java/src/generated/java/com/github/copilot/generated/ShutdownModelMetricTokenDetail.java b/java/sdk/src/generated/java/com/github/copilot/generated/ShutdownModelMetricTokenDetail.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ShutdownModelMetricTokenDetail.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ShutdownModelMetricTokenDetail.java diff --git a/java/src/generated/java/com/github/copilot/generated/ShutdownModelMetricUsage.java b/java/sdk/src/generated/java/com/github/copilot/generated/ShutdownModelMetricUsage.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ShutdownModelMetricUsage.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ShutdownModelMetricUsage.java diff --git a/java/src/generated/java/com/github/copilot/generated/ShutdownTokenDetail.java b/java/sdk/src/generated/java/com/github/copilot/generated/ShutdownTokenDetail.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ShutdownTokenDetail.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ShutdownTokenDetail.java diff --git a/java/src/generated/java/com/github/copilot/generated/ShutdownType.java b/java/sdk/src/generated/java/com/github/copilot/generated/ShutdownType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ShutdownType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ShutdownType.java diff --git a/java/src/generated/java/com/github/copilot/generated/SkillInvokedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SkillInvokedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SkillInvokedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SkillInvokedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SkillInvokedTrigger.java b/java/sdk/src/generated/java/com/github/copilot/generated/SkillInvokedTrigger.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SkillInvokedTrigger.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SkillInvokedTrigger.java diff --git a/java/src/generated/java/com/github/copilot/generated/SkillSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/SkillSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SkillSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SkillSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/SkillsLoadedSkill.java b/java/sdk/src/generated/java/com/github/copilot/generated/SkillsLoadedSkill.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SkillsLoadedSkill.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SkillsLoadedSkill.java diff --git a/java/src/generated/java/com/github/copilot/generated/SubagentCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SubagentCompletedEvent.java similarity index 85% rename from java/src/generated/java/com/github/copilot/generated/SubagentCompletedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SubagentCompletedEvent.java index f7300ddbf4..f32613579d 100644 --- a/java/src/generated/java/com/github/copilot/generated/SubagentCompletedEvent.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/SubagentCompletedEvent.java @@ -47,9 +47,7 @@ public record SubagentCompletedEventData( /** Total tokens (input + output) consumed by the sub-agent */ @JsonProperty("totalTokens") Long totalTokens, /** Wall-clock duration of the sub-agent execution in milliseconds */ - @JsonProperty("durationMs") Long durationMs, - /** Whether the sub-agent was torn down by cancellation - its own abort, or an ancestor being killed - instead of finishing its work. Cancellation is not a failure, so the run still reports completion; this distinguishes a torn-down sub-agent from one that ran to the end. */ - @JsonProperty("cancelled") Boolean cancelled + @JsonProperty("durationMs") Long durationMs ) { } } diff --git a/java/src/generated/java/com/github/copilot/generated/SubagentDeselectedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SubagentDeselectedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SubagentDeselectedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SubagentDeselectedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SubagentFailedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SubagentFailedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SubagentFailedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SubagentFailedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SubagentSelectedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SubagentSelectedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SubagentSelectedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SubagentSelectedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SubagentStartedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SubagentStartedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SubagentStartedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SubagentStartedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SystemMessageEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SystemMessageEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SystemMessageEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SystemMessageEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/SystemMessageMetadata.java b/java/sdk/src/generated/java/com/github/copilot/generated/SystemMessageMetadata.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SystemMessageMetadata.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SystemMessageMetadata.java diff --git a/java/src/generated/java/com/github/copilot/generated/SystemMessageRole.java b/java/sdk/src/generated/java/com/github/copilot/generated/SystemMessageRole.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SystemMessageRole.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SystemMessageRole.java diff --git a/java/src/generated/java/com/github/copilot/generated/SystemNotificationEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SystemNotificationEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/SystemNotificationEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/SystemNotificationEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/TaskCompletionOutcome.java b/java/sdk/src/generated/java/com/github/copilot/generated/TaskCompletionOutcome.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/TaskCompletionOutcome.java rename to java/sdk/src/generated/java/com/github/copilot/generated/TaskCompletionOutcome.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteError.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteError.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteError.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteError.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescription.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescription.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescription.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescription.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMeta.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMeta.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMeta.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMeta.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMetaUI.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMetaUI.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMetaUI.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMetaUI.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMetaUIVisibility.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMetaUIVisibility.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMetaUIVisibility.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteToolDescriptionMetaUIVisibility.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResource.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResource.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMeta.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMeta.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMeta.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMeta.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUI.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUI.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUI.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUI.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUICsp.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUICsp.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUICsp.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUICsp.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissions.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissions.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissions.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissions.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsCamera.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsCamera.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsCamera.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsCamera.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsClipboardWrite.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsClipboardWrite.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsClipboardWrite.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsClipboardWrite.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsGeolocation.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsGeolocation.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsGeolocation.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsGeolocation.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsMicrophone.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsMicrophone.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsMicrophone.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionCompleteUIResourceMetaUIPermissionsMicrophone.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionPartialResultEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionPartialResultEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionPartialResultEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionPartialResultEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionProgressEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionProgressEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionProgressEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionProgressEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionStartEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionStartEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionStartShellToolInfo.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartShellToolInfo.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionStartShellToolInfo.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartShellToolInfo.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescription.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescription.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescription.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescription.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMeta.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMeta.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMeta.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMeta.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMetaUI.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMetaUI.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMetaUI.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMetaUI.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMetaUIVisibility.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMetaUIVisibility.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMetaUIVisibility.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartToolDescriptionMetaUIVisibility.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolSearchActivatedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolSearchActivatedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolSearchActivatedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolSearchActivatedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/ToolUserRequestedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolUserRequestedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/ToolUserRequestedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/ToolUserRequestedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/UnknownSessionEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/UnknownSessionEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/UnknownSessionEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/UnknownSessionEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/UsageCheckpointModelCacheState.java b/java/sdk/src/generated/java/com/github/copilot/generated/UsageCheckpointModelCacheState.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/UsageCheckpointModelCacheState.java rename to java/sdk/src/generated/java/com/github/copilot/generated/UsageCheckpointModelCacheState.java diff --git a/java/src/generated/java/com/github/copilot/generated/UserInputCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/UserInputCompletedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/UserInputCompletedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/UserInputCompletedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/UserInputRequestedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/UserInputRequestedEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/UserInputRequestedEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/UserInputRequestedEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/UserMessageAgentMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/UserMessageAgentMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/UserMessageAgentMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/UserMessageAgentMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/UserMessageDelivery.java b/java/sdk/src/generated/java/com/github/copilot/generated/UserMessageDelivery.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/UserMessageDelivery.java rename to java/sdk/src/generated/java/com/github/copilot/generated/UserMessageDelivery.java diff --git a/java/src/generated/java/com/github/copilot/generated/UserMessageEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/UserMessageEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/UserMessageEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/UserMessageEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/Verbosity.java b/java/sdk/src/generated/java/com/github/copilot/generated/Verbosity.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/Verbosity.java rename to java/sdk/src/generated/java/com/github/copilot/generated/Verbosity.java diff --git a/java/src/generated/java/com/github/copilot/generated/WorkingDirectoryContext.java b/java/sdk/src/generated/java/com/github/copilot/generated/WorkingDirectoryContext.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/WorkingDirectoryContext.java rename to java/sdk/src/generated/java/com/github/copilot/generated/WorkingDirectoryContext.java diff --git a/java/src/generated/java/com/github/copilot/generated/WorkingDirectoryContextHostType.java b/java/sdk/src/generated/java/com/github/copilot/generated/WorkingDirectoryContextHostType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/WorkingDirectoryContextHostType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/WorkingDirectoryContextHostType.java diff --git a/java/src/generated/java/com/github/copilot/generated/WorkspaceFileChangedOperation.java b/java/sdk/src/generated/java/com/github/copilot/generated/WorkspaceFileChangedOperation.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/WorkspaceFileChangedOperation.java rename to java/sdk/src/generated/java/com/github/copilot/generated/WorkspaceFileChangedOperation.java diff --git a/java/src/generated/java/com/github/copilot/generated/package-info.java b/java/sdk/src/generated/java/com/github/copilot/generated/package-info.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/package-info.java rename to java/sdk/src/generated/java/com/github/copilot/generated/package-info.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AbortReason.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AbortReason.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AbortReason.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AbortReason.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AccountAllUsers.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountAllUsers.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AccountAllUsers.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountAllUsers.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AccountGetCurrentAuthResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountGetCurrentAuthResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AccountGetCurrentAuthResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountGetCurrentAuthResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AccountGetQuotaParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountGetQuotaParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AccountGetQuotaParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountGetQuotaParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AccountGetQuotaResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountGetQuotaResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AccountGetQuotaResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountGetQuotaResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AccountLoginParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountLoginParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AccountLoginParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountLoginParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AccountLoginResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountLoginResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AccountLoginResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountLoginResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AccountLogoutParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountLogoutParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AccountLogoutParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountLogoutParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AccountLogoutResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountLogoutResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AccountLogoutResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountLogoutResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AccountQuotaSnapshot.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountQuotaSnapshot.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AccountQuotaSnapshot.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountQuotaSnapshot.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AdaptiveThinkingSupport.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AdaptiveThinkingSupport.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AdaptiveThinkingSupport.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AdaptiveThinkingSupport.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentDiscoveryPath.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentDiscoveryPath.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentDiscoveryPath.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentDiscoveryPath.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentDiscoveryPathScope.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentDiscoveryPathScope.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentDiscoveryPathScope.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentDiscoveryPathScope.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentInfo.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentInfo.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentInfo.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentInfo.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentInfoSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentInfoSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentInfoSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentInfoSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntry.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntry.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntry.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntry.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryAttentionKind.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryAttentionKind.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryAttentionKind.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryAttentionKind.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryKind.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryKind.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryKind.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryKind.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryLastTerminalEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryLastTerminalEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryLastTerminalEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryLastTerminalEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryStatus.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryStatus.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryStatus.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLiveTargetEntryStatus.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLogCapture.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLogCapture.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLogCapture.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLogCapture.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLogCaptureOpenErrorReason.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLogCaptureOpenErrorReason.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLogCaptureOpenErrorReason.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistryLogCaptureOpenErrorReason.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnError.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnError.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnError.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnError.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnPermissionMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnPermissionMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnPermissionMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnPermissionMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnRegistryTimeout.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnRegistryTimeout.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnRegistryTimeout.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnRegistryTimeout.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnSpawned.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnSpawned.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnSpawned.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnSpawned.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationError.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationError.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationError.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationError.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationErrorField.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationErrorField.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationErrorField.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationErrorField.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationErrorReason.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationErrorReason.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationErrorReason.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentRegistrySpawnValidationErrorReason.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentsDiscoverParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentsDiscoverParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentsDiscoverParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentsDiscoverParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentsDiscoverResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentsDiscoverResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentsDiscoverResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentsDiscoverResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentsGetDiscoveryPathsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentsGetDiscoveryPathsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentsGetDiscoveryPathsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentsGetDiscoveryPathsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AgentsGetDiscoveryPathsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentsGetDiscoveryPathsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AgentsGetDiscoveryPathsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AgentsGetDiscoveryPathsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/AuthInfoType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AuthInfoType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/AuthInfoType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/AuthInfoType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/BuiltInModelCatalogEntry.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/BuiltInModelCatalogEntry.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/BuiltInModelCatalogEntry.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/BuiltInModelCatalogEntry.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/CanvasAction.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasAction.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/CanvasAction.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasAction.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/CanvasActionInvokeParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasActionInvokeParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/CanvasActionInvokeParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasActionInvokeParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/CanvasCloseParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasCloseParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/CanvasCloseParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasCloseParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/CanvasHostContext.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasHostContext.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/CanvasHostContext.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasHostContext.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/CanvasHostContextCapabilities.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasHostContextCapabilities.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/CanvasHostContextCapabilities.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasHostContextCapabilities.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/CanvasOpenParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasOpenParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/CanvasOpenParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasOpenParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/CanvasOpenResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasOpenResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/CanvasOpenResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasOpenResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/CanvasSessionContext.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasSessionContext.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/CanvasSessionContext.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/CanvasSessionContext.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/CapiSessionOptions.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CapiSessionOptions.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/CapiSessionOptions.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/CapiSessionOptions.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/CommandsListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CommandsListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/CommandsListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/CommandsListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ConnectParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ConnectParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ConnectResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ConnectResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadata.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadata.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadata.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadata.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadataKind.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadataKind.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadataKind.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadataKind.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadataRepository.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadataRepository.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadataRepository.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectedRemoteSessionMetadataRepository.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ContentExclusionPathCheck.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ContentExclusionPathCheck.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ContentExclusionPathCheck.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ContentExclusionPathCheck.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ContextHeaviestMessage.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ContextHeaviestMessage.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ContextHeaviestMessage.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ContextHeaviestMessage.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ContextTier.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ContextTier.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ContextTier.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ContextTier.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/CurrentToolMetadata.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CurrentToolMetadata.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/CurrentToolMetadata.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/CurrentToolMetadata.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsCollectedEntry.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsCollectedEntry.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsCollectedEntry.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsCollectedEntry.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsEntry.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsEntry.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsEntry.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsEntry.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsEntryKind.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsEntryKind.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsEntryKind.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsEntryKind.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsInclude.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsInclude.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsInclude.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsInclude.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsRedaction.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsRedaction.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsRedaction.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsRedaction.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsResultKind.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsResultKind.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsResultKind.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsResultKind.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsSkippedEntry.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsSkippedEntry.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsSkippedEntry.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsSkippedEntry.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DebugCollectLogsSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DisableBypassPermissionsMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DisableBypassPermissionsMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DisableBypassPermissionsMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DisableBypassPermissionsMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredCanvas.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredCanvas.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredCanvas.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredCanvas.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtension.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtension.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtension.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtension.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionPlugin.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionPlugin.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionPlugin.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionPlugin.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredExtensionSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredMcpServer.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredMcpServer.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredMcpServer.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredMcpServer.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredMcpServerType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredMcpServerType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/DiscoveredMcpServerType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/DiscoveredMcpServerType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/EventsAgentScope.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/EventsAgentScope.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/EventsAgentScope.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/EventsAgentScope.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/EventsCursorStatus.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/EventsCursorStatus.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/EventsCursorStatus.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/EventsCursorStatus.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/EventsReadDirection.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/EventsReadDirection.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/EventsReadDirection.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/EventsReadDirection.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/Extension.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/Extension.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/Extension.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/Extension.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProfile.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProfile.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProfile.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProfile.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProviderResolveRequest.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProviderResolveRequest.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProviderResolveRequest.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProviderResolveRequest.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProviderResolveResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProviderResolveResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProviderResolveResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionLaunchProviderResolveResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ExtensionSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ExtensionSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ExtensionStatus.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionStatus.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ExtensionStatus.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionStatus.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ExtensionsDisableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionsDisableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ExtensionsDisableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionsDisableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ExtensionsDiscoverResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionsDiscoverResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ExtensionsDiscoverResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionsDiscoverResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ExtensionsEnableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionsEnableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ExtensionsEnableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ExtensionsEnableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryAbortParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryAbortParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryAbortParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryAbortParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentOptions.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentOptions.java similarity index 69% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentOptions.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentOptions.java index 9910d4f7f5..675e715e85 100644 --- a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentOptions.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentOptions.java @@ -26,12 +26,6 @@ public record FactoryAgentOptions( /** Optional JSON Schema for structured agent output. */ @JsonProperty("schema") Object schema, /** Optional model identifier for the subagent. */ - @JsonProperty("model") String model, - /** Optional reasoning effort for the subagent. This field is accepted but not yet honored. */ - @JsonProperty("reasoningEffort") String reasoningEffort, - /** Optional context tier for the subagent. This field is accepted but not yet honored. */ - @JsonProperty("contextTier") ContextTier contextTier, - /** Optional custom agent name for the subagent. This field is accepted but not yet honored. */ - @JsonProperty("agent") String agent + @JsonProperty("model") String model ) { } diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentSummary.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentSummary.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentSummary.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentSummary.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryCurrentPhase.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryCurrentPhase.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryCurrentPhase.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryCurrentPhase.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryDeclaredLimits.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryDeclaredLimits.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryDeclaredLimits.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryDeclaredLimits.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryExecuteParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryExecuteParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryExecuteParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryExecuteParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryExecuteResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryExecuteResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryExecuteResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryExecuteResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryLogLine.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryLogLine.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryLogLine.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryLogLine.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryLogLineKind.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryLogLineKind.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryLogLineKind.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryLogLineKind.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryPhaseObservation.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryPhaseObservation.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryPhaseObservation.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryPhaseObservation.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryPhaseStatus.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryPhaseStatus.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryPhaseStatus.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryPhaseStatus.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryProgressLine.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryProgressLine.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryProgressLine.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryProgressLine.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryProgressPage.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryProgressPage.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryProgressPage.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryProgressPage.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryRunConsumed.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryRunConsumed.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryRunConsumed.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryRunConsumed.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryRunLimits.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryRunLimits.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryRunLimits.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryRunLimits.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryRunResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryRunResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryRunResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryRunResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryRunStatus.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryRunStatus.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryRunStatus.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryRunStatus.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryRunSummary.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryRunSummary.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryRunSummary.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryRunSummary.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/FactoryRunTerminal.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryRunTerminal.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/FactoryRunTerminal.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryRunTerminal.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryClientInfo.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryClientInfo.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryClientInfo.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryClientInfo.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryEvent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryEvent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryEvent.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryNotification.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryNotification.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryNotification.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/GitHubTelemetryNotification.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/HistoryCompactContextWindow.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryCompactContextWindow.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/HistoryCompactContextWindow.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryCompactContextWindow.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/HistoryFileRestoreSkipReason.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryFileRestoreSkipReason.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/HistoryFileRestoreSkipReason.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryFileRestoreSkipReason.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindChangeType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindChangeType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindChangeType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindChangeType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindFilePreview.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindFilePreview.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindFilePreview.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindFilePreview.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindOutcome.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindOutcome.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindOutcome.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindOutcome.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindPoint.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindPoint.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindPoint.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindPoint.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindUnavailableReason.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindUnavailableReason.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindUnavailableReason.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistoryRewindUnavailableReason.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/HistorySkippedFileRestore.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistorySkippedFileRestore.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/HistorySkippedFileRestore.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/HistorySkippedFileRestore.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/HookInvokeRequest.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/HookInvokeRequest.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/HookInvokeRequest.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/HookInvokeRequest.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/HookType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/HookType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/HookType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/HookType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/HooksInvokeResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/HooksInvokeResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/HooksInvokeResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/HooksInvokeResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/InstalledPlugin.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstalledPlugin.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/InstalledPlugin.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstalledPlugin.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/InstalledPluginInfo.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstalledPluginInfo.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/InstalledPluginInfo.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstalledPluginInfo.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPath.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPath.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPath.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPath.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPathKind.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPathKind.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPathKind.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPathKind.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPathLocation.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPathLocation.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPathLocation.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionDiscoveryPathLocation.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/InstructionSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/InstructionSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/InstructionSourceLocation.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionSourceLocation.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/InstructionSourceLocation.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionSourceLocation.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/InstructionSourceType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionSourceType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/InstructionSourceType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionSourceType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/InstructionsDiscoverParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionsDiscoverParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/InstructionsDiscoverParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionsDiscoverParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/InstructionsDiscoverResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionsDiscoverResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/InstructionsDiscoverResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionsDiscoverResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/InstructionsGetDiscoveryPathsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionsGetDiscoveryPathsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/InstructionsGetDiscoveryPathsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionsGetDiscoveryPathsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/InstructionsGetDiscoveryPathsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionsGetDiscoveryPathsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/InstructionsGetDiscoveryPathsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstructionsGetDiscoveryPathsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestChunkRequest.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestChunkRequest.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestChunkRequest.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestChunkRequest.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestChunkResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestChunkResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestChunkResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestChunkResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartRequest.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartRequest.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartRequest.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartRequest.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartTransport.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartTransport.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartTransport.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpRequestStartTransport.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkError.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkError.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkError.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkError.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseChunkResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseStartParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseStartParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseStartParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseStartParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseStartResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseStartResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseStartResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceHttpResponseStartResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceSetProviderResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceSetProviderResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceSetProviderResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/LlmInferenceSetProviderResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/LocalSessionMetadataValue.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/LocalSessionMetadataValue.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/LocalSessionMetadataValue.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/LocalSessionMetadataValue.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ManagedSettingsReadResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ManagedSettingsReadResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ManagedSettingsReadResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ManagedSettingsReadResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/MarketplaceInfo.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/MarketplaceInfo.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/MarketplaceInfo.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/MarketplaceInfo.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/MarketplacePluginInfo.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/MarketplacePluginInfo.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/MarketplacePluginInfo.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/MarketplacePluginInfo.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/MarketplaceRefreshEntry.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/MarketplaceRefreshEntry.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/MarketplaceRefreshEntry.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/MarketplaceRefreshEntry.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAllowedServer.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAllowedServer.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAllowedServer.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAllowedServer.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAppsDiagnoseCapability.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsDiagnoseCapability.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAppsDiagnoseCapability.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsDiagnoseCapability.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAppsDiagnoseServer.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsDiagnoseServer.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAppsDiagnoseServer.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsDiagnoseServer.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetails.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetails.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetails.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetails.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsAvailableDisplayMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsAvailableDisplayMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsAvailableDisplayMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsAvailableDisplayMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsDisplayMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsDisplayMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsDisplayMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsDisplayMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsPlatform.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsPlatform.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsPlatform.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsPlatform.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsTheme.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsTheme.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsTheme.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsHostContextDetailsTheme.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAppsResourceContent.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsResourceContent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAppsResourceContent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsResourceContent.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetails.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetails.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetails.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetails.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsAvailableDisplayMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsAvailableDisplayMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsAvailableDisplayMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsAvailableDisplayMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsDisplayMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsDisplayMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsDisplayMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsDisplayMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsPlatform.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsPlatform.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsPlatform.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsPlatform.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsTheme.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsTheme.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsTheme.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpAppsSetHostContextDetailsTheme.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpConfigAddParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpConfigAddParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpConfigAddParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpConfigAddParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpConfigDisableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpConfigDisableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpConfigDisableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpConfigDisableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpConfigEnableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpConfigEnableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpConfigEnableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpConfigEnableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpConfigListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpConfigListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpConfigListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpConfigListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpConfigRemoveParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpConfigRemoveParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpConfigRemoveParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpConfigRemoveParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpConfigUpdateParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpConfigUpdateParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpConfigUpdateParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpConfigUpdateParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpDiscoverParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpDiscoverParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpDiscoverParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpDiscoverParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpDiscoverResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpDiscoverResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpDiscoverResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpDiscoverResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpExecuteSamplingRequest.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpExecuteSamplingRequest.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpExecuteSamplingRequest.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpExecuteSamplingRequest.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpExecuteSamplingResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpExecuteSamplingResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpExecuteSamplingResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpExecuteSamplingResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpFilteredServer.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpFilteredServer.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpFilteredServer.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpFilteredServer.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpHostState.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpHostState.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpHostState.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpHostState.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpOauthLoginGrantType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpOauthLoginGrantType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpOauthLoginGrantType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpOauthLoginGrantType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpResource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpResource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpResource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpResource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpResourceAnnotations.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpResourceAnnotations.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpResourceAnnotations.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpResourceAnnotations.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpResourceContent.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpResourceContent.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpResourceContent.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpResourceContent.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpResourceIcon.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpResourceIcon.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpResourceIcon.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpResourceIcon.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpResourceTemplate.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpResourceTemplate.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpResourceTemplate.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpResourceTemplate.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpSamplingExecutionAction.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpSamplingExecutionAction.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpSamplingExecutionAction.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpSamplingExecutionAction.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpServer.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpServer.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpServer.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpServer.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpServerFailureInfo.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpServerFailureInfo.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpServerFailureInfo.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpServerFailureInfo.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpServerNeedsAuthInfo.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpServerNeedsAuthInfo.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpServerNeedsAuthInfo.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpServerNeedsAuthInfo.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpServerSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpServerSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpServerSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpServerSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpServerStatus.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpServerStatus.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpServerStatus.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpServerStatus.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpSetEnvValueModeDetails.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpSetEnvValueModeDetails.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpSetEnvValueModeDetails.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpSetEnvValueModeDetails.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpToolUi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpToolUi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpToolUi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpToolUi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpToolUiVisibility.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpToolUiVisibility.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpToolUiVisibility.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpToolUiVisibility.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/McpTools.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpTools.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/McpTools.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/McpTools.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/MemoryConfiguration.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/MemoryConfiguration.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/MemoryConfiguration.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/MemoryConfiguration.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotCurrentMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotCurrentMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotCurrentMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotCurrentMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadata.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadata.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadata.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadata.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadataRepository.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadataRepository.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadataRepository.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadataRepository.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadataTaskType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadataTaskType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadataTaskType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/MetadataSnapshotRemoteMetadataTaskType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/Model.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/Model.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/Model.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/Model.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelBilling.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelBilling.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelBilling.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelBilling.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelBillingPromo.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelBillingPromo.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelBillingPromo.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelBillingPromo.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelBillingTokenPrices.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelBillingTokenPrices.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelBillingTokenPrices.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelBillingTokenPrices.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelBillingTokenPricesLongContext.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelBillingTokenPricesLongContext.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelBillingTokenPricesLongContext.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelBillingTokenPricesLongContext.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilities.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilities.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilities.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilities.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesLimits.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesLimits.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesLimits.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesLimits.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesLimitsVision.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesLimitsVision.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesLimitsVision.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesLimitsVision.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverride.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverride.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverride.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverride.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideLimits.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideLimits.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideLimits.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideLimits.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideLimitsVision.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideLimitsVision.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideLimitsVision.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideLimitsVision.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideSupports.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideSupports.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideSupports.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesOverrideSupports.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesSupports.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesSupports.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesSupports.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelCapabilitiesSupports.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelPickerCategory.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelPickerCategory.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelPickerCategory.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelPickerCategory.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelPickerPriceCategory.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelPickerPriceCategory.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelPickerPriceCategory.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelPickerPriceCategory.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelPolicy.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelPolicy.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelPolicy.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelPolicy.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelPolicyState.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelPolicyState.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelPolicyState.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelPolicyState.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelsGetBuiltInCatalogResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelsGetBuiltInCatalogResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelsGetBuiltInCatalogResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelsGetBuiltInCatalogResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelsListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelsListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelsListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelsListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ModelsListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelsListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ModelsListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelsListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/NamedProviderConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/NamedProviderConfig.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/NamedProviderConfig.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/NamedProviderConfig.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/OpenCanvasInstance.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/OpenCanvasInstance.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/OpenCanvasInstance.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/OpenCanvasInstance.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicy.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicy.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicy.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicy.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyRule.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyRule.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyRule.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyRule.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyRuleSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyRuleSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyRuleSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyRuleSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyScope.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyScope.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyScope.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateAdditionalContentExclusionPolicyScope.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateContextTier.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateContextTier.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateContextTier.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateContextTier.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateEnvValueMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateEnvValueMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateEnvValueMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateEnvValueMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateReasoningSummary.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateReasoningSummary.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateReasoningSummary.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateReasoningSummary.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateToolFilterPrecedence.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateToolFilterPrecedence.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateToolFilterPrecedence.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/OptionsUpdateToolFilterPrecedence.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PendingPermissionRequest.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PendingPermissionRequest.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PendingPermissionRequest.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PendingPermissionRequest.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionContext.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionContext.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionContext.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionContext.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionOutcome.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionOutcome.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionOutcome.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionOutcome.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSurface.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSurface.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSurface.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSurface.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionLocationType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionLocationType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionLocationType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionLocationType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionPathsConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionPathsConfig.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionPathsConfig.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionPathsConfig.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionRule.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionRule.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionRule.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionRule.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionRulesSet.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionRulesSet.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionRulesSet.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionRulesSet.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionUrlsConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionUrlsConfig.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionUrlsConfig.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionUrlsConfig.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionsAllowAllMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsAllowAllMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionsAllowAllMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsAllowAllMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicy.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicy.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicy.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicy.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyRule.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyRule.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyRule.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyRule.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyRuleSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyRuleSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyRuleSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyRuleSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyScope.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyScope.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyScope.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsConfigureAdditionalContentExclusionPolicyScope.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionsModifyRulesScope.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsModifyRulesScope.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionsModifyRulesScope.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsModifyRulesScope.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetAllowAllSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetAllowAllSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetAllowAllSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetAllowAllSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetApproveAllSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetApproveAllSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetApproveAllSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetApproveAllSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PingParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PingParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PingParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PingParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PingResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PingResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PingResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PingResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PlanSqlTodoDependency.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PlanSqlTodoDependency.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PlanSqlTodoDependency.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PlanSqlTodoDependency.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PlanSqlTodosRow.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PlanSqlTodosRow.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PlanSqlTodosRow.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PlanSqlTodosRow.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/Plugin.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/Plugin.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/Plugin.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/Plugin.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginUpdateAllEntry.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginUpdateAllEntry.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginUpdateAllEntry.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginUpdateAllEntry.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsDisableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsDisableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsDisableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsDisableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsEnableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsEnableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsEnableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsEnableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsInstallParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsInstallParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsInstallParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsInstallParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsInstallResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsInstallResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsInstallResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsInstallResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesAddParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesAddParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesAddParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesAddParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesAddResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesAddResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesAddResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesAddResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesBrowseParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesBrowseParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesBrowseParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesBrowseParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesBrowseResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesBrowseResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesBrowseResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesBrowseResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRefreshParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRefreshParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRefreshParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRefreshParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRefreshResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRefreshResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRefreshResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRefreshResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRemoveParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRemoveParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRemoveParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRemoveParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRemoveResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRemoveResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRemoveResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsMarketplacesRemoveResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsUninstallParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsUninstallParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsUninstallParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsUninstallParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateAllResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateAllResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateAllResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateAllResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/PluginsUpdateResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ProviderConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderConfig.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ProviderConfig.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderConfig.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigAzure.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigAzure.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigAzure.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigAzure.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigTransport.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigTransport.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigTransport.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigTransport.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigWireApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigWireApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigWireApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderConfigWireApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointTransport.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointTransport.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointTransport.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointTransport.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointWireApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointWireApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointWireApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderEndpointWireApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ProviderModelConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderModelConfig.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ProviderModelConfig.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderModelConfig.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ProviderSessionToken.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderSessionToken.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ProviderSessionToken.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderSessionToken.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ProviderTokenGetTokenParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderTokenGetTokenParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ProviderTokenGetTokenParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderTokenGetTokenParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ProviderTokenGetTokenResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderTokenGetTokenResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ProviderTokenGetTokenResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ProviderTokenGetTokenResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/QueueInsertMessage.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/QueueInsertMessage.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/QueueInsertMessage.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/QueueInsertMessage.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/QueuePendingItems.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/QueuePendingItems.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/QueuePendingItems.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/QueuePendingItems.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/QueuePendingItemsKind.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/QueuePendingItemsKind.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/QueuePendingItemsKind.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/QueuePendingItemsKind.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ReasoningSummary.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ReasoningSummary.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ReasoningSummary.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ReasoningSummary.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/RemoteControlConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteControlConfig.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/RemoteControlConfig.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteControlConfig.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/RemoteControlConfigExistingMcSession.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteControlConfigExistingMcSession.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/RemoteControlConfigExistingMcSession.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteControlConfigExistingMcSession.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataRepository.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataRepository.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataRepository.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataRepository.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataTaskType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataTaskType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataTaskType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataTaskType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataValue.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataValue.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataValue.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMetadataValue.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionRepository.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionRepository.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionRepository.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/RemoteSessionRepository.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/RpcCaller.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/RpcCaller.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/RpcCaller.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/RpcCaller.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/RpcMapper.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/RpcMapper.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/RpcMapper.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/RpcMapper.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/RunOptions.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/RunOptions.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/RunOptions.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/RunOptions.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java similarity index 79% rename from java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java index d9130eb819..cfb2c23fff 100644 --- a/java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java @@ -27,8 +27,10 @@ public record SandboxConfig( @JsonProperty("userPolicy") SandboxConfigUserPolicy userPolicy, /** Whether to auto-add the current working directory to readwritePaths. Default: true. */ @JsonProperty("addCurrentWorkingDirectory") Boolean addCurrentWorkingDirectory, - /** Credential-injection capability flags. */ - @JsonProperty("auth") SandboxConfigAuth auth, + /** Whether to inject the Copilot GitHub token as an `http..extraheader` so authenticated HTTPS git works inside the sandbox without the shell-based credential helper the sandbox blocks. Default: false (opt-in). */ + @JsonProperty("gitAuth") Boolean gitAuth, + /** Whether to export `GH_TOKEN` so the `gh` CLI authenticates inside the sandbox without the OS keyring the sandbox blocks. Default: false (opt-in). */ + @JsonProperty("ghAuth") Boolean ghAuth, /** Whether to auto-grant read access to common developer-tool caches, registries, and toolchains in their default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and, on Unix, up-front creation of) the scratch caches builds write on every run (go-build, ccache, sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra configuration; a relocated CARGO_HOME additionally gets its Cargo lock files granted read-write. Default: true (enabled by default; set to false to opt out). */ @JsonProperty("allowDevToolAccess") Boolean allowDevToolAccess ) { diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicy.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicy.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicy.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicy.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyExperimental.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyExperimental.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyExperimental.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyExperimental.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyExperimentalSeatbelt.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyExperimentalSeatbelt.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyExperimentalSeatbelt.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyExperimentalSeatbelt.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyFilesystem.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyFilesystem.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyFilesystem.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyFilesystem.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyNetwork.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyNetwork.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyNetwork.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyNetwork.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyNetworkProxy.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyNetworkProxy.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyNetworkProxy.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicyNetworkProxy.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicySeatbelt.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicySeatbelt.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicySeatbelt.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigUserPolicySeatbelt.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ScheduleEntry.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ScheduleEntry.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ScheduleEntry.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ScheduleEntry.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SecretsAddFilterValuesParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SecretsAddFilterValuesParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SecretsAddFilterValuesParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SecretsAddFilterValuesParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SecretsAddFilterValuesResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SecretsAddFilterValuesResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SecretsAddFilterValuesResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SecretsAddFilterValuesResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SendAgentMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SendAgentMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SendAgentMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SendAgentMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SendMessageItem.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SendMessageItem.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SendMessageItem.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SendMessageItem.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SendMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SendMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SendMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SendMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerAccountApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerAccountApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerAccountApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerAccountApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerAgentRegistryApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerAgentRegistryApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerAgentRegistryApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerAgentRegistryApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerAgentsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerAgentsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerAgentsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerAgentsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerCommandsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerCommandsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerCommandsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerCommandsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerExtensionsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerExtensionsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerExtensionsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerExtensionsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerInstructionsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerInstructionsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerInstructionsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerInstructionsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerLlmInferenceApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerLlmInferenceApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerLlmInferenceApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerLlmInferenceApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerManagedSettingsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerManagedSettingsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerManagedSettingsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerManagedSettingsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerMcpApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerMcpApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerMcpApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerMcpApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerMcpConfigApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerMcpConfigApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerMcpConfigApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerMcpConfigApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerModelsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerModelsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerModelsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerModelsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerPluginsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerPluginsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerPluginsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerPluginsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerPluginsMarketplacesApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerPluginsMarketplacesApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerPluginsMarketplacesApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerPluginsMarketplacesApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerRpc.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerRpc.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerRpc.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerRpc.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerRuntimeApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerRuntimeApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerRuntimeApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerRuntimeApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerSecretsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerSecretsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerSecretsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerSecretsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerSessionFsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerSessionFsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerSessionFsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerSessionFsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerSessionsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerSessionsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerSessionsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerSessionsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerSkill.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerSkill.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerSkill.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerSkill.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerSkillsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerSkillsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerSkillsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerSkillsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerSkillsConfigApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerSkillsConfigApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerSkillsConfigApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerSkillsConfigApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerToolsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerToolsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerToolsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerToolsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerUserApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerUserApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerUserApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerUserApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ServerUserSettingsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerUserSettingsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ServerUserSettingsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerUserSettingsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionAbortParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAbortParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionAbortParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAbortParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionAbortResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAbortResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionAbortResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAbortResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentDeselectParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentDeselectParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentDeselectParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentDeselectParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentGetCurrentParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentGetCurrentParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentGetCurrentParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentGetCurrentParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentGetCurrentResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentGetCurrentResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentGetCurrentResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentGetCurrentResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentReloadParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentReloadParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentReloadParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentReloadParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentReloadResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentReloadResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentReloadResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentReloadResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSelectParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSelectParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSelectParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSelectParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSelectResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSelectResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSelectResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSelectResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSetPromptParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSetPromptParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSetPromptParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionAgentSetPromptParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCancelAllBackgroundAgentsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCancelAllBackgroundAgentsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCancelAllBackgroundAgentsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCancelAllBackgroundAgentsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionInvokeParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionInvokeParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionInvokeParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionInvokeParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionInvokeResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionInvokeResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionInvokeResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasActionInvokeResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasCloseParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasCloseParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasCloseParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasCloseParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListOpenParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListOpenParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListOpenParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListOpenParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListOpenResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListOpenResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListOpenResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListOpenResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasOpenParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasOpenParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasOpenParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasOpenParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasOpenResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasOpenResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasOpenResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCanvasOpenResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCapability.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCapability.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCapability.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCapability.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsEnqueueParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsEnqueueParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsEnqueueParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsEnqueueParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsEnqueueResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsEnqueueResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsEnqueueResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsEnqueueResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsExecuteParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsExecuteParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsExecuteParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsExecuteParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsExecuteResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsExecuteResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsExecuteResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsExecuteResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsHandlePendingCommandParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsHandlePendingCommandParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsHandlePendingCommandParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsHandlePendingCommandParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsHandlePendingCommandResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsHandlePendingCommandResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsHandlePendingCommandResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsHandlePendingCommandResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsInvokeParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsInvokeParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsInvokeParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsInvokeParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsRespondToQueuedCommandParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsRespondToQueuedCommandParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsRespondToQueuedCommandParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsRespondToQueuedCommandParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsRespondToQueuedCommandResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsRespondToQueuedCommandResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsRespondToQueuedCommandResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCommandsRespondToQueuedCommandResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionItem.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionItem.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionItem.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionItem.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsGetTriggerCharactersParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsGetTriggerCharactersParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsGetTriggerCharactersParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsGetTriggerCharactersParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsGetTriggerCharactersResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsGetTriggerCharactersResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsGetTriggerCharactersResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsGetTriggerCharactersResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsRequestParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsRequestParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsRequestParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsRequestParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsRequestResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsRequestResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsRequestResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionCompletionsRequestResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionCheckPathsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionCheckPathsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionCheckPathsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionCheckPathsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionCheckPathsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionCheckPathsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionCheckPathsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionContentExclusionCheckPathsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionContext.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionContext.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionContext.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionContext.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionContextHostType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionContextHostType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionContextHostType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionContextHostType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionDebugApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionDebugApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogRegisterInterestParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogRegisterInterestParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogRegisterInterestParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogRegisterInterestParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogRegisterInterestResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogRegisterInterestResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogRegisterInterestResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogRegisterInterestResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReleaseInterestParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReleaseInterestParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReleaseInterestParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReleaseInterestParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReleaseInterestResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReleaseInterestResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReleaseInterestResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReleaseInterestResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogTailParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogTailParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogTailParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogTailParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogTailResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogTailResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogTailResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogTailResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsDisableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsDisableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsDisableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsDisableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsEnableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsEnableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsEnableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsEnableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsReloadParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsReloadParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsReloadParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsReloadParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsSendAttachmentsToMessageParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsSendAttachmentsToMessageParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsSendAttachmentsToMessageParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionExtensionsSendAttachmentsToMessageParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryAgentParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryAgentParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryAgentParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryAgentParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryAgentResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryAgentResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryAgentResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryAgentResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryApi.java similarity index 93% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryApi.java index e0628ea3dc..6d15ac17c3 100644 --- a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryApi.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryApi.java @@ -83,19 +83,14 @@ public CompletableFuture getRun(SessionFactoryGetRun } /** - * Parameters for paging factory runs. - *

- * Note: the {@code sessionId} field in the params record is overridden - * by the session-scoped wrapper; any value provided is ignored. + * Empty parameters for listing factory runs. * * @apiNote This method is experimental and may change in a future version. * @since 1.0.0 */ @CopilotExperimental - public CompletableFuture listRuns(SessionFactoryListRunsParams params) { - com.fasterxml.jackson.databind.node.ObjectNode _p = MAPPER.valueToTree(params); - _p.put("sessionId", this.sessionId); - return caller.invoke("session.factory.listRuns", _p, SessionFactoryListRunsResult.class); + public CompletableFuture listRuns() { + return caller.invoke("session.factory.listRuns", java.util.Map.of("sessionId", this.sessionId), SessionFactoryListRunsResult.class); } /** diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryCancelParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryCancelParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryCancelParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryCancelParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryCancelResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryCancelResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryCancelResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryCancelResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunDetailParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunDetailParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunDetailParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunDetailParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunDetailResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunDetailResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunDetailResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunDetailResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunProgressParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunProgressParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunProgressParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunProgressParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunProgressResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunProgressResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunProgressResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunProgressResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryGetRunResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalGetParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalGetParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalGetParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalGetParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalGetResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalGetResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalGetResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalGetResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalPutParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalPutParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalPutParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryJournalPutParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsParams.java similarity index 72% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsParams.java index 41de4ae4a6..e3b90f07f7 100644 --- a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsParams.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsParams.java @@ -14,7 +14,7 @@ import javax.annotation.processing.Generated; /** - * Parameters for paging factory runs. + * Empty parameters for listing factory runs. * * @apiNote This method is experimental and may change in a future version. * @since 1.0.0 @@ -25,12 +25,6 @@ @JsonIgnoreProperties(ignoreUnknown = true) public record SessionFactoryListRunsParams( /** Target session identifier */ - @JsonProperty("sessionId") String sessionId, - /** Exclusive forward cursor. */ - @JsonProperty("afterSeq") Long afterSeq, - /** Exclusive backward cursor. */ - @JsonProperty("beforeSeq") Long beforeSeq, - /** Maximum terminal runs to return. Defaults to 200 and is capped at 500. */ - @JsonProperty("limit") Long limit + @JsonProperty("sessionId") String sessionId ) { } diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsResult.java similarity index 61% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsResult.java index 3a23bc369a..7d1ac45a9e 100644 --- a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsResult.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsResult.java @@ -15,7 +15,7 @@ import javax.annotation.processing.Generated; /** - * A page of factory runs in durable creation order. + * Factory runs in durable creation order. * * @apiNote This method is experimental and may change in a future version. * @since 1.0.0 @@ -25,14 +25,6 @@ @JsonInclude(JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public record SessionFactoryListRunsResult( - @JsonProperty("runs") List runs, - /** Oldest terminal-run cursor in this page, or null when the terminal window is empty. */ - @JsonProperty("oldestSeq") Long oldestSeq, - /** Newest terminal-run cursor in this page, or null when the terminal window is empty. */ - @JsonProperty("newestSeq") Long newestSeq, - /** Whether terminal runs newer than this page exist. */ - @JsonProperty("hasMoreNewer") Boolean hasMoreNewer, - /** Number of terminal runs older than this page. */ - @JsonProperty("omittedOlder") Long omittedOlder + @JsonProperty("runs") List runs ) { } diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryLogParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryLogParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryLogParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryLogParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryResumeParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryResumeParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryResumeParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryResumeParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryResumeResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryResumeResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryResumeResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryResumeResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryRunParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryRunParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryRunParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryRunParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryRunResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryRunResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryRunResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryRunResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFleetApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFleetApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFleetApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFleetApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFleetStartParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFleetStartParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFleetStartParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFleetStartParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFleetStartResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFleetStartResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFleetStartResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFleetStartResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsAppendFileParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsAppendFileParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsAppendFileParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsAppendFileParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsError.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsError.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsError.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsError.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsErrorCode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsErrorCode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsErrorCode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsErrorCode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsExistsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsExistsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsExistsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsExistsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsExistsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsExistsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsExistsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsExistsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsMkdirParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsMkdirParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsMkdirParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsMkdirParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReadFileParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReadFileParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReadFileParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReadFileParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReadFileResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReadFileResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReadFileResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReadFileResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesEntry.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesEntry.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesEntry.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesEntry.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesEntryType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesEntryType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesEntryType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesEntryType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsReaddirWithTypesResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsRenameParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsRenameParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsRenameParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsRenameParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsRmParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsRmParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsRmParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsRmParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderCapabilities.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderCapabilities.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderCapabilities.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderCapabilities.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderConventions.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderConventions.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderConventions.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderConventions.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSetProviderResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteExistsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteExistsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteExistsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteExistsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteExistsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteExistsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteExistsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteExistsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteQueryType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionError.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionError.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionError.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionError.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionErrorClass.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionErrorClass.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionErrorClass.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionErrorClass.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionStatement.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionStatement.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionStatement.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsSqliteTransactionStatement.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsStatParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsStatParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsStatParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsStatParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsStatResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsStatResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsStatResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsStatResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionFsWriteFileParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsWriteFileParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionFsWriteFileParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFsWriteFileParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthGetStatusParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthGetStatusParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthGetStatusParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthGetStatusParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthGetStatusResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthGetStatusResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthGetStatusResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthGetStatusResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthSetCredentialsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthSetCredentialsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthSetCredentialsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthSetCredentialsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthSetCredentialsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthSetCredentialsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthSetCredentialsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionGitHubAuthSetCredentialsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryAbortManualCompactionParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryAbortManualCompactionParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryAbortManualCompactionParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryAbortManualCompactionParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryAbortManualCompactionResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryAbortManualCompactionResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryAbortManualCompactionResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryAbortManualCompactionResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCancelBackgroundCompactionParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCancelBackgroundCompactionParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCancelBackgroundCompactionParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCancelBackgroundCompactionParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCancelBackgroundCompactionResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCancelBackgroundCompactionResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCancelBackgroundCompactionResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCancelBackgroundCompactionResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryClearContextParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryClearContextParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryClearContextParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryClearContextParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryClearContextResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryClearContextResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryClearContextResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryClearContextResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCompactParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCompactParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCompactParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCompactParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCompactResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCompactResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCompactResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryCompactResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryListRewindPointsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryListRewindPointsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryListRewindPointsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryListRewindPointsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryListRewindPointsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryListRewindPointsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryListRewindPointsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryListRewindPointsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryPreviewRewindParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryPreviewRewindParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryPreviewRewindParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryPreviewRewindParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryPreviewRewindResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryPreviewRewindResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryPreviewRewindResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryPreviewRewindResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryRewindParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryRewindParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryRewindParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryRewindParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryRewindResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryRewindResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryRewindResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryRewindResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistorySummarizeForHandoffParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistorySummarizeForHandoffParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistorySummarizeForHandoffParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistorySummarizeForHandoffParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistorySummarizeForHandoffResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistorySummarizeForHandoffResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistorySummarizeForHandoffResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistorySummarizeForHandoffResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryTruncateParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryTruncateParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryTruncateParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryTruncateParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryTruncateResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryTruncateResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryTruncateResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionHistoryTruncateResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionInstalledPlugin.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInstalledPlugin.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionInstalledPlugin.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInstalledPlugin.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsGetSourcesParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsGetSourcesParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsGetSourcesParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsGetSourcesParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsGetSourcesResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsGetSourcesResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsGetSourcesResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInstructionsGetSourcesResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionInterruptMainTurnParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInterruptMainTurnParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionInterruptMainTurnParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInterruptMainTurnParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionInterruptMainTurnResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInterruptMainTurnResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionInterruptMainTurnResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInterruptMainTurnResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionBaselineData.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionBaselineData.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionBaselineData.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionBaselineData.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionClientType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionClientType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionClientType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionClientType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionDetails.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionDetails.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionDetails.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionDetails.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionPredictParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionPredictParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionPredictParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionPredictParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResultAvailable.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResultAvailable.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResultAvailable.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResultAvailable.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResultUnavailable.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResultUnavailable.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResultUnavailable.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionResultUnavailable.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionTier.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionTier.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionTier.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionTier.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionTierOption.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionTierOption.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionTierOption.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionTierOption.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionUnavailableReason.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionUnavailableReason.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionUnavailableReason.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitPredictionUnavailableReason.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitsConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitsConfig.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLimitsConfig.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLimitsConfig.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionListFilter.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionListFilter.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionListFilter.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionListFilter.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLogLevel.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLogLevel.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLogLevel.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLogLevel.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLogParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLogParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLogParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLogParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLogResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLogResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLogResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLogResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLspApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLspApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLspApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLspApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionLspInitializeParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLspInitializeParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionLspInitializeParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionLspInitializeParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionManagedPermissions.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionManagedPermissions.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionManagedPermissions.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionManagedPermissions.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionManagedSettings.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionManagedSettings.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionManagedSettings.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionManagedSettings.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsCallToolParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsCallToolParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsCallToolParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsCallToolParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsDiagnoseParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsDiagnoseParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsDiagnoseParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsDiagnoseParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsDiagnoseResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsDiagnoseResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsDiagnoseResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsDiagnoseResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsGetHostContextParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsGetHostContextParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsGetHostContextParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsGetHostContextParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsGetHostContextResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsGetHostContextResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsGetHostContextResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsGetHostContextResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsListToolsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsListToolsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsListToolsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsListToolsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsListToolsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsListToolsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsListToolsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsListToolsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsReadResourceParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsReadResourceParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsReadResourceParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsReadResourceParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsReadResourceResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsReadResourceResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsReadResourceResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsReadResourceResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsSetHostContextParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsSetHostContextParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsSetHostContextParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpAppsSetHostContextParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpCancelSamplingExecutionParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpCancelSamplingExecutionParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpCancelSamplingExecutionParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpCancelSamplingExecutionParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpCancelSamplingExecutionResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpCancelSamplingExecutionResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpCancelSamplingExecutionResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpCancelSamplingExecutionResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpConfigureGitHubParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpConfigureGitHubParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpConfigureGitHubParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpConfigureGitHubParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpConfigureGitHubResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpConfigureGitHubResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpConfigureGitHubResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpConfigureGitHubResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpDisableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpDisableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpDisableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpDisableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpEnableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpEnableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpEnableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpEnableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpExecuteSamplingParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpExecuteSamplingParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpExecuteSamplingParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpExecuteSamplingParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpExecuteSamplingResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpExecuteSamplingResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpExecuteSamplingResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpExecuteSamplingResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersHandlePendingHeadersRefreshRequestParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersHandlePendingHeadersRefreshRequestParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersHandlePendingHeadersRefreshRequestParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersHandlePendingHeadersRefreshRequestParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersHandlePendingHeadersRefreshRequestResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersHandlePendingHeadersRefreshRequestResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersHandlePendingHeadersRefreshRequestResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpHeadersHandlePendingHeadersRefreshRequestResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpIsServerRunningParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpIsServerRunningParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpIsServerRunningParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpIsServerRunningParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpIsServerRunningResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpIsServerRunningResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpIsServerRunningResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpIsServerRunningResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListToolsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListToolsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListToolsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListToolsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListToolsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListToolsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListToolsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpListToolsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthAuthenticationStateChangedParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthAuthenticationStateChangedParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthAuthenticationStateChangedParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthAuthenticationStateChangedParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthHandlePendingRequestParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthHandlePendingRequestParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthHandlePendingRequestParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthHandlePendingRequestParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthHandlePendingRequestResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthHandlePendingRequestResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthHandlePendingRequestResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthHandlePendingRequestResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthLoginParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthLoginParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthLoginParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthLoginParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthLoginResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthLoginResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthLoginResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthLoginResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthRespondParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthRespondParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthRespondParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthRespondParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthRespondResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthRespondResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthRespondResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpOauthRespondResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRegisterExternalClientParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRegisterExternalClientParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRegisterExternalClientParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRegisterExternalClientParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadWithConfigParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadWithConfigParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadWithConfigParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadWithConfigParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadWithConfigResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadWithConfigResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadWithConfigResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpReloadWithConfigResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRemoveGitHubParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRemoveGitHubParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRemoveGitHubParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRemoveGitHubParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRemoveGitHubResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRemoveGitHubResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRemoveGitHubResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRemoveGitHubResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListTemplatesParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListTemplatesParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListTemplatesParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListTemplatesParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListTemplatesResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListTemplatesResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListTemplatesResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesListTemplatesResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesReadParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesReadParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesReadParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesReadParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesReadResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesReadResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesReadResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpResourcesReadResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRestartServerParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRestartServerParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRestartServerParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpRestartServerParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpSetEnvValueModeParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpSetEnvValueModeParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpSetEnvValueModeParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpSetEnvValueModeParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpSetEnvValueModeResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpSetEnvValueModeResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpSetEnvValueModeResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpSetEnvValueModeResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpStartServerParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpStartServerParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpStartServerParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpStartServerParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpStopServerParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpStopServerParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpStopServerParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpStopServerParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpUnregisterExternalClientParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpUnregisterExternalClientParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMcpUnregisterExternalClientParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMcpUnregisterExternalClientParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataActivityParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataActivityParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataActivityParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataActivityParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataActivityResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataActivityResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataActivityResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataActivityResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataContextInfoParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataContextInfoParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataContextInfoParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataContextInfoParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataContextInfoResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataContextInfoResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataContextInfoResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataContextInfoResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextAttributionParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextAttributionParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextAttributionParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextAttributionParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextAttributionResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextAttributionResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextAttributionResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextAttributionResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextHeaviestMessagesParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextHeaviestMessagesParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextHeaviestMessagesParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextHeaviestMessagesParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextHeaviestMessagesResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextHeaviestMessagesResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextHeaviestMessagesResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataGetContextHeaviestMessagesResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataIsProcessingParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataIsProcessingParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataIsProcessingParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataIsProcessingParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataIsProcessingResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataIsProcessingResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataIsProcessingResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataIsProcessingResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecomputeContextTokensParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecomputeContextTokensParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecomputeContextTokensParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecomputeContextTokensParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecomputeContextTokensResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecomputeContextTokensResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecomputeContextTokensResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecomputeContextTokensResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecordContextChangeParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecordContextChangeParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecordContextChangeParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataRecordContextChangeParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSetWorkingDirectoryParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSetWorkingDirectoryParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSetWorkingDirectoryParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSetWorkingDirectoryParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSetWorkingDirectoryResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSetWorkingDirectoryResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSetWorkingDirectoryResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSetWorkingDirectoryResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSnapshotParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSnapshotParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSnapshotParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSnapshotParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSnapshotResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSnapshotResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSnapshotResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMetadataSnapshotResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionModeApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModeApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionModeApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModeApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionModeGetParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModeGetParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionModeGetParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModeGetParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionModeSetParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModeSetParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionModeSetParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModeSetParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionModelApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionModelApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionModelGetCurrentParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelGetCurrentParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionModelGetCurrentParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelGetCurrentParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionModelGetCurrentResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelGetCurrentResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionModelGetCurrentResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelGetCurrentResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionModelListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionModelListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionModelListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionModelListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionModelPriceCategory.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelPriceCategory.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionModelPriceCategory.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelPriceCategory.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionModelSetReasoningEffortParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelSetReasoningEffortParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionModelSetReasoningEffortParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelSetReasoningEffortParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionModelSetReasoningEffortResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelSetReasoningEffortResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionModelSetReasoningEffortResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelSetReasoningEffortResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionModelSwitchToParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelSwitchToParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionModelSwitchToParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelSwitchToParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionModelSwitchToResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelSwitchToResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionModelSwitchToResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionModelSwitchToResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionNameApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionNameApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionNameApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionNameApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionNameGetParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionNameGetParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionNameGetParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionNameGetParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionNameGetResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionNameGetResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionNameGetResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionNameGetResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetAutoParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetAutoParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetAutoParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetAutoParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetAutoResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetAutoResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetAutoResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetAutoResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionNameSetParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptions.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptions.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptions.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptions.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicy.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicy.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicy.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicy.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyRule.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyRule.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyRule.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyRule.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyRuleSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyRuleSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyRuleSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyRuleSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyScope.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyScope.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyScope.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsAdditionalContentExclusionPolicyScope.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsEnvValueMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsEnvValueMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsEnvValueMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsEnvValueMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsReasoningSummary.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsReasoningSummary.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsReasoningSummary.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptionsReasoningSummary.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsUpdateParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsUpdateParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsUpdateParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsUpdateParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsUpdateResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsUpdateResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsUpdateResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOptionsUpdateResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsConfigureParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsConfigureParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsConfigureParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsConfigureParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsConfigureResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsConfigureResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsConfigureResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsConfigureResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustAddTrustedParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustAddTrustedParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustAddTrustedParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustAddTrustedParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustAddTrustedResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustAddTrustedResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustAddTrustedResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustAddTrustedResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustIsTrustedParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustIsTrustedParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustIsTrustedParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustIsTrustedParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustIsTrustedResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustIsTrustedResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustIsTrustedResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsFolderTrustIsTrustedResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsGetAllowAllParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsGetAllowAllParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsGetAllowAllParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsGetAllowAllParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsGetAllowAllResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsGetAllowAllResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsGetAllowAllResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsGetAllowAllResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsHandlePendingPermissionRequestParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsHandlePendingPermissionRequestParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsHandlePendingPermissionRequestParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsHandlePendingPermissionRequestParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsHandlePendingPermissionRequestResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsHandlePendingPermissionRequestResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsHandlePendingPermissionRequestResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsHandlePendingPermissionRequestResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsAddToolApprovalParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsAddToolApprovalParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsAddToolApprovalParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsAddToolApprovalParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsAddToolApprovalResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsAddToolApprovalResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsAddToolApprovalResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsAddToolApprovalResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApplyParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApplyParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApplyParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApplyParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApplyResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApplyResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApplyResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsApplyResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsResolveParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsResolveParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsResolveParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsResolveParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsResolveResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsResolveResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsResolveResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsLocationsResolveResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsModifyRulesParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsModifyRulesParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsModifyRulesParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsModifyRulesParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsModifyRulesResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsModifyRulesResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsModifyRulesResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsModifyRulesResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsNotifyPromptShownParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsNotifyPromptShownParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsNotifyPromptShownParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsNotifyPromptShownParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsNotifyPromptShownResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsNotifyPromptShownResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsNotifyPromptShownResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsNotifyPromptShownResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinAllowedDirectoriesParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinAllowedDirectoriesParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinAllowedDirectoriesParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinAllowedDirectoriesParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinAllowedDirectoriesResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinAllowedDirectoriesResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinAllowedDirectoriesResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinAllowedDirectoriesResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinWorkspaceParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinWorkspaceParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinWorkspaceParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinWorkspaceParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinWorkspaceResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinWorkspaceResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinWorkspaceResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsIsPathWithinWorkspaceResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsUpdatePrimaryParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsUpdatePrimaryParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsUpdatePrimaryParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsUpdatePrimaryParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsUpdatePrimaryResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsUpdatePrimaryResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsUpdatePrimaryResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsUpdatePrimaryResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPendingRequestsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPendingRequestsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPendingRequestsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPendingRequestsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPendingRequestsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPendingRequestsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPendingRequestsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPendingRequestsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsResetSessionApprovalsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsResetSessionApprovalsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsResetSessionApprovalsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsResetSessionApprovalsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsResetSessionApprovalsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsResetSessionApprovalsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsResetSessionApprovalsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsResetSessionApprovalsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetAllowAllParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetAllowAllParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetAllowAllParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetAllowAllParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetAllowAllResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetAllowAllResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetAllowAllResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetAllowAllResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetApproveAllParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetApproveAllParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetApproveAllParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetApproveAllParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetApproveAllResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetApproveAllResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetApproveAllResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetApproveAllResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetRequiredParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetRequiredParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetRequiredParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetRequiredParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetRequiredResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetRequiredResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetRequiredResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsSetRequiredResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsSetUnrestrictedModeParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsSetUnrestrictedModeParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsSetUnrestrictedModeParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsSetUnrestrictedModeParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsSetUnrestrictedModeResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsSetUnrestrictedModeResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsSetUnrestrictedModeResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsUrlsSetUnrestrictedModeResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanDeleteParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanDeleteParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanDeleteParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanDeleteParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosWithDependenciesParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosWithDependenciesParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosWithDependenciesParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosWithDependenciesParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosWithDependenciesResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosWithDependenciesResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosWithDependenciesResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanReadSqlTodosWithDependenciesResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanUpdateParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanUpdateParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPlanUpdateParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPlanUpdateParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsReloadParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsReloadParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsReloadParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPluginsReloadParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionProviderAddParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionProviderAddParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionProviderAddParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionProviderAddParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionProviderAddResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionProviderAddResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionProviderAddResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionProviderAddResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionProviderApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionProviderApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionProviderApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionProviderApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionProviderGetEndpointParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionProviderGetEndpointParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionProviderGetEndpointParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionProviderGetEndpointParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionProviderGetEndpointResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionProviderGetEndpointResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionProviderGetEndpointResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionProviderGetEndpointResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueBeginDeferredIdleDrainParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueBeginDeferredIdleDrainParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueBeginDeferredIdleDrainParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueBeginDeferredIdleDrainParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueBeginDeferredIdleDrainResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueBeginDeferredIdleDrainResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueBeginDeferredIdleDrainResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueBeginDeferredIdleDrainResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueClearParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueClearParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueClearParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueClearParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueConsumeSystemNotificationsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueConsumeSystemNotificationsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueConsumeSystemNotificationsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueConsumeSystemNotificationsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueConsumeSystemNotificationsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueConsumeSystemNotificationsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueConsumeSystemNotificationsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueConsumeSystemNotificationsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDeferSessionIdleParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDeferSessionIdleParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDeferSessionIdleParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDeferSessionIdleParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDuplicateAtParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDuplicateAtParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDuplicateAtParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDuplicateAtParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDuplicateAtResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDuplicateAtResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDuplicateAtResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueDuplicateAtResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueEnqueueResumePendingParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueEnqueueResumePendingParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueEnqueueResumePendingParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueEnqueueResumePendingParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueEnqueueResumePendingResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueEnqueueResumePendingResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueEnqueueResumePendingResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueEnqueueResumePendingResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueFinishDeferredIdleDrainParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueFinishDeferredIdleDrainParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueFinishDeferredIdleDrainParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueFinishDeferredIdleDrainParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueFinishDeferredIdleDrainResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueFinishDeferredIdleDrainResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueFinishDeferredIdleDrainResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueFinishDeferredIdleDrainResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueHasPendingParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueHasPendingParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueHasPendingParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueHasPendingParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueHasPendingResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueHasPendingResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueHasPendingResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueHasPendingResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueInsertAtParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueInsertAtParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueInsertAtParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueInsertAtParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueInsertAtResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueInsertAtResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueInsertAtResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueInsertAtResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueMoveItemParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueMoveItemParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueMoveItemParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueMoveItemParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueMoveItemResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueMoveItemResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueMoveItemResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueMoveItemResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueProcessParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueProcessParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueProcessParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueProcessParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveAtParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveAtParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveAtParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveAtParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveAtResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveAtResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveAtResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveAtResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveMostRecentParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveMostRecentParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveMostRecentParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveMostRecentParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveMostRecentResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveMostRecentResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveMostRecentResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueRemoveMostRecentResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSendNowParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSendNowParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSendNowParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSendNowParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSendNowResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSendNowResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSendNowResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSendNowResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSetDrainPausedParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSetDrainPausedParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSetDrainPausedParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSetDrainPausedParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSnapshotParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSnapshotParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSnapshotParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSnapshotParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSnapshotResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSnapshotResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSnapshotResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueSnapshotResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueUpdateTextParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueUpdateTextParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueUpdateTextParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueUpdateTextParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueUpdateTextResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueUpdateTextResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionQueueUpdateTextResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueueUpdateTextResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteDisableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteDisableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteDisableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteDisableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteEnableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteEnableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteEnableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteEnableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteEnableResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteEnableResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteEnableResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteEnableResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteNotifySteerableChangedParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteNotifySteerableChangedParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteNotifySteerableChangedParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionRemoteNotifySteerableChangedParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionRpc.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionRpc.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionRpc.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionRpc.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddAtParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddAtParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddAtParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddAtParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddAtResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddAtResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddAtResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddAtResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddCronParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddCronParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddCronParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddCronParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddCronResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddCronResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddCronResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddCronResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddSelfPacedParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddSelfPacedParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddSelfPacedParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddSelfPacedParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddSelfPacedResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddSelfPacedResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddSelfPacedResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleAddSelfPacedResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHasSelfPacedParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHasSelfPacedParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHasSelfPacedParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHasSelfPacedParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHasSelfPacedResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHasSelfPacedResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHasSelfPacedResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHasSelfPacedResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHydrateParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHydrateParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHydrateParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleHydrateParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleRearmSelfPacedParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleRearmSelfPacedParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleRearmSelfPacedParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleRearmSelfPacedParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleRearmSelfPacedResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleRearmSelfPacedResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleRearmSelfPacedResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleRearmSelfPacedResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleStopParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleStopParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleStopParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleStopParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleStopResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleStopResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleStopResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionScheduleStopResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSendParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSendParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSendResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSendResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSendSystemNotificationParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendSystemNotificationParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSendSystemNotificationParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendSystemNotificationParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsBuiltInToolAvailabilitySnapshot.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsBuiltInToolAvailabilitySnapshot.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsBuiltInToolAvailabilitySnapshot.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsBuiltInToolAvailabilitySnapshot.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsEvaluatePredicateParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsEvaluatePredicateParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsEvaluatePredicateParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsEvaluatePredicateParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsEvaluatePredicateResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsEvaluatePredicateResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsEvaluatePredicateResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsEvaluatePredicateResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsJobSnapshot.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsJobSnapshot.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsJobSnapshot.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsJobSnapshot.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsModelSnapshot.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsModelSnapshot.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsModelSnapshot.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsModelSnapshot.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsOnlineEvaluationSnapshot.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsOnlineEvaluationSnapshot.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsOnlineEvaluationSnapshot.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsOnlineEvaluationSnapshot.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsPredicateName.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsPredicateName.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsPredicateName.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsPredicateName.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsRepoSnapshot.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsRepoSnapshot.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsRepoSnapshot.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsRepoSnapshot.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsSnapshotParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsSnapshotParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsSnapshotParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsSnapshotParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsSnapshotResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsSnapshotResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsSnapshotResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsSnapshotResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsValidationSnapshot.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsValidationSnapshot.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsValidationSnapshot.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSettingsValidationSnapshot.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionShellApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionShellApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionShellCancelUserRequestedParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellCancelUserRequestedParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionShellCancelUserRequestedParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellCancelUserRequestedParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionShellCancelUserRequestedResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellCancelUserRequestedResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionShellCancelUserRequestedResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellCancelUserRequestedResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecuteUserRequestedParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecuteUserRequestedParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecuteUserRequestedParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecuteUserRequestedParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecuteUserRequestedResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecuteUserRequestedResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecuteUserRequestedResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellExecuteUserRequestedResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionShellKillParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellKillParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionShellKillParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellKillParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionShellKillResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellKillResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionShellKillResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShellKillResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionShutdownParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShutdownParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionShutdownParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionShutdownParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsDisableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsDisableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsDisableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsDisableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsEnableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsEnableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsEnableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsEnableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsEnsureLoadedParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsEnsureLoadedParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsEnsureLoadedParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsEnsureLoadedParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsGetInvokedParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsGetInvokedParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsGetInvokedParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsGetInvokedParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsGetInvokedResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsGetInvokedResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsGetInvokedResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsGetInvokedResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsReloadParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsReloadParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsReloadParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsReloadParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsReloadResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsReloadResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsReloadResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSkillsReloadResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionSuspendParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSuspendParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionSuspendParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSuspendParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksCancelParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksCancelParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksCancelParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksCancelParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksCancelResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksCancelResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksCancelResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksCancelResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetCurrentPromotableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetCurrentPromotableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetCurrentPromotableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetCurrentPromotableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetCurrentPromotableResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetCurrentPromotableResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetCurrentPromotableResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetCurrentPromotableResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetProgressParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetProgressParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetProgressParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetProgressParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetProgressResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetProgressResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetProgressResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksGetProgressResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteCurrentToBackgroundParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteCurrentToBackgroundParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteCurrentToBackgroundParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteCurrentToBackgroundParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteCurrentToBackgroundResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteCurrentToBackgroundResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteCurrentToBackgroundResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteCurrentToBackgroundResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteToBackgroundParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteToBackgroundParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteToBackgroundParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteToBackgroundParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteToBackgroundResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteToBackgroundResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteToBackgroundResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksPromoteToBackgroundResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRefreshParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRefreshParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRefreshParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRefreshParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRemoveParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRemoveParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRemoveParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRemoveParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRemoveResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRemoveResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRemoveResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksRemoveResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksSendMessageParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksSendMessageParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksSendMessageParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksSendMessageParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksSendMessageResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksSendMessageResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksSendMessageResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksSendMessageResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksStartAgentParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksStartAgentParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksStartAgentParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksStartAgentParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksStartAgentResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksStartAgentResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksStartAgentResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksStartAgentResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksWaitForPendingParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksWaitForPendingParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTasksWaitForPendingParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTasksWaitForPendingParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryGetEngagementIdParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryGetEngagementIdParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryGetEngagementIdParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryGetEngagementIdParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryGetEngagementIdResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryGetEngagementIdResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryGetEngagementIdResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetryGetEngagementIdResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetrySetFeatureOverridesParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetrySetFeatureOverridesParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetrySetFeatureOverridesParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionTelemetrySetFeatureOverridesParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsGetCurrentMetadataParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsGetCurrentMetadataParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsGetCurrentMetadataParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsGetCurrentMetadataParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsGetCurrentMetadataResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsGetCurrentMetadataResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsGetCurrentMetadataResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsGetCurrentMetadataResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsHandlePendingToolCallParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsHandlePendingToolCallParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsHandlePendingToolCallParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsHandlePendingToolCallParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsHandlePendingToolCallResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsHandlePendingToolCallResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsHandlePendingToolCallResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsHandlePendingToolCallResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsInitializeAndValidateParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsInitializeAndValidateParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsInitializeAndValidateParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsInitializeAndValidateParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsUpdateSubagentSettingsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsUpdateSubagentSettingsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionToolsUpdateSubagentSettingsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionToolsUpdateSubagentSettingsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiElicitationParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiElicitationParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiElicitationParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiElicitationParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiElicitationResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiElicitationResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiElicitationResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiElicitationResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiEphemeralQueryParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiEphemeralQueryParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiEphemeralQueryParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiEphemeralQueryParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiEphemeralQueryResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiEphemeralQueryResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiEphemeralQueryResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiEphemeralQueryResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingAutoModeSwitchParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingAutoModeSwitchParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingAutoModeSwitchParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingAutoModeSwitchParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingAutoModeSwitchResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingAutoModeSwitchResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingAutoModeSwitchResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingAutoModeSwitchResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingElicitationParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingElicitationParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingElicitationParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingElicitationParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingElicitationResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingElicitationResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingElicitationResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingElicitationResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingExitPlanModeParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingExitPlanModeParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingExitPlanModeParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingExitPlanModeParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingExitPlanModeResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingExitPlanModeResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingExitPlanModeResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingExitPlanModeResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSamplingParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSamplingParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSamplingParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSamplingParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSamplingResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSamplingResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSamplingResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSamplingResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSessionLimitsExhaustedParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSessionLimitsExhaustedParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSessionLimitsExhaustedParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSessionLimitsExhaustedParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSessionLimitsExhaustedResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSessionLimitsExhaustedResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSessionLimitsExhaustedResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingSessionLimitsExhaustedResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingUserInputParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingUserInputParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingUserInputParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingUserInputParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingUserInputResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingUserInputResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingUserInputResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiHandlePendingUserInputResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiRegisterDirectAutoModeSwitchHandlerParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiRegisterDirectAutoModeSwitchHandlerParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiRegisterDirectAutoModeSwitchHandlerParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiRegisterDirectAutoModeSwitchHandlerParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiRegisterDirectAutoModeSwitchHandlerResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiRegisterDirectAutoModeSwitchHandlerResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiRegisterDirectAutoModeSwitchHandlerResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiRegisterDirectAutoModeSwitchHandlerResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiUnregisterDirectAutoModeSwitchHandlerParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiUnregisterDirectAutoModeSwitchHandlerParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiUnregisterDirectAutoModeSwitchHandlerParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiUnregisterDirectAutoModeSwitchHandlerParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUiUnregisterDirectAutoModeSwitchHandlerResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiUnregisterDirectAutoModeSwitchHandlerResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUiUnregisterDirectAutoModeSwitchHandlerResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUiUnregisterDirectAutoModeSwitchHandlerResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUsageApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUsageApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUsageApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUsageApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUsageGetMetricsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUsageGetMetricsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUsageGetMetricsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUsageGetMetricsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionUsageGetMetricsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUsageGetMetricsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionUsageGetMetricsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionUsageGetMetricsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityGetParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityGetParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityGetParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityGetParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityGetResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityGetResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityGetResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityGetResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilitySetParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilitySetParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilitySetParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilitySetParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilitySetResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilitySetResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilitySetResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilitySetResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityStatus.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityStatus.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityStatus.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionVisibilityStatus.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkingDirectoryContext.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkingDirectoryContext.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkingDirectoryContext.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkingDirectoryContext.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkingDirectoryContextHostType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkingDirectoryContextHostType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkingDirectoryContextHostType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkingDirectoryContextHostType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAddSummaryParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAddSummaryParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAddSummaryParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAddSummaryParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAddSummaryResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAddSummaryResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAddSummaryResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAddSummaryResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesApi.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesApi.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesApi.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAutopilotObjectiveExistsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAutopilotObjectiveExistsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAutopilotObjectiveExistsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAutopilotObjectiveExistsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAutopilotObjectiveExistsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAutopilotObjectiveExistsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAutopilotObjectiveExistsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesAutopilotObjectiveExistsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesCreateFileParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesCreateFileParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesCreateFileParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesCreateFileParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDeleteAutopilotObjectiveParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDeleteAutopilotObjectiveParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDeleteAutopilotObjectiveParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDeleteAutopilotObjectiveParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDeleteAutopilotObjectiveResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDeleteAutopilotObjectiveResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDeleteAutopilotObjectiveResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDeleteAutopilotObjectiveResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDiffParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDiffParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDiffParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDiffParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDiffResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDiffResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDiffResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesDiffResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesEnsureParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesEnsureParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesEnsureParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesEnsureParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesEnsureResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesEnsureResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesEnsureResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesEnsureResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesGetWorkspaceParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesGetWorkspaceParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesGetWorkspaceParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesGetWorkspaceParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesGetWorkspaceResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesGetWorkspaceResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesGetWorkspaceResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesGetWorkspaceResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListCheckpointsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListCheckpointsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListCheckpointsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListCheckpointsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListCheckpointsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListCheckpointsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListCheckpointsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListCheckpointsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListFilesParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListFilesParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListFilesParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListFilesParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListFilesResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListFilesResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListFilesResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesListFilesResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadAutopilotObjectiveParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadAutopilotObjectiveParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadAutopilotObjectiveParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadAutopilotObjectiveParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadAutopilotObjectiveResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadAutopilotObjectiveResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadAutopilotObjectiveResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadAutopilotObjectiveResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadCheckpointParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadCheckpointParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadCheckpointParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadCheckpointParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadCheckpointResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadCheckpointResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadCheckpointResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadCheckpointResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadFileParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadFileParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadFileParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadFileParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadFileResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadFileResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadFileResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesReadFileResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesSaveLargePasteParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesSaveLargePasteParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesSaveLargePasteParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesSaveLargePasteParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesSaveLargePasteResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesSaveLargePasteResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesSaveLargePasteResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesSaveLargePasteResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesTruncateSummariesParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesTruncateSummariesParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesTruncateSummariesParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesTruncateSummariesParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesTruncateSummariesResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesTruncateSummariesResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesTruncateSummariesResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesTruncateSummariesResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesUpdateMetadataParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesUpdateMetadataParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesUpdateMetadataParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesUpdateMetadataParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesUpdateMetadataResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesUpdateMetadataResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesUpdateMetadataResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesUpdateMetadataResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesWriteAutopilotObjectiveParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesWriteAutopilotObjectiveParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesWriteAutopilotObjectiveParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesWriteAutopilotObjectiveParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesWriteAutopilotObjectiveResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesWriteAutopilotObjectiveResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesWriteAutopilotObjectiveResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionWorkspacesWriteAutopilotObjectiveResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsBulkDeleteParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsBulkDeleteParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsBulkDeleteParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsBulkDeleteParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsBulkDeleteResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsBulkDeleteResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsBulkDeleteResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsBulkDeleteResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsCheckInUseParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsCheckInUseParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsCheckInUseParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsCheckInUseParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsCheckInUseResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsCheckInUseResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsCheckInUseResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsCheckInUseResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsCloseParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsCloseParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsCloseParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsCloseParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsConfigureSessionExtensionsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsConfigureSessionExtensionsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsConfigureSessionExtensionsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsConfigureSessionExtensionsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsConnectParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsConnectParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsConnectParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsConnectParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsConnectResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsConnectResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsConnectResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsConnectResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsDeleteParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsDeleteParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsDeleteParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsDeleteParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsEnrichMetadataParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsEnrichMetadataParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsEnrichMetadataParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsEnrichMetadataParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsEnrichMetadataResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsEnrichMetadataResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsEnrichMetadataResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsEnrichMetadataResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByPrefixParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByPrefixParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByPrefixParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByPrefixParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByPrefixResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByPrefixResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByPrefixResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByPrefixResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByTaskIdParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByTaskIdParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByTaskIdParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByTaskIdParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByTaskIdResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByTaskIdResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByTaskIdResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsFindByTaskIdResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsForkParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsForkParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsForkParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsForkParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsForkResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsForkResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsForkResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsForkResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetBoardEntryCountParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetBoardEntryCountParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetBoardEntryCountParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetBoardEntryCountParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetBoardEntryCountResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetBoardEntryCountResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetBoardEntryCountResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetBoardEntryCountResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetEventFilePathParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetEventFilePathParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetEventFilePathParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetEventFilePathParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetEventFilePathResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetEventFilePathResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetEventFilePathResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetEventFilePathResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetLastForContextParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetLastForContextParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetLastForContextParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetLastForContextParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetLastForContextResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetLastForContextResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetLastForContextResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetLastForContextResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetMetadataParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetMetadataParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetMetadataParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetMetadataParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetMetadataResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetMetadataResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetMetadataResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetMetadataResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetPersistedRemoteSteerableParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetPersistedRemoteSteerableParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetPersistedRemoteSteerableParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetPersistedRemoteSteerableParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetPersistedRemoteSteerableResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetPersistedRemoteSteerableResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetPersistedRemoteSteerableResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetPersistedRemoteSteerableResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetRemoteControlStatusResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetRemoteControlStatusResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetRemoteControlStatusResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetRemoteControlStatusResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetSizesResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetSizesResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsGetSizesResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsGetSizesResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsListNonEmptySessionIdsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsListNonEmptySessionIdsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsListNonEmptySessionIdsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsListNonEmptySessionIdsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsListNonEmptySessionIdsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsListNonEmptySessionIdsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsListNonEmptySessionIdsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsListNonEmptySessionIdsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsLoadDeferredRepoHooksParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsLoadDeferredRepoHooksParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsLoadDeferredRepoHooksParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsLoadDeferredRepoHooksParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsLoadDeferredRepoHooksResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsLoadDeferredRepoHooksResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsLoadDeferredRepoHooksResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsLoadDeferredRepoHooksResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenAttach.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenAttach.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenAttach.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenAttach.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenCloud.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenCloud.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenCloud.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenCloud.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenCreate.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenCreate.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenCreate.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenCreate.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenHandoff.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenHandoff.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenHandoff.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenHandoff.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenHandoffTaskType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenHandoffTaskType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenHandoffTaskType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenHandoffTaskType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgress.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgress.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgress.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgress.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgressStatus.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgressStatus.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgressStatus.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgressStatus.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgressStep.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgressStep.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgressStep.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenProgressStep.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenRemote.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenRemote.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenRemote.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenRemote.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResume.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResume.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResume.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResume.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResumeLast.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResumeLast.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResumeLast.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenResumeLast.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenStatus.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenStatus.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenStatus.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsOpenStatus.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsPruneOldParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsPruneOldParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsPruneOldParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsPruneOldParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsPruneOldResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsPruneOldResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsPruneOldResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsPruneOldResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionOptions.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionOptions.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionOptions.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionOptions.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsReleaseLockParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsReleaseLockParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsReleaseLockParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsReleaseLockParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsReloadPluginHooksParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsReloadPluginHooksParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsReloadPluginHooksParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsReloadPluginHooksParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsSaveParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsSaveParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsSaveParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsSaveParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsSetAdditionalPluginsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsSetAdditionalPluginsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsSetAdditionalPluginsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsSetAdditionalPluginsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsSetRemoteControlSteeringParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsSetRemoteControlSteeringParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsSetRemoteControlSteeringParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsSetRemoteControlSteeringParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsSetRemoteControlSteeringResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsSetRemoteControlSteeringResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsSetRemoteControlSteeringResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsSetRemoteControlSteeringResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsStartRemoteControlParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsStartRemoteControlParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsStartRemoteControlParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsStartRemoteControlParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsStartRemoteControlResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsStartRemoteControlResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsStartRemoteControlResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsStartRemoteControlResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsStopRemoteControlParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsStopRemoteControlParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsStopRemoteControlParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsStopRemoteControlParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsStopRemoteControlResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsStopRemoteControlResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsStopRemoteControlResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsStopRemoteControlResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsTransferRemoteControlParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsTransferRemoteControlParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsTransferRemoteControlParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsTransferRemoteControlParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SessionsTransferRemoteControlResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsTransferRemoteControlResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SessionsTransferRemoteControlResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsTransferRemoteControlResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ShellInitProfile.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ShellInitProfile.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ShellInitProfile.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ShellInitProfile.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ShellInitScript.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ShellInitScript.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ShellInitScript.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ShellInitScript.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ShellInitScriptShell.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ShellInitScriptShell.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ShellInitScriptShell.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ShellInitScriptShell.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ShellKillSignal.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ShellKillSignal.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ShellKillSignal.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ShellKillSignal.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ShellOptions.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ShellOptions.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ShellOptions.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ShellOptions.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ShutdownType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ShutdownType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ShutdownType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ShutdownType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/Skill.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/Skill.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/Skill.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/Skill.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SkillDiscoveryPath.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillDiscoveryPath.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SkillDiscoveryPath.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillDiscoveryPath.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SkillDiscoveryScope.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillDiscoveryScope.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SkillDiscoveryScope.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillDiscoveryScope.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SkillSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillSource.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SkillSource.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillSource.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SkillsConfigSetDisabledSkillsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillsConfigSetDisabledSkillsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SkillsConfigSetDisabledSkillsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillsConfigSetDisabledSkillsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SkillsDiscoverParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillsDiscoverParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SkillsDiscoverParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillsDiscoverParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SkillsDiscoverResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillsDiscoverResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SkillsDiscoverResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillsDiscoverResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SkillsGetDiscoveryPathsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillsGetDiscoveryPathsParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SkillsGetDiscoveryPathsParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillsGetDiscoveryPathsParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SkillsGetDiscoveryPathsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillsGetDiscoveryPathsResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SkillsGetDiscoveryPathsResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillsGetDiscoveryPathsResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SkillsInvokedSkill.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillsInvokedSkill.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SkillsInvokedSkill.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SkillsInvokedSkill.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandAgentPromptResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandAgentPromptResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandAgentPromptResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandAgentPromptResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandCompletedResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandCompletedResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandCompletedResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandCompletedResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInfo.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInfo.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInfo.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInfo.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInput.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInput.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInput.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInput.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInputChoice.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInputChoice.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInputChoice.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInputChoice.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInputCompletion.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInputCompletion.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInputCompletion.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInputCompletion.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInvocationResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInvocationResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInvocationResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandInvocationResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandKind.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandKind.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandKind.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandKind.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandSelectSubcommandOption.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandSelectSubcommandOption.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandSelectSubcommandOption.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandSelectSubcommandOption.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandSelectSubcommandResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandSelectSubcommandResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandSelectSubcommandResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandSelectSubcommandResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandTextResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandTextResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SlashCommandTextResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandTextResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SubagentSettingsEntry.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SubagentSettingsEntry.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SubagentSettingsEntry.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SubagentSettingsEntry.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SubagentSettingsEntryContextTier.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SubagentSettingsEntryContextTier.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/SubagentSettingsEntryContextTier.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/SubagentSettingsEntryContextTier.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/Tool.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/Tool.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/Tool.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/Tool.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ToolsListParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ToolsListParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ToolsListParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ToolsListParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/ToolsListResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ToolsListResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/ToolsListResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/ToolsListResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UIAutoModeSwitchResponse.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIAutoModeSwitchResponse.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UIAutoModeSwitchResponse.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIAutoModeSwitchResponse.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UIElicitationResponse.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIElicitationResponse.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UIElicitationResponse.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIElicitationResponse.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UIElicitationResponseAction.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIElicitationResponseAction.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UIElicitationResponseAction.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIElicitationResponseAction.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UIElicitationSchema.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIElicitationSchema.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UIElicitationSchema.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIElicitationSchema.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UIExitPlanModeAction.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIExitPlanModeAction.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UIExitPlanModeAction.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIExitPlanModeAction.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UIExitPlanModeResponse.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIExitPlanModeResponse.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UIExitPlanModeResponse.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIExitPlanModeResponse.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UIHandlePendingSamplingResponse.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIHandlePendingSamplingResponse.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UIHandlePendingSamplingResponse.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIHandlePendingSamplingResponse.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UISessionLimitsExhaustedResponse.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UISessionLimitsExhaustedResponse.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UISessionLimitsExhaustedResponse.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UISessionLimitsExhaustedResponse.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UISessionLimitsExhaustedResponseAction.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UISessionLimitsExhaustedResponseAction.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UISessionLimitsExhaustedResponseAction.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UISessionLimitsExhaustedResponseAction.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UIUserInputResponse.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIUserInputResponse.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UIUserInputResponse.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UIUserInputResponse.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsCodeChanges.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsCodeChanges.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsCodeChanges.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsCodeChanges.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetric.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetric.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetric.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetric.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricRequests.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricRequests.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricRequests.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricRequests.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricTokenDetail.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricTokenDetail.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricTokenDetail.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricTokenDetail.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricUsage.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricUsage.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricUsage.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsModelMetricUsage.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsTokenDetail.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsTokenDetail.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsTokenDetail.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UsageMetricsTokenDetail.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UserSettingMetadata.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UserSettingMetadata.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UserSettingMetadata.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UserSettingMetadata.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UserSettingsGetResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UserSettingsGetResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UserSettingsGetResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UserSettingsGetResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UserSettingsSetParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UserSettingsSetParams.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UserSettingsSetParams.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UserSettingsSetParams.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/UserSettingsSetResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/UserSettingsSetResult.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/UserSettingsSetResult.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/UserSettingsSetResult.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/Verbosity.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/Verbosity.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/Verbosity.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/Verbosity.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffFileChange.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffFileChange.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffFileChange.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffFileChange.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffFileChangeType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffFileChangeType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffFileChangeType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffFileChangeType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffMode.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffMode.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/WorkspaceDiffMode.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/WorkspaceSummaryHostType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/WorkspaceSummaryHostType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/WorkspaceSummaryHostType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/WorkspaceSummaryHostType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/WorkspacesCheckpoints.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/WorkspacesCheckpoints.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/WorkspacesCheckpoints.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/WorkspacesCheckpoints.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/WorkspacesWorkspaceDetailsHostType.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/WorkspacesWorkspaceDetailsHostType.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/WorkspacesWorkspaceDetailsHostType.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/WorkspacesWorkspaceDetailsHostType.java diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/package-info.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/package-info.java similarity index 100% rename from java/src/generated/java/com/github/copilot/generated/rpc/package-info.java rename to java/sdk/src/generated/java/com/github/copilot/generated/rpc/package-info.java diff --git a/java/src/main/java/com/github/copilot/AllowCopilotExperimental.java b/java/sdk/src/main/java/com/github/copilot/AllowCopilotExperimental.java similarity index 100% rename from java/src/main/java/com/github/copilot/AllowCopilotExperimental.java rename to java/sdk/src/main/java/com/github/copilot/AllowCopilotExperimental.java diff --git a/java/src/main/java/com/github/copilot/CliServerManager.java b/java/sdk/src/main/java/com/github/copilot/CliServerManager.java similarity index 100% rename from java/src/main/java/com/github/copilot/CliServerManager.java rename to java/sdk/src/main/java/com/github/copilot/CliServerManager.java diff --git a/java/src/main/java/com/github/copilot/ConnectionState.java b/java/sdk/src/main/java/com/github/copilot/ConnectionState.java similarity index 100% rename from java/src/main/java/com/github/copilot/ConnectionState.java rename to java/sdk/src/main/java/com/github/copilot/ConnectionState.java diff --git a/java/src/main/java/com/github/copilot/CopilotClient.java b/java/sdk/src/main/java/com/github/copilot/CopilotClient.java similarity index 81% rename from java/src/main/java/com/github/copilot/CopilotClient.java rename to java/sdk/src/main/java/com/github/copilot/CopilotClient.java index 44878b87ec..3dba1ea666 100644 --- a/java/src/main/java/com/github/copilot/CopilotClient.java +++ b/java/sdk/src/main/java/com/github/copilot/CopilotClient.java @@ -5,8 +5,11 @@ package com.github.copilot; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.net.URI; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -21,8 +24,15 @@ import java.util.logging.Level; import java.util.logging.Logger; +import com.github.copilot.ffi.FfiRuntimeHost; +import com.github.copilot.ffi.NativeRuntimeLoader; import com.github.copilot.rpc.CopilotClientMode; import com.github.copilot.rpc.CopilotClientOptions; +import com.github.copilot.rpc.InProcessRuntimeConnection; +import com.github.copilot.rpc.RuntimeConnection; +import com.github.copilot.rpc.StdioRuntimeConnection; +import com.github.copilot.rpc.TcpRuntimeConnection; +import com.github.copilot.rpc.UriRuntimeConnection; import com.github.copilot.rpc.CreateSessionResponse; import com.github.copilot.generated.rpc.SessionOptionsUpdateParams; import com.github.copilot.generated.rpc.SessionInstalledPlugin; @@ -111,7 +121,9 @@ public final class CopilotClient implements AutoCloseable { private volatile boolean disposed = false; private final String optionsHost; private final Integer optionsPort; + private final RuntimeConnection runtimeConnection; private final String effectiveConnectionToken; + private final Runnable closeHook; private volatile List modelsCache; private final Object modelsCacheLock = new Object(); @@ -131,7 +143,30 @@ public CopilotClient() { * if mutually exclusive options are provided */ public CopilotClient(CopilotClientOptions options) { + this(options, null); + } + + CopilotClient(CopilotClientOptions options, Runnable closeHook) { this.options = options != null ? options : new CopilotClientOptions(); + this.closeHook = closeHook; + + // Resolve the transport: an explicit RuntimeConnection wins; otherwise the + // COPILOT_SDK_DEFAULT_CONNECTION env var, or the individual transport options. + RuntimeConnection requestedConnection = this.options.getConnection(); + if (requestedConnection != null) { + validateEnvironmentOptions(this.options, requestedConnection); + validateConnectionConflicts(this.options, requestedConnection); + applyConnection(this.options, requestedConnection); + } else { + requestedConnection = resolveDefaultConnection(this.options); + validateEnvironmentOptions(this.options, requestedConnection); + // When the env var overrides inference (e.g. inprocess), validate that + // no legacy transport options conflict with the resolved connection. + if (requestedConnection != null) { + validateConnectionConflicts(this.options, requestedConnection); + } + } + this.runtimeConnection = requestedConnection; // When cliUrl is set, auto-correct useStdio since we're connecting via TCP if (this.options.getCliUrl() != null && !this.options.getCliUrl().isEmpty()) { @@ -199,6 +234,275 @@ public CopilotClient(CopilotClientOptions options) { this.serverManager.setConnectionToken(this.effectiveConnectionToken); } + /** + * Environment variable that overrides the transport used when the caller does + * not set {@link CopilotClientOptions#setConnection(RuntimeConnection)}. + * Accepts {@code "inprocess"} or {@code "stdio"} (case-insensitive); unset + * keeps the transport selected by the individual transport options. Any other + * value is an error. Ignored when a connection is set explicitly. + */ + static final String DEFAULT_CONNECTION_ENV_VAR = "COPILOT_SDK_DEFAULT_CONNECTION"; + + /** + * Resolves the connection to use when the caller did not set one, honoring + * {@link #DEFAULT_CONNECTION_ENV_VAR} and otherwise inferring the transport + * from the individual transport options. + */ + private static RuntimeConnection resolveDefaultConnection(CopilotClientOptions options) { + return resolveDefaultConnection(options, System.getenv(DEFAULT_CONNECTION_ENV_VAR)); + } + + /** + * Resolves the default connection from an explicit environment-variable value. + * Package-private so tests can supply the value directly. + */ + static RuntimeConnection resolveDefaultConnection(CopilotClientOptions options, String envValue) { + if (envValue != null && !envValue.isEmpty()) { + if ("inprocess".equalsIgnoreCase(envValue)) { + // Explicit subprocess options take precedence over the env var default. + if (options.getCliUrl() != null && !options.getCliUrl().isEmpty()) { + return inferConnectionFromOptions(options); + } + if (options.getCliPath() != null && !options.getCliPath().isEmpty()) { + return inferConnectionFromOptions(options); + } + if (options.getPort() != 0) { + return inferConnectionFromOptions(options); + } + if (!options.isUseStdio() || options.getTcpConnectionToken() != null) { + return inferConnectionFromOptions(options); + } + return RuntimeConnection.forInProcess(); + } + if (!"stdio".equalsIgnoreCase(envValue)) { + throw new IllegalArgumentException("Invalid " + DEFAULT_CONNECTION_ENV_VAR + " value '" + envValue + + "'. Expected 'inprocess', 'stdio', or unset."); + } + } + + return inferConnectionFromOptions(options); + } + + /** + * Maps the individual transport options onto the equivalent + * {@link RuntimeConnection}, preserving the behavior of clients written before + * connections existed. + */ + private static RuntimeConnection inferConnectionFromOptions(CopilotClientOptions options) { + String cliUrl = options.getCliUrl(); + List args = options.getCliArgs() != null ? Arrays.asList(options.getCliArgs()) : null; + if (cliUrl != null && !cliUrl.isEmpty()) { + return RuntimeConnection.forUri(cliUrl).setConnectionToken(options.getTcpConnectionToken()); + } + if (options.isUseStdio()) { + StdioRuntimeConnection stdio = RuntimeConnection.forStdio(options.getCliPath()); + if (args != null) { + stdio.setArgs(args); + } + return stdio; + } + TcpRuntimeConnection tcp = RuntimeConnection.forTcp().setPath(options.getCliPath()).setPort(options.getPort()) + .setConnectionToken(options.getTcpConnectionToken()); + if (args != null) { + tcp.setArgs(args); + } + return tcp; + } + + /** + * Rejects transport options that contradict the configured connection. Values + * that match what the connection implies are accepted so that constructing + * several clients from the same options instance stays valid. + */ + private static void validateConnectionConflicts(CopilotClientOptions options, RuntimeConnection connection) { + String impliedPath = null; + String impliedUrl = null; + String impliedToken = null; + int impliedPort = 0; + boolean impliedUseStdio = true; + List impliedArgs = null; + + if (connection instanceof StdioRuntimeConnection stdio) { + impliedPath = stdio.getPath(); + impliedArgs = stdio.getArgs(); + } else if (connection instanceof TcpRuntimeConnection tcp) { + impliedPath = tcp.getPath(); + impliedPort = tcp.getPort(); + impliedToken = tcp.getConnectionToken(); + impliedArgs = tcp.getArgs(); + impliedUseStdio = false; + } else if (connection instanceof UriRuntimeConnection uri) { + impliedUrl = uri.getUrl(); + impliedToken = uri.getConnectionToken(); + impliedUseStdio = false; + } + + rejectConflict("CliPath", options.getCliPath() != null && !options.getCliPath().equals(impliedPath)); + rejectConflict("CliUrl", options.getCliUrl() != null && !options.getCliUrl().isEmpty() + && !options.getCliUrl().equals(impliedUrl)); + rejectConflict("Port", options.getPort() != 0 && options.getPort() != impliedPort); + rejectConflict("TcpConnectionToken", + options.getTcpConnectionToken() != null && !options.getTcpConnectionToken().equals(impliedToken)); + rejectConflict("UseStdio", !options.isUseStdio() && impliedUseStdio); + rejectConflict("CliArgs", options.getCliArgs() != null + && !Arrays.asList(options.getCliArgs()).equals(impliedArgs == null ? List.of() : impliedArgs)); + } + + private static void rejectConflict(String optionName, boolean conflicting) { + if (conflicting) { + throw new IllegalArgumentException("CopilotClientOptions." + optionName + + " cannot be combined with CopilotClientOptions.setConnection(); configure the transport on the" + + " RuntimeConnection instead."); + } + } + + /** + * Projects the configured connection onto the individual transport options so + * that the rest of the client sees a single, consistent view of the transport. + */ + private static void applyConnection(CopilotClientOptions options, RuntimeConnection connection) { + if (connection instanceof StdioRuntimeConnection stdio) { + options.setUseStdio(true); + if (stdio.getPath() != null) { + options.setCliPath(stdio.getPath()); + } + applyConnectionArgs(options, stdio.getArgs()); + } else if (connection instanceof TcpRuntimeConnection tcp) { + options.setUseStdio(false); + if (tcp.getPath() != null) { + options.setCliPath(tcp.getPath()); + } + options.setPort(tcp.getPort()); + if (tcp.getConnectionToken() != null) { + options.setTcpConnectionToken(tcp.getConnectionToken()); + } + applyConnectionArgs(options, tcp.getArgs()); + } else if (connection instanceof UriRuntimeConnection uri) { + options.setUseStdio(false); + options.setCliUrl(uri.getUrl()); + if (uri.getConnectionToken() != null) { + options.setTcpConnectionToken(uri.getConnectionToken()); + } + } + } + + private static void applyConnectionArgs(CopilotClientOptions options, List args) { + if (args != null) { + options.setCliArgs(args.toArray(new String[0])); + } + } + + /** + * Rejects per-process options that the in-process transport cannot honor. These + * options are lowered onto a child process, but the in-process runtime runs + * inside the shared host process, whose single environment and working + * directory cannot carry per-client values. + */ + private static void validateEnvironmentOptions(CopilotClientOptions options, RuntimeConnection connection) { + if (!(connection instanceof InProcessRuntimeConnection)) { + return; + } + + rejectInProcessOption("Environment", options.getEnvironment() != null && !options.getEnvironment().isEmpty(), + "set the variables on the host process environment instead"); + rejectInProcessOption("Telemetry", options.getTelemetry() != null, + "configure telemetry through the host process environment instead"); + rejectInProcessOption("Cwd", options.getCwd() != null, + "set the process working directory before creating the client instead"); + rejectInProcessOption("CliArgs", options.getCliArgs() != null && options.getCliArgs().length > 0, + "use the typed client options instead"); + } + + private static void rejectInProcessOption(String optionName, boolean present, String remedy) { + if (present) { + throw new IllegalArgumentException("CopilotClientOptions." + optionName + + " is not supported with RuntimeConnection.forInProcess(): the in-process runtime shares the host" + + " process, so per-client values cannot be honored; " + remedy + "."); + } + } + + /** + * Duplex streams of an in-process runtime, together with the resource that owns + * its lifetime. + * + * @param receiveStream + * stream carrying messages from the runtime + * @param sendStream + * stream carrying messages to the runtime + * @param host + * resource closed when the client stops + */ + record InProcessTransport(InputStream receiveStream, OutputStream sendStream, AutoCloseable host) { + } + + /** + * Opens the transport for the in-process runtime. Package-private so tests can + * substitute a fake for the native runtime. + */ + @FunctionalInterface + interface InProcessTransportFactory { + /** + * Opens the in-process transport. + * + * @param options + * client options used to configure the runtime + * @return the opened transport + * @throws IOException + * if the runtime cannot be started + */ + InProcessTransport open(CopilotClientOptions options) throws IOException; + } + + private volatile InProcessTransportFactory inProcessTransportFactory = CopilotClient::openInProcessTransport; + + /** + * Returns the resolved connection describing how this client reaches the + * runtime. Package-private test seam. + * + * @return the resolved connection + */ + RuntimeConnection getRuntimeConnection() { + return runtimeConnection; + } + + /** + * Replaces the in-process transport factory. Package-private test seam. + * + * @param factory + * the factory to use + */ + void setInProcessTransportFactory(InProcessTransportFactory factory) { + this.inProcessTransportFactory = java.util.Objects.requireNonNull(factory, "factory must not be null"); + } + + private static InProcessTransport openInProcessTransport(CopilotClientOptions options) throws IOException { + FfiRuntimeHost host = new FfiRuntimeHost(); + try { + host.start(resolveInProcessEntrypoint(), options); + } catch (RuntimeException | Error e) { + host.close(); + throw e; + } + return new InProcessTransport(host.getReceiveStream(), host.getSendStream(), host); + } + + /** + * Resolves the runtime entrypoint handed to the in-process host. The copilot + * CLI executable is resolved from the same bundled location as + * {@code runtime.node} — no environment variables or PATH search. + */ + private static String resolveInProcessEntrypoint() throws IOException { + return NativeRuntimeLoader.resolveEntrypoint().toString(); + } + + private static void closeRuntimeHost(AutoCloseable host) { + try { + host.close(); + } catch (Exception e) { + LOG.log(Level.FINE, "Error closing in-process runtime host", e); + } + } + /** * Starts the Copilot client and connects to the server. * @@ -227,11 +531,16 @@ private CompletableFuture startCore() { private Connection startCoreBody() { Process process = null; + InProcessTransport inProcessTransport = null; long startNanos = System.nanoTime(); try { JsonRpcClient rpc; - if (optionsHost != null && optionsPort != null) { + if (runtimeConnection instanceof InProcessRuntimeConnection) { + // In-process runtime hosted in this process (no child process) + inProcessTransport = inProcessTransportFactory.open(options); + rpc = JsonRpcClient.fromStreams(inProcessTransport.receiveStream(), inProcessTransport.sendStream()); + } else if (optionsHost != null && optionsPort != null) { // External server (TCP) rpc = serverManager.connectToServer(null, optionsHost, optionsPort); } else { @@ -245,7 +554,8 @@ private Connection startCoreBody() { LoggingHelpers.logTiming(LOG, Level.FINE, "CopilotClient.start transport setup complete. Elapsed={Elapsed}", startNanos); - Connection connection = new Connection(rpc, process, new ServerRpc(rpc::invoke)); + Connection connection = new Connection(rpc, process, new ServerRpc(rpc::invoke), + inProcessTransport == null ? null : inProcessTransport.host()); // Register handlers for server-to-client calls RpcHandlerDispatcher dispatcher = new RpcHandlerDispatcher(sessions, lifecycleManager::dispatch, executor); @@ -289,6 +599,9 @@ private Connection startCoreBody() { if (process != null) { cleanupCliProcess(process, true); } + if (inProcessTransport != null) { + closeRuntimeHost(inProcessTransport.host()); + } String stderr = serverManager.getStderrOutput(); if (!stderr.isEmpty()) { throw new CompletionException(new IOException( @@ -438,7 +751,7 @@ private CompletableFuture cleanupConnection(boolean gracefulRuntimeShutdow } CompletableFuture shutdownFuture = CompletableFuture.completedFuture(null); - if (gracefulRuntimeShutdown && connection.process != null) { + if (gracefulRuntimeShutdown && (connection.process != null || connection.runtimeHost != null)) { long runtimeShutdownStartNanos = System.nanoTime(); shutdownFuture = connection.rpc.invoke("runtime.shutdown", Map.of(), Void.class) .orTimeout(RUNTIME_SHUTDOWN_TIMEOUT_SECONDS, TimeUnit.SECONDS) @@ -465,6 +778,9 @@ private CompletableFuture cleanupConnection(boolean gracefulRuntimeShutdow if (connection.process != null) { cleanupCliProcess(connection.process, !gracefulRuntimeShutdown || error != null); } + if (connection.runtimeHost != null) { + closeRuntimeHost(connection.runtimeHost); + } return (Void) null; }); }).thenCompose(result -> result); @@ -1353,6 +1669,9 @@ public void close() { LOG.log(Level.FINE, "Error during close", e); } finally { shutdownOwnedExecutor(); + if (closeHook != null) { + closeHook.run(); + } } } @@ -1392,7 +1711,8 @@ private void shutdownOwnedExecutor() { } } - private static record Connection(JsonRpcClient rpc, Process process, ServerRpc serverRpc) { + private static record Connection(JsonRpcClient rpc, Process process, ServerRpc serverRpc, + AutoCloseable runtimeHost) { }; } diff --git a/java/src/main/java/com/github/copilot/CopilotExperimental.java b/java/sdk/src/main/java/com/github/copilot/CopilotExperimental.java similarity index 100% rename from java/src/main/java/com/github/copilot/CopilotExperimental.java rename to java/sdk/src/main/java/com/github/copilot/CopilotExperimental.java diff --git a/java/src/main/java/com/github/copilot/CopilotExperimentalProcessor.java b/java/sdk/src/main/java/com/github/copilot/CopilotExperimentalProcessor.java similarity index 100% rename from java/src/main/java/com/github/copilot/CopilotExperimentalProcessor.java rename to java/sdk/src/main/java/com/github/copilot/CopilotExperimentalProcessor.java diff --git a/java/src/main/java/com/github/copilot/CopilotRequestContext.java b/java/sdk/src/main/java/com/github/copilot/CopilotRequestContext.java similarity index 100% rename from java/src/main/java/com/github/copilot/CopilotRequestContext.java rename to java/sdk/src/main/java/com/github/copilot/CopilotRequestContext.java diff --git a/java/src/main/java/com/github/copilot/CopilotRequestHandler.java b/java/sdk/src/main/java/com/github/copilot/CopilotRequestHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/CopilotRequestHandler.java rename to java/sdk/src/main/java/com/github/copilot/CopilotRequestHandler.java diff --git a/java/src/main/java/com/github/copilot/CopilotRequestTransport.java b/java/sdk/src/main/java/com/github/copilot/CopilotRequestTransport.java similarity index 100% rename from java/src/main/java/com/github/copilot/CopilotRequestTransport.java rename to java/sdk/src/main/java/com/github/copilot/CopilotRequestTransport.java diff --git a/java/src/main/java/com/github/copilot/CopilotSession.java b/java/sdk/src/main/java/com/github/copilot/CopilotSession.java similarity index 100% rename from java/src/main/java/com/github/copilot/CopilotSession.java rename to java/sdk/src/main/java/com/github/copilot/CopilotSession.java diff --git a/java/src/main/java/com/github/copilot/CopilotWebSocketCloseStatus.java b/java/sdk/src/main/java/com/github/copilot/CopilotWebSocketCloseStatus.java similarity index 100% rename from java/src/main/java/com/github/copilot/CopilotWebSocketCloseStatus.java rename to java/sdk/src/main/java/com/github/copilot/CopilotWebSocketCloseStatus.java diff --git a/java/src/main/java/com/github/copilot/CopilotWebSocketForwarder.java b/java/sdk/src/main/java/com/github/copilot/CopilotWebSocketForwarder.java similarity index 100% rename from java/src/main/java/com/github/copilot/CopilotWebSocketForwarder.java rename to java/sdk/src/main/java/com/github/copilot/CopilotWebSocketForwarder.java diff --git a/java/src/main/java/com/github/copilot/CopilotWebSocketHandler.java b/java/sdk/src/main/java/com/github/copilot/CopilotWebSocketHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/CopilotWebSocketHandler.java rename to java/sdk/src/main/java/com/github/copilot/CopilotWebSocketHandler.java diff --git a/java/src/main/java/com/github/copilot/CopilotWebSocketMessage.java b/java/sdk/src/main/java/com/github/copilot/CopilotWebSocketMessage.java similarity index 100% rename from java/src/main/java/com/github/copilot/CopilotWebSocketMessage.java rename to java/sdk/src/main/java/com/github/copilot/CopilotWebSocketMessage.java diff --git a/java/src/main/java/com/github/copilot/EventErrorHandler.java b/java/sdk/src/main/java/com/github/copilot/EventErrorHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/EventErrorHandler.java rename to java/sdk/src/main/java/com/github/copilot/EventErrorHandler.java diff --git a/java/src/main/java/com/github/copilot/EventErrorPolicy.java b/java/sdk/src/main/java/com/github/copilot/EventErrorPolicy.java similarity index 100% rename from java/src/main/java/com/github/copilot/EventErrorPolicy.java rename to java/sdk/src/main/java/com/github/copilot/EventErrorPolicy.java diff --git a/java/src/main/java/com/github/copilot/ExtractedTransforms.java b/java/sdk/src/main/java/com/github/copilot/ExtractedTransforms.java similarity index 100% rename from java/src/main/java/com/github/copilot/ExtractedTransforms.java rename to java/sdk/src/main/java/com/github/copilot/ExtractedTransforms.java diff --git a/java/src/main/java/com/github/copilot/GitHubTelemetryAdapter.java b/java/sdk/src/main/java/com/github/copilot/GitHubTelemetryAdapter.java similarity index 100% rename from java/src/main/java/com/github/copilot/GitHubTelemetryAdapter.java rename to java/sdk/src/main/java/com/github/copilot/GitHubTelemetryAdapter.java diff --git a/java/src/main/java/com/github/copilot/InternalExecutorProvider.java b/java/sdk/src/main/java/com/github/copilot/InternalExecutorProvider.java similarity index 100% rename from java/src/main/java/com/github/copilot/InternalExecutorProvider.java rename to java/sdk/src/main/java/com/github/copilot/InternalExecutorProvider.java diff --git a/java/src/main/java/com/github/copilot/JsonRpcClient.java b/java/sdk/src/main/java/com/github/copilot/JsonRpcClient.java similarity index 89% rename from java/src/main/java/com/github/copilot/JsonRpcClient.java rename to java/sdk/src/main/java/com/github/copilot/JsonRpcClient.java index 5303c4f500..550bd4ca42 100644 --- a/java/src/main/java/com/github/copilot/JsonRpcClient.java +++ b/java/sdk/src/main/java/com/github/copilot/JsonRpcClient.java @@ -18,6 +18,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicLong; import java.util.function.BiConsumer; +import java.util.function.Consumer; import java.util.logging.Level; import java.util.logging.Logger; @@ -46,6 +47,7 @@ class JsonRpcClient implements AutoCloseable { private final OutputStream outputStream; private final Socket socket; private final Process process; + private final boolean ownsStreams; private final AtomicLong requestIdCounter = new AtomicLong(0); private final Map> pendingRequests = new ConcurrentHashMap<>(); private final Map> notificationHandlers = new ConcurrentHashMap<>(); @@ -53,15 +55,29 @@ class JsonRpcClient implements AutoCloseable { private volatile boolean running = true; private JsonRpcClient(InputStream inputStream, OutputStream outputStream, Socket socket, Process process) { + this(inputStream, outputStream, socket, process, false); + } + + private JsonRpcClient(InputStream inputStream, OutputStream outputStream, Socket socket, Process process, + boolean ownsStreams) { + this(inputStream, outputStream, socket, process, ownsStreams, null); + } + + private JsonRpcClient(InputStream inputStream, OutputStream outputStream, Socket socket, Process process, + boolean ownsStreams, Consumer initializer) { this.inputStream = inputStream; this.outputStream = outputStream; this.socket = socket; this.process = process; + this.ownsStreams = ownsStreams; this.readerExecutor = Executors.newSingleThreadExecutor(r -> { Thread t = new Thread(r, "jsonrpc-reader"); t.setDaemon(true); return t; }); + if (initializer != null) { + initializer.accept(this); + } startReader(); } @@ -93,6 +109,19 @@ public static JsonRpcClient fromSocket(Socket socket) throws IOException { return new JsonRpcClient(socket.getInputStream(), socket.getOutputStream(), socket, null); } + static JsonRpcClient fromSocket(Socket socket, Consumer initializer) throws IOException { + return new JsonRpcClient(socket.getInputStream(), socket.getOutputStream(), socket, null, false, initializer); + } + + /** + * Creates a JSON-RPC client over arbitrary input/output streams. The client + * takes ownership of the streams and closes them when {@link #close()} is + * called. + */ + public static JsonRpcClient fromStreams(InputStream inputStream, OutputStream outputStream) { + return new JsonRpcClient(inputStream, outputStream, null, null, true); + } + /** * Registers a handler for JSON-RPC method calls (requests/notifications from * server). @@ -344,6 +373,19 @@ public void close() { if (process != null) { process.destroy(); } + + if (ownsStreams) { + try { + inputStream.close(); + } catch (IOException e) { + LOG.log(Level.FINE, "Error closing input stream", e); + } + try { + outputStream.close(); + } catch (IOException e) { + LOG.log(Level.FINE, "Error closing output stream", e); + } + } } public boolean isConnected() { diff --git a/java/src/main/java/com/github/copilot/JsonRpcException.java b/java/sdk/src/main/java/com/github/copilot/JsonRpcException.java similarity index 100% rename from java/src/main/java/com/github/copilot/JsonRpcException.java rename to java/sdk/src/main/java/com/github/copilot/JsonRpcException.java diff --git a/java/src/main/java/com/github/copilot/LifecycleEventManager.java b/java/sdk/src/main/java/com/github/copilot/LifecycleEventManager.java similarity index 100% rename from java/src/main/java/com/github/copilot/LifecycleEventManager.java rename to java/sdk/src/main/java/com/github/copilot/LifecycleEventManager.java diff --git a/java/src/main/java/com/github/copilot/LlmInferenceAdapter.java b/java/sdk/src/main/java/com/github/copilot/LlmInferenceAdapter.java similarity index 100% rename from java/src/main/java/com/github/copilot/LlmInferenceAdapter.java rename to java/sdk/src/main/java/com/github/copilot/LlmInferenceAdapter.java diff --git a/java/src/main/java/com/github/copilot/LlmInferenceExchange.java b/java/sdk/src/main/java/com/github/copilot/LlmInferenceExchange.java similarity index 100% rename from java/src/main/java/com/github/copilot/LlmInferenceExchange.java rename to java/sdk/src/main/java/com/github/copilot/LlmInferenceExchange.java diff --git a/java/src/main/java/com/github/copilot/LlmWebSocketResponseBridge.java b/java/sdk/src/main/java/com/github/copilot/LlmWebSocketResponseBridge.java similarity index 100% rename from java/src/main/java/com/github/copilot/LlmWebSocketResponseBridge.java rename to java/sdk/src/main/java/com/github/copilot/LlmWebSocketResponseBridge.java diff --git a/java/src/main/java/com/github/copilot/LoggingHelpers.java b/java/sdk/src/main/java/com/github/copilot/LoggingHelpers.java similarity index 100% rename from java/src/main/java/com/github/copilot/LoggingHelpers.java rename to java/sdk/src/main/java/com/github/copilot/LoggingHelpers.java diff --git a/java/src/main/java/com/github/copilot/RpcHandlerDispatcher.java b/java/sdk/src/main/java/com/github/copilot/RpcHandlerDispatcher.java similarity index 100% rename from java/src/main/java/com/github/copilot/RpcHandlerDispatcher.java rename to java/sdk/src/main/java/com/github/copilot/RpcHandlerDispatcher.java diff --git a/java/src/main/java/com/github/copilot/SdkProtocolVersion.java b/java/sdk/src/main/java/com/github/copilot/SdkProtocolVersion.java similarity index 100% rename from java/src/main/java/com/github/copilot/SdkProtocolVersion.java rename to java/sdk/src/main/java/com/github/copilot/SdkProtocolVersion.java diff --git a/java/src/main/java/com/github/copilot/SessionRequestBuilder.java b/java/sdk/src/main/java/com/github/copilot/SessionRequestBuilder.java similarity index 100% rename from java/src/main/java/com/github/copilot/SessionRequestBuilder.java rename to java/sdk/src/main/java/com/github/copilot/SessionRequestBuilder.java diff --git a/java/src/main/java/com/github/copilot/SystemMessageMode.java b/java/sdk/src/main/java/com/github/copilot/SystemMessageMode.java similarity index 100% rename from java/src/main/java/com/github/copilot/SystemMessageMode.java rename to java/sdk/src/main/java/com/github/copilot/SystemMessageMode.java diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/FfiOutputStream.java b/java/sdk/src/main/java/com/github/copilot/ffi/FfiOutputStream.java new file mode 100644 index 0000000000..4198f08f02 --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/ffi/FfiOutputStream.java @@ -0,0 +1,63 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.Arrays; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.ReentrantLock; + +final class FfiOutputStream extends OutputStream { + + private final NativeBinding nativeBinding; + private final AtomicInteger connectionId; + private final AtomicBoolean closing; + private final ReentrantLock operationLock; + + FfiOutputStream(NativeBinding nativeBinding, AtomicInteger connectionId, AtomicBoolean closing, + ReentrantLock operationLock) { + this.nativeBinding = Objects.requireNonNull(nativeBinding, "nativeBinding must not be null"); + this.connectionId = Objects.requireNonNull(connectionId, "connectionId must not be null"); + this.closing = Objects.requireNonNull(closing, "closing must not be null"); + this.operationLock = Objects.requireNonNull(operationLock, "operationLock must not be null"); + } + + @Override + public void write(int b) throws IOException { + write(new byte[]{(byte) b}, 0, 1); + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + Objects.requireNonNull(b, "buffer must not be null"); + if (off < 0 || len < 0 || off + len > b.length) { + throw new IndexOutOfBoundsException("Invalid off/len for buffer of length " + b.length); + } + if (len == 0) { + return; + } + + operationLock.lock(); + try { + if (closing.get()) { + throw new IOException("The in-process runtime connection is closed."); + } + int id = connectionId.get(); + if (id == 0) { + throw new IOException("The in-process runtime connection is closed."); + } + + byte[] payload = (off == 0 && len == b.length) ? b : Arrays.copyOfRange(b, off, off + len); + if (!nativeBinding.connectionWrite(id, payload, payload.length)) { + throw new IOException("Failed to write a frame to the in-process runtime connection."); + } + } finally { + operationLock.unlock(); + } + } +} diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/FfiRuntimeHost.java b/java/sdk/src/main/java/com/github/copilot/ffi/FfiRuntimeHost.java new file mode 100644 index 0000000000..6a71c71431 --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/ffi/FfiRuntimeHost.java @@ -0,0 +1,349 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.ReentrantLock; +import java.util.logging.Level; +import java.util.logging.Logger; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.copilot.rpc.CopilotClientMode; +import com.github.copilot.rpc.CopilotClientOptions; +import com.sun.jna.Callback; +import com.sun.jna.Native; +import com.sun.jna.Pointer; + +/** + * Manages the in-process FFI runtime lifecycle. + */ +public final class FfiRuntimeHost implements AutoCloseable { + + private static final Logger LOG = Logger.getLogger(FfiRuntimeHost.class.getName()); + private static final ObjectMapper MAPPER = new ObjectMapper(); + + private final NativeBinding nativeBinding; + private final QueueInputStream receiveStream; + private final AtomicBoolean closing = new AtomicBoolean(false); + private final AtomicBoolean disposed = new AtomicBoolean(false); + private final AtomicInteger serverId = new AtomicInteger(0); + private final AtomicInteger connectionId = new AtomicInteger(0); + private final AtomicInteger activeCallbacks = new AtomicInteger(0); + private final Object callbackDrainMonitor = new Object(); + private final ReentrantLock operationLock = new ReentrantLock(); + private final FfiOutputStream sendStream; + private final String libraryPath; + + private volatile OutboundCallback callbackRef; + + /** + * Creates an FFI runtime host using the resolved bundled native library. + * + * @throws IOException + * if the runtime library cannot be resolved + */ + public FfiRuntimeHost() throws IOException { + this(resolveLibraryPath(), null, new QueueInputStream()); + } + + FfiRuntimeHost(NativeBinding nativeBinding, String libraryPath) { + this(nativeBinding, libraryPath, new QueueInputStream()); + } + + FfiRuntimeHost(NativeBinding nativeBinding, String libraryPath, QueueInputStream receiveStream) { + this.nativeBinding = Objects.requireNonNull(nativeBinding, "nativeBinding must not be null"); + this.receiveStream = Objects.requireNonNull(receiveStream, "receiveStream must not be null"); + this.sendStream = new FfiOutputStream(this.nativeBinding, this.connectionId, this.closing, this.operationLock); + this.libraryPath = libraryPath; + Native.setCallbackExceptionHandler((Callback callback, Throwable throwable) -> LOG.log(Level.WARNING, + "Unhandled exception in FFI callback", throwable)); + } + + private FfiRuntimeHost(Path libraryPath, NativeBinding nativeBinding, QueueInputStream receiveStream) { + this(nativeBinding == null ? new JnaNativeBinding(libraryPath) : nativeBinding, libraryPath.toString(), + receiveStream); + } + + private static Path resolveLibraryPath() throws IOException { + return NativeRuntimeLoader.resolve(); + } + + /** + * Starts the in-process runtime and opens a connection. + * + * @param entrypointPath + * runtime entrypoint path passed in {@code argv_json} + * @param options + * client options used to construct {@code argv_json} and + * {@code env_json} + */ + public void start(String entrypointPath, CopilotClientOptions options) { + Objects.requireNonNull(entrypointPath, "entrypointPath must not be null"); + Objects.requireNonNull(options, "options must not be null"); + if (disposed.get()) { + throw new IllegalStateException("FfiRuntimeHost is already closed."); + } + if (serverId.get() != 0 || connectionId.get() != 0) { + throw new IllegalStateException("FfiRuntimeHost has already been started."); + } + + byte[] argvJson = buildArgvJson(entrypointPath, options); + byte[] envJson = buildEnvJson(options); + int hostHandle = runHostStartOnBlockingThread(argvJson, envJson); + if (hostHandle == 0) { + String lib = libraryPath != null ? libraryPath : ""; + throw new IllegalStateException( + "copilot_runtime_host_start failed (library '" + lib + "', entrypoint '" + entrypointPath + "')."); + } + + // Hold operationLock while publishing handles to serialize with close(). + // Recheck disposed in case close() ran while hostStart was blocking. + operationLock.lock(); + try { + if (disposed.get()) { + try { + nativeBinding.hostShutdown(hostHandle); + } catch (Throwable ignored) { + // Best effort + } + throw new IllegalStateException("FfiRuntimeHost was closed during startup."); + } + serverId.set(hostHandle); + + OutboundCallback callback = createOutboundCallback(); + callbackRef = callback; + int connHandle = nativeBinding.connectionOpen(hostHandle, callback, Pointer.NULL, null, 0, null, 0, null, + 0); + if (connHandle == 0) { + try { + nativeBinding.hostShutdown(hostHandle); + } catch (Throwable ignored) { + // Best effort + } + serverId.set(0); + callbackRef = null; + throw new IllegalStateException("copilot_runtime_connection_open failed."); + } + connectionId.set(connHandle); + LOG.fine(() -> "Started FFI runtime host. Library=" + libraryPath + ", serverId=" + hostHandle + + ", connectionId=" + connHandle); + } finally { + operationLock.unlock(); + } + } + + public InputStream getReceiveStream() { + return receiveStream; + } + + public OutputStream getSendStream() { + return sendStream; + } + + @Override + public void close() { + if (!disposed.compareAndSet(false, true)) { + return; + } + + closing.set(true); + + operationLock.lock(); + try { + int connHandle = connectionId.getAndSet(0); + if (connHandle != 0) { + try { + nativeBinding.connectionClose(connHandle); + } catch (Throwable t) { + LOG.log(Level.FINE, "Failed to close FFI connection", t); + } + } + } finally { + operationLock.unlock(); + } + + drainActiveCallbacks(); + + int hostHandle = serverId.getAndSet(0); + if (hostHandle != 0) { + try { + nativeBinding.hostShutdown(hostHandle); + } catch (Throwable t) { + LOG.log(Level.FINE, "Failed to shut down FFI host", t); + } + } + + try { + receiveStream.close(); + } catch (Throwable ignored) { + // never throw from close + } + + callbackRef = null; + } + + private void drainActiveCallbacks() { + while (activeCallbacks.get() > 0) { + synchronized (callbackDrainMonitor) { + if (activeCallbacks.get() == 0) { + return; + } + try { + callbackDrainMonitor.wait(10L); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return; + } + } + } + } + + private OutboundCallback createOutboundCallback() { + return (userData, data, len) -> { + if (closing.get()) { + return; + } + activeCallbacks.incrementAndGet(); + try { + if (closing.get() || data == null || len <= 0) { + return; + } + byte[] bytes = data.getByteArray(0, len); + if (!closing.get()) { + receiveStream.enqueue(bytes); + } + } catch (Throwable t) { + LOG.log(Level.WARNING, "Exception in FFI outbound callback", t); + } finally { + if (activeCallbacks.decrementAndGet() == 0) { + synchronized (callbackDrainMonitor) { + callbackDrainMonitor.notifyAll(); + } + } + } + }; + } + + private int runHostStartOnBlockingThread(byte[] argvJson, byte[] envJson) { + ReaderThreadFactory readerThreadFactory = new ReaderThreadFactory(); + ExecutorService executor = Executors + .newSingleThreadExecutor(runnable -> readerThreadFactory.create(runnable, "copilot-ffi-host-start")); + try { + Future future = executor.submit(() -> nativeBinding.hostStart(argvJson, argvJson.length, envJson, + envJson == null ? 0 : envJson.length)); + return future.get(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new IllegalStateException("Interrupted while starting in-process runtime host.", e); + } catch (ExecutionException e) { + Throwable cause = e.getCause(); + if (cause instanceof RuntimeException runtimeException) { + throw runtimeException; + } + throw new IllegalStateException("Failed to start in-process runtime host.", cause); + } finally { + executor.shutdownNow(); + try { + executor.awaitTermination(5, TimeUnit.SECONDS); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + } + + private static byte[] buildArgvJson(String entrypointPath, CopilotClientOptions options) { + List argv = new ArrayList<>(); + if (entrypointPath.toLowerCase().endsWith(".js")) { + argv.add("node"); + } + argv.add(entrypointPath); + argv.add("--embedded-host"); + argv.add("--no-auto-update"); + + String logLevel = options.getLogLevel(); + if (logLevel != null && !logLevel.isBlank()) { + argv.add("--log-level"); + argv.add(logLevel); + } + + String gitHubToken = options.getGitHubToken(); + if (gitHubToken != null && !gitHubToken.isEmpty()) { + argv.add("--auth-token-env"); + argv.add("COPILOT_SDK_AUTH_TOKEN"); + } + + boolean useLoggedInUser = options.getUseLoggedInUser().orElse(gitHubToken == null || gitHubToken.isEmpty()); + if (!useLoggedInUser) { + argv.add("--no-auto-login"); + } + + if (options.getSessionIdleTimeoutSeconds().isPresent() + && options.getSessionIdleTimeoutSeconds().getAsInt() > 0) { + argv.add("--session-idle-timeout"); + argv.add(String.valueOf(options.getSessionIdleTimeoutSeconds().getAsInt())); + } + + if (options.isRemote()) { + argv.add("--remote"); + } + + String[] cliArgs = options.getCliArgs(); + if (cliArgs != null && cliArgs.length > 0) { + for (String arg : cliArgs) { + if (arg != null && !arg.isBlank()) { + argv.add(arg); + } + } + } + + return jsonBytes(argv); + } + + private static byte[] buildEnvJson(CopilotClientOptions options) { + Map env = new LinkedHashMap<>(); + + String token = options.getGitHubToken(); + if (token != null && !token.isEmpty()) { + env.put("COPILOT_SDK_AUTH_TOKEN", token); + } + String copilotHome = options.getCopilotHome(); + if (copilotHome != null && !copilotHome.isEmpty()) { + env.put("COPILOT_HOME", copilotHome); + } + if (options.getMode() == CopilotClientMode.EMPTY) { + env.put("COPILOT_DISABLE_KEYTAR", "1"); + } + + if (env.isEmpty()) { + return null; + } + return jsonBytes(env); + } + + private static byte[] jsonBytes(Object value) { + try { + return MAPPER.writeValueAsString(value).getBytes(StandardCharsets.UTF_8); + } catch (JsonProcessingException e) { + throw new IllegalStateException("Failed to serialize FFI JSON parameter.", e); + } + } +} diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/JnaNativeBinding.java b/java/sdk/src/main/java/com/github/copilot/ffi/JnaNativeBinding.java new file mode 100644 index 0000000000..528382c20c --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/ffi/JnaNativeBinding.java @@ -0,0 +1,253 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import com.sun.jna.Library; +import com.sun.jna.Native; +import com.sun.jna.Pointer; + +import java.nio.file.Path; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; + +/** + * JNA-backed implementation of {@link NativeBinding}. + * + *

+ * Loads the {@code runtime.node} native library by absolute path and delegates + * each {@link NativeBinding} method to the corresponding + * {@code copilot_runtime_*} C ABI export. + * + *

Library-never-unloads pattern

+ *

+ * The loaded JNA library handle is held in a {@code static} field and is never + * released. Native worker threads spawned by the runtime outlive any individual + * {@code FfiRuntimeHost} instance; unloading the library while those threads + * are active would cause a crash. This mirrors the Rust runtime's own + * {@code OnceLock>>} pattern. + * + *

Duplicate-load guard

+ *

+ * Loading a library from a different absolute path in the same JVM + * process is rejected with {@link IllegalStateException}. Loading from the + * same path more than once is silently accepted. + * + *

Active-callback tracking

+ *

+ * The {@link #activeCallbacks} counter is incremented when the native runtime + * enters the outbound callback and decremented when the callback returns. + * Callers (e.g. {@code FfiRuntimeHost}) must drain this counter to zero before + * calling {@link #connectionClose} or {@link #hostShutdown}. + * + *

GraalVM Native Image

+ *

+ * JNA callback upcalls are not supported under GraalVM Native Image. InProcess + * transport is not available in native-image executables; use subprocess + * transport instead. + */ +final class JnaNativeBinding implements NativeBinding { + + private static final Logger LOG = Logger.getLogger(JnaNativeBinding.class.getName()); + + /** + * JNA inner interface mapping the five {@code copilot_runtime_*} C ABI exports. + */ + interface CopilotRuntimeLibrary extends Library { + /** Corresponds to {@code copilot_runtime_host_start}. */ + int copilot_runtime_host_start(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen); + + /** + * Corresponds to {@code copilot_runtime_host_shutdown}. + * + *

+ * Returns {@code byte} (not Java {@code boolean}) because the Rust ABI exports + * a one-byte {@code bool}. JNA maps Java {@code boolean} as a 32-bit C + * {@code int}, which would read three extra bytes. + */ + byte copilot_runtime_host_shutdown(int serverId); + + /** Corresponds to {@code copilot_runtime_connection_open}. */ + int copilot_runtime_connection_open(int serverId, OutboundCallback callback, Pointer userData, byte[] extSource, + int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, int connTokenLen); + + /** + * Corresponds to {@code copilot_runtime_connection_write}. + * + * @see #copilot_runtime_host_shutdown for why this returns {@code byte} + */ + byte copilot_runtime_connection_write(int connectionId, byte[] data, int dataLen); + + /** + * Corresponds to {@code copilot_runtime_connection_close}. + * + * @see #copilot_runtime_host_shutdown for why this returns {@code byte} + */ + byte copilot_runtime_connection_close(int connectionId); + } + + // ------------------------------------------------------------------------- + // Process-wide singleton — never unloaded + // ------------------------------------------------------------------------- + + private static final Object LOAD_LOCK = new Object(); + + /** Absolute path of the library that was first loaded into this JVM process. */ + private static volatile Path loadedPath; + + /** The loaded JNA library interface. Never released after first set. */ + private static volatile CopilotRuntimeLibrary loadedLib; + + // ------------------------------------------------------------------------- + // Instance state + // ------------------------------------------------------------------------- + + /** + * The library interface used by this instance for all delegated calls. + * + *

+ * For the production path ({@link #JnaNativeBinding(Path)}), this is always the + * same object as {@link #loadedLib} (the static singleton). For the test path + * ({@link #JnaNativeBinding(CopilotRuntimeLibrary)}), this may be a stub or + * mock without modifying the static singleton. + */ + private final CopilotRuntimeLibrary lib; + + /** + * Count of callbacks currently executing on native threads. Must reach zero + * before {@link #connectionClose} or {@link #hostShutdown} is called. + */ + final AtomicInteger activeCallbacks = new AtomicInteger(0); + + /** + * Tracked callback wrappers keyed by connection handle. Prevents GC of the JNA + * callback function pointer while native code still holds it. + *

+ * Note: values are intentionally never read — the sole purpose of this map is + * to keep the callbacks reachable (strong GC roots) while native code holds the + * corresponding function pointers. Entries are removed on connection close. + */ + @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") // GC-root — read access is not needed + private final Map trackedCallbacks = new ConcurrentHashMap<>(); + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Loads (or re-uses) the native library at the given absolute path. + * + * @param libraryPath + * absolute path to the {@code runtime.node} native library + * @throws IllegalStateException + * if a different library path has already been loaded in + * this JVM process + */ + JnaNativeBinding(Path libraryPath) { + Path absPath = libraryPath.toAbsolutePath().normalize(); + synchronized (LOAD_LOCK) { + if (loadedLib == null) { + LOG.fine(() -> "Loading native library from: " + absPath); + try { + loadedLib = Native.load(absPath.toString(), CopilotRuntimeLibrary.class); + } catch (UnsatisfiedLinkError e) { + throw new IllegalStateException("Failed to load native library from '" + absPath + "'", e); + } + loadedPath = absPath; + LOG.fine(() -> "Native library loaded: " + absPath); + } else if (!absPath.equals(loadedPath)) { + throw new IllegalStateException("An in-process FFI runtime library is already loaded from '" + + loadedPath + "'; loading a different library from '" + absPath + + "' in the same process is not supported."); + } + } + this.lib = loadedLib; + } + + /** + * Testing constructor — accepts a pre-built {@link CopilotRuntimeLibrary} + * directly, bypassing disk I/O and the static singleton guard. + * + *

+ * This constructor is package-private and intended solely for unit tests. + * + * @param library + * a {@link CopilotRuntimeLibrary} stub or mock for testing + */ + JnaNativeBinding(CopilotRuntimeLibrary library) { + // Testing seam — skip the static singleton guard. + this.lib = library; + } + + // ------------------------------------------------------------------------- + // NativeBinding delegation + // ------------------------------------------------------------------------- + + @Override + public int hostStart(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen) { + return lib.copilot_runtime_host_start(argvJson, argvJsonLen, envJson, envJsonLen); + } + + @Override + public boolean hostShutdown(int serverId) { + return lib.copilot_runtime_host_shutdown(serverId) != 0; + } + + @Override + public int connectionOpen(int serverId, OutboundCallback callback, Pointer userData, byte[] extSource, + int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, int connTokenLen) { + // Wrap the caller's callback to maintain active-callback tracking. + OutboundCallback tracked = (ud, data, len) -> { + activeCallbacks.incrementAndGet(); + try { + callback.invoke(ud, data, len); + } finally { + activeCallbacks.decrementAndGet(); + } + }; + int connectionId = lib.copilot_runtime_connection_open(serverId, tracked, userData, extSource, extSourceLen, + extName, extNameLen, connToken, connTokenLen); + if (connectionId != 0) { + // Hold a strong reference to prevent GC of the JNA function pointer. + trackedCallbacks.put(connectionId, tracked); + } + return connectionId; + } + + @Override + public boolean connectionWrite(int connectionId, byte[] data, int dataLen) { + return lib.copilot_runtime_connection_write(connectionId, data, dataLen) != 0; + } + + @Override + public boolean connectionClose(int connectionId) { + try { + return lib.copilot_runtime_connection_close(connectionId) != 0; + } finally { + trackedCallbacks.remove(connectionId); + } + } + + // ------------------------------------------------------------------------- + // Testing support + // ------------------------------------------------------------------------- + + /** + * Resets the process-wide static state for unit tests. + * + *

+ * Must only be called from test code. Resets + * {@link #loadedPath} and {@link #loadedLib} so that a subsequent + * {@link #JnaNativeBinding(Path)} call can load a different library. In + * production, the library is never unloaded. + */ + static void resetForTesting() { + synchronized (LOAD_LOCK) { + loadedPath = null; + loadedLib = null; + } + } +} diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/NativeBinding.java b/java/sdk/src/main/java/com/github/copilot/ffi/NativeBinding.java new file mode 100644 index 0000000000..3aa8ca9e4d --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/ffi/NativeBinding.java @@ -0,0 +1,131 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import com.sun.jna.Pointer; + +/** + * Internal abstraction over the Copilot runtime C ABI. + * + *

+ * Defines the five {@code extern "C"} entry points exposed by the native + * {@code runtime.node} library. The JNA-backed implementation + * ({@link JnaNativeBinding}) delegates to these through JNA. A future FFM + * implementation may be substituted via the multi-release JAR mechanism without + * changing callers. + * + *

+ * All classes in {@code com.github.copilot.ffi} are internal; consumers must + * not reference them directly. + * + *

C ABI entry points

+ *
    + *
  • {@code copilot_runtime_host_start} — start the runtime host
  • + *
  • {@code copilot_runtime_host_shutdown} — shut down the runtime host
  • + *
  • {@code copilot_runtime_connection_open} — open a bidirectional + * connection
  • + *
  • {@code copilot_runtime_connection_write} — write a JSON-RPC frame to the + * runtime
  • + *
  • {@code copilot_runtime_connection_close} — close a connection
  • + *
+ * + *

Wire format

+ *

+ * All frames use LSP {@code Content-Length} header framing, identical to the + * stdio transport. No special encoding or decoding is needed at the FFI + * boundary. + */ +interface NativeBinding { + + /** + * Starts the runtime host. + * + *

+ * Blocks for up to ~30 s while the worker boots and connects back. Must not be + * called on an async/reactive executor thread. + * + * @param argvJson + * UTF-8 JSON array of strings: the entrypoint and required flags + * @param argvJsonLen + * byte length of {@code argvJson} + * @param envJson + * UTF-8 JSON object of environment overrides, or {@code null} when + * empty + * @param envJsonLen + * byte length of {@code envJson}, or {@code 0} when {@code envJson} + * is null + * @return server handle ({@code 0} on failure) + */ + int hostStart(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen); + + /** + * Shuts down the runtime host. + * + * @param serverId + * non-zero server handle returned by {@link #hostStart} + * @return {@code true} on success + */ + boolean hostShutdown(int serverId); + + /** + * Opens a bidirectional connection and registers the outbound data callback. + * + *

+ * The {@code extSource}, {@code extName}, and {@code connToken} parameters are + * reserved extension points. All current SDK implementations pass + * {@code null}/0 for all three. + * + * @param serverId + * non-zero server handle returned by {@link #hostStart} + * @param callback + * JNA callback invoked by the runtime on native threads when + * outbound data is available; must be held as a strong reference by + * the caller + * @param userData + * opaque cookie passed back to {@code callback} unchanged; pass + * {@link Pointer#NULL} + * @param extSource + * reserved; pass {@code null} + * @param extSourceLen + * byte length of {@code extSource}; pass {@code 0} + * @param extName + * reserved; pass {@code null} + * @param extNameLen + * byte length of {@code extName}; pass {@code 0} + * @param connToken + * reserved; pass {@code null} + * @param connTokenLen + * byte length of {@code connToken}; pass {@code 0} + * @return connection handle ({@code 0} on failure) + */ + int connectionOpen(int serverId, OutboundCallback callback, Pointer userData, byte[] extSource, int extSourceLen, + byte[] extName, int extNameLen, byte[] connToken, int connTokenLen); + + /** + * Writes a JSON-RPC frame to the runtime. + * + *

+ * The native side copies the buffer synchronously before returning; the byte + * array does not need to survive past this call. + * + * @param connectionId + * non-zero connection handle returned by {@link #connectionOpen} + * @param data + * frame bytes + * @param dataLen + * byte length of {@code data} + * @return {@code true} on success + */ + boolean connectionWrite(int connectionId, byte[] data, int dataLen); + + /** + * Closes a connection. + * + * @param connectionId + * non-zero connection handle returned by {@link #connectionOpen} + * @return {@code true} on success + */ + boolean connectionClose(int connectionId); +} diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/NativeRuntimeLoader.java b/java/sdk/src/main/java/com/github/copilot/ffi/NativeRuntimeLoader.java new file mode 100644 index 0000000000..c772e0260e --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/ffi/NativeRuntimeLoader.java @@ -0,0 +1,466 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.nio.channels.FileChannel; +import java.nio.file.AtomicMoveNotSupportedException; +import java.nio.file.FileAlreadyExistsException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.nio.file.StandardOpenOption; +import java.util.Properties; + +/** + * Locates the {@code runtime.node} native binary, extracts it to a versioned + * cache directory, and returns the filesystem path for JNA to load. + * + *

+ * Resolution order: + *

    + *
  1. {@code COPILOT_CLI_PATH} — checks for + * {@code runtime.node} alongside the configured CLI before any classpath or + * platform work.
  2. + *
  3. Classpath resource + * {@code native//runtime.node} — extracted atomically to + * {@code ~/.copilot/runtime-cache///runtime.node}.
  4. + *
  5. {@code runtime.node} alongside the bundled {@code copilot} + * executable.
  6. + *
+ */ +public final class NativeRuntimeLoader { + + static final String RUNTIME_FILENAME = "runtime.node"; + static final String CLI_FILENAME = "copilot"; + static final String CLI_FILENAME_WINDOWS = "copilot.exe"; + /** Environment variable that overrides where the runtime is loaded from. */ + public static final String COPILOT_CLI_PATH_ENV = "COPILOT_CLI_PATH"; + static final String VERSION_RESOURCE = "copilot-runtime.properties"; + + /** + * Abstraction for the atomic publish step, enabling deterministic failure + * injection in tests while preserving {@link StandardCopyOption#ATOMIC_MOVE} in + * production. + */ + @FunctionalInterface + interface AtomicPublisher { + /** + * Atomically publishes {@code temp} to {@code cached}. + * + * @param temp + * fully-written temporary file in the same directory as + * {@code cached} + * @param cached + * intended final location + * @throws IOException + * if the move fails + */ + void publish(Path temp, Path cached) throws IOException; + } + + /** + * Production publisher: {@link Files#move} with + * {@link StandardCopyOption#ATOMIC_MOVE}. + */ + static final AtomicPublisher DEFAULT_PUBLISHER = (temp, cached) -> { + try { + Files.move(temp, cached, StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING); + } catch (AtomicMoveNotSupportedException ex) { + throw new IllegalStateException("Filesystem does not support atomic moves; cannot safely publish " + + RUNTIME_FILENAME + " to " + cached, ex); + } catch (FileAlreadyExistsException ex) { + // Another process won the race — accept the winner if it is a valid file. + try { + if (isValidCachedFile(cached)) { + return; + } + } catch (IOException ignored) { + // fall through to the error below + } + throw new IllegalStateException( + "Concurrent extraction race: target already exists but is not a valid file: " + cached, ex); + } + }; + + private NativeRuntimeLoader() { + } + + /** + * Resolves the filesystem path to the {@code runtime.node} binary. + * + *

+ * Follows the three-step resolution order documented on this class. The + * returned path is guaranteed to refer to a regular, non-empty file at the time + * of return. + * + * @return absolute path to the {@code runtime.node} binary + * @throws IOException + * if the binary cannot be located or extracted + * @throws IllegalStateException + * if required resources are missing or extraction fails + */ + public static Path resolve() throws IOException { + String cliPathEnv = System.getenv(COPILOT_CLI_PATH_ENV); + Path cliOverride = resolveFromCliPath(cliPathEnv); + if (cliOverride != null) { + return cliOverride; + } + + ClassLoader loader = NativeRuntimeLoader.class.getClassLoader(); + String classifier = PlatformDetector.detectClassifier(); + String version = readVersion(loader); + Path cacheBase = defaultCacheBase(); + return resolve(null, findRuntimeOnPath(), cacheBase, loader, classifier, version); + } + + /** + * Resolves the copilot CLI executable from the same location as the bundled + * {@code runtime.node}. The CLI is used as {@code argv[0]} in + * {@code copilot_runtime_host_start} — the Rust runtime spawns it as a child + * process. + * + *

+ * This method calls {@link #resolve()} to locate {@code runtime.node}, then + * looks for the {@code copilot} executable in the same directory. Both + * artifacts are extracted from the classifier JAR together. + * + * @return absolute path to the {@code copilot} CLI executable + * @throws IOException + * if the CLI executable cannot be located + */ + public static Path resolveEntrypoint() throws IOException { + String configuredCli = System.getenv(COPILOT_CLI_PATH_ENV); + return resolveEntrypoint(configuredCli, resolve()); + } + + static Path resolveEntrypoint(String configuredCli, Path runtimePath) throws IOException { + if (configuredCli != null && !configuredCli.isBlank()) { + Path configuredPath = Path.of(configuredCli).toAbsolutePath().normalize(); + if (resolveFromCliPath(configuredCli) != null && Files.isRegularFile(configuredPath) + && Files.size(configuredPath) > 0) { + return configuredPath; + } + } + + Path parent = runtimePath.getParent(); + String cliName = isWindows() ? CLI_FILENAME_WINDOWS : CLI_FILENAME; + Path cliPath = parent.resolve(cliName); + if (Files.isRegularFile(cliPath) && Files.size(cliPath) > 0) { + return cliPath; + } + throw new IOException("Copilot CLI executable not found at " + cliPath + + " — the classifier JAR must contain both runtime.node and the copilot binary"); + } + + /** + * Reads the SDK version from the filtered {@code copilot-runtime.properties} + * resource. + * + * @return the version string + * @throws IOException + * if the resource cannot be read + * @throws IllegalStateException + * if the resource is missing or the version property is blank + */ + static String readVersion(ClassLoader loader) throws IOException { + URL resource = loader.getResource(VERSION_RESOURCE); + if (resource == null) { + throw new IllegalStateException("Missing version resource: " + VERSION_RESOURCE + + " — ensure Maven resource filtering has run (mvn process-resources)"); + } + Properties props = new Properties(); + try (InputStream in = resource.openStream()) { + props.load(in); + } + String version = props.getProperty("version"); + if (version == null || version.isBlank()) { + throw new IllegalStateException("Blank or missing 'version' property in " + VERSION_RESOURCE + + " — check Maven resource filtering configuration"); + } + return version; + } + + /** + * Resolves the runtime binary path using the given parameters. Package-private + * to allow injection of test doubles in unit tests. + */ + static Path resolve(String cliPathEnv, Path cacheBase, ClassLoader loader, String classifier, String version) + throws IOException { + return resolve(cliPathEnv, cacheBase, loader, classifier, version, null, DEFAULT_PUBLISHER); + } + + static Path resolve(String cliPathEnv, String bundledCliPath, Path cacheBase, ClassLoader loader, String classifier, + String version) throws IOException { + Path bundledCliDir = bundledCliPath == null ? null : Path.of(bundledCliPath).toAbsolutePath().getParent(); + return resolve(cliPathEnv, cacheBase, loader, classifier, version, bundledCliDir, DEFAULT_PUBLISHER); + } + + static Path resolve(String cliPathEnv, Path cacheBase, ClassLoader loader, String classifier, String version, + Path bundledCliDir) throws IOException { + return resolve(cliPathEnv, cacheBase, loader, classifier, version, bundledCliDir, DEFAULT_PUBLISHER); + } + + static Path resolve(String cliPathEnv, Path cacheBase, ClassLoader loader, String classifier, String version, + Path bundledCliDir, AtomicPublisher publisher) throws IOException { + Path cliOverride = resolveFromCliPath(cliPathEnv); + if (cliOverride != null) { + return cliOverride; + } + + return resolveFromClasspathOrBundledCli(cacheBase, loader, classifier, version, bundledCliDir, publisher); + } + + /** + * Checks for {@code runtime.node} alongside the configured CLI. + * + *

+ * Checks, in order, the flat bundled layout ({@code runtime.node} directly next + * to the CLI) and the npm package layout + * ({@code prebuilds//runtime.node} next to the CLI), matching the + * two layouts the {@code @github/copilot-} packages may ship. + */ + static Path resolveFromCliPath(String cliPathStr) throws IOException { + if (cliPathStr == null || cliPathStr.isBlank()) { + return null; + } + Path cliPath = Path.of(cliPathStr).toAbsolutePath().normalize(); + Path parent = cliPath.getParent(); + + Path flat = parent.resolve(RUNTIME_FILENAME); + if (Files.isRegularFile(flat) && Files.size(flat) > 0) { + return flat; + } + + Path prebuilt = parent.resolve("prebuilds").resolve(PlatformDetector.detectClassifier()) + .resolve(RUNTIME_FILENAME); + if (Files.isRegularFile(prebuilt) && Files.size(prebuilt) > 0) { + return prebuilt; + } + + return null; + } + + /** + * Extracts the classpath resource {@code native//runtime.node} to + * the versioned cache directory, using an atomic publish sequence to prevent + * readers from observing a partially-written file. Uses + * {@link #DEFAULT_PUBLISHER}. + * + * @param cacheBase + * root cache directory (e.g. {@code ~/.copilot/runtime-cache}) + * @param loader + * class loader used to open the classpath resource + * @param classifier + * platform classifier (e.g. {@code linux-x64}) + * @param version + * SDK version used as the cache key + * @return path to the extracted {@code runtime.node} binary + * @throws IOException + * if I/O or the atomic rename fails + * @throws IllegalStateException + * if the classpath resource is missing or empty, or if the + * filesystem does not support atomic moves + */ + static Path extractToCache(Path cacheBase, ClassLoader loader, String classifier, String version) + throws IOException { + return extractToCache(cacheBase, loader, classifier, version, DEFAULT_PUBLISHER); + } + + /** + * Extracts the classpath resource to the versioned cache directory with an + * injectable publisher. Package-private for unit tests. + * + * @param cacheBase + * root cache directory + * @param loader + * class loader used to open the classpath resource + * @param classifier + * platform classifier + * @param version + * SDK version used as the cache key + * @param publisher + * atomic publish implementation + * @return path to the extracted {@code runtime.node} binary + * @throws IOException + * if I/O or the atomic rename fails + * @throws IllegalStateException + * if the classpath resource is missing or empty + */ + static Path extractToCache(Path cacheBase, ClassLoader loader, String classifier, String version, + AtomicPublisher publisher) throws IOException { + String resourcePath = "native/" + classifier + "/" + RUNTIME_FILENAME; + Path cacheDir = cacheBase.resolve(version).resolve(classifier); + Path cached = cacheDir.resolve(RUNTIME_FILENAME); + + // Step 1 — fast path: return an existing valid cache entry. + if (isValidCachedFile(cached)) { + extractCliToCache(cacheDir, loader, classifier, publisher); + return cached; + } + + // Step 2 — locate the classpath resource before creating any files. + URL resource = loader.getResource(resourcePath); + if (resource == null) { + throw new FileNotFoundException("Native runtime not found on classpath: " + resourcePath + + " — add the matching classifier JAR to the classpath"); + } + + // Step 3 — ensure the cache directory exists. + Files.createDirectories(cacheDir); + + // Step 4 — write to a unique sibling temp file, then publish atomically. + Path temp = Files.createTempFile(cacheDir, "runtime-tmp-", ".node"); + try { + copyResourceToTemp(resource, resourcePath, temp); + publisher.publish(temp, cached); + } finally { + tryDelete(temp); + } + + // Step 5 — also extract the copilot CLI executable alongside runtime.node. + extractCliToCache(cacheDir, loader, classifier, publisher); + + return cached; + } + + /** + * Extracts the copilot CLI executable from the classpath to the same cache + * directory as {@code runtime.node}. Idempotent — skips extraction if already + * present and valid. + */ + static void extractCliToCache(Path cacheDir, ClassLoader loader, String classifier, AtomicPublisher publisher) + throws IOException { + String cliName = isWindows() ? CLI_FILENAME_WINDOWS : CLI_FILENAME; + String cliResourcePath = "native/" + classifier + "/" + cliName; + Path cachedCli = cacheDir.resolve(cliName); + + if (isValidCachedFile(cachedCli)) { + return; + } + + URL cliResource = loader.getResource(cliResourcePath); + if (cliResource == null) { + // CLI not on classpath — this is allowed for the COPILOT_CLI_PATH fallback + // path but will fail later in resolveEntrypoint() if InProcess is selected. + return; + } + + Files.createDirectories(cacheDir); + Path temp = Files.createTempFile(cacheDir, "cli-tmp-", ""); + try { + copyResourceToTemp(cliResource, cliResourcePath, temp); + publisher.publish(temp, cachedCli); + } finally { + tryDelete(temp); + } + + // Set executable permission on non-Windows systems. + if (!isWindows()) { + try { + cachedCli.toFile().setExecutable(true, false); + } catch (SecurityException ignored) { + // Best-effort; the file may already be executable from the temp copy. + } + } + } + + /** + * Tries source 2 (classpath extraction) first and falls back to source 3 + * (bundled-CLI sibling) only when the classpath resource is absent. + */ + private static Path resolveFromClasspathOrBundledCli(Path cacheBase, ClassLoader loader, String classifier, + String version, Path bundledCliDir, AtomicPublisher publisher) throws IOException { + // Source 2: classpath resource. + try { + return extractToCache(cacheBase, loader, classifier, version, publisher); + } catch (FileNotFoundException ex) { + // Source 3: runtime.node alongside the bundled CLI binary. + if (bundledCliDir != null) { + Path candidate = bundledCliDir.resolve(RUNTIME_FILENAME); + try { + if (isValidCachedFile(candidate)) { + return candidate; + } + } catch (IOException ignored) { + // fall through and rethrow the original classpath error + } + } + throw ex; + } + } + + private static boolean isValidCachedFile(Path path) throws IOException { + if (!Files.isRegularFile(path)) { + return false; + } + return Files.size(path) > 0; + } + + private static void copyResourceToTemp(URL resource, String resourcePath, Path temp) throws IOException { + try (InputStream in = resource.openStream()) { + long bytesWritten = Files.copy(in, temp, StandardCopyOption.REPLACE_EXISTING); + if (bytesWritten == 0) { + throw new IllegalStateException("Classpath resource is empty: " + resourcePath); + } + } + // Flush OS buffers to durable storage before the atomic rename. + try (FileChannel channel = FileChannel.open(temp, StandardOpenOption.WRITE)) { + channel.force(true); + } + } + + /** + * Finds the runtime executable on the {@code PATH}. + * + * @return the absolute path, or {@code null} if none was found + */ + public static String findRuntimeOnPath() { + String pathValue = System.getenv("PATH"); + if (pathValue == null || pathValue.isBlank()) { + return null; + } + + String[] executableNames = isWindows() + ? new String[]{"copilot.exe", "copilot.cmd", "copilot.bat", "copilot"} + : new String[]{"copilot"}; + for (String directory : pathValue.split(java.io.File.pathSeparator)) { + if (directory.isBlank()) { + continue; + } + for (String executableName : executableNames) { + Path candidate = Path.of(directory, executableName); + if (Files.isRegularFile(candidate)) { + try { + return candidate.toRealPath().toString(); + } catch (IOException ignored) { + return candidate.toAbsolutePath().normalize().toString(); + } + } + } + } + return null; + } + + private static boolean isWindows() { + return System.getProperty("os.name", "").toLowerCase(java.util.Locale.ROOT).contains("win"); + } + + private static void tryDelete(Path path) { + try { + Files.deleteIfExists(path); + } catch (IOException ignored) { + // Best-effort cleanup; an orphaned temp file in the cache directory is benign. + } + } + + private static Path defaultCacheBase() { + return Path.of(System.getProperty("user.home"), ".copilot", "runtime-cache"); + } + +} diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/OutboundCallback.java b/java/sdk/src/main/java/com/github/copilot/ffi/OutboundCallback.java new file mode 100644 index 0000000000..6f5c319224 --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/ffi/OutboundCallback.java @@ -0,0 +1,46 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import com.sun.jna.Callback; +import com.sun.jna.Pointer; + +/** + * JNA callback interface for the runtime-to-Java outbound data path. + * + *

+ * The native runtime invokes this callback on a native thread when data is + * ready to be delivered to the Java side. JNA automatically attaches the native + * thread to the JVM before dispatching the callback. + * + *

+ * Buffer lifetime: The {@code data} pointer is only valid for + * the duration of the callback invocation. Implementations must copy the bytes + * out (e.g. {@code data.getByteArray(0, len)}) before returning. + * + *

+ * GC protection: Instances must be held as strong-reference + * fields for as long as native code may invoke the callback. If the instance is + * garbage-collected, the function pointer becomes dangling and the JVM will + * crash. + */ +@FunctionalInterface +interface OutboundCallback extends Callback { + + /** + * Invoked by the native runtime when outbound data is available. + * + * @param userData + * opaque cookie passed through unchanged from + * {@code copilot_runtime_connection_open}; always + * {@code Pointer.NULL} in this SDK + * @param data + * pointer to the outbound byte buffer; valid only for the duration + * of this invocation + * @param len + * byte length of the buffer pointed to by {@code data} + */ + void invoke(Pointer userData, Pointer data, int len); +} diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/PlatformDetector.java b/java/sdk/src/main/java/com/github/copilot/ffi/PlatformDetector.java new file mode 100644 index 0000000000..466cf794bc --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/ffi/PlatformDetector.java @@ -0,0 +1,303 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +/** + * Detects the current platform and resolves the runtime classifier. + */ +public final class PlatformDetector { + private static final int ELF_HEADER_PROBE_BYTES = 2048; + private static final int ELF_MAGIC_0 = 0x7F; + private static final int ELF_MAGIC_1 = 'E'; + private static final int ELF_MAGIC_2 = 'L'; + private static final int ELF_MAGIC_3 = 'F'; + private static final int ELF_CLASS_32 = 1; + private static final int ELF_CLASS_64 = 2; + private static final int ELF_DATA_LITTLE_ENDIAN = 1; + private static final int ELF_DATA_BIG_ENDIAN = 2; + private static final int ELF32_PROGRAM_HEADER_SIZE = 32; + private static final int ELF64_PROGRAM_HEADER_SIZE = 56; + private static final int PT_INTERP = 3; + + private static final Set SUPPORTED_CLASSIFIERS = Set.of("linux-x64", "linux-arm64", "linuxmusl-x64", + "linuxmusl-arm64", "darwin-x64", "darwin-arm64", "win32-x64", "win32-arm64"); + + private static final Map CLASSIFIER_BY_KEY = Map.ofEntries( + Map.entry(new ClassifierKey("linux", "x64", LinuxLibc.GLIBC), "linux-x64"), + Map.entry(new ClassifierKey("linux", "arm64", LinuxLibc.GLIBC), "linux-arm64"), + Map.entry(new ClassifierKey("linux", "x64", LinuxLibc.MUSL), "linuxmusl-x64"), + Map.entry(new ClassifierKey("linux", "arm64", LinuxLibc.MUSL), "linuxmusl-arm64"), + Map.entry(new ClassifierKey("linux", "x64", LinuxLibc.UNKNOWN), "linux-x64"), + Map.entry(new ClassifierKey("linux", "arm64", LinuxLibc.UNKNOWN), "linux-arm64"), + Map.entry(new ClassifierKey("darwin", "x64", LinuxLibc.UNKNOWN), "darwin-x64"), + Map.entry(new ClassifierKey("darwin", "arm64", LinuxLibc.UNKNOWN), "darwin-arm64"), + Map.entry(new ClassifierKey("win32", "x64", LinuxLibc.UNKNOWN), "win32-x64"), + Map.entry(new ClassifierKey("win32", "arm64", LinuxLibc.UNKNOWN), "win32-arm64")); + + private PlatformDetector() { + } + + /** + * Linux C runtime classification. + */ + public enum LinuxLibc { + /** GNU libc runtime. */ + GLIBC, + + /** musl libc runtime. */ + MUSL, + + /** Unknown or undetectable runtime. */ + UNKNOWN + } + + /** + * Detects the normalized operating system identifier. + * + * @return {@code darwin}, {@code linux}, or {@code win32} + */ + public static String detectOs() { + return detectOs(System.getProperty("os.name", "")); + } + + /** + * Detects the normalized architecture identifier. + * + * @return {@code x64} or {@code arm64} + */ + public static String detectArch() { + return detectArch(System.getProperty("os.arch", "")); + } + + /** + * Detects the Linux libc variant using {@code /proc/self/exe} PT_INTERP. + * + * @return Linux libc classification; {@code UNKNOWN} on non-Linux or parse + * failures + */ + public static LinuxLibc detectLinuxLibc() { + if (!"linux".equals(detectOs())) { + return LinuxLibc.UNKNOWN; + } + return detectLinuxLibc(Path.of("/proc/self/exe")); + } + + /** + * Detects the runtime classifier for the current platform. + * + * @return platform classifier string + */ + public static String detectClassifier() { + return detectClassifier(detectOs(), detectArch(), detectLinuxLibc()); + } + + static String detectOs(String osName) { + String normalized = osName.toLowerCase(Locale.ROOT); + if (normalized.contains("mac") || normalized.contains("darwin")) { + return "darwin"; + } + if (normalized.contains("win")) { + return "win32"; + } + if (normalized.contains("linux")) { + return "linux"; + } + throw new IllegalStateException("Unsupported os.name: " + osName); + } + + static String detectArch(String osArch) { + String normalized = osArch.toLowerCase(Locale.ROOT).replace('-', '_'); + if (normalized.equals("amd64") || normalized.equals("x86_64") || normalized.equals("x64")) { + return "x64"; + } + if (normalized.equals("aarch64") || normalized.equals("arm64")) { + return "arm64"; + } + throw new IllegalStateException("Unsupported os.arch: " + osArch); + } + + static LinuxLibc detectLinuxLibc(Path executablePath) { + try { + return detectLinuxLibc(readPrefix(executablePath, ELF_HEADER_PROBE_BYTES)); + } catch (IOException ex) { + return LinuxLibc.UNKNOWN; + } + } + + static LinuxLibc detectLinuxLibc(byte[] elfPrefix) throws IOException { + String interpreter = readElfPtInterp(elfPrefix); + if (interpreter.contains("/ld-musl-")) { + return LinuxLibc.MUSL; + } + if (interpreter.contains("/ld-linux-")) { + return LinuxLibc.GLIBC; + } + return LinuxLibc.UNKNOWN; + } + + static String detectClassifier(String os, String arch, LinuxLibc linuxLibc) { + LinuxLibc classifierLibc = "linux".equals(os) ? linuxLibc : LinuxLibc.UNKNOWN; + String classifier = CLASSIFIER_BY_KEY.get(new ClassifierKey(os, arch, classifierLibc)); + if (classifier == null || !SUPPORTED_CLASSIFIERS.contains(classifier)) { + throw new IllegalStateException( + "Unsupported platform tuple: os=" + os + ", arch=" + arch + ", libc=" + classifierLibc); + } + return classifier; + } + + static Set supportedClassifiers() { + return SUPPORTED_CLASSIFIERS; + } + + private static String readElfPtInterp(byte[] probe) throws IOException { + int size = probe.length; + if (size < 64) { + throw new IOException("ELF probe too small: " + size + " bytes"); + } + if ((probe[0] & 0xFF) != ELF_MAGIC_0 || (probe[1] & 0xFF) != ELF_MAGIC_1 || (probe[2] & 0xFF) != ELF_MAGIC_2 + || (probe[3] & 0xFF) != ELF_MAGIC_3) { + throw new IOException("Not an ELF executable"); + } + + int elfClass = probe[4] & 0xFF; + int elfData = probe[5] & 0xFF; + if (elfData != ELF_DATA_LITTLE_ENDIAN && elfData != ELF_DATA_BIG_ENDIAN) { + throw new IOException("Unsupported ELF data encoding: " + elfData); + } + boolean littleEndian = elfData == ELF_DATA_LITTLE_ENDIAN; + + long phoff; + int phentsize; + int phnum; + int minimumPhentsize; + if (elfClass == ELF_CLASS_64) { + phoff = readUInt64(probe, 32, littleEndian); + phentsize = readUInt16(probe, 54, littleEndian); + phnum = readUInt16(probe, 56, littleEndian); + minimumPhentsize = ELF64_PROGRAM_HEADER_SIZE; + } else if (elfClass == ELF_CLASS_32) { + phoff = readUInt32(probe, 28, littleEndian); + phentsize = readUInt16(probe, 42, littleEndian); + phnum = readUInt16(probe, 44, littleEndian); + minimumPhentsize = ELF32_PROGRAM_HEADER_SIZE; + } else { + throw new IOException("Unsupported ELF class: " + elfClass); + } + + if (phoff < 0 || phoff >= size) { + throw new IOException("Program header table offset outside probe window: " + phoff); + } + if (phentsize < minimumPhentsize || phnum <= 0) { + throw new IOException("Invalid ELF program header metadata: phentsize=" + phentsize + ", phnum=" + phnum); + } + + for (int i = 0; i < phnum; i++) { + long baseLong = phoff + ((long) i * phentsize); + if (baseLong < 0 || baseLong > Integer.MAX_VALUE) { + break; + } + int base = (int) baseLong; + if (base + phentsize > size) { + break; + } + + long pType = readUInt32(probe, base, littleEndian); + if (pType != PT_INTERP) { + continue; + } + + long pOffset; + long pFileSize; + if (elfClass == ELF_CLASS_64) { + pOffset = readUInt64(probe, base + 8, littleEndian); + pFileSize = readUInt64(probe, base + 32, littleEndian); + } else { + pOffset = readUInt32(probe, base + 4, littleEndian); + pFileSize = readUInt32(probe, base + 16, littleEndian); + } + + if (pOffset < 0 || pFileSize <= 0 || pOffset > Integer.MAX_VALUE || pFileSize > Integer.MAX_VALUE) { + throw new IOException("Invalid PT_INTERP bounds"); + } + + int start = (int) pOffset; + int end = start + (int) pFileSize; + if (end > size) { + throw new IOException("PT_INTERP extends past probe window; increase probe size"); + } + + int nulIndex = start; + while (nulIndex < end && probe[nulIndex] != 0) { + nulIndex++; + } + if (nulIndex == start) { + throw new IOException("Empty PT_INTERP segment"); + } + return new String(probe, start, nulIndex - start, StandardCharsets.UTF_8); + } + + throw new IOException("ELF PT_INTERP segment not found"); + } + + private static byte[] readPrefix(Path path, int maxBytes) throws IOException { + byte[] buffer = new byte[maxBytes]; + int total = 0; + try (InputStream in = Files.newInputStream(path)) { + while (total < maxBytes) { + int read = in.read(buffer, total, maxBytes - total); + if (read < 0) { + break; + } + total += read; + } + } + byte[] resized = new byte[total]; + System.arraycopy(buffer, 0, resized, 0, total); + return resized; + } + + private static int readUInt16(byte[] data, int offset, boolean littleEndian) { + int b0 = data[offset] & 0xFF; + int b1 = data[offset + 1] & 0xFF; + return littleEndian ? (b0 | (b1 << 8)) : ((b0 << 8) | b1); + } + + private static long readUInt32(byte[] data, int offset, boolean littleEndian) { + long b0 = data[offset] & 0xFFL; + long b1 = data[offset + 1] & 0xFFL; + long b2 = data[offset + 2] & 0xFFL; + long b3 = data[offset + 3] & 0xFFL; + if (littleEndian) { + return b0 | (b1 << 8) | (b2 << 16) | (b3 << 24); + } + return (b0 << 24) | (b1 << 16) | (b2 << 8) | b3; + } + + private static long readUInt64(byte[] data, int offset, boolean littleEndian) { + long result = 0L; + if (littleEndian) { + for (int i = 7; i >= 0; i--) { + result = (result << 8) | (data[offset + i] & 0xFFL); + } + return result; + } + for (int i = 0; i < 8; i++) { + result = (result << 8) | (data[offset + i] & 0xFFL); + } + return result; + } + + private record ClassifierKey(String os, String arch, LinuxLibc libc) { + } +} diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/QueueInputStream.java b/java/sdk/src/main/java/com/github/copilot/ffi/QueueInputStream.java new file mode 100644 index 0000000000..977182d5f4 --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/ffi/QueueInputStream.java @@ -0,0 +1,119 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Objects; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * {@link InputStream} backed by a {@link BlockingQueue} of byte-array chunks. + * + *

+ * Used by the in-process FFI transport to bridge native callback frames into + * the JSON-RPC reader. + */ +public class QueueInputStream extends InputStream { + + private static final byte[] EOF_SENTINEL = new byte[0]; + + private final BlockingQueue queue; + private final AtomicBoolean closed = new AtomicBoolean(false); + + private byte[] currentChunk; + private int currentOffset; + private boolean eof; + + /** + * Creates a queue-backed input stream with an unbounded queue. + */ + public QueueInputStream() { + this(new LinkedBlockingQueue<>()); + } + + /** + * Testing constructor that injects a queue implementation. + * + * @param queue + * backing queue + */ + QueueInputStream(BlockingQueue queue) { + this.queue = Objects.requireNonNull(queue, "queue must not be null"); + } + + void enqueue(byte[] bytes) { + if (bytes == null || bytes.length == 0 || closed.get()) { + return; + } + queue.offer(bytes); + } + + @Override + public int read() throws IOException { + byte[] one = new byte[1]; + int read = read(one, 0, 1); + if (read == -1) { + return -1; + } + return one[0] & 0xFF; + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + Objects.requireNonNull(b, "buffer must not be null"); + if (off < 0 || len < 0 || off + len > b.length) { + throw new IndexOutOfBoundsException("Invalid off/len for buffer of length " + b.length); + } + if (len == 0) { + return 0; + } + if (eof) { + return -1; + } + + while (currentChunk == null || currentOffset >= currentChunk.length) { + byte[] next; + try { + next = queue.take(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new IOException("Interrupted while waiting for callback data", e); + } + if (next == EOF_SENTINEL) { + eof = true; + return -1; + } + if (next.length == 0) { + continue; + } + currentChunk = next; + currentOffset = 0; + } + + int available = currentChunk.length - currentOffset; + int toCopy = Math.min(available, len); + System.arraycopy(currentChunk, currentOffset, b, off, toCopy); + currentOffset += toCopy; + return toCopy; + } + + @Override + public int available() { + if (currentChunk == null || currentOffset >= currentChunk.length) { + return 0; + } + return currentChunk.length - currentOffset; + } + + @Override + public void close() { + if (closed.compareAndSet(false, true)) { + queue.offer(EOF_SENTINEL); + } + } +} diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/ReaderThreadFactory.java b/java/sdk/src/main/java/com/github/copilot/ffi/ReaderThreadFactory.java new file mode 100644 index 0000000000..b0824fa9a7 --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/ffi/ReaderThreadFactory.java @@ -0,0 +1,22 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +/** + * Creates reader threads for FFI queue consumption. + * + *

+ * Baseline (JDK 17) implementation creates a daemon platform thread. The JDK 25 + * multi-release overlay switches this to a virtual thread with the same + * package-private API. + */ +final class ReaderThreadFactory { + + Thread create(Runnable task, String name) { + Thread thread = new Thread(task, name); + thread.setDaemon(true); + return thread; + } +} diff --git a/java/src/main/java/com/github/copilot/package-info.java b/java/sdk/src/main/java/com/github/copilot/package-info.java similarity index 100% rename from java/src/main/java/com/github/copilot/package-info.java rename to java/sdk/src/main/java/com/github/copilot/package-info.java diff --git a/java/src/main/java/com/github/copilot/rpc/AgentInfo.java b/java/sdk/src/main/java/com/github/copilot/rpc/AgentInfo.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/AgentInfo.java rename to java/sdk/src/main/java/com/github/copilot/rpc/AgentInfo.java diff --git a/java/src/main/java/com/github/copilot/rpc/AgentMode.java b/java/sdk/src/main/java/com/github/copilot/rpc/AgentMode.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/AgentMode.java rename to java/sdk/src/main/java/com/github/copilot/rpc/AgentMode.java diff --git a/java/src/main/java/com/github/copilot/rpc/AgentStopHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/AgentStopHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/AgentStopHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/AgentStopHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/AgentStopHookInput.java b/java/sdk/src/main/java/com/github/copilot/rpc/AgentStopHookInput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/AgentStopHookInput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/AgentStopHookInput.java diff --git a/java/src/main/java/com/github/copilot/rpc/AgentStopHookOutput.java b/java/sdk/src/main/java/com/github/copilot/rpc/AgentStopHookOutput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/AgentStopHookOutput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/AgentStopHookOutput.java diff --git a/java/src/main/java/com/github/copilot/rpc/Attachment.java b/java/sdk/src/main/java/com/github/copilot/rpc/Attachment.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/Attachment.java rename to java/sdk/src/main/java/com/github/copilot/rpc/Attachment.java diff --git a/java/src/main/java/com/github/copilot/rpc/AutoModeSwitchHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/AutoModeSwitchHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/AutoModeSwitchHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/AutoModeSwitchHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/AutoModeSwitchInvocation.java b/java/sdk/src/main/java/com/github/copilot/rpc/AutoModeSwitchInvocation.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/AutoModeSwitchInvocation.java rename to java/sdk/src/main/java/com/github/copilot/rpc/AutoModeSwitchInvocation.java diff --git a/java/src/main/java/com/github/copilot/rpc/AutoModeSwitchRequest.java b/java/sdk/src/main/java/com/github/copilot/rpc/AutoModeSwitchRequest.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/AutoModeSwitchRequest.java rename to java/sdk/src/main/java/com/github/copilot/rpc/AutoModeSwitchRequest.java diff --git a/java/src/main/java/com/github/copilot/rpc/AutoModeSwitchResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/AutoModeSwitchResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/AutoModeSwitchResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/AutoModeSwitchResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/AzureOptions.java b/java/sdk/src/main/java/com/github/copilot/rpc/AzureOptions.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/AzureOptions.java rename to java/sdk/src/main/java/com/github/copilot/rpc/AzureOptions.java diff --git a/java/src/main/java/com/github/copilot/rpc/BearerTokenProvider.java b/java/sdk/src/main/java/com/github/copilot/rpc/BearerTokenProvider.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/BearerTokenProvider.java rename to java/sdk/src/main/java/com/github/copilot/rpc/BearerTokenProvider.java diff --git a/java/src/main/java/com/github/copilot/rpc/BlobAttachment.java b/java/sdk/src/main/java/com/github/copilot/rpc/BlobAttachment.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/BlobAttachment.java rename to java/sdk/src/main/java/com/github/copilot/rpc/BlobAttachment.java diff --git a/java/src/main/java/com/github/copilot/rpc/BuiltInTools.java b/java/sdk/src/main/java/com/github/copilot/rpc/BuiltInTools.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/BuiltInTools.java rename to java/sdk/src/main/java/com/github/copilot/rpc/BuiltInTools.java diff --git a/java/src/main/java/com/github/copilot/rpc/CapiSessionOptions.java b/java/sdk/src/main/java/com/github/copilot/rpc/CapiSessionOptions.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/CapiSessionOptions.java rename to java/sdk/src/main/java/com/github/copilot/rpc/CapiSessionOptions.java diff --git a/java/src/main/java/com/github/copilot/rpc/CloudSessionOptions.java b/java/sdk/src/main/java/com/github/copilot/rpc/CloudSessionOptions.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/CloudSessionOptions.java rename to java/sdk/src/main/java/com/github/copilot/rpc/CloudSessionOptions.java diff --git a/java/src/main/java/com/github/copilot/rpc/CloudSessionRepository.java b/java/sdk/src/main/java/com/github/copilot/rpc/CloudSessionRepository.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/CloudSessionRepository.java rename to java/sdk/src/main/java/com/github/copilot/rpc/CloudSessionRepository.java diff --git a/java/src/main/java/com/github/copilot/rpc/CommandContext.java b/java/sdk/src/main/java/com/github/copilot/rpc/CommandContext.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/CommandContext.java rename to java/sdk/src/main/java/com/github/copilot/rpc/CommandContext.java diff --git a/java/src/main/java/com/github/copilot/rpc/CommandDefinition.java b/java/sdk/src/main/java/com/github/copilot/rpc/CommandDefinition.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/CommandDefinition.java rename to java/sdk/src/main/java/com/github/copilot/rpc/CommandDefinition.java diff --git a/java/src/main/java/com/github/copilot/rpc/CommandHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/CommandHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/CommandHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/CommandHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/CommandWireDefinition.java b/java/sdk/src/main/java/com/github/copilot/rpc/CommandWireDefinition.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/CommandWireDefinition.java rename to java/sdk/src/main/java/com/github/copilot/rpc/CommandWireDefinition.java diff --git a/java/src/main/java/com/github/copilot/rpc/CopilotClientMode.java b/java/sdk/src/main/java/com/github/copilot/rpc/CopilotClientMode.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/CopilotClientMode.java rename to java/sdk/src/main/java/com/github/copilot/rpc/CopilotClientMode.java diff --git a/java/src/main/java/com/github/copilot/rpc/CopilotClientOptions.java b/java/sdk/src/main/java/com/github/copilot/rpc/CopilotClientOptions.java similarity index 94% rename from java/src/main/java/com/github/copilot/rpc/CopilotClientOptions.java rename to java/sdk/src/main/java/com/github/copilot/rpc/CopilotClientOptions.java index 0d4494d738..ace972e5b4 100644 --- a/java/src/main/java/com/github/copilot/rpc/CopilotClientOptions.java +++ b/java/sdk/src/main/java/com/github/copilot/rpc/CopilotClientOptions.java @@ -51,6 +51,7 @@ public class CopilotClientOptions { private String[] cliArgs; private String cliPath; private String cliUrl; + private RuntimeConnection connection; private String copilotHome; private String cwd; private Map environment; @@ -204,6 +205,41 @@ public CopilotClientOptions setCliUrl(String cliUrl) { return this; } + /** + * Gets the connection that selects how the client reaches the Copilot runtime. + * + * @return the connection, or {@code null} to infer the transport from + * {@link #isUseStdio()}, {@link #getCliUrl()} and {@link #getCliPath()} + */ + @JsonIgnore + @CopilotExperimental + public RuntimeConnection getConnection() { + return connection; + } + + /** + * Sets the connection that selects how the client reaches the Copilot runtime. + *

+ * When set, the connection takes precedence over the transport-selecting + * options {@link #setUseStdio(boolean)}, {@link #setCliUrl(String)}, + * {@link #setCliPath(String)}, {@link #setPort(int)} and + * {@link #setTcpConnectionToken(String)}; combining a connection with + * conflicting values for any of those options makes the client constructor + * throw {@link IllegalArgumentException}. Values that match what the connection + * implies are accepted, so the same options instance can be reused across + * multiple client constructions. + * + * @param connection + * the connection, or {@code null} to infer the transport from the + * individual transport options + * @return this options instance for method chaining + */ + @CopilotExperimental + public CopilotClientOptions setConnection(RuntimeConnection connection) { + this.connection = connection; + return this; + } + /** * Gets the base directory for Copilot data (session state, config, etc.). * @@ -248,13 +284,11 @@ public String getCwd() { * Sets the working directory for the CLI process. * * @param cwd - * the working directory path (must not be {@code null} or empty) + * the working directory path, or {@code null} to clear * @return this options instance for method chaining - * @throws IllegalArgumentException - * if {@code cwd} is {@code null} or empty */ public CopilotClientOptions setCwd(String cwd) { - this.cwd = Objects.requireNonNull(cwd, "cwd must not be null"); + this.cwd = cwd; return this; } @@ -754,6 +788,7 @@ public CopilotClientOptions clone() { copy.cliArgs = this.cliArgs != null ? this.cliArgs.clone() : null; copy.cliPath = this.cliPath; copy.cliUrl = this.cliUrl; + copy.connection = this.connection; copy.copilotHome = this.copilotHome; copy.cwd = this.cwd; copy.environment = this.environment != null ? new java.util.HashMap<>(this.environment) : null; diff --git a/java/src/main/java/com/github/copilot/rpc/CopilotExpAssignmentResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/CopilotExpAssignmentResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/CopilotExpAssignmentResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/CopilotExpAssignmentResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/CreateSessionRequest.java b/java/sdk/src/main/java/com/github/copilot/rpc/CreateSessionRequest.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/CreateSessionRequest.java rename to java/sdk/src/main/java/com/github/copilot/rpc/CreateSessionRequest.java diff --git a/java/src/main/java/com/github/copilot/rpc/CreateSessionResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/CreateSessionResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/CreateSessionResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/CreateSessionResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/CustomAgentConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/CustomAgentConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/CustomAgentConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/CustomAgentConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/DefaultAgentConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/DefaultAgentConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/DefaultAgentConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/DefaultAgentConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/DeleteSessionResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/DeleteSessionResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/DeleteSessionResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/DeleteSessionResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/ElicitationContext.java b/java/sdk/src/main/java/com/github/copilot/rpc/ElicitationContext.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ElicitationContext.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ElicitationContext.java diff --git a/java/src/main/java/com/github/copilot/rpc/ElicitationHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/ElicitationHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ElicitationHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ElicitationHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/ElicitationParams.java b/java/sdk/src/main/java/com/github/copilot/rpc/ElicitationParams.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ElicitationParams.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ElicitationParams.java diff --git a/java/src/main/java/com/github/copilot/rpc/ElicitationResult.java b/java/sdk/src/main/java/com/github/copilot/rpc/ElicitationResult.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ElicitationResult.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ElicitationResult.java diff --git a/java/src/main/java/com/github/copilot/rpc/ElicitationResultAction.java b/java/sdk/src/main/java/com/github/copilot/rpc/ElicitationResultAction.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ElicitationResultAction.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ElicitationResultAction.java diff --git a/java/src/main/java/com/github/copilot/rpc/ElicitationSchema.java b/java/sdk/src/main/java/com/github/copilot/rpc/ElicitationSchema.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ElicitationSchema.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ElicitationSchema.java diff --git a/java/src/main/java/com/github/copilot/rpc/ExitPlanModeHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/ExitPlanModeHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ExitPlanModeHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ExitPlanModeHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/ExitPlanModeInvocation.java b/java/sdk/src/main/java/com/github/copilot/rpc/ExitPlanModeInvocation.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ExitPlanModeInvocation.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ExitPlanModeInvocation.java diff --git a/java/src/main/java/com/github/copilot/rpc/ExitPlanModeRequest.java b/java/sdk/src/main/java/com/github/copilot/rpc/ExitPlanModeRequest.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ExitPlanModeRequest.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ExitPlanModeRequest.java diff --git a/java/src/main/java/com/github/copilot/rpc/ExitPlanModeResult.java b/java/sdk/src/main/java/com/github/copilot/rpc/ExitPlanModeResult.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ExitPlanModeResult.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ExitPlanModeResult.java diff --git a/java/src/main/java/com/github/copilot/rpc/ExpConfigEntry.java b/java/sdk/src/main/java/com/github/copilot/rpc/ExpConfigEntry.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ExpConfigEntry.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ExpConfigEntry.java diff --git a/java/src/main/java/com/github/copilot/rpc/GetAuthStatusResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/GetAuthStatusResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/GetAuthStatusResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/GetAuthStatusResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/GetForegroundSessionResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/GetForegroundSessionResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/GetForegroundSessionResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/GetForegroundSessionResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/GetLastSessionIdResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/GetLastSessionIdResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/GetLastSessionIdResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/GetLastSessionIdResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/GetMessagesResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/GetMessagesResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/GetMessagesResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/GetMessagesResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/GetModelsResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/GetModelsResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/GetModelsResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/GetModelsResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/GetSessionMetadataResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/GetSessionMetadataResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/GetSessionMetadataResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/GetSessionMetadataResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/GetStatusResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/GetStatusResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/GetStatusResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/GetStatusResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/GitHubMcpToolConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/GitHubMcpToolConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/GitHubMcpToolConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/GitHubMcpToolConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/HookInvocation.java b/java/sdk/src/main/java/com/github/copilot/rpc/HookInvocation.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/HookInvocation.java rename to java/sdk/src/main/java/com/github/copilot/rpc/HookInvocation.java diff --git a/java/sdk/src/main/java/com/github/copilot/rpc/InProcessRuntimeConnection.java b/java/sdk/src/main/java/com/github/copilot/rpc/InProcessRuntimeConnection.java new file mode 100644 index 0000000000..274f8b89dc --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/rpc/InProcessRuntimeConnection.java @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.rpc; + +import com.github.copilot.CopilotExperimental; + +/** + * Hosts the runtime in-process by loading its native library and communicating + * over the C ABI — no child process is spawned by the SDK for JSON-RPC + * transport. Construct with {@link RuntimeConnection#forInProcess()}. + *

+ * The in-process runtime is self-contained: it carries everything it needs and + * requires no external installation. Because it runs inside the host process, + * per-client process settings ({@code environment}, {@code telemetry}, + * {@code cwd}, and {@code cliArgs}) are rejected; configure those on the host + * process instead, or use a child-process connection. + * + * @since 1.0.0 + */ +@CopilotExperimental +public final class InProcessRuntimeConnection extends RuntimeConnection { + + InProcessRuntimeConnection() { + } +} diff --git a/java/src/main/java/com/github/copilot/rpc/InfiniteSessionConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/InfiniteSessionConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/InfiniteSessionConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/InfiniteSessionConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/InputOptions.java b/java/sdk/src/main/java/com/github/copilot/rpc/InputOptions.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/InputOptions.java rename to java/sdk/src/main/java/com/github/copilot/rpc/InputOptions.java diff --git a/java/src/main/java/com/github/copilot/rpc/JsonRpcError.java b/java/sdk/src/main/java/com/github/copilot/rpc/JsonRpcError.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/JsonRpcError.java rename to java/sdk/src/main/java/com/github/copilot/rpc/JsonRpcError.java diff --git a/java/src/main/java/com/github/copilot/rpc/JsonRpcRequest.java b/java/sdk/src/main/java/com/github/copilot/rpc/JsonRpcRequest.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/JsonRpcRequest.java rename to java/sdk/src/main/java/com/github/copilot/rpc/JsonRpcRequest.java diff --git a/java/src/main/java/com/github/copilot/rpc/JsonRpcResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/JsonRpcResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/JsonRpcResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/JsonRpcResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/LargeToolOutputConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/LargeToolOutputConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/LargeToolOutputConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/LargeToolOutputConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/ListSessionsResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/ListSessionsResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ListSessionsResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ListSessionsResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/ManagedSettings.java b/java/sdk/src/main/java/com/github/copilot/rpc/ManagedSettings.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ManagedSettings.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ManagedSettings.java diff --git a/java/src/main/java/com/github/copilot/rpc/ManagedSettingsPermissions.java b/java/sdk/src/main/java/com/github/copilot/rpc/ManagedSettingsPermissions.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ManagedSettingsPermissions.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ManagedSettingsPermissions.java diff --git a/java/src/main/java/com/github/copilot/rpc/McpAuthHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/McpAuthHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/McpAuthHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/McpAuthHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/McpAuthInvocation.java b/java/sdk/src/main/java/com/github/copilot/rpc/McpAuthInvocation.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/McpAuthInvocation.java rename to java/sdk/src/main/java/com/github/copilot/rpc/McpAuthInvocation.java diff --git a/java/src/main/java/com/github/copilot/rpc/McpAuthRequest.java b/java/sdk/src/main/java/com/github/copilot/rpc/McpAuthRequest.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/McpAuthRequest.java rename to java/sdk/src/main/java/com/github/copilot/rpc/McpAuthRequest.java diff --git a/java/src/main/java/com/github/copilot/rpc/McpAuthResult.java b/java/sdk/src/main/java/com/github/copilot/rpc/McpAuthResult.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/McpAuthResult.java rename to java/sdk/src/main/java/com/github/copilot/rpc/McpAuthResult.java diff --git a/java/src/main/java/com/github/copilot/rpc/McpAuthToken.java b/java/sdk/src/main/java/com/github/copilot/rpc/McpAuthToken.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/McpAuthToken.java rename to java/sdk/src/main/java/com/github/copilot/rpc/McpAuthToken.java diff --git a/java/src/main/java/com/github/copilot/rpc/McpHttpServerConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/McpHttpServerConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/McpHttpServerConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/McpHttpServerConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/McpServerConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/McpServerConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/McpServerConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/McpServerConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/McpStdioServerConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/McpStdioServerConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/McpStdioServerConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/McpStdioServerConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/MemoryConfiguration.java b/java/sdk/src/main/java/com/github/copilot/rpc/MemoryConfiguration.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/MemoryConfiguration.java rename to java/sdk/src/main/java/com/github/copilot/rpc/MemoryConfiguration.java diff --git a/java/src/main/java/com/github/copilot/rpc/MessageAttachment.java b/java/sdk/src/main/java/com/github/copilot/rpc/MessageAttachment.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/MessageAttachment.java rename to java/sdk/src/main/java/com/github/copilot/rpc/MessageAttachment.java diff --git a/java/src/main/java/com/github/copilot/rpc/MessageOptions.java b/java/sdk/src/main/java/com/github/copilot/rpc/MessageOptions.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/MessageOptions.java rename to java/sdk/src/main/java/com/github/copilot/rpc/MessageOptions.java diff --git a/java/src/main/java/com/github/copilot/rpc/ModelBilling.java b/java/sdk/src/main/java/com/github/copilot/rpc/ModelBilling.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ModelBilling.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ModelBilling.java diff --git a/java/src/main/java/com/github/copilot/rpc/ModelCapabilities.java b/java/sdk/src/main/java/com/github/copilot/rpc/ModelCapabilities.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ModelCapabilities.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ModelCapabilities.java diff --git a/java/src/main/java/com/github/copilot/rpc/ModelCapabilitiesOverride.java b/java/sdk/src/main/java/com/github/copilot/rpc/ModelCapabilitiesOverride.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ModelCapabilitiesOverride.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ModelCapabilitiesOverride.java diff --git a/java/src/main/java/com/github/copilot/rpc/ModelInfo.java b/java/sdk/src/main/java/com/github/copilot/rpc/ModelInfo.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ModelInfo.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ModelInfo.java diff --git a/java/src/main/java/com/github/copilot/rpc/ModelLimits.java b/java/sdk/src/main/java/com/github/copilot/rpc/ModelLimits.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ModelLimits.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ModelLimits.java diff --git a/java/src/main/java/com/github/copilot/rpc/ModelPolicy.java b/java/sdk/src/main/java/com/github/copilot/rpc/ModelPolicy.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ModelPolicy.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ModelPolicy.java diff --git a/java/src/main/java/com/github/copilot/rpc/ModelSupports.java b/java/sdk/src/main/java/com/github/copilot/rpc/ModelSupports.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ModelSupports.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ModelSupports.java diff --git a/java/src/main/java/com/github/copilot/rpc/ModelVisionLimits.java b/java/sdk/src/main/java/com/github/copilot/rpc/ModelVisionLimits.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ModelVisionLimits.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ModelVisionLimits.java diff --git a/java/src/main/java/com/github/copilot/rpc/NamedProviderConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/NamedProviderConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/NamedProviderConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/NamedProviderConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/ParamCoercion.java b/java/sdk/src/main/java/com/github/copilot/rpc/ParamCoercion.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ParamCoercion.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ParamCoercion.java diff --git a/java/src/main/java/com/github/copilot/rpc/ParamSchema.java b/java/sdk/src/main/java/com/github/copilot/rpc/ParamSchema.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ParamSchema.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ParamSchema.java diff --git a/java/src/main/java/com/github/copilot/rpc/PermissionHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/PermissionHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PermissionHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PermissionHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/PermissionInvocation.java b/java/sdk/src/main/java/com/github/copilot/rpc/PermissionInvocation.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PermissionInvocation.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PermissionInvocation.java diff --git a/java/src/main/java/com/github/copilot/rpc/PermissionRequest.java b/java/sdk/src/main/java/com/github/copilot/rpc/PermissionRequest.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PermissionRequest.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PermissionRequest.java diff --git a/java/src/main/java/com/github/copilot/rpc/PermissionRequestResult.java b/java/sdk/src/main/java/com/github/copilot/rpc/PermissionRequestResult.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PermissionRequestResult.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PermissionRequestResult.java diff --git a/java/src/main/java/com/github/copilot/rpc/PermissionRequestResultKind.java b/java/sdk/src/main/java/com/github/copilot/rpc/PermissionRequestResultKind.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PermissionRequestResultKind.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PermissionRequestResultKind.java diff --git a/java/src/main/java/com/github/copilot/rpc/PingResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/PingResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PingResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PingResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/PostToolUseFailureHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/PostToolUseFailureHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PostToolUseFailureHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PostToolUseFailureHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/PostToolUseFailureHookInput.java b/java/sdk/src/main/java/com/github/copilot/rpc/PostToolUseFailureHookInput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PostToolUseFailureHookInput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PostToolUseFailureHookInput.java diff --git a/java/src/main/java/com/github/copilot/rpc/PostToolUseFailureHookOutput.java b/java/sdk/src/main/java/com/github/copilot/rpc/PostToolUseFailureHookOutput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PostToolUseFailureHookOutput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PostToolUseFailureHookOutput.java diff --git a/java/src/main/java/com/github/copilot/rpc/PostToolUseHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/PostToolUseHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PostToolUseHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PostToolUseHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/PostToolUseHookInput.java b/java/sdk/src/main/java/com/github/copilot/rpc/PostToolUseHookInput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PostToolUseHookInput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PostToolUseHookInput.java diff --git a/java/src/main/java/com/github/copilot/rpc/PostToolUseHookOutput.java b/java/sdk/src/main/java/com/github/copilot/rpc/PostToolUseHookOutput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PostToolUseHookOutput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PostToolUseHookOutput.java diff --git a/java/src/main/java/com/github/copilot/rpc/PreMcpToolCallHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/PreMcpToolCallHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PreMcpToolCallHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PreMcpToolCallHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/PreMcpToolCallHookInput.java b/java/sdk/src/main/java/com/github/copilot/rpc/PreMcpToolCallHookInput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PreMcpToolCallHookInput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PreMcpToolCallHookInput.java diff --git a/java/src/main/java/com/github/copilot/rpc/PreMcpToolCallHookOutput.java b/java/sdk/src/main/java/com/github/copilot/rpc/PreMcpToolCallHookOutput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PreMcpToolCallHookOutput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PreMcpToolCallHookOutput.java diff --git a/java/src/main/java/com/github/copilot/rpc/PreToolUseHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/PreToolUseHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PreToolUseHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PreToolUseHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/PreToolUseHookInput.java b/java/sdk/src/main/java/com/github/copilot/rpc/PreToolUseHookInput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PreToolUseHookInput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PreToolUseHookInput.java diff --git a/java/src/main/java/com/github/copilot/rpc/PreToolUseHookOutput.java b/java/sdk/src/main/java/com/github/copilot/rpc/PreToolUseHookOutput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/PreToolUseHookOutput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/PreToolUseHookOutput.java diff --git a/java/src/main/java/com/github/copilot/rpc/ProviderConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/ProviderConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ProviderConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ProviderConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/ProviderModelConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/ProviderModelConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ProviderModelConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ProviderModelConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/ProviderTokenArgs.java b/java/sdk/src/main/java/com/github/copilot/rpc/ProviderTokenArgs.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ProviderTokenArgs.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ProviderTokenArgs.java diff --git a/java/src/main/java/com/github/copilot/rpc/ResumeSessionConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/ResumeSessionConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ResumeSessionConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ResumeSessionConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/ResumeSessionRequest.java b/java/sdk/src/main/java/com/github/copilot/rpc/ResumeSessionRequest.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ResumeSessionRequest.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ResumeSessionRequest.java diff --git a/java/src/main/java/com/github/copilot/rpc/ResumeSessionResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/ResumeSessionResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ResumeSessionResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ResumeSessionResponse.java diff --git a/java/sdk/src/main/java/com/github/copilot/rpc/RuntimeConnection.java b/java/sdk/src/main/java/com/github/copilot/rpc/RuntimeConnection.java new file mode 100644 index 0000000000..a0c8eec5c6 --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/rpc/RuntimeConnection.java @@ -0,0 +1,94 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.rpc; + +import com.github.copilot.CopilotExperimental; + +/** + * Configures how a {@link com.github.copilot.CopilotClient} connects to the + * Copilot runtime. + *

+ * Instances are created through the factory methods on this class and assigned + * with {@link CopilotClientOptions#setConnection(RuntimeConnection)}: + * + *

{@code
+ * // Spawn a runtime child process and talk over stdin/stdout (the default).
+ * new CopilotClientOptions().setConnection(RuntimeConnection.forStdio());
+ *
+ * // Spawn a runtime child process listening on a TCP socket.
+ * new CopilotClientOptions().setConnection(RuntimeConnection.forTcp().setPath("/usr/local/bin/copilot"));
+ *
+ * // Connect to an already-running runtime.
+ * new CopilotClientOptions().setConnection(RuntimeConnection.forUri("localhost:3000"));
+ * }
+ * + * @since 1.0.0 + */ +@CopilotExperimental +public abstract sealed class RuntimeConnection + permits StdioRuntimeConnection, TcpRuntimeConnection, UriRuntimeConnection, InProcessRuntimeConnection { + + RuntimeConnection() { + } + + /** + * Spawns a runtime child process and communicates over its stdin/stdout. This + * is the default when no connection is configured. + * + * @return a new stdio connection + */ + public static StdioRuntimeConnection forStdio() { + return new StdioRuntimeConnection(); + } + + /** + * Spawns a runtime child process at the given path and communicates over its + * stdin/stdout. + * + * @param path + * path to the runtime executable, or {@code null} to use the runtime + * discovered on the {@code PATH} + * @return a new stdio connection + */ + public static StdioRuntimeConnection forStdio(String path) { + return new StdioRuntimeConnection().setPath(path); + } + + /** + * Spawns a runtime child process that listens on a TCP socket and connects to + * it. + * + * @return a new TCP connection + */ + public static TcpRuntimeConnection forTcp() { + return new TcpRuntimeConnection(); + } + + /** + * Connects to an already-running runtime at the given URL. + * + * @param url + * URL of the runtime to connect to; accepts {@code "port"}, + * {@code "host:port"}, or a full URL + * @return a new URI connection + * @throws IllegalArgumentException + * if {@code url} is {@code null} or empty + */ + public static UriRuntimeConnection forUri(String url) { + return new UriRuntimeConnection(url); + } + + /** + * Hosts the runtime in-process by loading its native library and communicating + * over the C ABI — no child process is spawned by the SDK for JSON-RPC + * transport. + * + * @return a new in-process connection + */ + @CopilotExperimental + public static InProcessRuntimeConnection forInProcess() { + return new InProcessRuntimeConnection(); + } +} diff --git a/java/src/main/java/com/github/copilot/rpc/SectionOverride.java b/java/sdk/src/main/java/com/github/copilot/rpc/SectionOverride.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SectionOverride.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SectionOverride.java diff --git a/java/src/main/java/com/github/copilot/rpc/SectionOverrideAction.java b/java/sdk/src/main/java/com/github/copilot/rpc/SectionOverrideAction.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SectionOverrideAction.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SectionOverrideAction.java diff --git a/java/src/main/java/com/github/copilot/rpc/SendMessageRequest.java b/java/sdk/src/main/java/com/github/copilot/rpc/SendMessageRequest.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SendMessageRequest.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SendMessageRequest.java diff --git a/java/src/main/java/com/github/copilot/rpc/SendMessageResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/SendMessageResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SendMessageResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SendMessageResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionCapabilities.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionCapabilities.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionCapabilities.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionCapabilities.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionContext.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionContext.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionContext.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionContext.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionEndHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionEndHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionEndHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionEndHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionEndHookInput.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionEndHookInput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionEndHookInput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionEndHookInput.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionEndHookOutput.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionEndHookOutput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionEndHookOutput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionEndHookOutput.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionHooks.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionHooks.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionHooks.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionHooks.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionLifecycleEvent.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionLifecycleEvent.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionLifecycleEvent.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionLifecycleEvent.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionLifecycleEventMetadata.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionLifecycleEventMetadata.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionLifecycleEventMetadata.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionLifecycleEventMetadata.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionLifecycleEventTypes.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionLifecycleEventTypes.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionLifecycleEventTypes.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionLifecycleEventTypes.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionLifecycleHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionLifecycleHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionLifecycleHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionLifecycleHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionListFilter.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionListFilter.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionListFilter.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionListFilter.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionMetadata.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionMetadata.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionMetadata.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionMetadata.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionStartHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionStartHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionStartHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionStartHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionStartHookInput.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionStartHookInput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionStartHookInput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionStartHookInput.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionStartHookOutput.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionStartHookOutput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionStartHookOutput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionStartHookOutput.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionUiApi.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionUiApi.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionUiApi.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionUiApi.java diff --git a/java/src/main/java/com/github/copilot/rpc/SessionUiCapabilities.java b/java/sdk/src/main/java/com/github/copilot/rpc/SessionUiCapabilities.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SessionUiCapabilities.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SessionUiCapabilities.java diff --git a/java/src/main/java/com/github/copilot/rpc/SetForegroundSessionRequest.java b/java/sdk/src/main/java/com/github/copilot/rpc/SetForegroundSessionRequest.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SetForegroundSessionRequest.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SetForegroundSessionRequest.java diff --git a/java/src/main/java/com/github/copilot/rpc/SetForegroundSessionResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/SetForegroundSessionResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SetForegroundSessionResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SetForegroundSessionResponse.java diff --git a/java/sdk/src/main/java/com/github/copilot/rpc/StdioRuntimeConnection.java b/java/sdk/src/main/java/com/github/copilot/rpc/StdioRuntimeConnection.java new file mode 100644 index 0000000000..7d0923e0fe --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/rpc/StdioRuntimeConnection.java @@ -0,0 +1,71 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.rpc; + +import java.util.ArrayList; +import java.util.List; + +import com.github.copilot.CopilotExperimental; + +/** + * Spawns a runtime child process and communicates over its stdin/stdout. + * Construct with {@link RuntimeConnection#forStdio()} or + * {@link RuntimeConnection#forStdio(String)}. + * + * @since 1.0.0 + */ +@CopilotExperimental +public final class StdioRuntimeConnection extends RuntimeConnection { + + private String path; + private List args; + + StdioRuntimeConnection() { + } + + /** + * Returns the path to the runtime executable. + * + * @return the path, or {@code null} to use the runtime discovered on the + * {@code PATH} + */ + public String getPath() { + return path; + } + + /** + * Sets the path to the runtime executable. + * + * @param path + * the path, or {@code null} to use the runtime discovered on the + * {@code PATH} + * @return this instance for method chaining + */ + public StdioRuntimeConnection setPath(String path) { + this.path = path; + return this; + } + + /** + * Returns the extra command-line arguments passed to the runtime process. + * + * @return the arguments, or {@code null} if none are configured + */ + public List getArgs() { + return args; + } + + /** + * Sets extra command-line arguments passed to the runtime process. + * + * @param args + * the arguments, or {@code null} for none + * @return this instance for method chaining + */ + public StdioRuntimeConnection setArgs(List args) { + this.args = args == null ? null : new ArrayList<>(args); + return this; + } +} diff --git a/java/src/main/java/com/github/copilot/rpc/SystemMessageConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/SystemMessageConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SystemMessageConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SystemMessageConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/SystemMessageSections.java b/java/sdk/src/main/java/com/github/copilot/rpc/SystemMessageSections.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SystemMessageSections.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SystemMessageSections.java diff --git a/java/src/main/java/com/github/copilot/rpc/SystemPromptSections.java b/java/sdk/src/main/java/com/github/copilot/rpc/SystemPromptSections.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/SystemPromptSections.java rename to java/sdk/src/main/java/com/github/copilot/rpc/SystemPromptSections.java diff --git a/java/sdk/src/main/java/com/github/copilot/rpc/TcpRuntimeConnection.java b/java/sdk/src/main/java/com/github/copilot/rpc/TcpRuntimeConnection.java new file mode 100644 index 0000000000..648321a219 --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/rpc/TcpRuntimeConnection.java @@ -0,0 +1,116 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.rpc; + +import java.util.ArrayList; +import java.util.List; + +import com.github.copilot.CopilotExperimental; + +/** + * Spawns a runtime child process listening on a TCP socket and connects to it. + * Construct with {@link RuntimeConnection#forTcp()}. + * + * @since 1.0.0 + */ +@CopilotExperimental +public final class TcpRuntimeConnection extends RuntimeConnection { + + private String path; + private int port; + private String connectionToken; + private List args; + + TcpRuntimeConnection() { + } + + /** + * Returns the path to the runtime executable. + * + * @return the path, or {@code null} to use the runtime discovered on the + * {@code PATH} + */ + public String getPath() { + return path; + } + + /** + * Sets the path to the runtime executable. + * + * @param path + * the path, or {@code null} to use the runtime discovered on the + * {@code PATH} + * @return this instance for method chaining + */ + public TcpRuntimeConnection setPath(String path) { + this.path = path; + return this; + } + + /** + * Returns the TCP port the spawned runtime listens on. + * + * @return the port, or {@code 0} to auto-allocate a free port + */ + public int getPort() { + return port; + } + + /** + * Sets the TCP port the spawned runtime listens on. + * + * @param port + * the port, or {@code 0} (the default) to auto-allocate a free port + * @return this instance for method chaining + */ + public TcpRuntimeConnection setPort(int port) { + this.port = port; + return this; + } + + /** + * Returns the shared secret the SDK sends to the spawned runtime to + * authenticate the TCP connection. + * + * @return the token, or {@code null} to generate one automatically + */ + public String getConnectionToken() { + return connectionToken; + } + + /** + * Sets the shared secret the SDK sends to the spawned runtime to authenticate + * the TCP connection. + * + * @param connectionToken + * the token, or {@code null} to generate one automatically + * @return this instance for method chaining + */ + public TcpRuntimeConnection setConnectionToken(String connectionToken) { + this.connectionToken = connectionToken; + return this; + } + + /** + * Returns the extra command-line arguments passed to the runtime process. + * + * @return the arguments, or {@code null} if none are configured + */ + public List getArgs() { + return args; + } + + /** + * Sets extra command-line arguments passed to the runtime process. + * + * @param args + * the arguments, or {@code null} for none + * @return this instance for method chaining + */ + public TcpRuntimeConnection setArgs(List args) { + this.args = args == null ? null : new ArrayList<>(args); + return this; + } +} diff --git a/java/src/main/java/com/github/copilot/rpc/TelemetryConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/TelemetryConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/TelemetryConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/TelemetryConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/ToolBinaryResult.java b/java/sdk/src/main/java/com/github/copilot/rpc/ToolBinaryResult.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ToolBinaryResult.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ToolBinaryResult.java diff --git a/java/src/main/java/com/github/copilot/rpc/ToolDefer.java b/java/sdk/src/main/java/com/github/copilot/rpc/ToolDefer.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ToolDefer.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ToolDefer.java diff --git a/java/src/main/java/com/github/copilot/rpc/ToolDefinition.java b/java/sdk/src/main/java/com/github/copilot/rpc/ToolDefinition.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ToolDefinition.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ToolDefinition.java diff --git a/java/src/main/java/com/github/copilot/rpc/ToolHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/ToolHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ToolHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ToolHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/ToolInvocation.java b/java/sdk/src/main/java/com/github/copilot/rpc/ToolInvocation.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ToolInvocation.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ToolInvocation.java diff --git a/java/src/main/java/com/github/copilot/rpc/ToolResultObject.java b/java/sdk/src/main/java/com/github/copilot/rpc/ToolResultObject.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ToolResultObject.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ToolResultObject.java diff --git a/java/src/main/java/com/github/copilot/rpc/ToolSearchConfig.java b/java/sdk/src/main/java/com/github/copilot/rpc/ToolSearchConfig.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ToolSearchConfig.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ToolSearchConfig.java diff --git a/java/src/main/java/com/github/copilot/rpc/ToolSet.java b/java/sdk/src/main/java/com/github/copilot/rpc/ToolSet.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/ToolSet.java rename to java/sdk/src/main/java/com/github/copilot/rpc/ToolSet.java diff --git a/java/sdk/src/main/java/com/github/copilot/rpc/UriRuntimeConnection.java b/java/sdk/src/main/java/com/github/copilot/rpc/UriRuntimeConnection.java new file mode 100644 index 0000000000..c260985845 --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/rpc/UriRuntimeConnection.java @@ -0,0 +1,57 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.rpc; + +import com.github.copilot.CopilotExperimental; + +/** + * Connects to an already-running runtime at the configured URL. Construct with + * {@link RuntimeConnection#forUri(String)}. + * + * @since 1.0.0 + */ +@CopilotExperimental +public final class UriRuntimeConnection extends RuntimeConnection { + + private final String url; + private String connectionToken; + + UriRuntimeConnection(String url) { + if (url == null || url.isEmpty()) { + throw new IllegalArgumentException("UriRuntimeConnection url must be a non-empty string"); + } + this.url = url; + } + + /** + * Returns the URL of the runtime to connect to. + * + * @return the URL; accepts {@code "port"}, {@code "host:port"}, or a full URL + */ + public String getUrl() { + return url; + } + + /** + * Returns the shared secret used to authenticate the connection. + * + * @return the token, or {@code null} if the runtime does not require one + */ + public String getConnectionToken() { + return connectionToken; + } + + /** + * Sets the shared secret used to authenticate the connection. + * + * @param connectionToken + * the token, or {@code null} if the runtime does not require one + * @return this instance for method chaining + */ + public UriRuntimeConnection setConnectionToken(String connectionToken) { + this.connectionToken = connectionToken; + return this; + } +} diff --git a/java/src/main/java/com/github/copilot/rpc/UserInputHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/UserInputHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/UserInputHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/UserInputHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/UserInputInvocation.java b/java/sdk/src/main/java/com/github/copilot/rpc/UserInputInvocation.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/UserInputInvocation.java rename to java/sdk/src/main/java/com/github/copilot/rpc/UserInputInvocation.java diff --git a/java/src/main/java/com/github/copilot/rpc/UserInputRequest.java b/java/sdk/src/main/java/com/github/copilot/rpc/UserInputRequest.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/UserInputRequest.java rename to java/sdk/src/main/java/com/github/copilot/rpc/UserInputRequest.java diff --git a/java/src/main/java/com/github/copilot/rpc/UserInputResponse.java b/java/sdk/src/main/java/com/github/copilot/rpc/UserInputResponse.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/UserInputResponse.java rename to java/sdk/src/main/java/com/github/copilot/rpc/UserInputResponse.java diff --git a/java/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHookInput.java b/java/sdk/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHookInput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHookInput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHookInput.java diff --git a/java/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHookOutput.java b/java/sdk/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHookOutput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHookOutput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/UserPromptSubmittedHookOutput.java diff --git a/java/src/main/java/com/github/copilot/rpc/UserPromptTransformedHandler.java b/java/sdk/src/main/java/com/github/copilot/rpc/UserPromptTransformedHandler.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/UserPromptTransformedHandler.java rename to java/sdk/src/main/java/com/github/copilot/rpc/UserPromptTransformedHandler.java diff --git a/java/src/main/java/com/github/copilot/rpc/UserPromptTransformedHookInput.java b/java/sdk/src/main/java/com/github/copilot/rpc/UserPromptTransformedHookInput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/UserPromptTransformedHookInput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/UserPromptTransformedHookInput.java diff --git a/java/src/main/java/com/github/copilot/rpc/UserPromptTransformedHookOutput.java b/java/sdk/src/main/java/com/github/copilot/rpc/UserPromptTransformedHookOutput.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/UserPromptTransformedHookOutput.java rename to java/sdk/src/main/java/com/github/copilot/rpc/UserPromptTransformedHookOutput.java diff --git a/java/src/main/java/com/github/copilot/rpc/package-info.java b/java/sdk/src/main/java/com/github/copilot/rpc/package-info.java similarity index 100% rename from java/src/main/java/com/github/copilot/rpc/package-info.java rename to java/sdk/src/main/java/com/github/copilot/rpc/package-info.java diff --git a/java/src/main/java/com/github/copilot/tool/CopilotTool.java b/java/sdk/src/main/java/com/github/copilot/tool/CopilotTool.java similarity index 100% rename from java/src/main/java/com/github/copilot/tool/CopilotTool.java rename to java/sdk/src/main/java/com/github/copilot/tool/CopilotTool.java diff --git a/java/src/main/java/com/github/copilot/tool/CopilotToolMetadataProvider.java b/java/sdk/src/main/java/com/github/copilot/tool/CopilotToolMetadataProvider.java similarity index 100% rename from java/src/main/java/com/github/copilot/tool/CopilotToolMetadataProvider.java rename to java/sdk/src/main/java/com/github/copilot/tool/CopilotToolMetadataProvider.java diff --git a/java/src/main/java/com/github/copilot/tool/CopilotToolParam.java b/java/sdk/src/main/java/com/github/copilot/tool/CopilotToolParam.java similarity index 100% rename from java/src/main/java/com/github/copilot/tool/CopilotToolParam.java rename to java/sdk/src/main/java/com/github/copilot/tool/CopilotToolParam.java diff --git a/java/src/main/java/com/github/copilot/tool/CopilotToolProcessor.java b/java/sdk/src/main/java/com/github/copilot/tool/CopilotToolProcessor.java similarity index 100% rename from java/src/main/java/com/github/copilot/tool/CopilotToolProcessor.java rename to java/sdk/src/main/java/com/github/copilot/tool/CopilotToolProcessor.java diff --git a/java/src/main/java/com/github/copilot/tool/Param.java b/java/sdk/src/main/java/com/github/copilot/tool/Param.java similarity index 100% rename from java/src/main/java/com/github/copilot/tool/Param.java rename to java/sdk/src/main/java/com/github/copilot/tool/Param.java diff --git a/java/src/main/java/com/github/copilot/tool/SchemaGenerator.java b/java/sdk/src/main/java/com/github/copilot/tool/SchemaGenerator.java similarity index 100% rename from java/src/main/java/com/github/copilot/tool/SchemaGenerator.java rename to java/sdk/src/main/java/com/github/copilot/tool/SchemaGenerator.java diff --git a/java/src/main/java/module-info.java b/java/sdk/src/main/java/module-info.java similarity index 94% rename from java/src/main/java/module-info.java rename to java/sdk/src/main/java/module-info.java index 38bc1f93d5..8bc2dbd55c 100644 --- a/java/src/main/java/module-info.java +++ b/java/sdk/src/main/java/module-info.java @@ -12,6 +12,7 @@ requires com.fasterxml.jackson.datatype.jsr310; requires static com.github.spotbugs.annotations; requires static java.compiler; + requires static com.sun.jna; requires java.net.http; requires java.logging; @@ -25,6 +26,7 @@ opens com.github.copilot.generated to com.fasterxml.jackson.databind; opens com.github.copilot.generated.rpc to com.fasterxml.jackson.databind; opens com.github.copilot.rpc to com.fasterxml.jackson.databind; + opens com.github.copilot.ffi to com.sun.jna; provides javax.annotation.processing.Processor with com.github.copilot.CopilotExperimentalProcessor, com.github.copilot.tool.CopilotToolProcessor; diff --git a/java/src/main/java25/com/github/copilot/InternalExecutorProvider.java b/java/sdk/src/main/java25/com/github/copilot/InternalExecutorProvider.java similarity index 100% rename from java/src/main/java25/com/github/copilot/InternalExecutorProvider.java rename to java/sdk/src/main/java25/com/github/copilot/InternalExecutorProvider.java diff --git a/java/sdk/src/main/java25/com/github/copilot/ffi/ReaderThreadFactory.java b/java/sdk/src/main/java25/com/github/copilot/ffi/ReaderThreadFactory.java new file mode 100644 index 0000000000..a67346b889 --- /dev/null +++ b/java/sdk/src/main/java25/com/github/copilot/ffi/ReaderThreadFactory.java @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +/** + * JDK 25 multi-release variant of {@link ReaderThreadFactory}. + */ +final class ReaderThreadFactory { + + Thread create(Runnable task, String name) { + return Thread.ofVirtual().name(name).unstarted(task); + } +} diff --git a/java/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/java/sdk/src/main/resources/META-INF/services/javax.annotation.processing.Processor similarity index 100% rename from java/src/main/resources/META-INF/services/javax.annotation.processing.Processor rename to java/sdk/src/main/resources/META-INF/services/javax.annotation.processing.Processor diff --git a/java/sdk/src/main/resources/copilot-runtime.properties b/java/sdk/src/main/resources/copilot-runtime.properties new file mode 100644 index 0000000000..2900464443 --- /dev/null +++ b/java/sdk/src/main/resources/copilot-runtime.properties @@ -0,0 +1,3 @@ +# This file is processed by Maven resource filtering. +# The ${project.version} placeholder is replaced at build time. +version=${project.version} diff --git a/java/src/test/java/com/github/copilot/AgentInfoTest.java b/java/sdk/src/test/java/com/github/copilot/AgentInfoTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/AgentInfoTest.java rename to java/sdk/src/test/java/com/github/copilot/AgentInfoTest.java diff --git a/java/src/test/java/com/github/copilot/AgentModeTest.java b/java/sdk/src/test/java/com/github/copilot/AgentModeTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/AgentModeTest.java rename to java/sdk/src/test/java/com/github/copilot/AgentModeTest.java diff --git a/java/src/test/java/com/github/copilot/AskUserTest.java b/java/sdk/src/test/java/com/github/copilot/AskUserTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/AskUserTest.java rename to java/sdk/src/test/java/com/github/copilot/AskUserTest.java diff --git a/java/src/test/java/com/github/copilot/ByokBearerTokenProviderE2ETest.java b/java/sdk/src/test/java/com/github/copilot/ByokBearerTokenProviderE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ByokBearerTokenProviderE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/ByokBearerTokenProviderE2ETest.java diff --git a/java/src/test/java/com/github/copilot/CapiProxy.java b/java/sdk/src/test/java/com/github/copilot/CapiProxy.java similarity index 95% rename from java/src/test/java/com/github/copilot/CapiProxy.java rename to java/sdk/src/test/java/com/github/copilot/CapiProxy.java index 6484f05818..53d5e11666 100644 --- a/java/src/test/java/com/github/copilot/CapiProxy.java +++ b/java/sdk/src/test/java/com/github/copilot/CapiProxy.java @@ -93,9 +93,10 @@ public String start() throws IOException, InterruptedException { // Start the harness server using npx tsx // On Windows, npx is installed as npx.cmd which requires cmd /c to launch boolean isWindows = System.getProperty("os.name").toLowerCase().contains("win"); + String npxPath = resolveCommand(isWindows ? "npx.cmd" : "npx"); var pb = isWindows - ? new ProcessBuilder("cmd", "/c", "npx", "tsx", "server.ts") - : new ProcessBuilder("npx", "tsx", "server.ts"); + ? new ProcessBuilder(System.getenv("COMSPEC"), "/c", npxPath, "tsx", "server.ts") + : new ProcessBuilder(npxPath, "tsx", "server.ts"); pb.directory(harnessDir.toFile()); pb.redirectErrorStream(false); // Tell the replaying proxy to fail fast on unmatched requests rather than @@ -516,6 +517,24 @@ private Path findHarnessDirectory() { return null; } + /** + * Resolves a command name to its absolute path by searching the system + * {@code PATH}. Falls back to the original name if not found. + */ + private static String resolveCommand(String command) { + String pathEnv = System.getenv("PATH"); + if (pathEnv == null) { + return command; + } + for (String dir : pathEnv.split(java.io.File.pathSeparator)) { + Path candidate = Path.of(dir, command); + if (java.nio.file.Files.isExecutable(candidate)) { + return candidate.toAbsolutePath().toString(); + } + } + return command; + } + /** * Test information record for configuring the proxy. */ diff --git a/java/src/test/java/com/github/copilot/CapiSessionOptionsTest.java b/java/sdk/src/test/java/com/github/copilot/CapiSessionOptionsTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/CapiSessionOptionsTest.java rename to java/sdk/src/test/java/com/github/copilot/CapiSessionOptionsTest.java diff --git a/java/src/test/java/com/github/copilot/CliServerManagerTest.java b/java/sdk/src/test/java/com/github/copilot/CliServerManagerTest.java similarity index 98% rename from java/src/test/java/com/github/copilot/CliServerManagerTest.java rename to java/sdk/src/test/java/com/github/copilot/CliServerManagerTest.java index b445d6153a..353858135a 100644 --- a/java/src/test/java/com/github/copilot/CliServerManagerTest.java +++ b/java/sdk/src/test/java/com/github/copilot/CliServerManagerTest.java @@ -72,7 +72,9 @@ void connectToServerTcpMode() throws Exception { private static Process startBlockingProcess() throws IOException { boolean isWindows = System.getProperty("os.name").toLowerCase().contains("windows"); - return (isWindows ? new ProcessBuilder("cmd", "/c", "more") : new ProcessBuilder("cat")).start(); + return (isWindows + ? new ProcessBuilder(System.getenv("COMSPEC"), "/c", "more") + : new ProcessBuilder("/usr/bin/cat")).start(); } @Test diff --git a/java/src/test/java/com/github/copilot/ClientOptionsE2ETest.java b/java/sdk/src/test/java/com/github/copilot/ClientOptionsE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ClientOptionsE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/ClientOptionsE2ETest.java diff --git a/java/src/test/java/com/github/copilot/ClosedSessionGuardTest.java b/java/sdk/src/test/java/com/github/copilot/ClosedSessionGuardTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ClosedSessionGuardTest.java rename to java/sdk/src/test/java/com/github/copilot/ClosedSessionGuardTest.java diff --git a/java/src/test/java/com/github/copilot/CommandsTest.java b/java/sdk/src/test/java/com/github/copilot/CommandsTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/CommandsTest.java rename to java/sdk/src/test/java/com/github/copilot/CommandsTest.java diff --git a/java/src/test/java/com/github/copilot/CompactionTest.java b/java/sdk/src/test/java/com/github/copilot/CompactionTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/CompactionTest.java rename to java/sdk/src/test/java/com/github/copilot/CompactionTest.java diff --git a/java/src/test/java/com/github/copilot/ConfigCloneTest.java b/java/sdk/src/test/java/com/github/copilot/ConfigCloneTest.java similarity index 98% rename from java/src/test/java/com/github/copilot/ConfigCloneTest.java rename to java/sdk/src/test/java/com/github/copilot/ConfigCloneTest.java index c3f726ca15..ffbfd6a076 100644 --- a/java/src/test/java/com/github/copilot/ConfigCloneTest.java +++ b/java/sdk/src/test/java/com/github/copilot/ConfigCloneTest.java @@ -383,6 +383,15 @@ void copilotClientOptionsSetEnvironmentNullClearsExisting() { assertTrue(env == null || env.isEmpty()); } + @Test + void copilotClientOptionsSetCwdNullClearsExisting() { + CopilotClientOptions opts = new CopilotClientOptions().setCwd("/tmp"); + + opts.setCwd(null); + + assertNull(opts.getCwd()); + } + @Test @SuppressWarnings("deprecation") void copilotClientOptionsDeprecatedGithubToken() { diff --git a/java/src/test/java/com/github/copilot/CopilotClientModeTest.java b/java/sdk/src/test/java/com/github/copilot/CopilotClientModeTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/CopilotClientModeTest.java rename to java/sdk/src/test/java/com/github/copilot/CopilotClientModeTest.java diff --git a/java/src/test/java/com/github/copilot/CopilotClientTest.java b/java/sdk/src/test/java/com/github/copilot/CopilotClientTest.java similarity index 99% rename from java/src/test/java/com/github/copilot/CopilotClientTest.java rename to java/sdk/src/test/java/com/github/copilot/CopilotClientTest.java index d977563aeb..067571df13 100644 --- a/java/src/test/java/com/github/copilot/CopilotClientTest.java +++ b/java/sdk/src/test/java/com/github/copilot/CopilotClientTest.java @@ -610,9 +610,9 @@ void testListModels_WithCustomHandler_WorksWithoutStart() throws Exception { private static void setConnectionFuture(CopilotClient client, JsonRpcClient rpc, Process process) throws Exception { var connectionClass = Class.forName("com.github.copilot.CopilotClient$Connection"); var constructor = connectionClass.getDeclaredConstructor(JsonRpcClient.class, Process.class, - com.github.copilot.generated.rpc.ServerRpc.class); + com.github.copilot.generated.rpc.ServerRpc.class, AutoCloseable.class); constructor.setAccessible(true); - var connection = constructor.newInstance(rpc, process, null); + var connection = constructor.newInstance(rpc, process, null, null); Field field = CopilotClient.class.getDeclaredField("connectionFuture"); field.setAccessible(true); diff --git a/java/sdk/src/test/java/com/github/copilot/CopilotClientTransportTest.java b/java/sdk/src/test/java/com/github/copilot/CopilotClientTransportTest.java new file mode 100644 index 0000000000..46223d56d8 --- /dev/null +++ b/java/sdk/src/test/java/com/github/copilot/CopilotClientTransportTest.java @@ -0,0 +1,387 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.channels.Channels; +import java.nio.channels.Pipe; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.copilot.rpc.CopilotClientOptions; +import com.github.copilot.rpc.InProcessRuntimeConnection; +import com.github.copilot.rpc.RuntimeConnection; +import com.github.copilot.rpc.StdioRuntimeConnection; +import com.github.copilot.rpc.TcpRuntimeConnection; +import com.github.copilot.rpc.TelemetryConfig; +import com.github.copilot.rpc.UriRuntimeConnection; + +/** + * Unit tests for transport selection through {@link RuntimeConnection}: the + * in-process code path, {@code COPILOT_SDK_DEFAULT_CONNECTION} resolution, the + * backward-compatibility bridge from the individual transport options, and + * option validation. + */ +@AllowCopilotExperimental +class CopilotClientTransportTest { + + // ===== In-process routing ===== + + @Test + void inProcessConnectionStartsThroughInProcessRuntimeHost() throws Exception { + var options = new CopilotClientOptions().setConnection(RuntimeConnection.forInProcess()); + try (var runtime = new FakeInProcessRuntime(); var client = new CopilotClient(options)) { + client.setInProcessTransportFactory(runtime::open); + + client.start().get(30, TimeUnit.SECONDS); + + assertTrue(runtime.opened.get(), "The in-process runtime must be used for an in-process connection"); + assertInstanceOf(InProcessRuntimeConnection.class, client.getRuntimeConnection()); + + client.stop().get(30, TimeUnit.SECONDS); + assertTrue(runtime.closed.get(), "Stopping the client must close the in-process runtime host"); + } + } + + @Test + void inProcessStartupFailurePropagates() { + var options = new CopilotClientOptions().setConnection(RuntimeConnection.forInProcess()); + try (var client = new CopilotClient(options)) { + client.setInProcessTransportFactory(opts -> { + throw new IOException("no runtime available"); + }); + var failure = assertThrows(Exception.class, () -> client.start().get(30, TimeUnit.SECONDS)); + assertTrue(rootMessage(failure).contains("no runtime available")); + } + } + + @Test + void cliTransportDoesNotUseTheInProcessRuntime() throws Exception { + var options = new CopilotClientOptions().setCliUrl("127.0.0.1:1"); + try (var client = new CopilotClient(options)) { + client.setInProcessTransportFactory(opts -> { + throw new AssertionError("The in-process runtime must not be used for a CLI transport"); + }); + + assertThrows(Exception.class, () -> client.start().get(30, TimeUnit.SECONDS)); + assertInstanceOf(UriRuntimeConnection.class, client.getRuntimeConnection()); + } + } + + // ===== COPILOT_SDK_DEFAULT_CONNECTION resolution ===== + + @Test + void defaultConnectionEnvVarSelectsInProcess() { + var connection = CopilotClient.resolveDefaultConnection(new CopilotClientOptions(), "inprocess"); + assertInstanceOf(InProcessRuntimeConnection.class, connection); + assertInstanceOf(InProcessRuntimeConnection.class, + CopilotClient.resolveDefaultConnection(new CopilotClientOptions(), "InProcess")); + } + + @Test + void defaultConnectionEnvVarStdioAndUnsetKeepTheConfiguredTransport() { + assertInstanceOf(StdioRuntimeConnection.class, + CopilotClient.resolveDefaultConnection(new CopilotClientOptions(), "stdio")); + assertInstanceOf(StdioRuntimeConnection.class, + CopilotClient.resolveDefaultConnection(new CopilotClientOptions(), null)); + assertInstanceOf(TcpRuntimeConnection.class, + CopilotClient.resolveDefaultConnection(new CopilotClientOptions().setUseStdio(false), "")); + assertInstanceOf(TcpRuntimeConnection.class, CopilotClient.resolveDefaultConnection( + new CopilotClientOptions().setUseStdio(false).setTcpConnectionToken("secret"), "inprocess")); + } + + @Test + void defaultConnectionEnvVarRejectsUnknownValues() { + var error = assertThrows(IllegalArgumentException.class, + () -> CopilotClient.resolveDefaultConnection(new CopilotClientOptions(), "websocket")); + assertTrue(error.getMessage().contains(CopilotClient.DEFAULT_CONNECTION_ENV_VAR)); + } + + // ===== Backward-compatibility bridge ===== + + @Test + void legacyStdioOptionsInferStdioConnection() { + try (var client = new CopilotClient(new CopilotClientOptions().setCliPath("/usr/local/bin/copilot"))) { + var connection = assertInstanceOf(StdioRuntimeConnection.class, client.getRuntimeConnection()); + assertEquals("/usr/local/bin/copilot", connection.getPath()); + } + } + + @Test + void legacyTcpOptionsInferTcpConnection() { + var options = new CopilotClientOptions().setUseStdio(false).setPort(4321).setTcpConnectionToken("secret"); + try (var client = new CopilotClient(options)) { + var connection = assertInstanceOf(TcpRuntimeConnection.class, client.getRuntimeConnection()); + assertEquals(4321, connection.getPort()); + assertEquals("secret", connection.getConnectionToken()); + } + } + + @Test + void legacyCliUrlInfersUriConnection() { + try (var client = new CopilotClient(new CopilotClientOptions().setCliUrl("localhost:3000"))) { + var connection = assertInstanceOf(UriRuntimeConnection.class, client.getRuntimeConnection()); + assertEquals("localhost:3000", connection.getUrl()); + } + } + + // ===== Connection applied to the transport options ===== + + @Test + void connectionIsProjectedOntoTransportOptions() { + var stdio = new CopilotClientOptions().setConnection(RuntimeConnection.forStdio("/opt/copilot")); + try (var client = new CopilotClient(stdio)) { + assertTrue(stdio.isUseStdio()); + assertEquals("/opt/copilot", stdio.getCliPath()); + } + + var tcp = new CopilotClientOptions().setConnection( + RuntimeConnection.forTcp().setPort(4321).setConnectionToken("secret").setArgs(List.of("--extra"))); + try (var client = new CopilotClient(tcp)) { + assertFalse(tcp.isUseStdio()); + assertEquals(4321, tcp.getPort()); + assertEquals("secret", tcp.getTcpConnectionToken()); + assertEquals(List.of("--extra"), List.of(tcp.getCliArgs())); + } + + var uri = new CopilotClientOptions().setConnection(RuntimeConnection.forUri("localhost:3000")); + try (var client = new CopilotClient(uri)) { + assertFalse(uri.isUseStdio()); + assertEquals("localhost:3000", uri.getCliUrl()); + } + } + + // ===== Conflicting configuration ===== + + @Test + void connectionCannotBeCombinedWithTransportOptions() { + assertConflict(new CopilotClientOptions().setConnection(RuntimeConnection.forStdio()) + .setCliPath("/usr/local/bin/copilot"), "CliPath"); + assertConflict( + new CopilotClientOptions().setConnection(RuntimeConnection.forInProcess()).setCliUrl("localhost:3000"), + "CliUrl"); + assertConflict(new CopilotClientOptions().setConnection(RuntimeConnection.forStdio()).setUseStdio(false), + "UseStdio"); + assertConflict(new CopilotClientOptions().setConnection(RuntimeConnection.forTcp()).setPort(4321), "Port"); + assertConflict( + new CopilotClientOptions().setConnection(RuntimeConnection.forTcp()).setTcpConnectionToken("secret"), + "TcpConnectionToken"); + assertConflict(new CopilotClientOptions().setConnection(RuntimeConnection.forStdio()) + .setCliArgs(new String[]{"--extra"}), "CliArgs"); + } + + @Test + void connectionCanBeReusedForSeveralClients() { + var options = new CopilotClientOptions().setConnection(RuntimeConnection.forStdio("/opt/copilot")); + try (var first = new CopilotClient(options); var second = new CopilotClient(options)) { + assertInstanceOf(StdioRuntimeConnection.class, first.getRuntimeConnection()); + assertInstanceOf(StdioRuntimeConnection.class, second.getRuntimeConnection()); + } + } + + private static void assertConflict(CopilotClientOptions options, String optionName) { + var error = assertThrows(IllegalArgumentException.class, () -> new CopilotClient(options)); + assertTrue(error.getMessage().contains(optionName), "Expected '" + optionName + "' in: " + error.getMessage()); + } + + // ===== Options rejected for the in-process transport ===== + + @Test + void inProcessRejectsPerProcessOptions() { + assertInProcessRejected(new CopilotClientOptions().setEnvironment(Map.of("FOO", "bar")), "Environment"); + assertInProcessRejected(new CopilotClientOptions().setTelemetry(new TelemetryConfig()), "Telemetry"); + assertInProcessRejected(new CopilotClientOptions().setCwd("/tmp"), "Cwd"); + assertInProcessRejected(new CopilotClientOptions().setCliArgs(new String[]{"--extra"}), "CliArgs"); + } + + @Test + void e2eContextClearsInProcessIncompatibleOptions() throws Exception { + try (var context = E2ETestContext.create()) { + var options = new CopilotClientOptions().setConnection(RuntimeConnection.forInProcess()) + .setEnvironment(Map.of("TEST_KEY", "test-value")).setCwd(context.getWorkDir().toString()) + .setCliArgs(new String[]{"--subprocess-only"}); + + try (var client = context.createClient(options)) { + assertInstanceOf(InProcessRuntimeConnection.class, client.getRuntimeConnection()); + assertTrue(options.getEnvironment() == null || options.getEnvironment().isEmpty()); + assertEquals(null, options.getCwd()); + assertTrue(options.getCliArgs() == null || options.getCliArgs().length == 0); + } + } + } + + private static void assertInProcessRejected(CopilotClientOptions options, String optionName) { + options.setConnection(RuntimeConnection.forInProcess()); + var error = assertThrows(IllegalArgumentException.class, () -> new CopilotClient(options)); + assertTrue(error.getMessage().contains(optionName), "Expected '" + optionName + "' in: " + error.getMessage()); + assertTrue(error.getMessage().contains("forInProcess"), + "Expected the in-process transport to be named in: " + error.getMessage()); + } + + private static String rootMessage(Throwable error) { + Throwable cause = error; + while (cause.getCause() != null) { + cause = cause.getCause(); + } + return String.valueOf(cause.getMessage()); + } + + /** + * Minimal loopback stand-in for the in-process runtime: it speaks just enough + * JSON-RPC for {@link CopilotClient#start()} to complete, so the test can + * assert that the client wires its transport to the in-process host rather than + * to a child process. + */ + private static final class FakeInProcessRuntime implements AutoCloseable { + + private static final ObjectMapper MAPPER = new ObjectMapper(); + + private final AtomicBoolean opened = new AtomicBoolean(); + private final AtomicBoolean closed = new AtomicBoolean(); + private final BytePipe toClient; + private final BytePipe toRuntime; + private final InputStream runtimeInput; + private final OutputStream runtimeOutput; + private final Thread responder; + + FakeInProcessRuntime() throws IOException { + this.toClient = new BytePipe(); + this.toRuntime = new BytePipe(); + this.runtimeInput = toRuntime.inputStream(); + this.runtimeOutput = toClient.outputStream(); + this.responder = new Thread(this::respondToRequests, "fake-inprocess-runtime"); + this.responder.setDaemon(true); + this.responder.start(); + } + + CopilotClient.InProcessTransport open(CopilotClientOptions options) { + opened.set(true); + return new CopilotClient.InProcessTransport(toClient.inputStream(), toRuntime.outputStream(), this::close); + } + + @Override + public void close() { + if (!closed.compareAndSet(false, true)) { + return; + } + toRuntime.close(); + toClient.close(); + } + + private void respondToRequests() { + try { + while (!closed.get()) { + JsonNode request = readMessage(runtimeInput); + if (request == null) { + return; + } + if (!request.hasNonNull("id")) { + continue; + } + var response = MAPPER.createObjectNode(); + response.put("jsonrpc", "2.0"); + response.set("id", request.get("id")); + var result = response.putObject("result"); + if ("connect".equals(request.path("method").asText())) { + result.put("protocolVersion", SdkProtocolVersion.get()); + } + writeMessage(runtimeOutput, response); + } + } catch (IOException e) { + // The streams are closed when the client shuts down. + } + } + + private static JsonNode readMessage(InputStream in) throws IOException { + int contentLength = -1; + var line = new ByteArrayOutputStream(); + while (true) { + int b = in.read(); + if (b == -1) { + return null; + } + if (b == '\n') { + String header = line.toString(StandardCharsets.UTF_8).trim(); + line.reset(); + if (header.isEmpty()) { + break; + } + if (header.toLowerCase(Locale.ROOT).startsWith("content-length:")) { + contentLength = Integer.parseInt(header.substring(header.indexOf(':') + 1).trim()); + } + } else if (b != '\r') { + line.write(b); + } + } + if (contentLength < 0) { + throw new IOException("Missing Content-Length header"); + } + byte[] body = in.readNBytes(contentLength); + if (body.length != contentLength) { + return null; + } + return MAPPER.readTree(body); + } + + private static void writeMessage(OutputStream out, JsonNode message) throws IOException { + byte[] body = MAPPER.writeValueAsBytes(message); + out.write(("Content-Length: " + body.length + "\r\n\r\n").getBytes(StandardCharsets.UTF_8)); + out.write(body); + out.flush(); + } + } + + /** + * Duplex byte channel used by {@link FakeInProcessRuntime} to emulate the + * streams of an in-process runtime. + */ + private static final class BytePipe { + + private final Pipe pipe; + + BytePipe() throws IOException { + this.pipe = Pipe.open(); + } + + InputStream inputStream() { + return Channels.newInputStream(pipe.source()); + } + + OutputStream outputStream() { + return Channels.newOutputStream(pipe.sink()); + } + + void close() { + closeQuietly(pipe.sink()); + closeQuietly(pipe.source()); + } + + private static void closeQuietly(Closeable closeable) { + try { + closeable.close(); + } catch (IOException e) { + // Nothing useful to do while tearing down a test pipe. + } + } + } +} diff --git a/java/src/test/java/com/github/copilot/CopilotExperimentalProcessorTest.java b/java/sdk/src/test/java/com/github/copilot/CopilotExperimentalProcessorTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/CopilotExperimentalProcessorTest.java rename to java/sdk/src/test/java/com/github/copilot/CopilotExperimentalProcessorTest.java diff --git a/java/src/test/java/com/github/copilot/CopilotRequestCancelErrorE2ETest.java b/java/sdk/src/test/java/com/github/copilot/CopilotRequestCancelErrorE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/CopilotRequestCancelErrorE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/CopilotRequestCancelErrorE2ETest.java diff --git a/java/src/test/java/com/github/copilot/CopilotRequestHandlerE2ETest.java b/java/sdk/src/test/java/com/github/copilot/CopilotRequestHandlerE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/CopilotRequestHandlerE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/CopilotRequestHandlerE2ETest.java diff --git a/java/src/test/java/com/github/copilot/CopilotRequestSessionIdE2ETest.java b/java/sdk/src/test/java/com/github/copilot/CopilotRequestSessionIdE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/CopilotRequestSessionIdE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/CopilotRequestSessionIdE2ETest.java diff --git a/java/src/test/java/com/github/copilot/CopilotRequestTestSupport.java b/java/sdk/src/test/java/com/github/copilot/CopilotRequestTestSupport.java similarity index 99% rename from java/src/test/java/com/github/copilot/CopilotRequestTestSupport.java rename to java/sdk/src/test/java/com/github/copilot/CopilotRequestTestSupport.java index ecbf92068f..aa173ef30e 100644 --- a/java/src/test/java/com/github/copilot/CopilotRequestTestSupport.java +++ b/java/sdk/src/test/java/com/github/copilot/CopilotRequestTestSupport.java @@ -72,7 +72,8 @@ static CopilotClient newLlmClient(E2ETestContext ctx, CopilotRequestHandler hand env.put(entry.substring(0, eq), entry.substring(eq + 1)); } } - return ctx.createClient(new CopilotClientOptions().setEnvironment(env).setRequestHandler(handler)); + return ctx.createClient( + new CopilotClientOptions().setCliPath(ctx.getCliPath()).setEnvironment(env).setRequestHandler(handler)); } /** diff --git a/java/src/test/java/com/github/copilot/CopilotSessionTest.java b/java/sdk/src/test/java/com/github/copilot/CopilotSessionTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/CopilotSessionTest.java rename to java/sdk/src/test/java/com/github/copilot/CopilotSessionTest.java diff --git a/java/src/test/java/com/github/copilot/CreateSessionReKeyEntryTest.java b/java/sdk/src/test/java/com/github/copilot/CreateSessionReKeyEntryTest.java similarity index 99% rename from java/src/test/java/com/github/copilot/CreateSessionReKeyEntryTest.java rename to java/sdk/src/test/java/com/github/copilot/CreateSessionReKeyEntryTest.java index 156c968489..79e968cd39 100644 --- a/java/src/test/java/com/github/copilot/CreateSessionReKeyEntryTest.java +++ b/java/sdk/src/test/java/com/github/copilot/CreateSessionReKeyEntryTest.java @@ -170,8 +170,9 @@ private static void injectConnection(CopilotClient client, JsonRpcClient rpc) th var ctor = connClass.getDeclaredConstructors()[0]; ctor.setAccessible(true); - // Connection(JsonRpcClient rpc, Process process, ServerRpc serverRpc) - Object connection = ctor.newInstance(rpc, null, null); + // Connection(JsonRpcClient rpc, Process process, ServerRpc serverRpc, + // AutoCloseable runtimeHost) + Object connection = ctor.newInstance(rpc, null, null, null); Field f = CopilotClient.class.getDeclaredField("connectionFuture"); f.setAccessible(true); diff --git a/java/src/test/java/com/github/copilot/DataObjectCoverageTest.java b/java/sdk/src/test/java/com/github/copilot/DataObjectCoverageTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/DataObjectCoverageTest.java rename to java/sdk/src/test/java/com/github/copilot/DataObjectCoverageTest.java diff --git a/java/src/test/java/com/github/copilot/DocumentationSamplesTest.java b/java/sdk/src/test/java/com/github/copilot/DocumentationSamplesTest.java similarity index 99% rename from java/src/test/java/com/github/copilot/DocumentationSamplesTest.java rename to java/sdk/src/test/java/com/github/copilot/DocumentationSamplesTest.java index f7170f4fde..4e1396aa93 100644 --- a/java/src/test/java/com/github/copilot/DocumentationSamplesTest.java +++ b/java/sdk/src/test/java/com/github/copilot/DocumentationSamplesTest.java @@ -132,7 +132,7 @@ private static String stripStringsAndComments(String input) { private static List documentationFiles() throws IOException { Path root = Path.of("").toAbsolutePath(); List files = new ArrayList<>(); - files.add(root.resolve("README.md")); + files.add(root.resolve("../README.md")); files.add(root.resolve("jbang-example.java")); return files; } diff --git a/java/src/test/java/com/github/copilot/E2ETestContext.java b/java/sdk/src/test/java/com/github/copilot/E2ETestContext.java similarity index 90% rename from java/src/test/java/com/github/copilot/E2ETestContext.java rename to java/sdk/src/test/java/com/github/copilot/E2ETestContext.java index f524b33dab..60dcf1fa39 100644 --- a/java/src/test/java/com/github/copilot/E2ETestContext.java +++ b/java/sdk/src/test/java/com/github/copilot/E2ETestContext.java @@ -18,7 +18,10 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import com.github.copilot.ffi.InProcessEnvGuard; import com.github.copilot.rpc.CopilotClientOptions; +import com.github.copilot.rpc.InProcessRuntimeConnection; +import com.github.copilot.rpc.RuntimeConnection; /** * E2E test context that manages the test environment including the CapiProxy, @@ -71,6 +74,7 @@ public class E2ETestContext implements AutoCloseable { private String proxyUrl; private final CapiProxy proxy; private final Path repoRoot; + private final List inProcessEnvGuards = new ArrayList<>(); private Path currentSnapshotFile; private E2ETestContext(String cliPath, Path homeDir, Path workDir, String proxyUrl, CapiProxy proxy, @@ -322,10 +326,8 @@ public Map getEnvironment() { * @return a new CopilotClient */ public CopilotClient createClient() { - CopilotClientOptions options = new CopilotClientOptions().setCliPath(cliPath).setCwd(workDir.toString()) - .setEnvironment(getEnvironment()).setGitHubToken(DEFAULT_GITHUB_TOKEN); - - return new CopilotClient(options); + CopilotClientOptions options = new CopilotClientOptions().setGitHubToken(DEFAULT_GITHUB_TOKEN); + return createClient(options); } /** @@ -338,6 +340,31 @@ public CopilotClient createClient() { * @return a new CopilotClient */ public CopilotClient createClient(CopilotClientOptions options) { + CopilotClient client = applyContextOptions(options); + if (client != null) { + return client; + } + if (options.getGitHubToken() == null) { + options.setGitHubToken(DEFAULT_GITHUB_TOKEN); + } + + return new CopilotClient(options); + } + + private CopilotClient applyContextOptions(CopilotClientOptions options) { + if (isInProcessMode(options)) { + InProcessEnvGuard guard = new InProcessEnvGuard(buildInProcessEnvironment(options)); + inProcessEnvGuards.add(guard); + try { + options.setEnvironment(null); + options.setCwd(null); + options.setCliArgs(null); + return new CopilotClient(options, guard::close); + } catch (RuntimeException e) { + guard.close(); + throw e; + } + } if (options.getCliPath() == null) { options.setCliPath(cliPath); } @@ -347,11 +374,30 @@ public CopilotClient createClient(CopilotClientOptions options) { if (options.getEnvironment() == null || options.getEnvironment().isEmpty()) { options.setEnvironment(getEnvironment()); } - if (options.getGitHubToken() == null) { - options.setGitHubToken(DEFAULT_GITHUB_TOKEN); + return null; + } + + private boolean isInProcessMode(CopilotClientOptions options) { + RuntimeConnection connection = options.getConnection(); + if (connection != null) { + return connection instanceof InProcessRuntimeConnection; + } + if (options.getRequestHandler() != null || options.getCliUrl() != null || options.getCliPath() != null + || options.getPort() != 0) { + return false; } + String defaultConnection = System.getenv("COPILOT_SDK_DEFAULT_CONNECTION"); + return defaultConnection != null && "inprocess".equalsIgnoreCase(defaultConnection.trim()); + } - return new CopilotClient(options); + private Map buildInProcessEnvironment(CopilotClientOptions options) { + Map env = new HashMap<>(getEnvironment()); + Map optionEnvironment = options.getEnvironment(); + if (optionEnvironment != null && !optionEnvironment.isEmpty()) { + env.putAll(optionEnvironment); + options.setEnvironment(null); + } + return env; } /** @@ -428,6 +474,9 @@ public void initializeProxy() throws IOException, InterruptedException { @Override public void close() throws Exception { + for (int i = inProcessEnvGuards.size() - 1; i >= 0; i--) { + inProcessEnvGuards.get(i).close(); + } proxy.stop(); // Clean up temp directories (best effort) diff --git a/java/src/test/java/com/github/copilot/ElicitationTest.java b/java/sdk/src/test/java/com/github/copilot/ElicitationTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ElicitationTest.java rename to java/sdk/src/test/java/com/github/copilot/ElicitationTest.java diff --git a/java/src/test/java/com/github/copilot/ErrorHandlingTest.java b/java/sdk/src/test/java/com/github/copilot/ErrorHandlingTest.java similarity index 94% rename from java/src/test/java/com/github/copilot/ErrorHandlingTest.java rename to java/sdk/src/test/java/com/github/copilot/ErrorHandlingTest.java index 32579ffc4e..46f6741a04 100644 --- a/java/src/test/java/com/github/copilot/ErrorHandlingTest.java +++ b/java/sdk/src/test/java/com/github/copilot/ErrorHandlingTest.java @@ -158,6 +158,10 @@ void testShouldHandlePermissionHandlerErrorsGracefully_deniesPermission() throws || content.contains("permission") || content.contains("denied"), "Response should indicate permission was denied: " + content); + // Verify that the error handler was wired correctly. Whether error events are + // actually emitted depends on the CLI version and the scenario's replay data. + LOG.info("Collected " + errorEvents.size() + " error event(s) from permission handler crash"); + session.close(); } } @@ -198,9 +202,10 @@ void testPermissionHandlerErrors_sessionErrorEventContainsDetails() throws Excep session.close(); } - // Note: Whether error events are emitted depends on the CLI version and - // scenario - // This test verifies the handler can receive them when they occur + // Whether error events are emitted depends on the CLI version and scenario. + // This test verifies the handler can receive them when they occur. + // Access the list to confirm it was populated (even if empty is acceptable). + LOG.info("Collected " + errorEvents.size() + " error event(s)"); } /** diff --git a/java/src/test/java/com/github/copilot/EventFidelityTest.java b/java/sdk/src/test/java/com/github/copilot/EventFidelityTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/EventFidelityTest.java rename to java/sdk/src/test/java/com/github/copilot/EventFidelityTest.java diff --git a/java/src/test/java/com/github/copilot/ExecutorWiringTest.java b/java/sdk/src/test/java/com/github/copilot/ExecutorWiringTest.java similarity index 95% rename from java/src/test/java/com/github/copilot/ExecutorWiringTest.java rename to java/sdk/src/test/java/com/github/copilot/ExecutorWiringTest.java index 78764db0fb..a8319475c6 100644 --- a/java/src/test/java/com/github/copilot/ExecutorWiringTest.java +++ b/java/sdk/src/test/java/com/github/copilot/ExecutorWiringTest.java @@ -86,8 +86,7 @@ int getTaskCount() { } private CopilotClientOptions createOptionsWithExecutor(TrackingExecutor executor) { - CopilotClientOptions options = new CopilotClientOptions().setCliPath(ctx.getCliPath()) - .setCwd(ctx.getWorkDir().toString()).setEnvironment(ctx.getEnvironment()).setExecutor(executor) + CopilotClientOptions options = new CopilotClientOptions().setExecutor(executor) .setGitHubToken("fake-token-for-e2e-tests"); return options; } @@ -111,7 +110,7 @@ void testClientStartUsesProvidedExecutor() throws Exception { TrackingExecutor trackingExecutor = new TrackingExecutor(ForkJoinPool.commonPool()); int beforeStart = trackingExecutor.getTaskCount(); - try (CopilotClient client = new CopilotClient(createOptionsWithExecutor(trackingExecutor))) { + try (CopilotClient client = ctx.createClient(createOptionsWithExecutor(trackingExecutor))) { client.start().get(30, TimeUnit.SECONDS); assertTrue(trackingExecutor.getTaskCount() > beforeStart, @@ -156,7 +155,7 @@ void testToolCallDispatchUsesProvidedExecutor() throws Exception { }); // Reset count after client construction to isolate tool-call dispatch - try (CopilotClient client = new CopilotClient(createOptionsWithExecutor(trackingExecutor))) { + try (CopilotClient client = ctx.createClient(createOptionsWithExecutor(trackingExecutor))) { CopilotSession session = client.createSession(new SessionConfig().setTools(List.of(encryptTool)) .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)).get(); @@ -198,7 +197,7 @@ void testPermissionDispatchUsesProvidedExecutor() throws Exception { var config = new SessionConfig().setOnPermissionRequest((request, invocation) -> CompletableFuture .completedFuture(new PermissionRequestResult().setKind(PermissionRequestResultKind.APPROVED))); - try (CopilotClient client = new CopilotClient(createOptionsWithExecutor(trackingExecutor))) { + try (CopilotClient client = ctx.createClient(createOptionsWithExecutor(trackingExecutor))) { CopilotSession session = client.createSession(config).get(); Path testFile = ctx.getWorkDir().resolve("test.txt"); @@ -247,7 +246,7 @@ void testUserInputDispatchUsesProvidedExecutor() throws Exception { .completedFuture(new UserInputResponse().setAnswer(answer).setWasFreeform(wasFreeform)); }); - try (CopilotClient client = new CopilotClient(createOptionsWithExecutor(trackingExecutor))) { + try (CopilotClient client = ctx.createClient(createOptionsWithExecutor(trackingExecutor))) { CopilotSession session = client.createSession(config).get(); int beforeSend = trackingExecutor.getTaskCount(); @@ -286,7 +285,7 @@ void testHooksDispatchUsesProvidedExecutor() throws Exception { .setHooks(new SessionHooks().setOnPreToolUse( (input, invocation) -> CompletableFuture.completedFuture(PreToolUseHookOutput.allow()))); - try (CopilotClient client = new CopilotClient(createOptionsWithExecutor(trackingExecutor))) { + try (CopilotClient client = ctx.createClient(createOptionsWithExecutor(trackingExecutor))) { CopilotSession session = client.createSession(config).get(); Path testFile = ctx.getWorkDir().resolve("hello.txt"); @@ -342,7 +341,7 @@ void testClientStopUsesProvidedExecutor() throws Exception { return CompletableFuture.completedFuture(input.toUpperCase()); }); - CopilotClient client = new CopilotClient(createOptionsWithExecutor(trackingExecutor)); + CopilotClient client = ctx.createClient(createOptionsWithExecutor(trackingExecutor)); client.createSession(new SessionConfig().setTools(List.of(encryptTool)) .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)).get(); diff --git a/java/src/test/java/com/github/copilot/FakeUpstreamServer.java b/java/sdk/src/test/java/com/github/copilot/FakeUpstreamServer.java similarity index 97% rename from java/src/test/java/com/github/copilot/FakeUpstreamServer.java rename to java/sdk/src/test/java/com/github/copilot/FakeUpstreamServer.java index 7af60d4d38..909cd14069 100644 --- a/java/src/test/java/com/github/copilot/FakeUpstreamServer.java +++ b/java/sdk/src/test/java/com/github/copilot/FakeUpstreamServer.java @@ -162,7 +162,10 @@ private void serveHttp(InputStream in, OutputStream out, String path, Map headers) throws Exception { String key = headers.get("sec-websocket-key"); - MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); + // SHA-1 is mandated by the WebSocket protocol (RFC 6455 §4.2.2) for the + // Sec-WebSocket-Accept handshake hash. This is NOT used for security purposes. + @SuppressWarnings("codeql[java/weak-cryptographic-algorithm]") + MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); // lgtm[java/weak-cryptographic-algorithm] byte[] digest = sha1.digest((key + WS_MAGIC).getBytes(StandardCharsets.US_ASCII)); String accept = Base64.getEncoder().encodeToString(digest); String response = "HTTP/1.1 101 Switching Protocols\r\n" + "Upgrade: websocket\r\n" + "Connection: Upgrade\r\n" diff --git a/java/src/test/java/com/github/copilot/ForwardCompatibilityTest.java b/java/sdk/src/test/java/com/github/copilot/ForwardCompatibilityTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ForwardCompatibilityTest.java rename to java/sdk/src/test/java/com/github/copilot/ForwardCompatibilityTest.java diff --git a/java/src/test/java/com/github/copilot/GitHubTelemetryForwardingIT.java b/java/sdk/src/test/java/com/github/copilot/GitHubTelemetryForwardingIT.java similarity index 100% rename from java/src/test/java/com/github/copilot/GitHubTelemetryForwardingIT.java rename to java/sdk/src/test/java/com/github/copilot/GitHubTelemetryForwardingIT.java diff --git a/java/src/test/java/com/github/copilot/GitHubTelemetryTest.java b/java/sdk/src/test/java/com/github/copilot/GitHubTelemetryTest.java similarity index 91% rename from java/src/test/java/com/github/copilot/GitHubTelemetryTest.java rename to java/sdk/src/test/java/com/github/copilot/GitHubTelemetryTest.java index 8e35bd9a92..7b0deb9977 100644 --- a/java/src/test/java/com/github/copilot/GitHubTelemetryTest.java +++ b/java/sdk/src/test/java/com/github/copilot/GitHubTelemetryTest.java @@ -259,23 +259,24 @@ void sendTelemetry(Object params) throws Exception { private void acceptLoop() { try { Socket socket = serverSocket.accept(); - JsonRpcClient server = JsonRpcClient.fromSocket(socket); - server.registerMethodHandler("connect", (id, params) -> { - connectParams.complete(params); - respond(server, id, Map.of("protocolVersion", 2)); + JsonRpcClient server = JsonRpcClient.fromSocket(socket, rpc -> { + rpc.registerMethodHandler("connect", (id, params) -> { + connectParams.complete(params); + respond(rpc, id, Map.of("protocolVersion", 2)); + }); + rpc.registerMethodHandler("session.create", (id, params) -> { + createParams.complete(params); + respond(rpc, id, Map.of("sessionId", params.path("sessionId").asText("created"), + "workspacePath", "/workspace")); + }); + rpc.registerMethodHandler("session.resume", (id, params) -> { + resumeParams.complete(params); + respond(rpc, id, Map.of("sessionId", params.path("sessionId").asText("resume-1"), + "workspacePath", "/workspace")); + }); + rpc.registerMethodHandler("session.destroy", (id, params) -> respond(rpc, id, Map.of())); + rpc.registerMethodHandler("runtime.shutdown", (id, params) -> respond(rpc, id, Map.of())); }); - server.registerMethodHandler("session.create", (id, params) -> { - createParams.complete(params); - respond(server, id, Map.of("sessionId", params.path("sessionId").asText("created"), "workspacePath", - "/workspace")); - }); - server.registerMethodHandler("session.resume", (id, params) -> { - resumeParams.complete(params); - respond(server, id, Map.of("sessionId", params.path("sessionId").asText("resume-1"), - "workspacePath", "/workspace")); - }); - server.registerMethodHandler("session.destroy", (id, params) -> respond(server, id, Map.of())); - server.registerMethodHandler("runtime.shutdown", (id, params) -> respond(server, id, Map.of())); ready.complete(server); } catch (IOException e) { ready.completeExceptionally(e); diff --git a/java/src/test/java/com/github/copilot/HooksTest.java b/java/sdk/src/test/java/com/github/copilot/HooksTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/HooksTest.java rename to java/sdk/src/test/java/com/github/copilot/HooksTest.java diff --git a/java/src/test/java/com/github/copilot/InternalExecutorProviderIT.java b/java/sdk/src/test/java/com/github/copilot/InternalExecutorProviderIT.java similarity index 100% rename from java/src/test/java/com/github/copilot/InternalExecutorProviderIT.java rename to java/sdk/src/test/java/com/github/copilot/InternalExecutorProviderIT.java diff --git a/java/src/test/java/com/github/copilot/InternalExecutorProviderProbe.java b/java/sdk/src/test/java/com/github/copilot/InternalExecutorProviderProbe.java similarity index 100% rename from java/src/test/java/com/github/copilot/InternalExecutorProviderProbe.java rename to java/sdk/src/test/java/com/github/copilot/InternalExecutorProviderProbe.java diff --git a/java/src/test/java/com/github/copilot/InternalExecutorProviderTest.java b/java/sdk/src/test/java/com/github/copilot/InternalExecutorProviderTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/InternalExecutorProviderTest.java rename to java/sdk/src/test/java/com/github/copilot/InternalExecutorProviderTest.java diff --git a/java/src/test/java/com/github/copilot/JsonIncludeNonNullTest.java b/java/sdk/src/test/java/com/github/copilot/JsonIncludeNonNullTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/JsonIncludeNonNullTest.java rename to java/sdk/src/test/java/com/github/copilot/JsonIncludeNonNullTest.java diff --git a/java/src/test/java/com/github/copilot/JsonRpcClientTest.java b/java/sdk/src/test/java/com/github/copilot/JsonRpcClientTest.java similarity index 99% rename from java/src/test/java/com/github/copilot/JsonRpcClientTest.java rename to java/sdk/src/test/java/com/github/copilot/JsonRpcClientTest.java index 3491ac8ab4..d6c0b5e148 100644 --- a/java/src/test/java/com/github/copilot/JsonRpcClientTest.java +++ b/java/sdk/src/test/java/com/github/copilot/JsonRpcClientTest.java @@ -135,7 +135,9 @@ void testIsConnectedWithSocketClosed() throws Exception { private static Process startBlockingProcess() throws IOException { boolean isWindows = System.getProperty("os.name").toLowerCase().contains("windows"); - return (isWindows ? new ProcessBuilder("cmd", "/c", "more") : new ProcessBuilder("cat")).start(); + return (isWindows + ? new ProcessBuilder(System.getenv("COMSPEC"), "/c", "more") + : new ProcessBuilder("/usr/bin/cat")).start(); } @Test diff --git a/java/src/test/java/com/github/copilot/LifecycleEventManagerTest.java b/java/sdk/src/test/java/com/github/copilot/LifecycleEventManagerTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/LifecycleEventManagerTest.java rename to java/sdk/src/test/java/com/github/copilot/LifecycleEventManagerTest.java diff --git a/java/src/test/java/com/github/copilot/LowLevelToolDefinitionIT.java b/java/sdk/src/test/java/com/github/copilot/LowLevelToolDefinitionIT.java similarity index 100% rename from java/src/test/java/com/github/copilot/LowLevelToolDefinitionIT.java rename to java/sdk/src/test/java/com/github/copilot/LowLevelToolDefinitionIT.java diff --git a/java/src/test/java/com/github/copilot/ManagedSettingsTest.java b/java/sdk/src/test/java/com/github/copilot/ManagedSettingsTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ManagedSettingsTest.java rename to java/sdk/src/test/java/com/github/copilot/ManagedSettingsTest.java diff --git a/java/src/test/java/com/github/copilot/McpAndAgentsTest.java b/java/sdk/src/test/java/com/github/copilot/McpAndAgentsTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/McpAndAgentsTest.java rename to java/sdk/src/test/java/com/github/copilot/McpAndAgentsTest.java diff --git a/java/src/test/java/com/github/copilot/McpAuthInterestRegistrationTest.java b/java/sdk/src/test/java/com/github/copilot/McpAuthInterestRegistrationTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/McpAuthInterestRegistrationTest.java rename to java/sdk/src/test/java/com/github/copilot/McpAuthInterestRegistrationTest.java diff --git a/java/src/test/java/com/github/copilot/McpOAuthE2ETest.java b/java/sdk/src/test/java/com/github/copilot/McpOAuthE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/McpOAuthE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/McpOAuthE2ETest.java diff --git a/java/src/test/java/com/github/copilot/McpOAuthResumeE2ETest.java b/java/sdk/src/test/java/com/github/copilot/McpOAuthResumeE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/McpOAuthResumeE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/McpOAuthResumeE2ETest.java diff --git a/java/src/test/java/com/github/copilot/MessageAttachmentTest.java b/java/sdk/src/test/java/com/github/copilot/MessageAttachmentTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/MessageAttachmentTest.java rename to java/sdk/src/test/java/com/github/copilot/MessageAttachmentTest.java diff --git a/java/src/test/java/com/github/copilot/MetadataApiTest.java b/java/sdk/src/test/java/com/github/copilot/MetadataApiTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/MetadataApiTest.java rename to java/sdk/src/test/java/com/github/copilot/MetadataApiTest.java diff --git a/java/src/test/java/com/github/copilot/ModeHandlersTest.java b/java/sdk/src/test/java/com/github/copilot/ModeHandlersTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ModeHandlersTest.java rename to java/sdk/src/test/java/com/github/copilot/ModeHandlersTest.java diff --git a/java/src/test/java/com/github/copilot/ModelInfoTest.java b/java/sdk/src/test/java/com/github/copilot/ModelInfoTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ModelInfoTest.java rename to java/sdk/src/test/java/com/github/copilot/ModelInfoTest.java diff --git a/java/src/test/java/com/github/copilot/ModuleDescriptorTest.java b/java/sdk/src/test/java/com/github/copilot/ModuleDescriptorTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ModuleDescriptorTest.java rename to java/sdk/src/test/java/com/github/copilot/ModuleDescriptorTest.java diff --git a/java/src/test/java/com/github/copilot/MultiProviderConfigTest.java b/java/sdk/src/test/java/com/github/copilot/MultiProviderConfigTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/MultiProviderConfigTest.java rename to java/sdk/src/test/java/com/github/copilot/MultiProviderConfigTest.java diff --git a/java/src/test/java/com/github/copilot/MultiProviderRegistryE2ETest.java b/java/sdk/src/test/java/com/github/copilot/MultiProviderRegistryE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/MultiProviderRegistryE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/MultiProviderRegistryE2ETest.java diff --git a/java/src/test/java/com/github/copilot/OptionalApiAndJacksonTest.java b/java/sdk/src/test/java/com/github/copilot/OptionalApiAndJacksonTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/OptionalApiAndJacksonTest.java rename to java/sdk/src/test/java/com/github/copilot/OptionalApiAndJacksonTest.java diff --git a/java/src/test/java/com/github/copilot/PerSessionAuthTest.java b/java/sdk/src/test/java/com/github/copilot/PerSessionAuthTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/PerSessionAuthTest.java rename to java/sdk/src/test/java/com/github/copilot/PerSessionAuthTest.java diff --git a/java/src/test/java/com/github/copilot/PermissionRequestResultKindTest.java b/java/sdk/src/test/java/com/github/copilot/PermissionRequestResultKindTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/PermissionRequestResultKindTest.java rename to java/sdk/src/test/java/com/github/copilot/PermissionRequestResultKindTest.java diff --git a/java/src/test/java/com/github/copilot/PermissionRequestResultTest.java b/java/sdk/src/test/java/com/github/copilot/PermissionRequestResultTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/PermissionRequestResultTest.java rename to java/sdk/src/test/java/com/github/copilot/PermissionRequestResultTest.java diff --git a/java/src/test/java/com/github/copilot/PermissionsTest.java b/java/sdk/src/test/java/com/github/copilot/PermissionsTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/PermissionsTest.java rename to java/sdk/src/test/java/com/github/copilot/PermissionsTest.java diff --git a/java/src/test/java/com/github/copilot/PreMcpToolCallHookTest.java b/java/sdk/src/test/java/com/github/copilot/PreMcpToolCallHookTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/PreMcpToolCallHookTest.java rename to java/sdk/src/test/java/com/github/copilot/PreMcpToolCallHookTest.java diff --git a/java/src/test/java/com/github/copilot/ProviderConfigTest.java b/java/sdk/src/test/java/com/github/copilot/ProviderConfigTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ProviderConfigTest.java rename to java/sdk/src/test/java/com/github/copilot/ProviderConfigTest.java diff --git a/java/src/test/java/com/github/copilot/ProviderEndpointE2ETest.java b/java/sdk/src/test/java/com/github/copilot/ProviderEndpointE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ProviderEndpointE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/ProviderEndpointE2ETest.java diff --git a/java/src/test/java/com/github/copilot/RemoteSessionTest.java b/java/sdk/src/test/java/com/github/copilot/RemoteSessionTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/RemoteSessionTest.java rename to java/sdk/src/test/java/com/github/copilot/RemoteSessionTest.java diff --git a/java/src/test/java/com/github/copilot/RpcHandlerDispatcherTest.java b/java/sdk/src/test/java/com/github/copilot/RpcHandlerDispatcherTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/RpcHandlerDispatcherTest.java rename to java/sdk/src/test/java/com/github/copilot/RpcHandlerDispatcherTest.java diff --git a/java/src/test/java/com/github/copilot/RpcServerE2ETest.java b/java/sdk/src/test/java/com/github/copilot/RpcServerE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/RpcServerE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/RpcServerE2ETest.java diff --git a/java/src/test/java/com/github/copilot/RpcServerMiscE2ETest.java b/java/sdk/src/test/java/com/github/copilot/RpcServerMiscE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/RpcServerMiscE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/RpcServerMiscE2ETest.java diff --git a/java/src/test/java/com/github/copilot/RpcSessionStateExtrasE2ETest.java b/java/sdk/src/test/java/com/github/copilot/RpcSessionStateExtrasE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/RpcSessionStateExtrasE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/RpcSessionStateExtrasE2ETest.java diff --git a/java/src/test/java/com/github/copilot/RpcTasksAndHandlersE2ETest.java b/java/sdk/src/test/java/com/github/copilot/RpcTasksAndHandlersE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/RpcTasksAndHandlersE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/RpcTasksAndHandlersE2ETest.java diff --git a/java/src/test/java/com/github/copilot/RpcWrappersTest.java b/java/sdk/src/test/java/com/github/copilot/RpcWrappersTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/RpcWrappersTest.java rename to java/sdk/src/test/java/com/github/copilot/RpcWrappersTest.java diff --git a/java/src/test/java/com/github/copilot/SchedulerShutdownRaceTest.java b/java/sdk/src/test/java/com/github/copilot/SchedulerShutdownRaceTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/SchedulerShutdownRaceTest.java rename to java/sdk/src/test/java/com/github/copilot/SchedulerShutdownRaceTest.java diff --git a/java/src/test/java/com/github/copilot/SessionCanvasSnapshotTest.java b/java/sdk/src/test/java/com/github/copilot/SessionCanvasSnapshotTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/SessionCanvasSnapshotTest.java rename to java/sdk/src/test/java/com/github/copilot/SessionCanvasSnapshotTest.java diff --git a/java/src/test/java/com/github/copilot/SessionConfigE2ETest.java b/java/sdk/src/test/java/com/github/copilot/SessionConfigE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/SessionConfigE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/SessionConfigE2ETest.java diff --git a/java/src/test/java/com/github/copilot/SessionEventDeserializationTest.java b/java/sdk/src/test/java/com/github/copilot/SessionEventDeserializationTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/SessionEventDeserializationTest.java rename to java/sdk/src/test/java/com/github/copilot/SessionEventDeserializationTest.java diff --git a/java/src/test/java/com/github/copilot/SessionEventHandlingTest.java b/java/sdk/src/test/java/com/github/copilot/SessionEventHandlingTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/SessionEventHandlingTest.java rename to java/sdk/src/test/java/com/github/copilot/SessionEventHandlingTest.java diff --git a/java/src/test/java/com/github/copilot/SessionEventsE2ETest.java b/java/sdk/src/test/java/com/github/copilot/SessionEventsE2ETest.java similarity index 98% rename from java/src/test/java/com/github/copilot/SessionEventsE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/SessionEventsE2ETest.java index 161839a533..dad75db528 100644 --- a/java/src/test/java/com/github/copilot/SessionEventsE2ETest.java +++ b/java/sdk/src/test/java/com/github/copilot/SessionEventsE2ETest.java @@ -5,6 +5,7 @@ package com.github.copilot; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import java.nio.file.Files; @@ -184,6 +185,9 @@ void testShouldReceiveSessionEvents_assistantUsageEvent() throws Exception { // Usage events may or may not be emitted depending on the model/API version // This test verifies the event handler works when they are emitted // We don't assert they must be present since it depends on the backend + if (!usageEvents.isEmpty()) { + assertNotNull(usageEvents.get(0).getData(), "Usage event should carry data"); + } } } diff --git a/java/src/test/java/com/github/copilot/SessionHandlerTest.java b/java/sdk/src/test/java/com/github/copilot/SessionHandlerTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/SessionHandlerTest.java rename to java/sdk/src/test/java/com/github/copilot/SessionHandlerTest.java diff --git a/java/src/test/java/com/github/copilot/SessionRequestBuilderTest.java b/java/sdk/src/test/java/com/github/copilot/SessionRequestBuilderTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/SessionRequestBuilderTest.java rename to java/sdk/src/test/java/com/github/copilot/SessionRequestBuilderTest.java diff --git a/java/src/test/java/com/github/copilot/SessionTodosChangedTest.java b/java/sdk/src/test/java/com/github/copilot/SessionTodosChangedTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/SessionTodosChangedTest.java rename to java/sdk/src/test/java/com/github/copilot/SessionTodosChangedTest.java diff --git a/java/src/test/java/com/github/copilot/SkillsTest.java b/java/sdk/src/test/java/com/github/copilot/SkillsTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/SkillsTest.java rename to java/sdk/src/test/java/com/github/copilot/SkillsTest.java diff --git a/java/src/test/java/com/github/copilot/SlashCommandsIT.java b/java/sdk/src/test/java/com/github/copilot/SlashCommandsIT.java similarity index 98% rename from java/src/test/java/com/github/copilot/SlashCommandsIT.java rename to java/sdk/src/test/java/com/github/copilot/SlashCommandsIT.java index 634c0bad9b..5dec064644 100644 --- a/java/src/test/java/com/github/copilot/SlashCommandsIT.java +++ b/java/sdk/src/test/java/com/github/copilot/SlashCommandsIT.java @@ -22,6 +22,8 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import com.github.copilot.e2e.SkipInProcess; + import com.github.copilot.generated.rpc.SessionCommandsListResult; import com.github.copilot.generated.rpc.SessionCommandsInvokeParams; import com.github.copilot.generated.rpc.SlashCommandAgentPromptResult; @@ -41,6 +43,7 @@ * Requires the CLI to be installed and the user to be signed in. Uses * {@link TestUtil#findCliPath()} so the test harness binary is found in CI. */ +@SkipInProcess("Requires a live signed-in CLI subprocess and logged-in-user transport behavior rather than the replayed in-process harness") class SlashCommandsIT { private static CopilotClient client; diff --git a/java/src/test/java/com/github/copilot/StreamingFidelityTest.java b/java/sdk/src/test/java/com/github/copilot/StreamingFidelityTest.java similarity index 86% rename from java/src/test/java/com/github/copilot/StreamingFidelityTest.java rename to java/sdk/src/test/java/com/github/copilot/StreamingFidelityTest.java index bc4999a16f..3701cf9c13 100644 --- a/java/src/test/java/com/github/copilot/StreamingFidelityTest.java +++ b/java/sdk/src/test/java/com/github/copilot/StreamingFidelityTest.java @@ -249,33 +249,37 @@ void testShouldNotProduceDeltasAfterSessionResumeWithStreamingDisabled() throws */ @Test void testShouldEmitStreamingDeltasWithReasoningEffortConfigured() throws Exception { - ctx.configureForTest("streaming_fidelity", "should_emit_streaming_deltas_with_reasoning_effort_configured"); + try (E2ETestContext isolatedContext = E2ETestContext.create()) { + isolatedContext.configureForTest("streaming_fidelity", + "should_emit_streaming_deltas_with_reasoning_effort_configured"); - try (CopilotClient client = ctx.createClient()) { - CopilotSession session = client - .createSession(new SessionConfig().setOnPermissionRequest(PermissionHandler.APPROVE_ALL) - .setModel("gpt-5.4").setStreaming(true).setReasoningEffort("high")) - .get(); + try (CopilotClient client = isolatedContext.createClient()) { + CopilotSession session = client + .createSession(new SessionConfig().setOnPermissionRequest(PermissionHandler.APPROVE_ALL) + .setModel("gpt-5.4").setStreaming(true).setReasoningEffort("high")) + .get(); - List events = new ArrayList<>(); - session.on(events::add); + List events = new ArrayList<>(); + session.on(events::add); - session.sendAndWait(new MessageOptions().setPrompt("What is 15 * 17?")).get(60, TimeUnit.SECONDS); + session.sendAndWait(new MessageOptions().setPrompt("What is 15 * 17?")).get(60, TimeUnit.SECONDS); - // With streaming + reasoning effort, we should still get content deltas - List deltaEvents = events.stream() - .filter(e -> e instanceof AssistantMessageDeltaEvent).map(e -> (AssistantMessageDeltaEvent) e) - .toList(); - assertFalse(deltaEvents.isEmpty(), "Should have received delta events with reasoning effort configured"); + // With streaming + reasoning effort, we should still get content deltas + List deltaEvents = events.stream() + .filter(e -> e instanceof AssistantMessageDeltaEvent).map(e -> (AssistantMessageDeltaEvent) e) + .toList(); + assertFalse(deltaEvents.isEmpty(), + "Should have received delta events with reasoning effort configured"); - // And a final assistant.message with the answer - List assistantEvents = events.stream() - .filter(e -> e instanceof AssistantMessageEvent).map(e -> (AssistantMessageEvent) e).toList(); - assertFalse(assistantEvents.isEmpty(), "Should have received assistant message events"); - assertTrue(assistantEvents.get(assistantEvents.size() - 1).getData().content().contains("255"), - "Response should contain 255"); + // And a final assistant.message with the answer + List assistantEvents = events.stream() + .filter(e -> e instanceof AssistantMessageEvent).map(e -> (AssistantMessageEvent) e).toList(); + assertFalse(assistantEvents.isEmpty(), "Should have received assistant message events"); + assertTrue(assistantEvents.get(assistantEvents.size() - 1).getData().content().contains("255"), + "Response should contain 255"); - session.close(); + session.close(); + } } } } diff --git a/java/src/test/java/com/github/copilot/SubagentHooksE2ETest.java b/java/sdk/src/test/java/com/github/copilot/SubagentHooksE2ETest.java similarity index 100% rename from java/src/test/java/com/github/copilot/SubagentHooksE2ETest.java rename to java/sdk/src/test/java/com/github/copilot/SubagentHooksE2ETest.java diff --git a/java/src/test/java/com/github/copilot/SystemMessageSectionsIT.java b/java/sdk/src/test/java/com/github/copilot/SystemMessageSectionsIT.java similarity index 100% rename from java/src/test/java/com/github/copilot/SystemMessageSectionsIT.java rename to java/sdk/src/test/java/com/github/copilot/SystemMessageSectionsIT.java diff --git a/java/src/test/java/com/github/copilot/TelemetryConfigTest.java b/java/sdk/src/test/java/com/github/copilot/TelemetryConfigTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/TelemetryConfigTest.java rename to java/sdk/src/test/java/com/github/copilot/TelemetryConfigTest.java diff --git a/java/src/test/java/com/github/copilot/TestUtil.java b/java/sdk/src/test/java/com/github/copilot/TestUtil.java similarity index 100% rename from java/src/test/java/com/github/copilot/TestUtil.java rename to java/sdk/src/test/java/com/github/copilot/TestUtil.java diff --git a/java/src/test/java/com/github/copilot/TimeoutEdgeCaseTest.java b/java/sdk/src/test/java/com/github/copilot/TimeoutEdgeCaseTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/TimeoutEdgeCaseTest.java rename to java/sdk/src/test/java/com/github/copilot/TimeoutEdgeCaseTest.java diff --git a/java/src/test/java/com/github/copilot/ToolDefinitionTest.java b/java/sdk/src/test/java/com/github/copilot/ToolDefinitionTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ToolDefinitionTest.java rename to java/sdk/src/test/java/com/github/copilot/ToolDefinitionTest.java diff --git a/java/src/test/java/com/github/copilot/ToolInvocationTest.java b/java/sdk/src/test/java/com/github/copilot/ToolInvocationTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ToolInvocationTest.java rename to java/sdk/src/test/java/com/github/copilot/ToolInvocationTest.java diff --git a/java/src/test/java/com/github/copilot/ToolResultObjectSerializationTest.java b/java/sdk/src/test/java/com/github/copilot/ToolResultObjectSerializationTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ToolResultObjectSerializationTest.java rename to java/sdk/src/test/java/com/github/copilot/ToolResultObjectSerializationTest.java diff --git a/java/src/test/java/com/github/copilot/ToolResultsTest.java b/java/sdk/src/test/java/com/github/copilot/ToolResultsTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ToolResultsTest.java rename to java/sdk/src/test/java/com/github/copilot/ToolResultsTest.java diff --git a/java/src/test/java/com/github/copilot/ToolSetTest.java b/java/sdk/src/test/java/com/github/copilot/ToolSetTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ToolSetTest.java rename to java/sdk/src/test/java/com/github/copilot/ToolSetTest.java diff --git a/java/src/test/java/com/github/copilot/ToolsTest.java b/java/sdk/src/test/java/com/github/copilot/ToolsTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ToolsTest.java rename to java/sdk/src/test/java/com/github/copilot/ToolsTest.java diff --git a/java/src/test/java/com/github/copilot/UpdateSessionOptionsForModeTest.java b/java/sdk/src/test/java/com/github/copilot/UpdateSessionOptionsForModeTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/UpdateSessionOptionsForModeTest.java rename to java/sdk/src/test/java/com/github/copilot/UpdateSessionOptionsForModeTest.java diff --git a/java/src/test/java/com/github/copilot/ZeroTimeoutContractTest.java b/java/sdk/src/test/java/com/github/copilot/ZeroTimeoutContractTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/ZeroTimeoutContractTest.java rename to java/sdk/src/test/java/com/github/copilot/ZeroTimeoutContractTest.java diff --git a/java/src/test/java/com/github/copilot/e2e/ErgonomicTestTools$$CopilotToolMeta.java b/java/sdk/src/test/java/com/github/copilot/e2e/ErgonomicTestTools$$CopilotToolMeta.java similarity index 100% rename from java/src/test/java/com/github/copilot/e2e/ErgonomicTestTools$$CopilotToolMeta.java rename to java/sdk/src/test/java/com/github/copilot/e2e/ErgonomicTestTools$$CopilotToolMeta.java diff --git a/java/src/test/java/com/github/copilot/e2e/ErgonomicTestTools.java b/java/sdk/src/test/java/com/github/copilot/e2e/ErgonomicTestTools.java similarity index 100% rename from java/src/test/java/com/github/copilot/e2e/ErgonomicTestTools.java rename to java/sdk/src/test/java/com/github/copilot/e2e/ErgonomicTestTools.java diff --git a/java/src/test/java/com/github/copilot/e2e/ErgonomicToolDefinitionIT.java b/java/sdk/src/test/java/com/github/copilot/e2e/ErgonomicToolDefinitionIT.java similarity index 100% rename from java/src/test/java/com/github/copilot/e2e/ErgonomicToolDefinitionIT.java rename to java/sdk/src/test/java/com/github/copilot/e2e/ErgonomicToolDefinitionIT.java diff --git a/java/sdk/src/test/java/com/github/copilot/e2e/InProcessTransportIT.java b/java/sdk/src/test/java/com/github/copilot/e2e/InProcessTransportIT.java new file mode 100644 index 0000000000..1b8595401a --- /dev/null +++ b/java/sdk/src/test/java/com/github/copilot/e2e/InProcessTransportIT.java @@ -0,0 +1,101 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.e2e; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.Map; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import com.github.copilot.AllowCopilotExperimental; +import com.github.copilot.CopilotClient; +import com.github.copilot.E2ETestContext; +import com.github.copilot.ffi.InProcessEnvGuard; +import com.github.copilot.rpc.CopilotClientOptions; +import com.github.copilot.rpc.PingResponse; +import com.github.copilot.rpc.RuntimeConnection; + +/** + * Failsafe integration test for the in-process (FFI) transport. + * + *

+ * Loads the real {@code runtime.node} native library into this test process via + * {@link com.github.copilot.ffi.FfiRuntimeHost}, performs a purely local + * {@code ping} round-trip through the runtime, and stops cleanly. {@code ping} + * is answered by the runtime itself, so no auth or replay proxy is involved — + * this mirrors {@code nodejs/test/e2e/inprocess_ffi.e2e.test.ts}, + * {@code go/internal/e2e/inprocess_ffi_e2e_test.go}, and + * {@code python/e2e/test_inprocess_ffi_e2e.py}. + * + *

+ * {@link InProcessEnvGuard} demonstrates how the harness redirects the native + * runtime's HTTP traffic to the replay proxy (via {@code COPILOT_API_URL}) for + * tests that need session/message round trips over the in-process transport: + * the native library reads environment variables from the live OS process + * environment block, not from the JVM's {@code System.getenv()} snapshot, so + * only a JNA-backed native call can make it visible to code already loaded + * in-process. + * + *

+ * Run with {@code mvn verify -Pinprocess} from the {@code java} reactor root, + * which builds the {@code copilot-sdk-java-runtime} artifact and sets + * {@code COPILOT_CLI_PATH} to the pinned CLI whose sibling {@code runtime.node} + * this test loads, and forces {@code forkCount=1} because the FFI host and env + * guard mutate process-global state. + * + *

+ * {@link RequireInProcess} disables this test unless the {@code -Pinprocess} + * profile is active: without it, the {@code copilot-sdk-java-runtime} + * classifier JAR providing {@code runtime.node} is not on the classpath, so the + * test would fail with a {@code FileNotFoundException} rather than being + * skipped. + */ +@AllowCopilotExperimental +@RequireInProcess +class InProcessTransportIT { + + private static E2ETestContext ctx; + + @BeforeAll + static void setup() throws Exception { + ctx = E2ETestContext.create(); + } + + @AfterAll + static void teardown() throws Exception { + if (ctx != null) { + ctx.close(); + } + } + + @Test + void shouldStartPingAndStopOverInProcessFfi() throws Exception { + // Route the native runtime's HTTP traffic (should it make any) at the + // replay proxy, mirroring how a session-level in-process test would + // redirect COPILOT_API_URL. `ping` never reaches the network, but this + // demonstrates the guard's intended usage for future in-process tests. + // COPILOT_CLI_PATH is intentionally NOT set here: NativeRuntimeLoader and + // CopilotClient.resolveInProcessEntrypoint() read it via + // System.getenv(), which is a JVM-startup-time snapshot that native + // setenv() calls made after the JVM starts cannot update — it must be + // set before the JVM starts (see the -Pinprocess Maven profile). + try (InProcessEnvGuard envGuard = new InProcessEnvGuard(Map.of("COPILOT_API_URL", ctx.getProxyUrl()))) { + CopilotClientOptions options = new CopilotClientOptions().setConnection(RuntimeConnection.forInProcess()); + try (CopilotClient client = new CopilotClient(options)) { + client.start().get(); + + PingResponse pong = client.ping("ffi message").get(); + assertEquals("pong: ffi message", pong.message()); + assertNotNull(pong.timestamp()); + + client.stop().get(); + } + } + } +} diff --git a/java/sdk/src/test/java/com/github/copilot/e2e/RequireInProcess.java b/java/sdk/src/test/java/com/github/copilot/e2e/RequireInProcess.java new file mode 100644 index 0000000000..12de4e5b73 --- /dev/null +++ b/java/sdk/src/test/java/com/github/copilot/e2e/RequireInProcess.java @@ -0,0 +1,64 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.e2e; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.junit.jupiter.api.extension.ExtendWith; + +/** + * Enables an annotated test class or method only when the E2E suite runs under + * the in-process (FFI) transport, i.e. when + * {@code COPILOT_SDK_DEFAULT_CONNECTION} is set to {@code inprocess}. + * + *

+ * Use this for tests that require the real {@code runtime.node} native library + * to be present on the classpath, which only the {@code -Pinprocess} Maven + * profile guarantees (see {@link InProcessTransportIT}). Without this profile, + * standard {@code mvn verify} runs would fail with a + * {@code FileNotFoundException} because the classifier JAR providing + * {@code runtime.node} is not on the classpath. + *

+ * + *

+ * The inverse of {@link SkipInProcess}. + *

+ */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.METHOD}) +@ExtendWith(RequireInProcess.Condition.class) +public @interface RequireInProcess { + + /** + * Explains why the annotated test requires the in-process transport. + * + * @return the skip reason used when the in-process transport is not active + */ + String value() default "Requires the -Pinprocess Maven profile"; + + /** + * JUnit 5 execution condition backing {@link RequireInProcess}. + */ + public static final class Condition implements org.junit.jupiter.api.extension.ExecutionCondition { + + private static final String DEFAULT_CONNECTION_ENV_VAR = "COPILOT_SDK_DEFAULT_CONNECTION"; + + @Override + public org.junit.jupiter.api.extension.ConditionEvaluationResult evaluateExecutionCondition( + org.junit.jupiter.api.extension.ExtensionContext context) { + String envValue = System.getenv(DEFAULT_CONNECTION_ENV_VAR); + if ("inprocess".equalsIgnoreCase(envValue)) { + return org.junit.jupiter.api.extension.ConditionEvaluationResult + .enabled("Running under the in-process transport"); + } + String reason = context.getElement().map(element -> element.getAnnotation(RequireInProcess.class)) + .map(RequireInProcess::value).orElse("Requires the -Pinprocess Maven profile"); + return org.junit.jupiter.api.extension.ConditionEvaluationResult.disabled(reason); + } + } +} diff --git a/java/sdk/src/test/java/com/github/copilot/e2e/SkipInProcess.java b/java/sdk/src/test/java/com/github/copilot/e2e/SkipInProcess.java new file mode 100644 index 0000000000..3f626e133f --- /dev/null +++ b/java/sdk/src/test/java/com/github/copilot/e2e/SkipInProcess.java @@ -0,0 +1,64 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.e2e; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.junit.jupiter.api.extension.ExtendWith; + +/** + * Disables an annotated test class or method when the E2E suite runs under the + * in-process (FFI) transport, i.e. when {@code COPILOT_SDK_DEFAULT_CONNECTION} + * is set to {@code inprocess}. + * + *

+ * Use this for tests that rely on per-client process settings the in-process + * transport cannot honor — for example per-client environment variables, since + * the in-process runtime shares the host process's single environment (see + * {@link com.github.copilot.rpc.InProcessRuntimeConnection} and + * issue #1934). + *

+ * + *

+ * Mirrors {@code skip_inprocess(reason)} in the Rust E2E harness. + *

+ */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.METHOD}) +@ExtendWith(SkipInProcess.Condition.class) +public @interface SkipInProcess { + + /** + * Explains why the annotated test is incompatible with the in-process + * transport. + * + * @return the skip reason + */ + String value() default "Not supported under the in-process (FFI) transport"; + + /** + * JUnit 5 execution condition backing {@link SkipInProcess}. + */ + public static final class Condition implements org.junit.jupiter.api.extension.ExecutionCondition { + + private static final String DEFAULT_CONNECTION_ENV_VAR = "COPILOT_SDK_DEFAULT_CONNECTION"; + + @Override + public org.junit.jupiter.api.extension.ConditionEvaluationResult evaluateExecutionCondition( + org.junit.jupiter.api.extension.ExtensionContext context) { + String envValue = System.getenv(DEFAULT_CONNECTION_ENV_VAR); + if (!"inprocess".equalsIgnoreCase(envValue)) { + return org.junit.jupiter.api.extension.ConditionEvaluationResult + .enabled("Not running under the in-process transport"); + } + String reason = context.getElement().map(element -> element.getAnnotation(SkipInProcess.class)) + .map(SkipInProcess::value).orElse("Not supported under the in-process (FFI) transport"); + return org.junit.jupiter.api.extension.ConditionEvaluationResult.disabled(reason); + } + } +} diff --git a/java/sdk/src/test/java/com/github/copilot/ffi/FfiRuntimeHostTest.java b/java/sdk/src/test/java/com/github/copilot/ffi/FfiRuntimeHostTest.java new file mode 100644 index 0000000000..7c8de78826 --- /dev/null +++ b/java/sdk/src/test/java/com/github/copilot/ffi/FfiRuntimeHostTest.java @@ -0,0 +1,452 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; + +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.copilot.rpc.CopilotClientMode; +import com.github.copilot.rpc.CopilotClientOptions; +import com.sun.jna.Library; +import com.sun.jna.Memory; +import com.sun.jna.Native; +import com.sun.jna.Pointer; + +class FfiRuntimeHostTest { + + private static final ObjectMapper MAPPER = new ObjectMapper(); + private static final String TEST_LIB_PATH_PROP = "copilot.test.nativelib.path"; + private static final String SPIKE_LIB_PATH = System.getProperty(TEST_LIB_PATH_PROP, + "../../1917-java-embed-rust-cli-runtime-remove-before-merge" + "/spike-3-4-jna-callback-and-threading" + + "/rust-dll/target/release/libcallback_test.so"); + + interface CallbackTestLib extends Library { + int host_start(); + + byte host_shutdown(int serverHandle); + + int connection_open(int serverHandle, OutboundCallback callback, Pointer userData, int burstCount); + + byte connection_write(int connectionHandle, byte[] data, int len); + + byte connection_close(int connectionHandle); + } + + private static boolean testLibExists() { + return Files.isRegularFile(Path.of(SPIKE_LIB_PATH).toAbsolutePath().normalize()); + } + + private static CallbackTestLib loadTestLib() { + return Native.load(Path.of(SPIKE_LIB_PATH).toAbsolutePath().normalize().toString(), CallbackTestLib.class); + } + + /** + * Integration test that exercises the real JNA callback/lifecycle path against + * a native test library. Skipped in normal CI because the Rust test crate is + * not built as part of the Maven build. To run locally, build the Rust crate + * and set {@code -Dcopilot.test.nativelib.path=}. + */ + @Test + void startWithSpikeLibrarySupportsLifecycleAndDataFlow() throws Exception { + assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH + + ". Build the Rust test crate or set -D" + TEST_LIB_PATH_PROP + " to run this test."); + CallbackTestLib callbackTestLib = loadTestLib(); + AtomicInteger writes = new AtomicInteger(); + + NativeBinding binding = new NativeBinding() { + @Override + public int hostStart(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen) { + return callbackTestLib.host_start(); + } + + @Override + public boolean hostShutdown(int serverId) { + return callbackTestLib.host_shutdown(serverId) != 0; + } + + @Override + public int connectionOpen(int serverId, OutboundCallback callback, Pointer userData, byte[] extSource, + int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, int connTokenLen) { + return callbackTestLib.connection_open(serverId, callback, userData, 1); + } + + @Override + public boolean connectionWrite(int connectionId, byte[] data, int dataLen) { + writes.incrementAndGet(); + return callbackTestLib.connection_write(connectionId, data, dataLen) != 0; + } + + @Override + public boolean connectionClose(int connectionId) { + return callbackTestLib.connection_close(connectionId) != 0; + } + }; + + FfiRuntimeHost host = new FfiRuntimeHost(binding, "spike-lib"); + host.start("/tmp/runtime.js", new CopilotClientOptions()); + + InputStream in = host.getReceiveStream(); + byte[] buffer = new byte[512]; + int read = in.read(buffer); + assertTrue(read > 0); + String content = new String(buffer, 0, read, StandardCharsets.UTF_8); + assertTrue(content.contains("jsonrpc"), "callback payload should contain JSON-RPC"); + + OutputStream out = host.getSendStream(); + out.write("{\"jsonrpc\":\"2.0\"}".getBytes(StandardCharsets.UTF_8)); + assertEquals(1, writes.get()); + + assertDoesNotThrow(host::close); + } + + @Test + void startBuildsExpectedArgvAndEnvJson() throws Exception { + class RecordingBinding implements NativeBinding { + byte[] argv; + byte[] env; + + @Override + public int hostStart(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen) { + this.argv = argvJson; + this.env = envJson; + return 11; + } + + @Override + public boolean hostShutdown(int serverId) { + return true; + } + + @Override + public int connectionOpen(int serverId, OutboundCallback callback, Pointer userData, byte[] extSource, + int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, int connTokenLen) { + return 21; + } + + @Override + public boolean connectionWrite(int connectionId, byte[] data, int dataLen) { + return true; + } + + @Override + public boolean connectionClose(int connectionId) { + return true; + } + } + + RecordingBinding binding = new RecordingBinding(); + CopilotClientOptions options = new CopilotClientOptions().setLogLevel("debug").setGitHubToken("gh-token") + .setCopilotHome("/tmp/copilot-home").setUseLoggedInUser(false).setSessionIdleTimeoutSeconds(42) + .setRemote(true).setMode(CopilotClientMode.EMPTY).setCliArgs(new String[]{"--extra-flag"}); + + FfiRuntimeHost host = new FfiRuntimeHost(binding, "/tmp/runtime.node"); + host.start("/tmp/entrypoint.js", options); + + List argv = MAPPER.readValue(binding.argv, new TypeReference>() { + }); + assertEquals("node", argv.get(0)); + assertEquals("/tmp/entrypoint.js", argv.get(1)); + assertTrue(argv.contains("--embedded-host")); + assertTrue(argv.contains("--no-auto-update")); + assertTrue(argv.contains("--auth-token-env")); + assertTrue(argv.contains("COPILOT_SDK_AUTH_TOKEN")); + assertTrue(argv.contains("--no-auto-login")); + assertTrue(argv.contains("--session-idle-timeout")); + assertTrue(argv.contains("42")); + assertTrue(argv.contains("--remote")); + assertTrue(argv.contains("--extra-flag")); + + Map env = MAPPER.readValue(binding.env, new TypeReference>() { + }); + assertEquals("gh-token", env.get("COPILOT_SDK_AUTH_TOKEN")); + assertEquals("/tmp/copilot-home", env.get("COPILOT_HOME")); + assertEquals("1", env.get("COPILOT_DISABLE_KEYTAR")); + } + + @Test + void callbackExceptionIsContainedAndDoesNotEscapeAcrossFfiBoundary() { + AtomicBoolean callbackReturned = new AtomicBoolean(false); + NativeBinding binding = new NativeBinding() { + @Override + public int hostStart(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen) { + return 1; + } + + @Override + public boolean hostShutdown(int serverId) { + return true; + } + + @Override + public int connectionOpen(int serverId, OutboundCallback callback, Pointer userData, byte[] extSource, + int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, int connTokenLen) { + Memory mem = new Memory(5); + mem.write(0, "hello".getBytes(StandardCharsets.UTF_8), 0, 5); + callback.invoke(Pointer.NULL, mem, 5); + callbackReturned.set(true); + return 2; + } + + @Override + public boolean connectionWrite(int connectionId, byte[] data, int dataLen) { + return true; + } + + @Override + public boolean connectionClose(int connectionId) { + return true; + } + }; + + QueueInputStream throwingStream = new QueueInputStream() { + @Override + void enqueue(byte[] bytes) { + throw new RuntimeException("boom"); + } + }; + + FfiRuntimeHost host = new FfiRuntimeHost(binding, "test-lib", throwingStream); + assertDoesNotThrow(() -> host.start("/tmp/entrypoint", new CopilotClientOptions())); + assertTrue(callbackReturned.get(), "callback should return normally even when enqueue throws"); + } + + @Test + void closeNeverThrowsEvenWhenNativeCloseFails() { + NativeBinding binding = new NativeBinding() { + @Override + public int hostStart(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen) { + return 5; + } + + @Override + public boolean hostShutdown(int serverId) { + throw new RuntimeException("shutdown failed"); + } + + @Override + public int connectionOpen(int serverId, OutboundCallback callback, Pointer userData, byte[] extSource, + int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, int connTokenLen) { + return 9; + } + + @Override + public boolean connectionWrite(int connectionId, byte[] data, int dataLen) { + return true; + } + + @Override + public boolean connectionClose(int connectionId) { + throw new RuntimeException("close failed"); + } + }; + + FfiRuntimeHost host = new FfiRuntimeHost(binding, "test-lib"); + host.start("/tmp/entrypoint", new CopilotClientOptions()); + assertDoesNotThrow(host::close); + } + + @Test + void failedConnectionOpenReleasesHostForSequentialStartup() { + AtomicInteger starts = new AtomicInteger(); + AtomicInteger shutdowns = new AtomicInteger(); + NativeBinding binding = new NativeBinding() { + @Override + public int hostStart(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen) { + return starts.incrementAndGet(); + } + + @Override + public boolean hostShutdown(int serverId) { + shutdowns.incrementAndGet(); + return true; + } + + @Override + public int connectionOpen(int serverId, OutboundCallback callback, Pointer userData, byte[] extSource, + int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, int connTokenLen) { + return serverId == 1 ? 0 : 22; + } + + @Override + public boolean connectionWrite(int connectionId, byte[] data, int dataLen) { + return true; + } + + @Override + public boolean connectionClose(int connectionId) { + return true; + } + }; + + try (FfiRuntimeHost failedHost = new FfiRuntimeHost(binding, "test-lib")) { + assertThrows(IllegalStateException.class, + () -> failedHost.start("/tmp/entrypoint", new CopilotClientOptions())); + } + assertEquals(1, shutdowns.get(), "failed connection startup must release its native host"); + + try (FfiRuntimeHost nextHost = new FfiRuntimeHost(binding, "test-lib")) { + assertDoesNotThrow(() -> nextHost.start("/tmp/entrypoint", new CopilotClientOptions())); + } + assertEquals(2, shutdowns.get(), "the sequential host must also shut down cleanly"); + } + + @Test + void writeAndCloseAreSerializedByOperationLock() throws Exception { + CountDownLatch writeStarted = new CountDownLatch(1); + CountDownLatch allowWriteToFinish = new CountDownLatch(1); + AtomicInteger writes = new AtomicInteger(0); + + NativeBinding binding = new NativeBinding() { + @Override + public int hostStart(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen) { + return 3; + } + + @Override + public boolean hostShutdown(int serverId) { + return true; + } + + @Override + public int connectionOpen(int serverId, OutboundCallback callback, Pointer userData, byte[] extSource, + int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, int connTokenLen) { + return 4; + } + + @Override + public boolean connectionWrite(int connectionId, byte[] data, int dataLen) { + writes.incrementAndGet(); + writeStarted.countDown(); + try { + allowWriteToFinish.await(5, TimeUnit.SECONDS); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + return true; + } + + @Override + public boolean connectionClose(int connectionId) { + return true; + } + }; + + FfiRuntimeHost host = new FfiRuntimeHost(binding, "test-lib"); + host.start("/tmp/entrypoint", new CopilotClientOptions()); + + CompletableFuture writer = CompletableFuture.runAsync(() -> { + try { + host.getSendStream().write("ping".getBytes(StandardCharsets.UTF_8)); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + + assertTrue(writeStarted.await(2, TimeUnit.SECONDS)); + CompletableFuture closer = CompletableFuture.runAsync(host::close); + allowWriteToFinish.countDown(); + + writer.get(5, TimeUnit.SECONDS); + closer.get(5, TimeUnit.SECONDS); + assertEquals(1, writes.get()); + assertThrows(IOException.class, () -> host.getSendStream().write("late".getBytes(StandardCharsets.UTF_8))); + } + + @Test + void closeDrainsActiveCallbacksBeforeHostShutdown() throws Exception { + CountDownLatch callbackEntered = new CountDownLatch(1); + CountDownLatch allowCallbackToReturn = new CountDownLatch(1); + AtomicBoolean shutdownObservedAfterCallbackReturn = new AtomicBoolean(false); + AtomicBoolean callbackFinished = new AtomicBoolean(false); + AtomicReference callbackRef = new AtomicReference<>(); + + NativeBinding binding = new NativeBinding() { + @Override + public int hostStart(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen) { + return 7; + } + + @Override + public boolean hostShutdown(int serverId) { + shutdownObservedAfterCallbackReturn.set(callbackFinished.get()); + return true; + } + + @Override + public int connectionOpen(int serverId, OutboundCallback callback, Pointer userData, byte[] extSource, + int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, int connTokenLen) { + callbackRef.set(callback); + return 8; + } + + @Override + public boolean connectionWrite(int connectionId, byte[] data, int dataLen) { + return true; + } + + @Override + public boolean connectionClose(int connectionId) { + return true; + } + }; + + QueueInputStream blockingStream = new QueueInputStream() { + @Override + void enqueue(byte[] bytes) { + callbackEntered.countDown(); + try { + allowCallbackToReturn.await(5, TimeUnit.SECONDS); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + callbackFinished.set(true); + super.enqueue(bytes); + } + }; + + FfiRuntimeHost host = new FfiRuntimeHost(binding, "test-lib", blockingStream); + host.start("/tmp/entrypoint", new CopilotClientOptions()); + assertNotNull(callbackRef.get()); + + CompletableFuture callbackFuture = CompletableFuture.runAsync(() -> { + Memory mem = new Memory(1); + mem.setByte(0, (byte) 'x'); + callbackRef.get().invoke(Pointer.NULL, mem, 1); + }); + + assertTrue(callbackEntered.await(2, TimeUnit.SECONDS)); + CompletableFuture closeFuture = CompletableFuture.runAsync(host::close); + Thread.sleep(150); + assertFalse(closeFuture.isDone(), "close should wait for active callback to drain"); + allowCallbackToReturn.countDown(); + callbackFuture.get(5, TimeUnit.SECONDS); + closeFuture.get(5, TimeUnit.SECONDS); + assertTrue(shutdownObservedAfterCallbackReturn.get(), "host_shutdown should run after callback drains"); + } +} diff --git a/java/sdk/src/test/java/com/github/copilot/ffi/InProcessEnvGuard.java b/java/sdk/src/test/java/com/github/copilot/ffi/InProcessEnvGuard.java new file mode 100644 index 0000000000..43df713715 --- /dev/null +++ b/java/sdk/src/test/java/com/github/copilot/ffi/InProcessEnvGuard.java @@ -0,0 +1,192 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.logging.Logger; + +import com.sun.jna.Library; +import com.sun.jna.Native; +import com.sun.jna.WString; + +/** + * Mutates the live process environment block so that native code loaded + * in-process (e.g. {@code runtime.node} via JNA) observes the given environment + * variables, and restores the previous values on {@link #close()}. + * + *

+ * Java has no public API to modify the process-level environment block: + * {@code System.setProperty()} only writes the JVM property bag, and + * {@code System.getenv()} is an immutable startup-time snapshot. Native code + * loaded via JNA reads the OS environment directly + * ({@code GetEnvironmentVariableW} on Windows, {@code getenv()} on POSIX), so + * the only way to make it see an overridden value is to call the OS API + * directly through JNA. + *

+ * + *

+ * This mirrors the Rust {@code InProcessEnvGuard} + * ({@code rust/tests/e2e/support.rs}) and the .NET + * {@code InProcessEnvIsolation} + * ({@code dotnet/test/Harness/InProcessEnvIsolation.cs}). + *

+ * + *

+ * Thread safety: this guard mutates process-global state. + * Tests that use it must run with test concurrency 1 (see the + * {@code -Pinprocess} Maven profile, which sets {@code failsafe.forkCount=1} + * and disables parallel execution). + *

+ */ +public final class InProcessEnvGuard implements AutoCloseable { + + private static final Logger LOG = Logger.getLogger(InProcessEnvGuard.class.getName()); + + /** + * Environment variables suppressed because replay snapshots expect Bearer/OAuth + * auth. + */ + private static final List SUPPRESSED_KEYS = List.of("COPILOT_HMAC_KEY", "CAPI_HMAC_KEY"); + + /** + * Windows kernel32: sets or deletes a variable in the process environment + * block. + */ + private interface Kernel32Env extends Library { + boolean SetEnvironmentVariableW(WString lpName, WString lpValue); + + int GetEnvironmentVariableW(WString lpName, char[] lpBuffer, int nSize); + } + + /** POSIX libc: sets or deletes a variable in the process environment block. */ + private interface LibcEnv extends Library { + int setenv(String name, String value, int overwrite); + + int unsetenv(String name); + + /** Returns null if the variable is not set. */ + String getenv(String name); + } + + /** + * Sentinel indicating the variable was not set (distinct from empty string). + */ + private static final String ABSENT_SENTINEL = new String("\0ABSENT\0"); + + /** + * name -> previous value ({@code null} means the variable was not set before). + */ + private final List> saved = new ArrayList<>(); + private boolean closed; + + /** + * Applies {@code applyEnv} to the native process environment block, saving the + * previous values for restoration by {@link #close()}. Also suppresses + * {@code COPILOT_HMAC_KEY} / {@code CAPI_HMAC_KEY} if present, since the replay + * proxy expects Bearer/OAuth auth rather than HMAC. + * + * @param applyEnv + * environment variables to apply; values must not be {@code null} + */ + public InProcessEnvGuard(Map applyEnv) { + for (Map.Entry entry : applyEnv.entrySet()) { + apply(entry.getKey(), entry.getValue()); + } + for (String key : SUPPRESSED_KEYS) { + String previous = nativeGetEnv(key); + if (previous != null && !previous.isEmpty()) { + apply(key, null); + } + } + } + + private void apply(String name, String value) { + String previous = nativeGetEnv(name); + saved.add(Map.entry(name, previous == null ? ABSENT_SENTINEL : previous)); + nativeSetEnv(name, value); + } + + /** + * Restores every environment variable this guard touched to the value it had + * before construction. + */ + @Override + public synchronized void close() { + if (closed) { + return; + } + closed = true; + List> reversed = new ArrayList<>(saved); + Collections.reverse(reversed); + for (Map.Entry entry : reversed) { + // ABSENT_SENTINEL uses a value ("\0ABSENT\0") impossible in real env vars. + String restoreValue = ABSENT_SENTINEL.equals(entry.getValue()) ? null : entry.getValue(); + nativeSetEnv(entry.getKey(), restoreValue); + } + } + + private static String nativeGetEnv(String name) { + if (isWindows()) { + return nativeGetEnvWindows(name); + } else { + return nativeGetEnvUnix(name); + } + } + + private static String nativeGetEnvWindows(String name) { + Kernel32Env kernel32 = Native.load("kernel32", Kernel32Env.class); + char[] buffer = new char[32767]; + int len = kernel32.GetEnvironmentVariableW(new WString(name), buffer, buffer.length); + if (len == 0) { + // Variable not set (or error — treat as absent) + return null; + } + return new String(buffer, 0, len); + } + + private static String nativeGetEnvUnix(String name) { + LibcEnv libc = Native.load("c", LibcEnv.class); + return libc.getenv(name); + } + + private static void nativeSetEnv(String name, String value) { + if (isWindows()) { + nativeSetEnvWindows(name, value); + } else { + nativeSetEnvUnix(name, value); + } + } + + private static void nativeSetEnvWindows(String name, String value) { + Kernel32Env kernel32 = Native.load("kernel32", Kernel32Env.class); + boolean ok = kernel32.SetEnvironmentVariableW(new WString(name), value != null ? new WString(value) : null); + if (!ok) { + LOG.warning("SetEnvironmentVariableW failed for key=" + name); + } + } + + private static void nativeSetEnvUnix(String name, String value) { + LibcEnv libc = Native.load("c", LibcEnv.class); + if (value != null) { + int rc = libc.setenv(name, value, 1); + if (rc != 0) { + LOG.warning("setenv() failed for key=" + name + " rc=" + rc); + } + } else { + int rc = libc.unsetenv(name); + if (rc != 0) { + LOG.warning("unsetenv() failed for key=" + name + " rc=" + rc); + } + } + } + + private static boolean isWindows() { + return System.getProperty("os.name", "").toLowerCase(Locale.ROOT).contains("win"); + } +} diff --git a/java/sdk/src/test/java/com/github/copilot/ffi/JnaNativeBindingTest.java b/java/sdk/src/test/java/com/github/copilot/ffi/JnaNativeBindingTest.java new file mode 100644 index 0000000000..9f0f939eee --- /dev/null +++ b/java/sdk/src/test/java/com/github/copilot/ffi/JnaNativeBindingTest.java @@ -0,0 +1,521 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; + +import com.sun.jna.Library; +import com.sun.jna.Native; +import com.sun.jna.Pointer; + +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +/** + * Unit tests for {@link JnaNativeBinding} using the spike-3-4 test native + * library ({@code libcallback_test}). + * + *

+ * The spike test library exports simplified versions of the runtime ABI + * functions: {@code host_start}, {@code host_shutdown}, + * {@code connection_open}, {@code connection_write}, and + * {@code connection_close}. Callback tests use this library through a + * test-specific JNA interface, while loading and guard tests exercise + * {@link JnaNativeBinding} directly. + * + *

+ * Tests that require the native library are conditionally skipped when the + * library is not present (e.g. on an architecture without a pre-built binary). + */ +class JnaNativeBindingTest { + + /** + * System property that points at the absolute path of the test native library. + * + *

+ * Default: the {@code libcallback_test.so} built from the spike-3-4 Rust crate, + * relative to {@code java/sdk/}. + */ + private static final String TEST_LIB_PATH_PROP = "copilot.test.nativelib.path"; + + private static final String SPIKE_LIB_PATH = System.getProperty(TEST_LIB_PATH_PROP, + "../../1917-java-embed-rust-cli-runtime-remove-before-merge" + "/spike-3-4-jna-callback-and-threading" + + "/rust-dll/target/release/libcallback_test.so"); + + // ------------------------------------------------------------------------- + // Test-specific JNA interface for the spike-3-4 test library + // ------------------------------------------------------------------------- + + /** + * JNA interface for the simplified test library. Maps Java names to the + * snake_case exports of {@code libcallback_test}. + * + *

+ * Note: This test library exports simplified names ({@code host_start}, + * {@code connection_open}, etc.) rather than the production + * {@code copilot_runtime_*} names. Production symbol resolution is validated + * lazily by JNA when each method is first called through + * {@link JnaNativeBinding.CopilotRuntimeLibrary}. + */ + interface CallbackTestLib extends Library { + /** Simulates {@code copilot_runtime_host_start}; always returns 42. */ + int host_start(); + + /** + * Simulates {@code copilot_runtime_host_shutdown}; always returns nonzero. + * Returns {@code byte} to match the Rust ABI one-byte {@code bool}. + */ + byte host_shutdown(int serverHandle); + + /** + * Simulates {@code copilot_runtime_connection_open}. Spawns a native thread + * that invokes {@code callback} {@code burstCount} times. Returns 7. + */ + int connection_open(int serverHandle, OutboundCallback callback, Pointer userData, int burstCount); + + /** + * Simulates {@code copilot_runtime_connection_write}; always returns nonzero. + * Returns {@code byte} to match the Rust ABI one-byte {@code bool}. + */ + byte connection_write(int connectionHandle, byte[] data, int len); + + /** + * Simulates {@code copilot_runtime_connection_close}; always returns nonzero. + * Returns {@code byte} to match the Rust ABI one-byte {@code bool}. + */ + byte connection_close(int connectionHandle); + } + + // ------------------------------------------------------------------------- + // Stub CopilotRuntimeLibrary for delegation tests + // ------------------------------------------------------------------------- + + /** + * Minimal stub for testing {@link JnaNativeBinding} delegation without disk + * I/O. + */ + private static class StubRuntimeLibrary implements JnaNativeBinding.CopilotRuntimeLibrary { + int hostStartReturn = 1; + byte hostShutdownReturn = 1; + int connectionOpenReturn = 1; + byte connectionWriteReturn = 1; + byte connectionCloseReturn = 1; + + byte[] lastArgvJson; + int lastArgvJsonLen; + int lastServerId; + int lastConnectionId; + OutboundCallback lastCallback; + + @Override + public int copilot_runtime_host_start(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen) { + lastArgvJson = argvJson; + lastArgvJsonLen = argvJsonLen; + return hostStartReturn; + } + + @Override + public byte copilot_runtime_host_shutdown(int serverId) { + lastServerId = serverId; + return hostShutdownReturn; + } + + @Override + public int copilot_runtime_connection_open(int serverId, OutboundCallback callback, Pointer userData, + byte[] extSource, int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, + int connTokenLen) { + lastServerId = serverId; + lastCallback = callback; + return connectionOpenReturn; + } + + @Override + public byte copilot_runtime_connection_write(int connectionId, byte[] data, int dataLen) { + lastConnectionId = connectionId; + return connectionWriteReturn; + } + + @Override + public byte copilot_runtime_connection_close(int connectionId) { + lastConnectionId = connectionId; + return connectionCloseReturn; + } + } + + // ------------------------------------------------------------------------- + // Helpers + // ------------------------------------------------------------------------- + + private static boolean testLibExists() { + return Files.isRegularFile(testLibAbsPath()); + } + + private static Path testLibAbsPath() { + return Path.of(SPIKE_LIB_PATH).toAbsolutePath().normalize(); + } + + private static CallbackTestLib loadTestLib() { + return Native.load(testLibAbsPath().toString(), CallbackTestLib.class); + } + + @AfterEach + void resetStaticState() { + JnaNativeBinding.resetForTesting(); + } + + // ========================================================================= + // Delegation via testing constructor (stub — no disk I/O) + // ========================================================================= + + @Test + void hostStartDelegatesToLibraryAndReturnsHandle() { + StubRuntimeLibrary stub = new StubRuntimeLibrary(); + stub.hostStartReturn = 77; + JnaNativeBinding binding = new JnaNativeBinding(stub); + + byte[] argv = "[\"copilot\"]".getBytes(StandardCharsets.UTF_8); + int result = binding.hostStart(argv, argv.length, null, 0); + + assertEquals(77, result, "hostStart should return the stub's configured value"); + assertEquals(argv, stub.lastArgvJson, "argv bytes should be passed through unchanged"); + assertEquals(argv.length, stub.lastArgvJsonLen); + } + + @Test + void hostStartReturnsZeroOnFailure() { + StubRuntimeLibrary stub = new StubRuntimeLibrary(); + stub.hostStartReturn = 0; + JnaNativeBinding binding = new JnaNativeBinding(stub); + + byte[] argv = "[\"copilot\"]".getBytes(StandardCharsets.UTF_8); + assertEquals(0, binding.hostStart(argv, argv.length, null, 0), "hostStart must return 0 to signal failure"); + } + + @Test + void hostShutdownDelegatesToLibrary() { + StubRuntimeLibrary stub = new StubRuntimeLibrary(); + stub.hostShutdownReturn = 1; + JnaNativeBinding binding = new JnaNativeBinding(stub); + + assertTrue(binding.hostShutdown(42)); + assertEquals(42, stub.lastServerId); + } + + @Test + void hostShutdownReturnsFalseOnFailure() { + StubRuntimeLibrary stub = new StubRuntimeLibrary(); + stub.hostShutdownReturn = 0; + JnaNativeBinding binding = new JnaNativeBinding(stub); + assertFalse(binding.hostShutdown(1)); + } + + @Test + void connectionOpenDelegatesToLibrary() { + StubRuntimeLibrary stub = new StubRuntimeLibrary(); + stub.connectionOpenReturn = 55; + JnaNativeBinding binding = new JnaNativeBinding(stub); + + OutboundCallback noop = (ud, data, len) -> { + }; + int connId = binding.connectionOpen(42, noop, Pointer.NULL, null, 0, null, 0, null, 0); + + assertEquals(55, connId, "connectionOpen should return the stub's configured handle"); + assertEquals(42, stub.lastServerId); + } + + @Test + void connectionOpenReturnsZeroOnFailure() { + StubRuntimeLibrary stub = new StubRuntimeLibrary(); + stub.connectionOpenReturn = 0; + JnaNativeBinding binding = new JnaNativeBinding(stub); + + OutboundCallback noop = (ud, data, len) -> { + }; + assertEquals(0, binding.connectionOpen(1, noop, Pointer.NULL, null, 0, null, 0, null, 0), + "connectionOpen must return 0 to signal failure"); + } + + @Test + void connectionWriteDelegatesToLibrary() { + StubRuntimeLibrary stub = new StubRuntimeLibrary(); + stub.connectionWriteReturn = 1; + JnaNativeBinding binding = new JnaNativeBinding(stub); + + byte[] data = "hello".getBytes(StandardCharsets.UTF_8); + assertTrue(binding.connectionWrite(7, data, data.length)); + assertEquals(7, stub.lastConnectionId); + } + + @Test + void connectionWriteReturnsFalseOnFailure() { + StubRuntimeLibrary stub = new StubRuntimeLibrary(); + stub.connectionWriteReturn = 0; + JnaNativeBinding binding = new JnaNativeBinding(stub); + + byte[] data = "x".getBytes(StandardCharsets.UTF_8); + assertFalse(binding.connectionWrite(1, data, data.length), + "connectionWrite must propagate false return from the library"); + } + + @Test + void connectionCloseDelegatesToLibrary() { + StubRuntimeLibrary stub = new StubRuntimeLibrary(); + stub.connectionCloseReturn = 1; + JnaNativeBinding binding = new JnaNativeBinding(stub); + assertTrue(binding.connectionClose(7)); + assertEquals(7, stub.lastConnectionId); + } + + @Test + void connectionCloseReturnsFalseOnFailure() { + StubRuntimeLibrary stub = new StubRuntimeLibrary(); + stub.connectionCloseReturn = 0; + JnaNativeBinding binding = new JnaNativeBinding(stub); + assertFalse(binding.connectionClose(1)); + } + + @Test + void activeCallbacksStartsAtZero() { + StubRuntimeLibrary stub = new StubRuntimeLibrary(); + JnaNativeBinding binding = new JnaNativeBinding(stub); + assertEquals(0, binding.activeCallbacks.get(), "Active callback counter must start at zero"); + } + + // ========================================================================= + // Library loading — success paths (requires native library on disk) + // ========================================================================= + + @Test + void loadByPathSucceedsWhenLibraryExists() { + assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); + JnaNativeBinding binding = new JnaNativeBinding(testLibAbsPath()); + assertNotNull(binding); + } + + @Test + void loadByPathTwiceWithSamePathSucceeds() { + assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); + new JnaNativeBinding(testLibAbsPath()); + // Second construction with the same absolute path must not throw. + new JnaNativeBinding(testLibAbsPath()); + } + + @Test + void activeCallbacksStartsAtZeroAfterPathLoad() { + assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); + JnaNativeBinding binding = new JnaNativeBinding(testLibAbsPath()); + assertEquals(0, binding.activeCallbacks.get()); + } + + // ========================================================================= + // Duplicate-load guard + // ========================================================================= + + @Test + void loadFromDifferentPathThrowsIllegalState(@TempDir Path tempDir) throws Exception { + assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); + Path altPath = tempDir.resolve("libcallback_test_alt.so"); + Files.copy(testLibAbsPath(), altPath); + + new JnaNativeBinding(testLibAbsPath()); + + IllegalStateException ex = assertThrows(IllegalStateException.class, () -> new JnaNativeBinding(altPath)); + + String msg = ex.getMessage(); + assertTrue(msg.contains("already loaded from"), "Diagnostic must mention 'already loaded from', got: " + msg); + assertTrue(msg.contains(testLibAbsPath().toString()), "Diagnostic must contain path A, got: " + msg); + assertTrue(msg.contains(altPath.toString()), "Diagnostic must contain path B, got: " + msg); + } + + @Test + void duplicateLoadDiagnosticMentionsNotSupported(@TempDir Path tempDir) throws Exception { + assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); + Path altPath = tempDir.resolve("libcallback_test_b.so"); + Files.copy(testLibAbsPath(), altPath); + + new JnaNativeBinding(testLibAbsPath()); + + IllegalStateException ex = assertThrows(IllegalStateException.class, () -> new JnaNativeBinding(altPath)); + assertTrue(ex.getMessage().contains("not supported"), + "Diagnostic must mention 'not supported', got: " + ex.getMessage()); + } + + @Test + void resetForTestingAllowsReloadFromDifferentPath(@TempDir Path tempDir) throws Exception { + assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); + Path altPath = tempDir.resolve("libcallback_test_reset.so"); + Files.copy(testLibAbsPath(), altPath); + + new JnaNativeBinding(testLibAbsPath()); + + JnaNativeBinding.resetForTesting(); + + // After reset, a different path must succeed. + new JnaNativeBinding(altPath); + } + + // ========================================================================= + // Callback invocation via test native library + // ========================================================================= + + @Test + void callbackIsInvokedFromNativeThread() throws Exception { + assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); + CallbackTestLib lib = loadTestLib(); + int serverHandle = lib.host_start(); + assertEquals(42, serverHandle, "host_start should return 42"); + + int burstCount = 3; + CountDownLatch latch = new CountDownLatch(burstCount); + AtomicInteger callbackCount = new AtomicInteger(0); + AtomicInteger activeCallbacks = new AtomicInteger(0); + + OutboundCallback callback = (userData, data, len) -> { + activeCallbacks.incrementAndGet(); + try { + callbackCount.incrementAndGet(); + // Copy before returning — pointer only valid during invocation. + byte[] bytes = data.getByteArray(0, len); + assertEquals(len, bytes.length, "Copied byte array length must equal len parameter"); + } finally { + activeCallbacks.decrementAndGet(); + latch.countDown(); + } + }; + + int connHandle = lib.connection_open(serverHandle, callback, Pointer.NULL, burstCount); + assertEquals(7, connHandle, "connection_open should return 7"); + + assertTrue(latch.await(10, TimeUnit.SECONDS), "All callbacks must complete within 10 seconds"); + assertEquals(burstCount, callbackCount.get(), "Callback must be invoked exactly burstCount times"); + assertEquals(0, activeCallbacks.get(), + "Active callback count must return to zero after all callbacks complete"); + } + + @Test + void activeCallbackCountIsIncrementedDuringCallback() { + StubRuntimeLibrary stub = new StubRuntimeLibrary(); + stub.connectionOpenReturn = 99; + JnaNativeBinding binding = new JnaNativeBinding(stub); + + AtomicInteger observedDuringCallback = new AtomicInteger(-1); + + OutboundCallback userCallback = (userData, data, len) -> { + // Observe binding.activeCallbacks while inside the callback + observedDuringCallback.set(binding.activeCallbacks.get()); + }; + + binding.connectionOpen(1, userCallback, Pointer.NULL, null, 0, null, 0, null, 0); + + // The stub captured the tracked wrapper — invoke it to trigger tracking + assertNotNull(stub.lastCallback, "Stub must have captured the tracked callback"); + stub.lastCallback.invoke(Pointer.NULL, Pointer.NULL, 0); + + assertEquals(1, observedDuringCallback.get(), "binding.activeCallbacks must be 1 during callback execution"); + assertEquals(0, binding.activeCallbacks.get(), + "binding.activeCallbacks must return to 0 after callback completes"); + } + + @Test + void callbackDataContainsJsonRpcContent() throws Exception { + assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); + CallbackTestLib lib = loadTestLib(); + int serverHandle = lib.host_start(); + + CountDownLatch latch = new CountDownLatch(1); + AtomicReference receivedMessage = new AtomicReference<>(); + + OutboundCallback callback = (userData, data, len) -> { + try { + byte[] bytes = data.getByteArray(0, len); + receivedMessage.set(new String(bytes, StandardCharsets.UTF_8)); + } finally { + latch.countDown(); + } + }; + + lib.connection_open(serverHandle, callback, Pointer.NULL, 1); + + assertTrue(latch.await(10, TimeUnit.SECONDS), "Callback must complete within 10 seconds"); + String msg = receivedMessage.get(); + assertNotNull(msg, "Received message must not be null"); + assertTrue(msg.contains("jsonrpc"), "Callback data should contain JSON-RPC content, got: " + msg); + } + + @Test + void multipleCallbacksDoNotLeakActiveCount() throws Exception { + assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); + CallbackTestLib lib = loadTestLib(); + int serverHandle = lib.host_start(); + + int burstCount = 5; + CountDownLatch latch = new CountDownLatch(burstCount); + AtomicInteger activeCallbacks = new AtomicInteger(0); + AtomicInteger maxObservedActive = new AtomicInteger(0); + + OutboundCallback callback = (userData, data, len) -> { + int current = activeCallbacks.incrementAndGet(); + maxObservedActive.updateAndGet(prev -> Math.max(prev, current)); + try { + data.getByteArray(0, len); + } finally { + activeCallbacks.decrementAndGet(); + latch.countDown(); + } + }; + + lib.connection_open(serverHandle, callback, Pointer.NULL, burstCount); + + assertTrue(latch.await(10, TimeUnit.SECONDS), "All callbacks must complete within timeout"); + assertEquals(0, activeCallbacks.get(), "Active count must be 0 after all callbacks complete"); + assertTrue(maxObservedActive.get() >= 1, "At least one callback must have been observed as active"); + } + + @Test + void connectionWriteReturnsTrueForValidHandle() { + assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); + CallbackTestLib lib = loadTestLib(); + int serverHandle = lib.host_start(); + int connHandle = lib.connection_open(serverHandle, (ud, data, len) -> { + }, Pointer.NULL, 0); + + byte[] payload = "{\"jsonrpc\":\"2.0\",\"method\":\"ping\"}".getBytes(StandardCharsets.UTF_8); + assertTrue(lib.connection_write(connHandle, payload, payload.length) != 0, + "connection_write should return nonzero for valid data"); + } + + @Test + void connectionCloseReturnsTrueForValidHandle() { + assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); + CallbackTestLib lib = loadTestLib(); + int serverHandle = lib.host_start(); + int connHandle = lib.connection_open(serverHandle, (ud, data, len) -> { + }, Pointer.NULL, 0); + + assertTrue(lib.connection_close(connHandle) != 0, "connection_close should return nonzero"); + } + + @Test + void hostShutdownReturnsTrueForValidHandle() { + assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); + CallbackTestLib lib = loadTestLib(); + int serverHandle = lib.host_start(); + assertTrue(lib.host_shutdown(serverHandle) != 0, "host_shutdown should return nonzero"); + } +} diff --git a/java/sdk/src/test/java/com/github/copilot/ffi/NativeRuntimeLoaderTest.java b/java/sdk/src/test/java/com/github/copilot/ffi/NativeRuntimeLoaderTest.java new file mode 100644 index 0000000000..822a3f1b20 --- /dev/null +++ b/java/sdk/src/test/java/com/github/copilot/ffi/NativeRuntimeLoaderTest.java @@ -0,0 +1,490 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.file.AtomicMoveNotSupportedException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +class NativeRuntimeLoaderTest { + + private static final String TEST_CLASSIFIER = "linux-x64"; + private static final String OTHER_CLASSIFIER = "darwin-arm64"; + private static final String TEST_VERSION = "1.2.3-test"; + private static final byte[] FAKE_BINARY_CONTENT = "fake runtime.node binary content".getBytes(); + private static final byte[] OTHER_BINARY_CONTENT = "other runtime.node binary content".getBytes(); + + // ------------------------------------------------------------------------- + // Version properties resource reading + // ------------------------------------------------------------------------- + + @Test + void readVersionReturnsVersionFromPropertiesResource(@TempDir Path tempDir) throws Exception { + ClassLoader loader = classLoaderWithVersionResource(tempDir, "1.0.5-preview"); + assertEquals("1.0.5-preview", NativeRuntimeLoader.readVersion(loader)); + } + + @Test + void readVersionThrowsWhenResourceMissing() { + ClassLoader emptyLoader = new URLClassLoader(new URL[0], null); + IllegalStateException ex = assertThrows(IllegalStateException.class, + () -> NativeRuntimeLoader.readVersion(emptyLoader)); + assertTrue(ex.getMessage().contains(NativeRuntimeLoader.VERSION_RESOURCE)); + } + + @Test + void readVersionThrowsWhenVersionPropertyIsBlank(@TempDir Path tempDir) throws Exception { + ClassLoader loader = classLoaderWithVersionResource(tempDir, " "); + IllegalStateException ex = assertThrows(IllegalStateException.class, + () -> NativeRuntimeLoader.readVersion(loader)); + assertTrue(ex.getMessage().contains("version")); + } + + // ------------------------------------------------------------------------- + // COPILOT_CLI_PATH override + // ------------------------------------------------------------------------- + + @Test + void resolveFromCliPathReturnsSiblingWhenRuntimeNodeExists(@TempDir Path tempDir) throws Exception { + Path fakeCliPath = tempDir.resolve("copilot"); + Files.createFile(fakeCliPath); + Path runtimeNode = tempDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME); + Files.write(runtimeNode, FAKE_BINARY_CONTENT); + + Path result = NativeRuntimeLoader.resolveFromCliPath(fakeCliPath.toString()); + + assertEquals(runtimeNode, result); + } + + @Test + void resolveFromCliPathReturnsNullWhenRuntimeNodeMissing(@TempDir Path tempDir) throws Exception { + Path fakeCliPath = tempDir.resolve("copilot"); + Files.createFile(fakeCliPath); + + assertNull(NativeRuntimeLoader.resolveFromCliPath(fakeCliPath.toString())); + } + + @Test + void resolveFromCliPathReturnsNullWhenEnvIsNull() throws Exception { + assertNull(NativeRuntimeLoader.resolveFromCliPath(null)); + } + + @Test + void resolveFromCliPathReturnsNullWhenEnvIsBlank() throws Exception { + assertNull(NativeRuntimeLoader.resolveFromCliPath(" ")); + } + + @Test + void resolveFromCliPathReturnsNullWhenRuntimeNodeIsEmpty(@TempDir Path tempDir) throws Exception { + Path fakeCliPath = tempDir.resolve("copilot"); + Files.createFile(fakeCliPath); + Path runtimeNode = tempDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME); + Files.createFile(runtimeNode); // empty file + + assertNull(NativeRuntimeLoader.resolveFromCliPath(fakeCliPath.toString())); + } + + @Test + void resolveFromCliPathReturnsPrebuildsPathWhenFlatRuntimeNodeIsMissing(@TempDir Path tempDir) throws Exception { + Path fakeCliPath = tempDir.resolve("copilot"); + Files.createFile(fakeCliPath); + Path prebuiltDir = tempDir.resolve("prebuilds").resolve(PlatformDetector.detectClassifier()); + Files.createDirectories(prebuiltDir); + Path runtimeNode = prebuiltDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME); + Files.write(runtimeNode, FAKE_BINARY_CONTENT); + + Path result = NativeRuntimeLoader.resolveFromCliPath(fakeCliPath.toString()); + + assertEquals(runtimeNode, result); + } + + @Test + void resolveFromCliPathPrefersFlatRuntimeNodeOverPrebuildsPath(@TempDir Path tempDir) throws Exception { + Path fakeCliPath = tempDir.resolve("copilot"); + Files.createFile(fakeCliPath); + Path flatRuntimeNode = tempDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME); + Files.write(flatRuntimeNode, FAKE_BINARY_CONTENT); + Path prebuiltDir = tempDir.resolve("prebuilds").resolve(PlatformDetector.detectClassifier()); + Files.createDirectories(prebuiltDir); + Files.write(prebuiltDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME), OTHER_BINARY_CONTENT); + + Path result = NativeRuntimeLoader.resolveFromCliPath(fakeCliPath.toString()); + + assertEquals(flatRuntimeNode, result); + } + + @Test + void resolveEntrypointUsesConfiguredCliWhenRuntimeIsInPrebuilds(@TempDir Path tempDir) throws Exception { + Path cli = Files.writeString(tempDir.resolve("copilot"), "fake cli"); + Path runtimeDir = tempDir.resolve("prebuilds").resolve(PlatformDetector.detectClassifier()); + Files.createDirectories(runtimeDir); + Path runtime = Files.write(runtimeDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME), FAKE_BINARY_CONTENT); + + assertEquals(cli, NativeRuntimeLoader.resolveEntrypoint(cli.toString(), runtime)); + } + + @Test + void resolveFromCliPathReturnsAbsolutePathForRelativeCliPath(@TempDir Path tempDir) throws Exception { + Path workingDirectory = Path.of("").toAbsolutePath(); + Path fakeCliDir = tempDir.resolve("cli-dir"); + Files.createDirectories(fakeCliDir); + Path fakeCliPath = fakeCliDir.resolve("copilot"); + Files.createFile(fakeCliPath); + Path runtimeNode = fakeCliDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME); + Files.write(runtimeNode, FAKE_BINARY_CONTENT); + + Path relativeCliPath = workingDirectory.relativize(fakeCliPath); + + assertEquals(runtimeNode, NativeRuntimeLoader.resolveFromCliPath(relativeCliPath.toString())); + } + + @Test + void cliPathOverrideTakesPriorityOverClasspathExtraction(@TempDir Path tempDir) throws Exception { + // Create a valid runtime.node alongside the fake CLI path + Path fakeCliDir = tempDir.resolve("cli-dir"); + Files.createDirectories(fakeCliDir); + Path fakeCliPath = fakeCliDir.resolve("copilot"); + Files.createFile(fakeCliPath); + Path runtimeNode = fakeCliDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME); + Files.write(runtimeNode, FAKE_BINARY_CONTENT); + + // Source 2 is also available (should be ignored) + Path cacheBase = tempDir.resolve("cache"); + ClassLoader loader = classLoaderWithRuntimeResource(tempDir, TEST_CLASSIFIER); + + Path result = NativeRuntimeLoader.resolve(fakeCliPath.toString(), cacheBase, loader, TEST_CLASSIFIER, + TEST_VERSION); + + assertEquals(runtimeNode, result, "Source 1 (COPILOT_CLI_PATH) must take priority over classpath extraction"); + } + + // ------------------------------------------------------------------------- + // Source 2: classpath extraction to cache + // ------------------------------------------------------------------------- + + @Test + void extractToCacheCopiesResourceToVersionedCacheDirectory(@TempDir Path tempDir) throws Exception { + Path cacheBase = tempDir.resolve("cache"); + ClassLoader loader = classLoaderWithRuntimeResource(tempDir, TEST_CLASSIFIER); + + Path result = NativeRuntimeLoader.extractToCache(cacheBase, loader, TEST_CLASSIFIER, TEST_VERSION); + + Path expected = cacheBase.resolve(TEST_VERSION).resolve(TEST_CLASSIFIER) + .resolve(NativeRuntimeLoader.RUNTIME_FILENAME); + assertEquals(expected, result); + assertTrue(Files.isRegularFile(result)); + assertTrue(Files.size(result) > 0); + } + + @Test + void extractToCacheReturnsCachedFileOnSecondCall(@TempDir Path tempDir) throws Exception { + Path cacheBase = tempDir.resolve("cache"); + ClassLoader loader = classLoaderWithRuntimeResource(tempDir, TEST_CLASSIFIER); + + Path first = NativeRuntimeLoader.extractToCache(cacheBase, loader, TEST_CLASSIFIER, TEST_VERSION); + long modifiedAfterFirstExtraction = Files.getLastModifiedTime(first).toMillis(); + + // Small delay so modification time would differ if the file were rewritten + Thread.sleep(50); + + Path second = NativeRuntimeLoader.extractToCache(cacheBase, loader, TEST_CLASSIFIER, TEST_VERSION); + long modifiedAfterSecondCall = Files.getLastModifiedTime(second).toMillis(); + + assertEquals(first, second); + assertEquals(modifiedAfterFirstExtraction, modifiedAfterSecondCall, + "Cached file must not be overwritten on cache hit"); + } + + @Test + void extractToCacheThrowsWhenClasspathResourceMissing(@TempDir Path tempDir) { + Path cacheBase = tempDir.resolve("cache"); + ClassLoader emptyLoader = new URLClassLoader(new URL[0], null); + + assertThrows(IOException.class, + () -> NativeRuntimeLoader.extractToCache(cacheBase, emptyLoader, TEST_CLASSIFIER, TEST_VERSION)); + } + + @Test + void extractedBinaryContentsMatchClasspathResource(@TempDir Path tempDir) throws Exception { + Path cacheBase = tempDir.resolve("cache"); + ClassLoader loader = classLoaderWithRuntimeResource(tempDir, TEST_CLASSIFIER); + + Path result = NativeRuntimeLoader.extractToCache(cacheBase, loader, TEST_CLASSIFIER, TEST_VERSION); + + byte[] extracted = Files.readAllBytes(result); + assertBytesEqual(FAKE_BINARY_CONTENT, extracted); + } + + @Test + void extractToCacheFiltersClasspathByClassifier(@TempDir Path tempDir) throws Exception { + Path cacheBase = tempDir.resolve("cache"); + writeRuntimeResource(tempDir, TEST_CLASSIFIER, FAKE_BINARY_CONTENT); + writeRuntimeResource(tempDir, OTHER_CLASSIFIER, OTHER_BINARY_CONTENT); + ClassLoader loader = new URLClassLoader(new URL[]{tempDir.toUri().toURL()}, null); + + Path result = NativeRuntimeLoader.extractToCache(cacheBase, loader, TEST_CLASSIFIER, TEST_VERSION); + + assertTrue(result.toString().contains(TEST_CLASSIFIER), "Cache path must include the classifier: " + result); + assertBytesEqual(FAKE_BINARY_CONTENT, Files.readAllBytes(result)); + } + + @Test + void extractToCacheRepairsInvalidCacheEntry(@TempDir Path tempDir) throws Exception { + Path cacheBase = tempDir.resolve("cache"); + Path cached = cacheBase.resolve(TEST_VERSION).resolve(TEST_CLASSIFIER) + .resolve(NativeRuntimeLoader.RUNTIME_FILENAME); + Files.createDirectories(cached.getParent()); + Files.createFile(cached); + ClassLoader loader = classLoaderWithRuntimeResource(tempDir, TEST_CLASSIFIER); + + Path result = NativeRuntimeLoader.extractToCache(cacheBase, loader, TEST_CLASSIFIER, TEST_VERSION); + + assertEquals(cached, result); + assertBytesEqual(FAKE_BINARY_CONTENT, Files.readAllBytes(result)); + } + + // ------------------------------------------------------------------------- + // Source 3: bundled-CLI sibling + // ------------------------------------------------------------------------- + + @Test + void bundledCliSiblingIsUsedWhenClasspathResourceAbsent(@TempDir Path tempDir) throws Exception { + Path bundledCliDir = tempDir.resolve("bundled-cli"); + Files.createDirectories(bundledCliDir); + Path runtimeNode = bundledCliDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME); + Files.write(runtimeNode, FAKE_BINARY_CONTENT); + + Path cacheBase = tempDir.resolve("cache"); + ClassLoader emptyLoader = new URLClassLoader(new URL[0], null); // no classpath resource + + Path result = NativeRuntimeLoader.resolve(null, cacheBase, emptyLoader, TEST_CLASSIFIER, TEST_VERSION, + bundledCliDir); + + assertEquals(runtimeNode, result, + "Source 3 (bundled-CLI sibling) must be used when classpath resource is absent"); + } + + @Test + void classpathResourceWinsOverBundledCliSibling(@TempDir Path tempDir) throws Exception { + // Source 3: bundled CLI dir with runtime.node (should NOT win) + Path bundledCliDir = tempDir.resolve("bundled-cli"); + Files.createDirectories(bundledCliDir); + Files.write(bundledCliDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME), "bundled".getBytes()); + + // Source 2: classpath resource (should win) + Path cacheBase = tempDir.resolve("cache"); + ClassLoader loader = classLoaderWithRuntimeResource(tempDir, TEST_CLASSIFIER); + + Path result = NativeRuntimeLoader.resolve(null, cacheBase, loader, TEST_CLASSIFIER, TEST_VERSION, + bundledCliDir); + + Path expectedFromClasspath = cacheBase.resolve(TEST_VERSION).resolve(TEST_CLASSIFIER) + .resolve(NativeRuntimeLoader.RUNTIME_FILENAME); + assertEquals(expectedFromClasspath, result, + "Source 2 (classpath) must win over source 3 (bundled-CLI sibling)"); + assertNotEquals(bundledCliDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME), result); + } + + @Test + void bundledCliSiblingIsIgnoredWhenRuntimeNodeMissing(@TempDir Path tempDir) { + Path bundledCliDir = tempDir.resolve("bundled-cli-no-runtime"); + // bundledCliDir doesn't even exist — no runtime.node present + + Path cacheBase = tempDir.resolve("cache"); + ClassLoader emptyLoader = new URLClassLoader(new URL[0], null); + + // Both source 2 and source 3 absent: must throw (the classpath error) + IOException ex = assertThrows(IOException.class, () -> NativeRuntimeLoader.resolve(null, cacheBase, emptyLoader, + TEST_CLASSIFIER, TEST_VERSION, bundledCliDir)); + assertTrue(ex.getMessage().contains("classpath"), "Error should mention classpath: " + ex.getMessage()); + } + + // ------------------------------------------------------------------------- + // Atomic publication test seam + // ------------------------------------------------------------------------- + + @Test + void defaultPublisherMovesSourceToTarget(@TempDir Path tempDir) throws Exception { + Path temp = Files.createTempFile(tempDir, "runtime-tmp-", ".node"); + Files.write(temp, FAKE_BINARY_CONTENT); + Path target = tempDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME); + + NativeRuntimeLoader.DEFAULT_PUBLISHER.publish(temp, target); + + assertTrue(Files.isRegularFile(target), "Target must exist after publication"); + assertTrue(Files.size(target) > 0, "Target must be non-empty"); + assertFalse(Files.exists(temp), "Source temp file must be absent after atomic move"); + } + + @Test + void extractionCleansUpTempFileWhenPublicationFails(@TempDir Path tempDir) throws Exception { + Path cacheBase = tempDir.resolve("cache"); + ClassLoader loader = classLoaderWithRuntimeResource(tempDir, TEST_CLASSIFIER); + + // Capture the temp path so we can verify it was deleted + Path[] capturedTemp = {null}; + NativeRuntimeLoader.AtomicPublisher failingPublisher = (temp, cached) -> { + capturedTemp[0] = temp; + throw new AtomicMoveNotSupportedException(temp.toString(), cached.toString(), + "filesystem does not support atomic moves — test"); + }; + + assertThrows(AtomicMoveNotSupportedException.class, () -> NativeRuntimeLoader.extractToCache(cacheBase, loader, + TEST_CLASSIFIER, TEST_VERSION, failingPublisher)); + + assertNotNull(capturedTemp[0], "Publisher must have been invoked"); + assertFalse(Files.exists(capturedTemp[0]), "Temp file must be deleted after failed publication"); + } + + @Test + void extractionCleansUpTempFileWhenPublisherThrowsIllegalStateException(@TempDir Path tempDir) throws Exception { + Path cacheBase = tempDir.resolve("cache"); + ClassLoader loader = classLoaderWithRuntimeResource(tempDir, TEST_CLASSIFIER); + + Path[] capturedTemp = {null}; + NativeRuntimeLoader.AtomicPublisher unsupportedPublisher = (temp, cached) -> { + capturedTemp[0] = temp; + // Simulate the wrapping that DEFAULT_PUBLISHER performs for + // AtomicMoveNotSupportedException + throw new IllegalStateException("Filesystem does not support atomic moves; cannot safely publish " + + NativeRuntimeLoader.RUNTIME_FILENAME + " to " + cached); + }; + + IllegalStateException ex = assertThrows(IllegalStateException.class, () -> NativeRuntimeLoader + .extractToCache(cacheBase, loader, TEST_CLASSIFIER, TEST_VERSION, unsupportedPublisher)); + + assertTrue(ex.getMessage().contains("atomic moves"), + "Error message should describe the atomic-move failure: " + ex.getMessage()); + assertNotNull(capturedTemp[0], "Publisher must have been invoked"); + assertFalse(Files.exists(capturedTemp[0]), "Temp file must be deleted after failed atomic publication"); + } + + // ------------------------------------------------------------------------- + // Concurrent extraction safety + // ------------------------------------------------------------------------- + + @Test + void concurrentExtractionByMultipleThreadsBothSucceed(@TempDir Path tempDir) throws Exception { + Path cacheBase = tempDir.resolve("cache"); + ClassLoader loader = classLoaderWithRuntimeResource(tempDir, TEST_CLASSIFIER); + int threadCount = 8; + CountDownLatch startGate = new CountDownLatch(1); + ExecutorService pool = Executors.newFixedThreadPool(threadCount); + List> futures = new ArrayList<>(); + + for (int i = 0; i < threadCount; i++) { + futures.add(pool.submit(() -> { + startGate.await(); + return NativeRuntimeLoader.extractToCache(cacheBase, loader, TEST_CLASSIFIER, TEST_VERSION); + })); + } + + startGate.countDown(); + pool.shutdown(); + assertTrue(pool.awaitTermination(10, TimeUnit.SECONDS)); + + Path expected = cacheBase.resolve(TEST_VERSION).resolve(TEST_CLASSIFIER) + .resolve(NativeRuntimeLoader.RUNTIME_FILENAME); + for (Future future : futures) { + Path result = future.get(); + assertEquals(expected, result); + assertTrue(Files.isRegularFile(result)); + assertTrue(Files.size(result) > 0); + } + try (var files = Files.list(expected.getParent())) { + assertEquals(List.of(expected), files.toList(), "Concurrent extraction must clean up temporary files"); + } + } + + // ------------------------------------------------------------------------- + // resolve() -- full three-source resolution chain + // ------------------------------------------------------------------------- + + @Test + void resolveWithNullCliEnvExtractsFromClasspath(@TempDir Path tempDir) throws Exception { + Path cacheBase = tempDir.resolve("cache"); + ClassLoader loader = classLoaderWithRuntimeResource(tempDir, TEST_CLASSIFIER); + + Path result = NativeRuntimeLoader.resolve(null, cacheBase, loader, TEST_CLASSIFIER, TEST_VERSION); + + assertNotNull(result); + assertTrue(Files.isRegularFile(result)); + assertTrue(Files.size(result) > 0); + } + + @Test + void resolveThrowsWhenNoSourceIsAvailable(@TempDir Path tempDir) { + Path cacheBase = tempDir.resolve("cache"); + ClassLoader emptyLoader = new URLClassLoader(new URL[0], null); + + // No CLI env, no classpath resource, no bundled-CLI dir → throw + assertThrows(IOException.class, + () -> NativeRuntimeLoader.resolve(null, cacheBase, emptyLoader, TEST_CLASSIFIER, TEST_VERSION)); + } + + @Test + void resolveFallsBackToRuntimeAlongsideBundledCli(@TempDir Path tempDir) throws Exception { + Path cacheBase = tempDir.resolve("cache"); + ClassLoader emptyLoader = new URLClassLoader(new URL[0], null); + Path bundledCli = tempDir.resolve("copilot"); + Files.createFile(bundledCli); + Path runtimeNode = tempDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME); + Files.write(runtimeNode, FAKE_BINARY_CONTENT); + + Path result = NativeRuntimeLoader.resolve(null, bundledCli.toString(), cacheBase, emptyLoader, TEST_CLASSIFIER, + TEST_VERSION); + + assertEquals(runtimeNode, result); + } + + // ------------------------------------------------------------------------- + // Helpers + // ------------------------------------------------------------------------- + + private static ClassLoader classLoaderWithVersionResource(Path tempDir, String version) throws IOException { + Path propsFile = tempDir.resolve(NativeRuntimeLoader.VERSION_RESOURCE); + Files.writeString(propsFile, "version=" + version + "\n"); + return new URLClassLoader(new URL[]{tempDir.toUri().toURL()}, null); + } + + private static ClassLoader classLoaderWithRuntimeResource(Path tempDir, String classifier) throws IOException { + writeRuntimeResource(tempDir, classifier, FAKE_BINARY_CONTENT); + return new URLClassLoader(new URL[]{tempDir.toUri().toURL()}, null); + } + + private static void writeRuntimeResource(Path tempDir, String classifier, byte[] content) throws IOException { + Path resourceDir = tempDir.resolve("native").resolve(classifier); + Files.createDirectories(resourceDir); + Files.write(resourceDir.resolve(NativeRuntimeLoader.RUNTIME_FILENAME), content); + } + + private static void assertBytesEqual(byte[] expected, byte[] actual) { + assertEquals(expected.length, actual.length, "Array lengths differ"); + for (int i = 0; i < expected.length; i++) { + assertEquals(expected[i], actual[i], "Byte differs at index " + i); + } + } +} diff --git a/java/sdk/src/test/java/com/github/copilot/ffi/PlatformDetectorTest.java b/java/sdk/src/test/java/com/github/copilot/ffi/PlatformDetectorTest.java new file mode 100644 index 0000000000..82049ea6af --- /dev/null +++ b/java/sdk/src/test/java/com/github/copilot/ffi/PlatformDetectorTest.java @@ -0,0 +1,217 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +class PlatformDetectorTest { + + @Test + void detectOsMapsSupportedNames() { + withSystemProperty("os.name", "Mac OS X", () -> assertEquals("darwin", PlatformDetector.detectOs())); + withSystemProperty("os.name", "Darwin", () -> assertEquals("darwin", PlatformDetector.detectOs())); + withSystemProperty("os.name", "Windows 11", () -> assertEquals("win32", PlatformDetector.detectOs())); + withSystemProperty("os.name", "Linux", () -> assertEquals("linux", PlatformDetector.detectOs())); + } + + @Test + void detectOsThrowsForUnsupportedSystem() { + withSystemProperty("os.name", "Solaris", + () -> assertThrows(IllegalStateException.class, PlatformDetector::detectOs)); + } + + @Test + void detectArchMapsSupportedAliases() { + withSystemProperty("os.arch", "amd64", () -> assertEquals("x64", PlatformDetector.detectArch())); + withSystemProperty("os.arch", "x86_64", () -> assertEquals("x64", PlatformDetector.detectArch())); + withSystemProperty("os.arch", "x64", () -> assertEquals("x64", PlatformDetector.detectArch())); + withSystemProperty("os.arch", "aarch64", () -> assertEquals("arm64", PlatformDetector.detectArch())); + withSystemProperty("os.arch", "arm64", () -> assertEquals("arm64", PlatformDetector.detectArch())); + } + + @Test + void detectArchThrowsForUnsupportedArchitecture() { + withSystemProperty("os.arch", "ppc64", + () -> assertThrows(IllegalStateException.class, PlatformDetector::detectArch)); + } + + @Test + void detectLinuxLibcParsesGlibcInterpPath() throws Exception { + byte[] glibcProbe = buildElf64ProbeWithInterp("/lib64/ld-linux-x86-64.so.2"); + assertEquals(PlatformDetector.LinuxLibc.GLIBC, PlatformDetector.detectLinuxLibc(glibcProbe)); + } + + @Test + void detectLinuxLibcParsesMuslInterpPath() throws Exception { + byte[] muslProbe = buildElf64ProbeWithInterp("/lib/ld-musl-x86_64.so.1"); + assertEquals(PlatformDetector.LinuxLibc.MUSL, PlatformDetector.detectLinuxLibc(muslProbe)); + } + + @Test + void detectLinuxLibcOnLinuxReturnsRecognizedValue() { + withSystemProperty("os.name", "Linux", () -> { + PlatformDetector.LinuxLibc libc = PlatformDetector.detectLinuxLibc(); + assertTrue(libc == PlatformDetector.LinuxLibc.GLIBC || libc == PlatformDetector.LinuxLibc.MUSL + || libc == PlatformDetector.LinuxLibc.UNKNOWN); + }); + } + + @Test + void detectLinuxLibcReturnsUnknownOutsideLinux() { + withSystemProperty("os.name", "Windows 11", + () -> assertEquals(PlatformDetector.LinuxLibc.UNKNOWN, PlatformDetector.detectLinuxLibc())); + } + + @Test + void detectClassifierReturnsClassifierForCurrentLinuxLibc() { + PlatformDetector.LinuxLibc libc = PlatformDetector.detectLinuxLibc(); + String expected = libc == PlatformDetector.LinuxLibc.MUSL ? "linuxmusl-x64" : "linux-x64"; + + withSystemProperties("Linux", "amd64", () -> assertEquals(expected, PlatformDetector.detectClassifier())); + } + + @Test + void detectClassifierAllowListCoversAllSupportedValues() { + Set expected = Set.of("linux-x64", "linux-arm64", "linuxmusl-x64", "linuxmusl-arm64", "darwin-x64", + "darwin-arm64", "win32-x64", "win32-arm64"); + assertEquals(expected, PlatformDetector.supportedClassifiers()); + + Set resolved = new LinkedHashSet<>(); + resolved.add(PlatformDetector.detectClassifier("linux", "x64", PlatformDetector.LinuxLibc.GLIBC)); + resolved.add(PlatformDetector.detectClassifier("linux", "arm64", PlatformDetector.LinuxLibc.GLIBC)); + resolved.add(PlatformDetector.detectClassifier("linux", "x64", PlatformDetector.LinuxLibc.MUSL)); + resolved.add(PlatformDetector.detectClassifier("linux", "arm64", PlatformDetector.LinuxLibc.MUSL)); + resolved.add(PlatformDetector.detectClassifier("darwin", "x64", PlatformDetector.LinuxLibc.UNKNOWN)); + resolved.add(PlatformDetector.detectClassifier("darwin", "arm64", PlatformDetector.LinuxLibc.UNKNOWN)); + resolved.add(PlatformDetector.detectClassifier("win32", "x64", PlatformDetector.LinuxLibc.UNKNOWN)); + resolved.add(PlatformDetector.detectClassifier("win32", "arm64", PlatformDetector.LinuxLibc.UNKNOWN)); + + assertEquals(expected, resolved); + } + + @Test + void detectClassifierFailsFastForUnsupportedTuple() { + assertThrows(IllegalStateException.class, + () -> PlatformDetector.detectClassifier("darwin", "mips64", PlatformDetector.LinuxLibc.UNKNOWN)); + } + + @Test + void detectClassifierFailsForUnsupportedCurrentPlatform() { + withSystemProperties("Solaris", "amd64", + () -> assertThrows(IllegalStateException.class, PlatformDetector::detectClassifier)); + } + + @Test + void detectLinuxLibcReturnsUnknownWhenElfParsingFails() { + byte[] invalidProbe = new byte[64]; + Arrays.fill(invalidProbe, (byte) 1); + + assertThrows(IOException.class, () -> PlatformDetector.detectLinuxLibc(invalidProbe)); + } + + @Test + void detectLinuxLibcReturnsUnknownForTruncatedProgramHeader(@TempDir Path tempDir) throws IOException { + byte[] malformedProbe = buildElf64ProbeWithInterp("/lib64/ld-linux-x86-64.so.2"); + writeLe64(malformedProbe, 32, malformedProbe.length - 1); + writeLe16(malformedProbe, 54, 1); + Path executable = tempDir.resolve("malformed-elf"); + Files.write(executable, malformedProbe); + + assertEquals(PlatformDetector.LinuxLibc.UNKNOWN, PlatformDetector.detectLinuxLibc(executable)); + } + + private static void withSystemProperties(String osName, String osArch, Runnable action) { + String previousOsName = System.getProperty("os.name"); + String previousOsArch = System.getProperty("os.arch"); + try { + System.setProperty("os.name", osName); + System.setProperty("os.arch", osArch); + action.run(); + } finally { + restoreProperty("os.name", previousOsName); + restoreProperty("os.arch", previousOsArch); + } + } + + private static void withSystemProperty(String key, String value, Runnable action) { + String previousValue = System.getProperty(key); + try { + System.setProperty(key, value); + action.run(); + } finally { + restoreProperty(key, previousValue); + } + } + + private static void restoreProperty(String key, String value) { + if (value == null) { + System.clearProperty(key); + } else { + System.setProperty(key, value); + } + } + + private static byte[] buildElf64ProbeWithInterp(String interpreterPath) { + byte[] interpBytes = interpreterPath.getBytes(StandardCharsets.UTF_8); + byte[] probe = new byte[512]; + + probe[0] = 0x7F; + probe[1] = 'E'; + probe[2] = 'L'; + probe[3] = 'F'; + probe[4] = 2; + probe[5] = 1; + + int phoff = 64; + int phentsize = 56; + int phnum = 1; + int interpOffset = 256; + int interpSize = interpBytes.length + 1; + + writeLe64(probe, 32, phoff); + writeLe16(probe, 54, phentsize); + writeLe16(probe, 56, phnum); + + int pHeader = phoff; + writeLe32(probe, pHeader, 3); + writeLe64(probe, pHeader + 8, interpOffset); + writeLe64(probe, pHeader + 32, interpSize); + + System.arraycopy(interpBytes, 0, probe, interpOffset, interpBytes.length); + probe[interpOffset + interpBytes.length] = 0; + return probe; + } + + private static void writeLe16(byte[] buffer, int offset, int value) { + buffer[offset] = (byte) (value & 0xFF); + buffer[offset + 1] = (byte) ((value >>> 8) & 0xFF); + } + + private static void writeLe32(byte[] buffer, int offset, int value) { + buffer[offset] = (byte) (value & 0xFF); + buffer[offset + 1] = (byte) ((value >>> 8) & 0xFF); + buffer[offset + 2] = (byte) ((value >>> 16) & 0xFF); + buffer[offset + 3] = (byte) ((value >>> 24) & 0xFF); + } + + private static void writeLe64(byte[] buffer, int offset, long value) { + for (int i = 0; i < 8; i++) { + buffer[offset + i] = (byte) ((value >>> (8 * i)) & 0xFF); + } + } +} diff --git a/java/sdk/src/test/java/com/github/copilot/ffi/QueueInputStreamTest.java b/java/sdk/src/test/java/com/github/copilot/ffi/QueueInputStreamTest.java new file mode 100644 index 0000000000..6fd9616706 --- /dev/null +++ b/java/sdk/src/test/java/com/github/copilot/ffi/QueueInputStreamTest.java @@ -0,0 +1,81 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +import org.junit.jupiter.api.Test; + +class QueueInputStreamTest { + + @Test + void readReturnsEnqueuedBytesAcrossMultipleChunks() throws Exception { + QueueInputStream stream = new QueueInputStream(); + stream.enqueue("hello ".getBytes(StandardCharsets.UTF_8)); + stream.enqueue("world".getBytes(StandardCharsets.UTF_8)); + + byte[] buffer = new byte[11]; + int first = stream.read(buffer, 0, 6); + int second = stream.read(buffer, 6, 5); + + assertEquals(6, first); + assertEquals(5, second); + assertArrayEquals("hello world".getBytes(StandardCharsets.UTF_8), buffer); + } + + @Test + void readBlocksUntilDataArrives() throws Exception { + QueueInputStream stream = new QueueInputStream(); + + CompletableFuture readFuture = CompletableFuture.supplyAsync(() -> { + try { + return stream.read(); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + + Thread.sleep(100); + stream.enqueue(new byte[]{(byte) 'A'}); + + assertEquals((int) 'A', readFuture.get(2, TimeUnit.SECONDS)); + } + + @Test + void closeSignalsEndOfStream() throws Exception { + QueueInputStream stream = new QueueInputStream(); + stream.enqueue("x".getBytes(StandardCharsets.UTF_8)); + + assertEquals('x', stream.read()); + stream.close(); + assertEquals(-1, stream.read()); + } + + @Test + void closeUnblocksPendingReadWithEof() throws Exception { + QueueInputStream stream = new QueueInputStream(); + + CompletableFuture readFuture = CompletableFuture.supplyAsync(() -> { + try { + return stream.read(); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + + Thread.sleep(100); + stream.close(); + + assertEquals(-1, readFuture.get(2, TimeUnit.SECONDS)); + assertTrue(readFuture.isDone()); + } +} diff --git a/java/src/test/java/com/github/copilot/generated/GeneratedEventTypesCoverageTest.java b/java/sdk/src/test/java/com/github/copilot/generated/GeneratedEventTypesCoverageTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/generated/GeneratedEventTypesCoverageTest.java rename to java/sdk/src/test/java/com/github/copilot/generated/GeneratedEventTypesCoverageTest.java diff --git a/java/src/test/java/com/github/copilot/generated/GeneratedTypesJacksonRoundTripTest.java b/java/sdk/src/test/java/com/github/copilot/generated/GeneratedTypesJacksonRoundTripTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/generated/GeneratedTypesJacksonRoundTripTest.java rename to java/sdk/src/test/java/com/github/copilot/generated/GeneratedTypesJacksonRoundTripTest.java diff --git a/java/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcApiCoverageTest.java b/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcApiCoverageTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcApiCoverageTest.java rename to java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcApiCoverageTest.java diff --git a/java/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java b/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java rename to java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java diff --git a/java/src/test/java/com/github/copilot/rpc/ParamCoercionTest.java b/java/sdk/src/test/java/com/github/copilot/rpc/ParamCoercionTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/ParamCoercionTest.java rename to java/sdk/src/test/java/com/github/copilot/rpc/ParamCoercionTest.java diff --git a/java/src/test/java/com/github/copilot/rpc/ParamSchemaTest.java b/java/sdk/src/test/java/com/github/copilot/rpc/ParamSchemaTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/ParamSchemaTest.java rename to java/sdk/src/test/java/com/github/copilot/rpc/ParamSchemaTest.java diff --git a/java/src/test/java/com/github/copilot/rpc/RecordInvocationArgs.java b/java/sdk/src/test/java/com/github/copilot/rpc/RecordInvocationArgs.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/RecordInvocationArgs.java rename to java/sdk/src/test/java/com/github/copilot/rpc/RecordInvocationArgs.java diff --git a/java/src/test/java/com/github/copilot/rpc/ToolDefinitionFromObjectTest.java b/java/sdk/src/test/java/com/github/copilot/rpc/ToolDefinitionFromObjectTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/ToolDefinitionFromObjectTest.java rename to java/sdk/src/test/java/com/github/copilot/rpc/ToolDefinitionFromObjectTest.java diff --git a/java/src/test/java/com/github/copilot/rpc/ToolDefinitionIsTerminalTest.java b/java/sdk/src/test/java/com/github/copilot/rpc/ToolDefinitionIsTerminalTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/ToolDefinitionIsTerminalTest.java rename to java/sdk/src/test/java/com/github/copilot/rpc/ToolDefinitionIsTerminalTest.java diff --git a/java/src/test/java/com/github/copilot/rpc/ToolDefinitionLambdaTest.java b/java/sdk/src/test/java/com/github/copilot/rpc/ToolDefinitionLambdaTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/ToolDefinitionLambdaTest.java rename to java/sdk/src/test/java/com/github/copilot/rpc/ToolDefinitionLambdaTest.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/ArgCoercionTools$$CopilotToolMeta.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/ArgCoercionTools$$CopilotToolMeta.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/ArgCoercionTools$$CopilotToolMeta.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/ArgCoercionTools$$CopilotToolMeta.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/ArgCoercionTools.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/ArgCoercionTools.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/ArgCoercionTools.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/ArgCoercionTools.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/DateTimeTools$$CopilotToolMeta.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/DateTimeTools$$CopilotToolMeta.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/DateTimeTools$$CopilotToolMeta.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/DateTimeTools$$CopilotToolMeta.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/DateTimeTools.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/DateTimeTools.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/DateTimeTools.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/DateTimeTools.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/DefaultValueTools$$CopilotToolMeta.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/DefaultValueTools$$CopilotToolMeta.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/DefaultValueTools$$CopilotToolMeta.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/DefaultValueTools$$CopilotToolMeta.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/DefaultValueTools.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/DefaultValueTools.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/DefaultValueTools.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/DefaultValueTools.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/InvocationAwareTools$$CopilotToolMeta.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/InvocationAwareTools$$CopilotToolMeta.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/InvocationAwareTools$$CopilotToolMeta.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/InvocationAwareTools$$CopilotToolMeta.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/InvocationAwareTools.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/InvocationAwareTools.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/InvocationAwareTools.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/InvocationAwareTools.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/MultiReturnTools$$CopilotToolMeta.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/MultiReturnTools$$CopilotToolMeta.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/MultiReturnTools$$CopilotToolMeta.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/MultiReturnTools$$CopilotToolMeta.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/MultiReturnTools.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/MultiReturnTools.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/MultiReturnTools.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/MultiReturnTools.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/OptionalParamTools$$CopilotToolMeta.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/OptionalParamTools$$CopilotToolMeta.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/OptionalParamTools$$CopilotToolMeta.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/OptionalParamTools$$CopilotToolMeta.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/OptionalParamTools.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/OptionalParamTools.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/OptionalParamTools.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/OptionalParamTools.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/OverrideTools$$CopilotToolMeta.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/OverrideTools$$CopilotToolMeta.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/OverrideTools$$CopilotToolMeta.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/OverrideTools$$CopilotToolMeta.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/OverrideTools.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/OverrideTools.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/OverrideTools.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/OverrideTools.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/SimpleTools$$CopilotToolMeta.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/SimpleTools$$CopilotToolMeta.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/SimpleTools$$CopilotToolMeta.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/SimpleTools$$CopilotToolMeta.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/SimpleTools.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/SimpleTools.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/SimpleTools.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/SimpleTools.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/StaticInvocationTools$$CopilotToolMeta.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/StaticInvocationTools$$CopilotToolMeta.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/StaticInvocationTools$$CopilotToolMeta.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/StaticInvocationTools$$CopilotToolMeta.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/StaticInvocationTools.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/StaticInvocationTools.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/StaticInvocationTools.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/StaticInvocationTools.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/StaticTools$$CopilotToolMeta.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/StaticTools$$CopilotToolMeta.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/StaticTools$$CopilotToolMeta.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/StaticTools$$CopilotToolMeta.java diff --git a/java/src/test/java/com/github/copilot/rpc/fixtures/StaticTools.java b/java/sdk/src/test/java/com/github/copilot/rpc/fixtures/StaticTools.java similarity index 100% rename from java/src/test/java/com/github/copilot/rpc/fixtures/StaticTools.java rename to java/sdk/src/test/java/com/github/copilot/rpc/fixtures/StaticTools.java diff --git a/java/src/test/java/com/github/copilot/tool/CopilotToolAnnotationTest.java b/java/sdk/src/test/java/com/github/copilot/tool/CopilotToolAnnotationTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/tool/CopilotToolAnnotationTest.java rename to java/sdk/src/test/java/com/github/copilot/tool/CopilotToolAnnotationTest.java diff --git a/java/src/test/java/com/github/copilot/tool/CopilotToolProcessorTest.java b/java/sdk/src/test/java/com/github/copilot/tool/CopilotToolProcessorTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/tool/CopilotToolProcessorTest.java rename to java/sdk/src/test/java/com/github/copilot/tool/CopilotToolProcessorTest.java diff --git a/java/src/test/java/com/github/copilot/tool/ParamTest.java b/java/sdk/src/test/java/com/github/copilot/tool/ParamTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/tool/ParamTest.java rename to java/sdk/src/test/java/com/github/copilot/tool/ParamTest.java diff --git a/java/src/test/java/com/github/copilot/tool/SchemaGeneratorTest.java b/java/sdk/src/test/java/com/github/copilot/tool/SchemaGeneratorTest.java similarity index 100% rename from java/src/test/java/com/github/copilot/tool/SchemaGeneratorTest.java rename to java/sdk/src/test/java/com/github/copilot/tool/SchemaGeneratorTest.java diff --git a/java/src/test/prompts/PROMPT-smoke-test.md b/java/sdk/src/test/prompts/PROMPT-smoke-test.md similarity index 100% rename from java/src/test/prompts/PROMPT-smoke-test.md rename to java/sdk/src/test/prompts/PROMPT-smoke-test.md diff --git a/java/src/test/resources/logging-debug.properties b/java/sdk/src/test/resources/logging-debug.properties similarity index 100% rename from java/src/test/resources/logging-debug.properties rename to java/sdk/src/test/resources/logging-debug.properties diff --git a/java/src/test/resources/logging.properties b/java/sdk/src/test/resources/logging.properties similarity index 100% rename from java/src/test/resources/logging.properties rename to java/sdk/src/test/resources/logging.properties diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigAuth.java b/java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigAuth.java deleted file mode 100644 index 4a3612e0b6..0000000000 --- a/java/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigAuth.java +++ /dev/null @@ -1,29 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - *--------------------------------------------------------------------------------------------*/ - -// AUTO-GENERATED FILE - DO NOT EDIT -// Generated from: api.schema.json - -package com.github.copilot.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; - -/** - * Credential-injection capability flags applied while the sandbox is enabled. - * - * @since 1.0.0 - */ -@javax.annotation.processing.Generated("copilot-sdk-codegen") -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) -public record SandboxConfigAuth( - /** Whether to inject git credentials as an `http..extraheader` so authenticated HTTPS git works inside the sandbox without the shell-based credential helper the sandbox blocks. github.com is served by the Copilot token; every other forge (Azure DevOps, GitHub Enterprise Server, GitLab, ...) by a credential the host resolves from the user's own helper before the sandbox is applied. Default: false (opt-in). */ - @JsonProperty("git") Boolean git, - /** Whether to export `GH_TOKEN` so the `gh` CLI authenticates inside the sandbox without the OS keyring the sandbox blocks. Default: false (opt-in). */ - @JsonProperty("gh") Boolean gh -) { -} From 687f66ecbc59fa2bf77fa9eb938e27ef79d1439a Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Mon, 10 Aug 2026 19:06:54 +0000 Subject: [PATCH 02/12] java: add flatten-maven-plugin to produce self-contained deployed POMs Child modules (copilot-sdk-java, copilot-sdk-java-runtime) inherit from copilot-sdk-java-parent, which is not published to Maven Central. Without flattening, consumers resolving a child artifact would fail to resolve the parent POM. The flatten-maven-plugin (ossrh mode) inlines all inherited metadata so the deployed POM is fully self-contained. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3a69f33e-eea6-4b8c-9ef0-8b4d56d53a9c --- .gitignore | 1 + java/pom.xml | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/.gitignore b/.gitignore index 4aff9be11d..31fc9342c2 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ java/.classpath java/.project java/.settings java/scripts/codegen/node_modules/ +.flattened-pom.xml diff --git a/java/pom.xml b/java/pom.xml index 987fccba80..2313a6ee55 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -166,8 +166,38 @@ central-publishing-maven-plugin 0.10.0 + + org.codehaus.mojo + flatten-maven-plugin + 1.7.0 + + ossrh + + + + flatten + process-resources + + flatten + + + + flatten-clean + clean + + clean + + + + + + + org.codehaus.mojo + flatten-maven-plugin + + From 62bca3740fd4ac5df0e96885d0ad9af3c5907f07 Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Mon, 10 Aug 2026 19:24:31 +0000 Subject: [PATCH 03/12] java: only release callback GC root after successful connection_close Previously the tracked callback was removed in a finally block, releasing its GC root even when native connection_close failed or threw. Native code could still retain and invoke the stale function pointer, crashing the JVM after JNA collected the callback. Now the callback reference is only removed from trackedCallbacks when the native call succeeds, ensuring the function pointer stays rooted while native code may still hold it. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3a69f33e-eea6-4b8c-9ef0-8b4d56d53a9c --- .../main/java/com/github/copilot/ffi/JnaNativeBinding.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/JnaNativeBinding.java b/java/sdk/src/main/java/com/github/copilot/ffi/JnaNativeBinding.java index 528382c20c..995b0eef0a 100644 --- a/java/sdk/src/main/java/com/github/copilot/ffi/JnaNativeBinding.java +++ b/java/sdk/src/main/java/com/github/copilot/ffi/JnaNativeBinding.java @@ -224,11 +224,12 @@ public boolean connectionWrite(int connectionId, byte[] data, int dataLen) { @Override public boolean connectionClose(int connectionId) { - try { - return lib.copilot_runtime_connection_close(connectionId) != 0; - } finally { + boolean closed = lib.copilot_runtime_connection_close(connectionId) != 0; + if (closed) { + // Native side has released ownership; safe to drop our GC root. trackedCallbacks.remove(connectionId); } + return closed; } // ------------------------------------------------------------------------- From d27364ff003fbb62d6e3deb0c9caf00694edb7b9 Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Mon, 10 Aug 2026 19:42:00 +0000 Subject: [PATCH 04/12] java: remove spike test library references, use real native runtime MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove CallbackTestLib interface and all tests that depended on the spike libcallback_test.so from the removed 1917-java-embed-rust-cli-runtime-remove-before-merge directory. Rewrite the 3 duplicate-load guard tests to use NativeRuntimeLoader.resolve() to locate the real runtime.node binary instead of the spike library. Remove the startWithSpikeLibrarySupportsLifecycleAndDataFlow integration test from FfiRuntimeHostTest — this functionality is covered by E2E tests. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3a69f33e-eea6-4b8c-9ef0-8b4d56d53a9c --- .../copilot/ffi/FfiRuntimeHostTest.java | 90 ------ .../copilot/ffi/JnaNativeBindingTest.java | 274 ++---------------- 2 files changed, 29 insertions(+), 335 deletions(-) diff --git a/java/sdk/src/test/java/com/github/copilot/ffi/FfiRuntimeHostTest.java b/java/sdk/src/test/java/com/github/copilot/ffi/FfiRuntimeHostTest.java index 7c8de78826..d6e9815181 100644 --- a/java/sdk/src/test/java/com/github/copilot/ffi/FfiRuntimeHostTest.java +++ b/java/sdk/src/test/java/com/github/copilot/ffi/FfiRuntimeHostTest.java @@ -10,14 +10,9 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assumptions.assumeTrue; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; @@ -33,97 +28,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.github.copilot.rpc.CopilotClientMode; import com.github.copilot.rpc.CopilotClientOptions; -import com.sun.jna.Library; import com.sun.jna.Memory; -import com.sun.jna.Native; import com.sun.jna.Pointer; class FfiRuntimeHostTest { private static final ObjectMapper MAPPER = new ObjectMapper(); - private static final String TEST_LIB_PATH_PROP = "copilot.test.nativelib.path"; - private static final String SPIKE_LIB_PATH = System.getProperty(TEST_LIB_PATH_PROP, - "../../1917-java-embed-rust-cli-runtime-remove-before-merge" + "/spike-3-4-jna-callback-and-threading" - + "/rust-dll/target/release/libcallback_test.so"); - - interface CallbackTestLib extends Library { - int host_start(); - - byte host_shutdown(int serverHandle); - - int connection_open(int serverHandle, OutboundCallback callback, Pointer userData, int burstCount); - - byte connection_write(int connectionHandle, byte[] data, int len); - - byte connection_close(int connectionHandle); - } - - private static boolean testLibExists() { - return Files.isRegularFile(Path.of(SPIKE_LIB_PATH).toAbsolutePath().normalize()); - } - - private static CallbackTestLib loadTestLib() { - return Native.load(Path.of(SPIKE_LIB_PATH).toAbsolutePath().normalize().toString(), CallbackTestLib.class); - } - - /** - * Integration test that exercises the real JNA callback/lifecycle path against - * a native test library. Skipped in normal CI because the Rust test crate is - * not built as part of the Maven build. To run locally, build the Rust crate - * and set {@code -Dcopilot.test.nativelib.path=}. - */ - @Test - void startWithSpikeLibrarySupportsLifecycleAndDataFlow() throws Exception { - assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH - + ". Build the Rust test crate or set -D" + TEST_LIB_PATH_PROP + " to run this test."); - CallbackTestLib callbackTestLib = loadTestLib(); - AtomicInteger writes = new AtomicInteger(); - - NativeBinding binding = new NativeBinding() { - @Override - public int hostStart(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen) { - return callbackTestLib.host_start(); - } - - @Override - public boolean hostShutdown(int serverId) { - return callbackTestLib.host_shutdown(serverId) != 0; - } - - @Override - public int connectionOpen(int serverId, OutboundCallback callback, Pointer userData, byte[] extSource, - int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, int connTokenLen) { - return callbackTestLib.connection_open(serverId, callback, userData, 1); - } - - @Override - public boolean connectionWrite(int connectionId, byte[] data, int dataLen) { - writes.incrementAndGet(); - return callbackTestLib.connection_write(connectionId, data, dataLen) != 0; - } - - @Override - public boolean connectionClose(int connectionId) { - return callbackTestLib.connection_close(connectionId) != 0; - } - }; - - FfiRuntimeHost host = new FfiRuntimeHost(binding, "spike-lib"); - host.start("/tmp/runtime.js", new CopilotClientOptions()); - - InputStream in = host.getReceiveStream(); - byte[] buffer = new byte[512]; - int read = in.read(buffer); - assertTrue(read > 0); - String content = new String(buffer, 0, read, StandardCharsets.UTF_8); - assertTrue(content.contains("jsonrpc"), "callback payload should contain JSON-RPC"); - - OutputStream out = host.getSendStream(); - out.write("{\"jsonrpc\":\"2.0\"}".getBytes(StandardCharsets.UTF_8)); - assertEquals(1, writes.get()); - - assertDoesNotThrow(host::close); - } @Test void startBuildsExpectedArgvAndEnvJson() throws Exception { diff --git a/java/sdk/src/test/java/com/github/copilot/ffi/JnaNativeBindingTest.java b/java/sdk/src/test/java/com/github/copilot/ffi/JnaNativeBindingTest.java index 9f0f939eee..5c54bec84d 100644 --- a/java/sdk/src/test/java/com/github/copilot/ffi/JnaNativeBindingTest.java +++ b/java/sdk/src/test/java/com/github/copilot/ffi/JnaNativeBindingTest.java @@ -11,97 +11,32 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assumptions.assumeTrue; -import com.sun.jna.Library; -import com.sun.jna.Native; import com.sun.jna.Pointer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; /** - * Unit tests for {@link JnaNativeBinding} using the spike-3-4 test native - * library ({@code libcallback_test}). + * Unit tests for {@link JnaNativeBinding}. * *

- * The spike test library exports simplified versions of the runtime ABI - * functions: {@code host_start}, {@code host_shutdown}, - * {@code connection_open}, {@code connection_write}, and - * {@code connection_close}. Callback tests use this library through a - * test-specific JNA interface, while loading and guard tests exercise - * {@link JnaNativeBinding} directly. + * Delegation and callback-tracking tests use a stub + * {@link JnaNativeBinding.CopilotRuntimeLibrary}. Library-loading guard tests + * exercise {@link JnaNativeBinding} directly against the real + * {@code runtime.node} when it is available on the test classpath. * *

- * Tests that require the native library are conditionally skipped when the - * library is not present (e.g. on an architecture without a pre-built binary). + * Tests that require the packaged native runtime are conditionally skipped when + * it is unavailable (for example, when not running with {@code -Pinprocess}). */ class JnaNativeBindingTest { - /** - * System property that points at the absolute path of the test native library. - * - *

- * Default: the {@code libcallback_test.so} built from the spike-3-4 Rust crate, - * relative to {@code java/sdk/}. - */ - private static final String TEST_LIB_PATH_PROP = "copilot.test.nativelib.path"; - - private static final String SPIKE_LIB_PATH = System.getProperty(TEST_LIB_PATH_PROP, - "../../1917-java-embed-rust-cli-runtime-remove-before-merge" + "/spike-3-4-jna-callback-and-threading" - + "/rust-dll/target/release/libcallback_test.so"); - - // ------------------------------------------------------------------------- - // Test-specific JNA interface for the spike-3-4 test library - // ------------------------------------------------------------------------- - - /** - * JNA interface for the simplified test library. Maps Java names to the - * snake_case exports of {@code libcallback_test}. - * - *

- * Note: This test library exports simplified names ({@code host_start}, - * {@code connection_open}, etc.) rather than the production - * {@code copilot_runtime_*} names. Production symbol resolution is validated - * lazily by JNA when each method is first called through - * {@link JnaNativeBinding.CopilotRuntimeLibrary}. - */ - interface CallbackTestLib extends Library { - /** Simulates {@code copilot_runtime_host_start}; always returns 42. */ - int host_start(); - - /** - * Simulates {@code copilot_runtime_host_shutdown}; always returns nonzero. - * Returns {@code byte} to match the Rust ABI one-byte {@code bool}. - */ - byte host_shutdown(int serverHandle); - - /** - * Simulates {@code copilot_runtime_connection_open}. Spawns a native thread - * that invokes {@code callback} {@code burstCount} times. Returns 7. - */ - int connection_open(int serverHandle, OutboundCallback callback, Pointer userData, int burstCount); - - /** - * Simulates {@code copilot_runtime_connection_write}; always returns nonzero. - * Returns {@code byte} to match the Rust ABI one-byte {@code bool}. - */ - byte connection_write(int connectionHandle, byte[] data, int len); - - /** - * Simulates {@code copilot_runtime_connection_close}; always returns nonzero. - * Returns {@code byte} to match the Rust ABI one-byte {@code bool}. - */ - byte connection_close(int connectionHandle); - } - // ------------------------------------------------------------------------- // Stub CopilotRuntimeLibrary for delegation tests // ------------------------------------------------------------------------- @@ -162,16 +97,12 @@ public byte copilot_runtime_connection_close(int connectionId) { // Helpers // ------------------------------------------------------------------------- - private static boolean testLibExists() { - return Files.isRegularFile(testLibAbsPath()); - } - - private static Path testLibAbsPath() { - return Path.of(SPIKE_LIB_PATH).toAbsolutePath().normalize(); - } - - private static CallbackTestLib loadTestLib() { - return Native.load(testLibAbsPath().toString(), CallbackTestLib.class); + private static Path resolveNativeLib() { + try { + return NativeRuntimeLoader.resolve(); + } catch (Exception e) { + return null; + } } @AfterEach @@ -297,59 +228,35 @@ void activeCallbacksStartsAtZero() { assertEquals(0, binding.activeCallbacks.get(), "Active callback counter must start at zero"); } - // ========================================================================= - // Library loading — success paths (requires native library on disk) - // ========================================================================= - - @Test - void loadByPathSucceedsWhenLibraryExists() { - assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); - JnaNativeBinding binding = new JnaNativeBinding(testLibAbsPath()); - assertNotNull(binding); - } - - @Test - void loadByPathTwiceWithSamePathSucceeds() { - assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); - new JnaNativeBinding(testLibAbsPath()); - // Second construction with the same absolute path must not throw. - new JnaNativeBinding(testLibAbsPath()); - } - - @Test - void activeCallbacksStartsAtZeroAfterPathLoad() { - assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); - JnaNativeBinding binding = new JnaNativeBinding(testLibAbsPath()); - assertEquals(0, binding.activeCallbacks.get()); - } - // ========================================================================= // Duplicate-load guard // ========================================================================= @Test void loadFromDifferentPathThrowsIllegalState(@TempDir Path tempDir) throws Exception { - assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); - Path altPath = tempDir.resolve("libcallback_test_alt.so"); - Files.copy(testLibAbsPath(), altPath); + Path nativeLib = resolveNativeLib(); + assumeTrue(nativeLib != null, "Native runtime not available (run with -Pinprocess)"); + Path altPath = tempDir.resolve("runtime-copy-alt.node"); + Files.copy(nativeLib, altPath); - new JnaNativeBinding(testLibAbsPath()); + new JnaNativeBinding(nativeLib); IllegalStateException ex = assertThrows(IllegalStateException.class, () -> new JnaNativeBinding(altPath)); String msg = ex.getMessage(); assertTrue(msg.contains("already loaded from"), "Diagnostic must mention 'already loaded from', got: " + msg); - assertTrue(msg.contains(testLibAbsPath().toString()), "Diagnostic must contain path A, got: " + msg); + assertTrue(msg.contains(nativeLib.toString()), "Diagnostic must contain path A, got: " + msg); assertTrue(msg.contains(altPath.toString()), "Diagnostic must contain path B, got: " + msg); } @Test void duplicateLoadDiagnosticMentionsNotSupported(@TempDir Path tempDir) throws Exception { - assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); - Path altPath = tempDir.resolve("libcallback_test_b.so"); - Files.copy(testLibAbsPath(), altPath); + Path nativeLib = resolveNativeLib(); + assumeTrue(nativeLib != null, "Native runtime not available (run with -Pinprocess)"); + Path altPath = tempDir.resolve("runtime-copy-b.node"); + Files.copy(nativeLib, altPath); - new JnaNativeBinding(testLibAbsPath()); + new JnaNativeBinding(nativeLib); IllegalStateException ex = assertThrows(IllegalStateException.class, () -> new JnaNativeBinding(altPath)); assertTrue(ex.getMessage().contains("not supported"), @@ -358,11 +265,12 @@ void duplicateLoadDiagnosticMentionsNotSupported(@TempDir Path tempDir) throws E @Test void resetForTestingAllowsReloadFromDifferentPath(@TempDir Path tempDir) throws Exception { - assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); - Path altPath = tempDir.resolve("libcallback_test_reset.so"); - Files.copy(testLibAbsPath(), altPath); + Path nativeLib = resolveNativeLib(); + assumeTrue(nativeLib != null, "Native runtime not available (run with -Pinprocess)"); + Path altPath = tempDir.resolve("runtime-copy-reset.node"); + Files.copy(nativeLib, altPath); - new JnaNativeBinding(testLibAbsPath()); + new JnaNativeBinding(nativeLib); JnaNativeBinding.resetForTesting(); @@ -370,44 +278,6 @@ void resetForTestingAllowsReloadFromDifferentPath(@TempDir Path tempDir) throws new JnaNativeBinding(altPath); } - // ========================================================================= - // Callback invocation via test native library - // ========================================================================= - - @Test - void callbackIsInvokedFromNativeThread() throws Exception { - assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); - CallbackTestLib lib = loadTestLib(); - int serverHandle = lib.host_start(); - assertEquals(42, serverHandle, "host_start should return 42"); - - int burstCount = 3; - CountDownLatch latch = new CountDownLatch(burstCount); - AtomicInteger callbackCount = new AtomicInteger(0); - AtomicInteger activeCallbacks = new AtomicInteger(0); - - OutboundCallback callback = (userData, data, len) -> { - activeCallbacks.incrementAndGet(); - try { - callbackCount.incrementAndGet(); - // Copy before returning — pointer only valid during invocation. - byte[] bytes = data.getByteArray(0, len); - assertEquals(len, bytes.length, "Copied byte array length must equal len parameter"); - } finally { - activeCallbacks.decrementAndGet(); - latch.countDown(); - } - }; - - int connHandle = lib.connection_open(serverHandle, callback, Pointer.NULL, burstCount); - assertEquals(7, connHandle, "connection_open should return 7"); - - assertTrue(latch.await(10, TimeUnit.SECONDS), "All callbacks must complete within 10 seconds"); - assertEquals(burstCount, callbackCount.get(), "Callback must be invoked exactly burstCount times"); - assertEquals(0, activeCallbacks.get(), - "Active callback count must return to zero after all callbacks complete"); - } - @Test void activeCallbackCountIsIncrementedDuringCallback() { StubRuntimeLibrary stub = new StubRuntimeLibrary(); @@ -432,90 +302,4 @@ void activeCallbackCountIsIncrementedDuringCallback() { "binding.activeCallbacks must return to 0 after callback completes"); } - @Test - void callbackDataContainsJsonRpcContent() throws Exception { - assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); - CallbackTestLib lib = loadTestLib(); - int serverHandle = lib.host_start(); - - CountDownLatch latch = new CountDownLatch(1); - AtomicReference receivedMessage = new AtomicReference<>(); - - OutboundCallback callback = (userData, data, len) -> { - try { - byte[] bytes = data.getByteArray(0, len); - receivedMessage.set(new String(bytes, StandardCharsets.UTF_8)); - } finally { - latch.countDown(); - } - }; - - lib.connection_open(serverHandle, callback, Pointer.NULL, 1); - - assertTrue(latch.await(10, TimeUnit.SECONDS), "Callback must complete within 10 seconds"); - String msg = receivedMessage.get(); - assertNotNull(msg, "Received message must not be null"); - assertTrue(msg.contains("jsonrpc"), "Callback data should contain JSON-RPC content, got: " + msg); - } - - @Test - void multipleCallbacksDoNotLeakActiveCount() throws Exception { - assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); - CallbackTestLib lib = loadTestLib(); - int serverHandle = lib.host_start(); - - int burstCount = 5; - CountDownLatch latch = new CountDownLatch(burstCount); - AtomicInteger activeCallbacks = new AtomicInteger(0); - AtomicInteger maxObservedActive = new AtomicInteger(0); - - OutboundCallback callback = (userData, data, len) -> { - int current = activeCallbacks.incrementAndGet(); - maxObservedActive.updateAndGet(prev -> Math.max(prev, current)); - try { - data.getByteArray(0, len); - } finally { - activeCallbacks.decrementAndGet(); - latch.countDown(); - } - }; - - lib.connection_open(serverHandle, callback, Pointer.NULL, burstCount); - - assertTrue(latch.await(10, TimeUnit.SECONDS), "All callbacks must complete within timeout"); - assertEquals(0, activeCallbacks.get(), "Active count must be 0 after all callbacks complete"); - assertTrue(maxObservedActive.get() >= 1, "At least one callback must have been observed as active"); - } - - @Test - void connectionWriteReturnsTrueForValidHandle() { - assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); - CallbackTestLib lib = loadTestLib(); - int serverHandle = lib.host_start(); - int connHandle = lib.connection_open(serverHandle, (ud, data, len) -> { - }, Pointer.NULL, 0); - - byte[] payload = "{\"jsonrpc\":\"2.0\",\"method\":\"ping\"}".getBytes(StandardCharsets.UTF_8); - assertTrue(lib.connection_write(connHandle, payload, payload.length) != 0, - "connection_write should return nonzero for valid data"); - } - - @Test - void connectionCloseReturnsTrueForValidHandle() { - assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); - CallbackTestLib lib = loadTestLib(); - int serverHandle = lib.host_start(); - int connHandle = lib.connection_open(serverHandle, (ud, data, len) -> { - }, Pointer.NULL, 0); - - assertTrue(lib.connection_close(connHandle) != 0, "connection_close should return nonzero"); - } - - @Test - void hostShutdownReturnsTrueForValidHandle() { - assumeTrue(testLibExists(), "Native test library not found at " + SPIKE_LIB_PATH); - CallbackTestLib lib = loadTestLib(); - int serverHandle = lib.host_start(); - assertTrue(lib.host_shutdown(serverHandle) != 0, "host_shutdown should return nonzero"); - } } From 3fcf240f7e8ddb1887e9b08154e6269e66ddc463 Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Mon, 10 Aug 2026 19:48:20 +0000 Subject: [PATCH 05/12] docs: add JNA dependency to in-process mode README snippet JNA is declared optional in the SDK POM so subprocess-mode users don't pull it transitively. The in-process mode section was missing this required third dependency, which would cause NoClassDefFoundError at runtime. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3a69f33e-eea6-4b8c-9ef0-8b4d56d53a9c --- java/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/java/README.md b/java/README.md index 16c9db8911..a20196b105 100644 --- a/java/README.md +++ b/java/README.md @@ -95,6 +95,12 @@ Add both the SDK and the platform-specific native runtime to your project: ${copilot.version} linux-x64 + + + net.java.dev.jna + jna + 5.19.1 + ``` From 5783def29c819436ed44941b17d827a125cc3cdd Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Mon, 10 Aug 2026 20:56:09 +0000 Subject: [PATCH 06/12] java: add empty javadoc and sources JARs for copilot-native module Maven Central requires javadoc and sources classifier JARs for every non-POM artifact. Since copilot-native has no Java sources, the parent's maven-javadoc-plugin produced nothing. Add explicit empty-archive executions to maven-jar-plugin so the module passes Central validation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3a69f33e-eea6-4b8c-9ef0-8b4d56d53a9c --- java/copilot-native/pom.xml | 33 ++++++++++++++++--- java/copilot-native/src/main/java/.gitkeep | 0 java/copilot-native/src/main/javadoc/.gitkeep | 0 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 java/copilot-native/src/main/java/.gitkeep create mode 100644 java/copilot-native/src/main/javadoc/.gitkeep diff --git a/java/copilot-native/pom.xml b/java/copilot-native/pom.xml index 5a60f84403..03822887c0 100644 --- a/java/copilot-native/pom.xml +++ b/java/copilot-native/pom.xml @@ -108,6 +108,35 @@ + + + empty-javadoc-jar + package + + jar + + + javadoc + ${project.basedir}/src/main/javadoc + + + + + empty-sources-jar + package + + jar + + + sources + ${project.basedir}/src/main/java + + org.sonatype.central central-publishing-maven-plugin diff --git a/java/copilot-native/src/main/java/.gitkeep b/java/copilot-native/src/main/java/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/java/copilot-native/src/main/javadoc/.gitkeep b/java/copilot-native/src/main/javadoc/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 From c9b9d88e20bf337073298a85ab2fde33c77a2ae5 Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Mon, 10 Aug 2026 21:17:28 +0000 Subject: [PATCH 07/12] java: use size_t-width type for native length parameters The C ABI declares all buffer-length parameters as size_t (8 bytes on 64-bit), but the Java FFI layer was using int (always 4 bytes). While harmless for current JSON-RPC payloads, this is incorrect on 64-bit platforms and would be wrong on Windows x64 where NativeLong (C long) is also only 4 bytes. Introduce SizeT, a minimal IntegerType subclass sized via Native.SIZE_T_SIZE, and use it in CopilotRuntimeLibrary and OutboundCallback. The NativeBinding Java abstraction layer keeps int parameters; JnaNativeBinding converts at the boundary. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3a69f33e-eea6-4b8c-9ef0-8b4d56d53a9c --- .../github/copilot/ffi/FfiRuntimeHost.java | 5 ++- .../github/copilot/ffi/JnaNativeBinding.java | 14 +++---- .../github/copilot/ffi/OutboundCallback.java | 2 +- .../java/com/github/copilot/ffi/SizeT.java | 39 +++++++++++++++++++ .../copilot/ffi/FfiRuntimeHostTest.java | 4 +- .../copilot/ffi/JnaNativeBindingTest.java | 12 +++--- 6 files changed, 58 insertions(+), 18 deletions(-) create mode 100644 java/sdk/src/main/java/com/github/copilot/ffi/SizeT.java diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/FfiRuntimeHost.java b/java/sdk/src/main/java/com/github/copilot/ffi/FfiRuntimeHost.java index 6a71c71431..580f97bb56 100644 --- a/java/sdk/src/main/java/com/github/copilot/ffi/FfiRuntimeHost.java +++ b/java/sdk/src/main/java/com/github/copilot/ffi/FfiRuntimeHost.java @@ -224,10 +224,11 @@ private OutboundCallback createOutboundCallback() { } activeCallbacks.incrementAndGet(); try { - if (closing.get() || data == null || len <= 0) { + int length = len.intValue(); + if (closing.get() || data == null || length <= 0) { return; } - byte[] bytes = data.getByteArray(0, len); + byte[] bytes = data.getByteArray(0, length); if (!closing.get()) { receiveStream.enqueue(bytes); } diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/JnaNativeBinding.java b/java/sdk/src/main/java/com/github/copilot/ffi/JnaNativeBinding.java index 995b0eef0a..d638107cf6 100644 --- a/java/sdk/src/main/java/com/github/copilot/ffi/JnaNativeBinding.java +++ b/java/sdk/src/main/java/com/github/copilot/ffi/JnaNativeBinding.java @@ -58,7 +58,7 @@ final class JnaNativeBinding implements NativeBinding { */ interface CopilotRuntimeLibrary extends Library { /** Corresponds to {@code copilot_runtime_host_start}. */ - int copilot_runtime_host_start(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen); + int copilot_runtime_host_start(byte[] argvJson, SizeT argvJsonLen, byte[] envJson, SizeT envJsonLen); /** * Corresponds to {@code copilot_runtime_host_shutdown}. @@ -72,14 +72,14 @@ interface CopilotRuntimeLibrary extends Library { /** Corresponds to {@code copilot_runtime_connection_open}. */ int copilot_runtime_connection_open(int serverId, OutboundCallback callback, Pointer userData, byte[] extSource, - int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, int connTokenLen); + SizeT extSourceLen, byte[] extName, SizeT extNameLen, byte[] connToken, SizeT connTokenLen); /** * Corresponds to {@code copilot_runtime_connection_write}. * * @see #copilot_runtime_host_shutdown for why this returns {@code byte} */ - byte copilot_runtime_connection_write(int connectionId, byte[] data, int dataLen); + byte copilot_runtime_connection_write(int connectionId, byte[] data, SizeT dataLen); /** * Corresponds to {@code copilot_runtime_connection_close}. @@ -188,7 +188,7 @@ int copilot_runtime_connection_open(int serverId, OutboundCallback callback, Poi @Override public int hostStart(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen) { - return lib.copilot_runtime_host_start(argvJson, argvJsonLen, envJson, envJsonLen); + return lib.copilot_runtime_host_start(argvJson, new SizeT(argvJsonLen), envJson, new SizeT(envJsonLen)); } @Override @@ -208,8 +208,8 @@ public int connectionOpen(int serverId, OutboundCallback callback, Pointer userD activeCallbacks.decrementAndGet(); } }; - int connectionId = lib.copilot_runtime_connection_open(serverId, tracked, userData, extSource, extSourceLen, - extName, extNameLen, connToken, connTokenLen); + int connectionId = lib.copilot_runtime_connection_open(serverId, tracked, userData, extSource, + new SizeT(extSourceLen), extName, new SizeT(extNameLen), connToken, new SizeT(connTokenLen)); if (connectionId != 0) { // Hold a strong reference to prevent GC of the JNA function pointer. trackedCallbacks.put(connectionId, tracked); @@ -219,7 +219,7 @@ public int connectionOpen(int serverId, OutboundCallback callback, Pointer userD @Override public boolean connectionWrite(int connectionId, byte[] data, int dataLen) { - return lib.copilot_runtime_connection_write(connectionId, data, dataLen) != 0; + return lib.copilot_runtime_connection_write(connectionId, data, new SizeT(dataLen)) != 0; } @Override diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/OutboundCallback.java b/java/sdk/src/main/java/com/github/copilot/ffi/OutboundCallback.java index 6f5c319224..597feea9e0 100644 --- a/java/sdk/src/main/java/com/github/copilot/ffi/OutboundCallback.java +++ b/java/sdk/src/main/java/com/github/copilot/ffi/OutboundCallback.java @@ -42,5 +42,5 @@ interface OutboundCallback extends Callback { * @param len * byte length of the buffer pointed to by {@code data} */ - void invoke(Pointer userData, Pointer data, int len); + void invoke(Pointer userData, Pointer data, SizeT len); } diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/SizeT.java b/java/sdk/src/main/java/com/github/copilot/ffi/SizeT.java new file mode 100644 index 0000000000..646b8ae7b7 --- /dev/null +++ b/java/sdk/src/main/java/com/github/copilot/ffi/SizeT.java @@ -0,0 +1,39 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot.ffi; + +import com.sun.jna.IntegerType; +import com.sun.jna.Native; + +/** + * JNA type mapping for the C {@code size_t} type. + * + *

+ * {@code size_t} is pointer-sized: 8 bytes on 64-bit platforms, 4 bytes on + * 32-bit. Using Java {@code int} (always 4 bytes) would silently truncate on + * 64-bit, and using {@link com.sun.jna.NativeLong} would be wrong on Windows + * x64 where C {@code long} is 4 bytes but {@code size_t} is 8 bytes. + * + *

+ * This class uses {@link Native#SIZE_T_SIZE} so JNA marshals the correct width + * on every platform. + */ +final class SizeT extends IntegerType { + + /** Zero-valued instance; required by JNA for return-type instantiation. */ + public SizeT() { + this(0); + } + + /** + * Creates a {@code size_t} with the given value. + * + * @param value + * the numeric value (unsigned, but stored as signed long) + */ + public SizeT(long value) { + super(Native.SIZE_T_SIZE, value, true); + } +} diff --git a/java/sdk/src/test/java/com/github/copilot/ffi/FfiRuntimeHostTest.java b/java/sdk/src/test/java/com/github/copilot/ffi/FfiRuntimeHostTest.java index d6e9815181..cc98d24f6b 100644 --- a/java/sdk/src/test/java/com/github/copilot/ffi/FfiRuntimeHostTest.java +++ b/java/sdk/src/test/java/com/github/copilot/ffi/FfiRuntimeHostTest.java @@ -118,7 +118,7 @@ public int connectionOpen(int serverId, OutboundCallback callback, Pointer userD int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, int connTokenLen) { Memory mem = new Memory(5); mem.write(0, "hello".getBytes(StandardCharsets.UTF_8), 0, 5); - callback.invoke(Pointer.NULL, mem, 5); + callback.invoke(Pointer.NULL, mem, new SizeT(5)); callbackReturned.set(true); return 2; } @@ -347,7 +347,7 @@ void enqueue(byte[] bytes) { CompletableFuture callbackFuture = CompletableFuture.runAsync(() -> { Memory mem = new Memory(1); mem.setByte(0, (byte) 'x'); - callbackRef.get().invoke(Pointer.NULL, mem, 1); + callbackRef.get().invoke(Pointer.NULL, mem, new SizeT(1)); }); assertTrue(callbackEntered.await(2, TimeUnit.SECONDS)); diff --git a/java/sdk/src/test/java/com/github/copilot/ffi/JnaNativeBindingTest.java b/java/sdk/src/test/java/com/github/copilot/ffi/JnaNativeBindingTest.java index 5c54bec84d..8b01fbbb12 100644 --- a/java/sdk/src/test/java/com/github/copilot/ffi/JnaNativeBindingTest.java +++ b/java/sdk/src/test/java/com/github/copilot/ffi/JnaNativeBindingTest.java @@ -59,9 +59,9 @@ private static class StubRuntimeLibrary implements JnaNativeBinding.CopilotRunti OutboundCallback lastCallback; @Override - public int copilot_runtime_host_start(byte[] argvJson, int argvJsonLen, byte[] envJson, int envJsonLen) { + public int copilot_runtime_host_start(byte[] argvJson, SizeT argvJsonLen, byte[] envJson, SizeT envJsonLen) { lastArgvJson = argvJson; - lastArgvJsonLen = argvJsonLen; + lastArgvJsonLen = argvJsonLen.intValue(); return hostStartReturn; } @@ -73,15 +73,15 @@ public byte copilot_runtime_host_shutdown(int serverId) { @Override public int copilot_runtime_connection_open(int serverId, OutboundCallback callback, Pointer userData, - byte[] extSource, int extSourceLen, byte[] extName, int extNameLen, byte[] connToken, - int connTokenLen) { + byte[] extSource, SizeT extSourceLen, byte[] extName, SizeT extNameLen, byte[] connToken, + SizeT connTokenLen) { lastServerId = serverId; lastCallback = callback; return connectionOpenReturn; } @Override - public byte copilot_runtime_connection_write(int connectionId, byte[] data, int dataLen) { + public byte copilot_runtime_connection_write(int connectionId, byte[] data, SizeT dataLen) { lastConnectionId = connectionId; return connectionWriteReturn; } @@ -295,7 +295,7 @@ void activeCallbackCountIsIncrementedDuringCallback() { // The stub captured the tracked wrapper — invoke it to trigger tracking assertNotNull(stub.lastCallback, "Stub must have captured the tracked callback"); - stub.lastCallback.invoke(Pointer.NULL, Pointer.NULL, 0); + stub.lastCallback.invoke(Pointer.NULL, Pointer.NULL, new SizeT(0)); assertEquals(1, observedDuringCallback.get(), "binding.activeCallbacks must be 1 during callback execution"); assertEquals(0, binding.activeCallbacks.get(), From 2229fba172401ce82769ff59a37b7b0db67cca2d Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Mon, 10 Aug 2026 21:30:56 +0000 Subject: [PATCH 08/12] java: remove global JNA callback exception handler The process-wide Native.setCallbackExceptionHandler was redundant: the local catch (Throwable) in createOutboundCallback() already prevents any exception from escaping across the FFI boundary. The global mutation affected unrelated JNA callbacks in the same process and was never restored. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3a69f33e-eea6-4b8c-9ef0-8b4d56d53a9c --- .../src/main/java/com/github/copilot/ffi/FfiRuntimeHost.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/FfiRuntimeHost.java b/java/sdk/src/main/java/com/github/copilot/ffi/FfiRuntimeHost.java index 580f97bb56..5e7d2d461a 100644 --- a/java/sdk/src/main/java/com/github/copilot/ffi/FfiRuntimeHost.java +++ b/java/sdk/src/main/java/com/github/copilot/ffi/FfiRuntimeHost.java @@ -29,8 +29,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.github.copilot.rpc.CopilotClientMode; import com.github.copilot.rpc.CopilotClientOptions; -import com.sun.jna.Callback; -import com.sun.jna.Native; + import com.sun.jna.Pointer; /** @@ -74,8 +73,6 @@ public FfiRuntimeHost() throws IOException { this.receiveStream = Objects.requireNonNull(receiveStream, "receiveStream must not be null"); this.sendStream = new FfiOutputStream(this.nativeBinding, this.connectionId, this.closing, this.operationLock); this.libraryPath = libraryPath; - Native.setCallbackExceptionHandler((Callback callback, Throwable throwable) -> LOG.log(Level.WARNING, - "Unhandled exception in FFI callback", throwable)); } private FfiRuntimeHost(Path libraryPath, NativeBinding nativeBinding, QueueInputStream receiveStream) { From a02a3e6fa786e937d98c967a679eb485a79c5dc6 Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Mon, 10 Aug 2026 21:35:02 +0000 Subject: [PATCH 09/12] ci: make java-sdk-inprocess test job blocking Remove continue-on-error so FFI regressions in the in-process transport block PRs. The in-process transport is now production code and must not silently regress. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3a69f33e-eea6-4b8c-9ef0-8b4d56d53a9c --- .github/workflows/java-sdk-tests.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/java-sdk-tests.yml b/.github/workflows/java-sdk-tests.yml index aa1036358d..bd0a34bd25 100644 --- a/.github/workflows/java-sdk-tests.yml +++ b/.github/workflows/java-sdk-tests.yml @@ -21,7 +21,6 @@ jobs: name: "Java SDK InProcess Tests" if: github.event.repository.fork == false runs-on: ubuntu-latest - continue-on-error: true defaults: run: shell: bash From a06e77ea16a6648339cc990c601f0b5a104c4469 Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Mon, 10 Aug 2026 21:39:19 +0000 Subject: [PATCH 10/12] fix: update jbang-example.java path after move to sdk/ submodule The JBang example moved from java/jbang-example.java to java/sdk/jbang-example.java but two references were not updated: the runnable JBang URL in README.md and the release workflow's update-documentation-versions script invocation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3a69f33e-eea6-4b8c-9ef0-8b4d56d53a9c --- .github/workflows/java-publish-maven.yml | 4 ++-- java/README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/java-publish-maven.yml b/.github/workflows/java-publish-maven.yml index e293d91271..e60923d895 100644 --- a/.github/workflows/java-publish-maven.yml +++ b/.github/workflows/java-publish-maven.yml @@ -201,10 +201,10 @@ jobs: VERSION="${{ steps.versions.outputs.release_version }}" DEV_VERSION="${{ steps.versions.outputs.dev_version }}" ./scripts/test-update-documentation-versions.sh - ./scripts/update-documentation-versions.sh "$VERSION" "$DEV_VERSION" README.md jbang-example.java + ./scripts/update-documentation-versions.sh "$VERSION" "$DEV_VERSION" README.md sdk/jbang-example.java # Commit the documentation changes before release:prepare (requires clean working directory) - git add README.md jbang-example.java + git add README.md sdk/jbang-example.java git commit -m "docs: update version references to ${VERSION}" # Save the commit SHA for potential rollback diff --git a/java/README.md b/java/README.md index a20196b105..99e22f49b1 100644 --- a/java/README.md +++ b/java/README.md @@ -207,7 +207,7 @@ See the full source of [`jbang-example.java`](sdk/jbang-example.java) for a comp Or run it directly from the repository: ```bash -jbang https://github.com/github/copilot-sdk/blob/main/java/jbang-example.java +jbang https://github.com/github/copilot-sdk/blob/main/java/sdk/jbang-example.java ``` ## Annotation-based tools and `ToolInvocation` context From c0779fa2264ead550c980cb6e9ffc5649cd63ecb Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Mon, 10 Aug 2026 21:42:37 +0000 Subject: [PATCH 11/12] docs: fix ADR relative links in README The ADRs are at java/docs/adr/, not java/sdk/docs/adr/. Fix the relative links for ADR-006 and ADR-004. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3a69f33e-eea6-4b8c-9ef0-8b4d56d53a9c --- java/README.md | 4 ++-- java/sdk/src/main/java/com/github/copilot/ffi/SizeT.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java/README.md b/java/README.md index 99e22f49b1..ea72b72b1d 100644 --- a/java/README.md +++ b/java/README.md @@ -308,7 +308,7 @@ Chain fluent modifiers to set tool options: - `.defer(ToolDefer)` — control deferred execution (`AUTO`, `NEVER`) - `.overridesBuiltInTool(boolean)` — shadow built-in tools -For design context and decision rationale, see [ADR-006](sdk/docs/adr/adr-006-tool-definition-inline.md). +For design context and decision rationale, see [ADR-006](docs/adr/adr-006-tool-definition-inline.md). ## Session Store @@ -432,7 +432,7 @@ The processor uses standard JSR 269 annotation processing APIs for maximum porta | Local variable with experimental type (including `var` inference) | ❌ | Move the usage into a declaration the processor can see, or use the compiler flag | | Cast to experimental type | ❌ | Use the compiler flag for a whole-compilation opt-in | -In practice, these gaps rarely matter: any meaningful use of an experimental SDK type almost always appears in a field declaration, method signature, or type hierarchy — all of which are caught. A purely inline expression with no declaration footprint (e.g., `session.rpc().experimental.foo().join()`) is the only case that would slip through. See [ADR-004](sdk/docs/adr/adr-004-copilotexperimental.md) for the design rationale. +In practice, these gaps rarely matter: any meaningful use of an experimental SDK type almost always appears in a field declaration, method signature, or type hierarchy — all of which are caught. A purely inline expression with no declaration footprint (e.g., `session.rpc().experimental.foo().join()`) is the only case that would slip through. See [ADR-004](docs/adr/adr-004-copilotexperimental.md) for the design rationale. ### Example diff --git a/java/sdk/src/main/java/com/github/copilot/ffi/SizeT.java b/java/sdk/src/main/java/com/github/copilot/ffi/SizeT.java index 646b8ae7b7..5bec1c327c 100644 --- a/java/sdk/src/main/java/com/github/copilot/ffi/SizeT.java +++ b/java/sdk/src/main/java/com/github/copilot/ffi/SizeT.java @@ -20,7 +20,7 @@ * This class uses {@link Native#SIZE_T_SIZE} so JNA marshals the correct width * on every platform. */ -final class SizeT extends IntegerType { +public final class SizeT extends IntegerType { /** Zero-valued instance; required by JNA for return-type instantiation. */ public SizeT() { From 95a51d86d8d5bda05eab055d8153156114ddf848 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2026 22:44:15 +0000 Subject: [PATCH 12/12] Regenerate Java codegen output Auto-committed by java-codegen-check workflow. --- .../generated/SubagentCompletedEvent.java | 4 ++- .../generated/rpc/FactoryAgentOptions.java | 8 ++++- .../copilot/generated/rpc/SandboxConfig.java | 6 ++-- .../generated/rpc/SandboxConfigAuth.java | 29 +++++++++++++++++++ .../generated/rpc/SessionFactoryApi.java | 11 +++++-- .../rpc/SessionFactoryListRunsParams.java | 10 +++++-- .../rpc/SessionFactoryListRunsResult.java | 12 ++++++-- 7 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigAuth.java diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/SubagentCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SubagentCompletedEvent.java index f32613579d..f7300ddbf4 100644 --- a/java/sdk/src/generated/java/com/github/copilot/generated/SubagentCompletedEvent.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/SubagentCompletedEvent.java @@ -47,7 +47,9 @@ public record SubagentCompletedEventData( /** Total tokens (input + output) consumed by the sub-agent */ @JsonProperty("totalTokens") Long totalTokens, /** Wall-clock duration of the sub-agent execution in milliseconds */ - @JsonProperty("durationMs") Long durationMs + @JsonProperty("durationMs") Long durationMs, + /** Whether the sub-agent was torn down by cancellation - its own abort, or an ancestor being killed - instead of finishing its work. Cancellation is not a failure, so the run still reports completion; this distinguishes a torn-down sub-agent from one that ran to the end. */ + @JsonProperty("cancelled") Boolean cancelled ) { } } diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentOptions.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentOptions.java index 675e715e85..9910d4f7f5 100644 --- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentOptions.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/FactoryAgentOptions.java @@ -26,6 +26,12 @@ public record FactoryAgentOptions( /** Optional JSON Schema for structured agent output. */ @JsonProperty("schema") Object schema, /** Optional model identifier for the subagent. */ - @JsonProperty("model") String model + @JsonProperty("model") String model, + /** Optional reasoning effort for the subagent. This field is accepted but not yet honored. */ + @JsonProperty("reasoningEffort") String reasoningEffort, + /** Optional context tier for the subagent. This field is accepted but not yet honored. */ + @JsonProperty("contextTier") ContextTier contextTier, + /** Optional custom agent name for the subagent. This field is accepted but not yet honored. */ + @JsonProperty("agent") String agent ) { } diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java index cfb2c23fff..d9130eb819 100644 --- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java @@ -27,10 +27,8 @@ public record SandboxConfig( @JsonProperty("userPolicy") SandboxConfigUserPolicy userPolicy, /** Whether to auto-add the current working directory to readwritePaths. Default: true. */ @JsonProperty("addCurrentWorkingDirectory") Boolean addCurrentWorkingDirectory, - /** Whether to inject the Copilot GitHub token as an `http..extraheader` so authenticated HTTPS git works inside the sandbox without the shell-based credential helper the sandbox blocks. Default: false (opt-in). */ - @JsonProperty("gitAuth") Boolean gitAuth, - /** Whether to export `GH_TOKEN` so the `gh` CLI authenticates inside the sandbox without the OS keyring the sandbox blocks. Default: false (opt-in). */ - @JsonProperty("ghAuth") Boolean ghAuth, + /** Credential-injection capability flags. */ + @JsonProperty("auth") SandboxConfigAuth auth, /** Whether to auto-grant read access to common developer-tool caches, registries, and toolchains in their default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and, on Unix, up-front creation of) the scratch caches builds write on every run (go-build, ccache, sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra configuration; a relocated CARGO_HOME additionally gets its Cargo lock files granted read-write. Default: true (enabled by default; set to false to opt out). */ @JsonProperty("allowDevToolAccess") Boolean allowDevToolAccess ) { diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigAuth.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigAuth.java new file mode 100644 index 0000000000..4a3612e0b6 --- /dev/null +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfigAuth.java @@ -0,0 +1,29 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +// AUTO-GENERATED FILE - DO NOT EDIT +// Generated from: api.schema.json + +package com.github.copilot.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; + +/** + * Credential-injection capability flags applied while the sandbox is enabled. + * + * @since 1.0.0 + */ +@javax.annotation.processing.Generated("copilot-sdk-codegen") +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +public record SandboxConfigAuth( + /** Whether to inject git credentials as an `http..extraheader` so authenticated HTTPS git works inside the sandbox without the shell-based credential helper the sandbox blocks. github.com is served by the Copilot token; every other forge (Azure DevOps, GitHub Enterprise Server, GitLab, ...) by a credential the host resolves from the user's own helper before the sandbox is applied. Default: false (opt-in). */ + @JsonProperty("git") Boolean git, + /** Whether to export `GH_TOKEN` so the `gh` CLI authenticates inside the sandbox without the OS keyring the sandbox blocks. Default: false (opt-in). */ + @JsonProperty("gh") Boolean gh +) { +} diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryApi.java index 6d15ac17c3..e0628ea3dc 100644 --- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryApi.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryApi.java @@ -83,14 +83,19 @@ public CompletableFuture getRun(SessionFactoryGetRun } /** - * Empty parameters for listing factory runs. + * Parameters for paging factory runs. + *

+ * 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 */ @CopilotExperimental - public CompletableFuture listRuns() { - return caller.invoke("session.factory.listRuns", java.util.Map.of("sessionId", this.sessionId), SessionFactoryListRunsResult.class); + public CompletableFuture listRuns(SessionFactoryListRunsParams params) { + com.fasterxml.jackson.databind.node.ObjectNode _p = MAPPER.valueToTree(params); + _p.put("sessionId", this.sessionId); + return caller.invoke("session.factory.listRuns", _p, SessionFactoryListRunsResult.class); } /** diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsParams.java index e3b90f07f7..41de4ae4a6 100644 --- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsParams.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsParams.java @@ -14,7 +14,7 @@ import javax.annotation.processing.Generated; /** - * Empty parameters for listing factory runs. + * Parameters for paging factory runs. * * @apiNote This method is experimental and may change in a future version. * @since 1.0.0 @@ -25,6 +25,12 @@ @JsonIgnoreProperties(ignoreUnknown = true) public record SessionFactoryListRunsParams( /** Target session identifier */ - @JsonProperty("sessionId") String sessionId + @JsonProperty("sessionId") String sessionId, + /** Exclusive forward cursor. */ + @JsonProperty("afterSeq") Long afterSeq, + /** Exclusive backward cursor. */ + @JsonProperty("beforeSeq") Long beforeSeq, + /** Maximum terminal runs to return. Defaults to 200 and is capped at 500. */ + @JsonProperty("limit") Long limit ) { } diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsResult.java index 7d1ac45a9e..3a23bc369a 100644 --- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsResult.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFactoryListRunsResult.java @@ -15,7 +15,7 @@ import javax.annotation.processing.Generated; /** - * Factory runs in durable creation order. + * A page of factory runs in durable creation order. * * @apiNote This method is experimental and may change in a future version. * @since 1.0.0 @@ -25,6 +25,14 @@ @JsonInclude(JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public record SessionFactoryListRunsResult( - @JsonProperty("runs") List runs + @JsonProperty("runs") List runs, + /** Oldest terminal-run cursor in this page, or null when the terminal window is empty. */ + @JsonProperty("oldestSeq") Long oldestSeq, + /** Newest terminal-run cursor in this page, or null when the terminal window is empty. */ + @JsonProperty("newestSeq") Long newestSeq, + /** Whether terminal runs newer than this page exist. */ + @JsonProperty("hasMoreNewer") Boolean hasMoreNewer, + /** Number of terminal runs older than this page. */ + @JsonProperty("omittedOlder") Long omittedOlder ) { }